From 149de7b545141c5d6a5751adbf0276e62f8a05ca Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 17:40:37 +1000 Subject: [PATCH 01/20] new exd data --- src/common/Exd/ExdDataGenerated.cpp | 673 +++++++++++++++++----------- src/common/Exd/ExdDataGenerated.h | 106 +++-- 2 files changed, 462 insertions(+), 317 deletions(-) diff --git a/src/common/Exd/ExdDataGenerated.cpp b/src/common/Exd/ExdDataGenerated.cpp index aef8af48..04c8fa1e 100644 --- a/src/common/Exd/ExdDataGenerated.cpp +++ b/src/common/Exd/ExdDataGenerated.cpp @@ -22,7 +22,7 @@ Sapphire::Data::Achievement::Achievement( uint32_t row_id, Sapphire::Data::ExdDa data.push_back( exdData->getField< int32_t >( row, 16 ) ); data.push_back( exdData->getField< int32_t >( row, 17 ) ); order = exdData->getField< uint16_t >( row, 18 ); - initialHide = exdData->getField< bool >( row, 20 ); + initialHide = exdData->getField< uint8_t >( row, 20 ); } Sapphire::Data::AchievementCategory::AchievementCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -71,16 +71,16 @@ Sapphire::Data::Action::Action( uint32_t row_id, Sapphire::Data::ExdDataGenerate cast100ms = exdData->getField< uint16_t >( row, 37 ); recast100ms = exdData->getField< uint16_t >( row, 38 ); cooldownGroup = exdData->getField< uint8_t >( row, 39 ); - attackType = exdData->getField< int8_t >( row, 40 ); - aspect = exdData->getField< uint8_t >( row, 41 ); - actionProcStatus = exdData->getField< uint8_t >( row, 42 ); - statusGainSelf = exdData->getField< uint16_t >( row, 43 ); - unlockLink = exdData->getField< uint32_t >( row, 44 ); - classJobCategory = exdData->getField< uint8_t >( row, 45 ); - affectsPosition = exdData->getField< bool >( row, 48 ); - omen = exdData->getField< uint8_t >( row, 49 ); - isPvP = exdData->getField< bool >( row, 50 ); - isPlayerAction = exdData->getField< bool >( row, 62 ); + attackType = exdData->getField< int8_t >( row, 42 ); + aspect = exdData->getField< uint8_t >( row, 43 ); + actionProcStatus = exdData->getField< uint8_t >( row, 44 ); + statusGainSelf = exdData->getField< uint16_t >( row, 46 ); + unlockLink = exdData->getField< uint32_t >( row, 47 ); + classJobCategory = exdData->getField< uint8_t >( row, 48 ); + affectsPosition = exdData->getField< bool >( row, 51 ); + omen = exdData->getField< uint8_t >( row, 52 ); + isPvP = exdData->getField< bool >( row, 53 ); + isPlayerAction = exdData->getField< bool >( row, 65 ); } Sapphire::Data::ActionCastTimeline::ActionCastTimeline( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -656,24 +656,22 @@ Sapphire::Data::BeastReputationRank::BeastReputationRank( uint32_t row_id, Sapph Sapphire::Data::BeastTribe::BeastTribe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_BeastTribeDat.get_row( row_id ); - minLevel = exdData->getField< uint8_t >( row, 0 ); - maxLevel = exdData->getField< uint8_t >( row, 1 ); + minLevel = exdData->getField< uint8_t >( row, 1 ); beastRankBonus = exdData->getField< uint8_t >( row, 2 ); iconReputation = exdData->getField< uint32_t >( row, 3 ); icon = exdData->getField< uint32_t >( row, 4 ); maxRank = exdData->getField< uint8_t >( row, 5 ); - alliedBeastTribeQuest = exdData->getField< uint32_t >( row, 6 ); - expansion = exdData->getField< uint8_t >( row, 7 ); - currencyItem = exdData->getField< uint32_t >( row, 8 ); - displayOrder = exdData->getField< uint8_t >( row, 9 ); - name = exdData->getField< std::string >( row, 10 ); - nameRelation = exdData->getField< std::string >( row, 18 ); + expansion = exdData->getField< uint8_t >( row, 6 ); + currencyItem = exdData->getField< uint32_t >( row, 7 ); + displayOrder = exdData->getField< uint8_t >( row, 8 ); + name = exdData->getField< std::string >( row, 9 ); + nameRelation = exdData->getField< std::string >( row, 17 ); } Sapphire::Data::Behavior::Behavior( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_BehaviorDat.get_row( row_id, subRow ); - balloon = exdData->getField< uint16_t >( row, 6 ); + balloon = exdData->getField< uint16_t >( row, 7 ); } Sapphire::Data::BGM::BGM( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -968,8 +966,6 @@ Sapphire::Data::CharaMakeType::CharaMakeType( uint32_t row_id, Sapphire::Data::E race = exdData->getField< int32_t >( row, 0 ); tribe = exdData->getField< int32_t >( row, 1 ); gender = exdData->getField< int8_t >( row, 2 ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3291 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3292 ) ); facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3293 ) ); facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3294 ) ); facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3295 ) ); @@ -1010,6 +1006,20 @@ Sapphire::Data::CharaMakeType::CharaMakeType( uint32_t row_id, Sapphire::Data::E facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3330 ) ); facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3331 ) ); facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3332 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3333 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3334 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3335 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3336 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3337 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3338 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3339 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3340 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3341 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3342 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3343 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3344 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3345 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3346 ) ); } Sapphire::Data::ChocoboRace::ChocoboRace( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -1368,6 +1378,7 @@ Sapphire::Data::ContentFinderCondition::ContentFinderCondition( uint32_t row_id, contentLinkType = exdData->getField< uint8_t >( row, 2 ); content = exdData->getField< uint16_t >( row, 3 ); contentMemberType = exdData->getField< uint8_t >( row, 9 ); + unlockQuest = exdData->getField< uint32_t >( row, 13 ); classJobLevelRequired = exdData->getField< uint8_t >( row, 15 ); classJobLevelSync = exdData->getField< uint8_t >( row, 16 ); itemLevelRequired = exdData->getField< uint16_t >( row, 17 ); @@ -1377,8 +1388,11 @@ Sapphire::Data::ContentFinderCondition::ContentFinderCondition( uint32_t row_id, dutyRecorderAllowed = exdData->getField< bool >( row, 30 ); name = exdData->getField< std::string >( row, 34 ); contentType = exdData->getField< uint8_t >( row, 35 ); + transientKey = exdData->getField< uint8_t >( row, 36 ); transient = exdData->getField< uint32_t >( row, 37 ); + sortKey = exdData->getField< uint16_t >( row, 38 ); image = exdData->getField< uint32_t >( row, 39 ); + icon = exdData->getField< uint32_t >( row, 40 ); levelingRoulette = exdData->getField< bool >( row, 42 ); level5060Roulette = exdData->getField< bool >( row, 43 ); mSQRoulette = exdData->getField< bool >( row, 44 ); @@ -1475,12 +1489,14 @@ Sapphire::Data::ContentsNote::ContentsNote( uint32_t row_id, Sapphire::Data::Exd { auto row = exdData->m_ContentsNoteDat.get_row( row_id ); contentType = exdData->getField< uint8_t >( row, 0 ); + icon = exdData->getField< int32_t >( row, 1 ); menuOrder = exdData->getField< uint8_t >( row, 2 ); requiredAmount = exdData->getField< int32_t >( row, 3 ); expMultiplier = exdData->getField< int32_t >( row, 5 ); gilRward = exdData->getField< int32_t >( row, 7 ); levelUnlock = exdData->getField< uint16_t >( row, 8 ); howTo = exdData->getField< uint16_t >( row, 9 ); + reqUnlock = exdData->getField< uint32_t >( row, 10 ); name = exdData->getField< std::string >( row, 11 ); description = exdData->getField< std::string >( row, 12 ); expCap = exdData->getField< int32_t >( row, 13 ); @@ -2067,6 +2083,21 @@ Sapphire::Data::ENpcDressUpDress::ENpcDressUpDress( uint32_t row_id, uint32_t su { auto row = exdData->m_ENpcDressUpDressDat.get_row( row_id, subRow ); eNpc = exdData->getField< uint32_t >( row, 6 ); + behavior = exdData->getField< uint16_t >( row, 8 ); + modelMainHand = exdData->getField< uint64_t >( row, 35 ); + dyeMainHand = exdData->getField< uint8_t >( row, 36 ); + modelOffHand = exdData->getField< uint64_t >( row, 37 ); + dyeOffHand = exdData->getField< uint8_t >( row, 38 ); + modelHead = exdData->getField< uint32_t >( row, 39 ); + dyeHead = exdData->getField< uint8_t >( row, 40 ); + modelBody = exdData->getField< uint32_t >( row, 41 ); + dyeBody = exdData->getField< uint8_t >( row, 42 ); + modelHands = exdData->getField< uint32_t >( row, 43 ); + dyeHands = exdData->getField< uint8_t >( row, 44 ); + modelLegs = exdData->getField< uint32_t >( row, 45 ); + dyeLegs = exdData->getField< uint8_t >( row, 46 ); + modelFeet = exdData->getField< uint32_t >( row, 47 ); + dyeFeet = exdData->getField< uint8_t >( row, 48 ); } Sapphire::Data::ENpcResident::ENpcResident( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -2111,8 +2142,8 @@ Sapphire::Data::EquipRaceCategory::EquipRaceCategory( uint32_t row_id, Sapphire: miqote = exdData->getField< bool >( row, 3 ); roegadyn = exdData->getField< bool >( row, 4 ); auRa = exdData->getField< bool >( row, 5 ); - male = exdData->getField< bool >( row, 6 ); - female = exdData->getField< bool >( row, 7 ); + male = exdData->getField< bool >( row, 8 ); + female = exdData->getField< bool >( row, 9 ); } Sapphire::Data::EquipSlotCategory::EquipSlotCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -2290,17 +2321,17 @@ Sapphire::Data::Fate::Fate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* e classJobLevel = exdData->getField< uint8_t >( row, 3 ); classJobLevelMax = exdData->getField< uint8_t >( row, 4 ); eventItem = exdData->getField< uint32_t >( row, 5 ); - iconObjective = exdData->getField< uint32_t >( row, 10 ); - iconMap = exdData->getField< uint32_t >( row, 11 ); - music = exdData->getField< int32_t >( row, 13 ); - hasWorldMapIcon = exdData->getField< bool >( row, 19 ); - name = exdData->getField< std::string >( row, 27 ); - description = exdData->getField< std::string >( row, 28 ); - objective = exdData->getField< std::string >( row, 29 ); + iconObjective = exdData->getField< uint32_t >( row, 9 ); + iconMap = exdData->getField< uint32_t >( row, 10 ); + music = exdData->getField< int32_t >( row, 12 ); + hasWorldMapIcon = exdData->getField< bool >( row, 17 ); + name = exdData->getField< std::string >( row, 25 ); + description = exdData->getField< std::string >( row, 26 ); + objective = exdData->getField< std::string >( row, 27 ); + statusText.push_back( exdData->getField< std::string >( row, 28 ) ); + statusText.push_back( exdData->getField< std::string >( row, 29 ) ); statusText.push_back( exdData->getField< std::string >( row, 30 ) ); - statusText.push_back( exdData->getField< std::string >( row, 31 ) ); - statusText.push_back( exdData->getField< std::string >( row, 32 ) ); - arrayIndex = exdData->getField< uint32_t >( row, 33 ); + arrayIndex = exdData->getField< uint32_t >( row, 31 ); } Sapphire::Data::FCActivity::FCActivity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -2387,6 +2418,10 @@ Sapphire::Data::FishingRecordType::FishingRecordType( uint32_t row_id, Sapphire: { auto row = exdData->m_FishingRecordTypeDat.get_row( row_id ); addon = exdData->getField< int32_t >( row, 0 ); + rankBRequirement = exdData->getField< uint16_t >( row, 1 ); + rankARequirement = exdData->getField< uint16_t >( row, 2 ); + rankAARequirement = exdData->getField< uint16_t >( row, 3 ); + rankAAARequirement = exdData->getField< uint16_t >( row, 4 ); } Sapphire::Data::FishingRecordTypeTransient::FishingRecordTypeTransient( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -2417,6 +2452,7 @@ Sapphire::Data::FishingSpot::FishingSpot( uint32_t row_id, Sapphire::Data::ExdDa item.push_back( exdData->getField< int32_t >( row, 18 ) ); item.push_back( exdData->getField< int32_t >( row, 19 ) ); placeName = exdData->getField< uint16_t >( row, 20 ); + order = exdData->getField< uint8_t >( row, 21 ); } Sapphire::Data::FishParameter::FishParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -2428,10 +2464,10 @@ Sapphire::Data::FishParameter::FishParameter( uint32_t row_id, Sapphire::Data::E isHidden = exdData->getField< bool >( row, 3 ); fishingRecordType = exdData->getField< uint8_t >( row, 5 ); territoryType = exdData->getField< int32_t >( row, 6 ); - isInLog = exdData->getField< bool >( row, 7 ); - timeRestricted = exdData->getField< bool >( row, 8 ); - weatherRestricted = exdData->getField< bool >( row, 9 ); - gatheringSubCategory = exdData->getField< uint16_t >( row, 10 ); + gatheringSubCategory = exdData->getField< uint16_t >( row, 7 ); + isInLog = exdData->getField< bool >( row, 8 ); + timeRestricted = exdData->getField< bool >( row, 9 ); + weatherRestricted = exdData->getField< bool >( row, 10 ); } Sapphire::Data::Frontline03::Frontline03( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -2510,7 +2546,7 @@ Sapphire::Data::GatheringItem::GatheringItem( uint32_t row_id, Sapphire::Data::E auto row = exdData->m_GatheringItemDat.get_row( row_id ); item = exdData->getField< int32_t >( row, 0 ); gatheringItemLevel = exdData->getField< uint16_t >( row, 1 ); - isHidden = exdData->getField< bool >( row, 2 ); + isHidden = exdData->getField< bool >( row, 3 ); } Sapphire::Data::GatheringItemLevelConvertTable::GatheringItemLevelConvertTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -2951,12 +2987,8 @@ Sapphire::Data::GilShop::GilShop( uint32_t row_id, Sapphire::Data::ExdDataGenera auto row = exdData->m_GilShopDat.get_row( row_id ); name = exdData->getField< std::string >( row, 0 ); icon = exdData->getField< uint32_t >( row, 1 ); - questRequired.push_back( exdData->getField< uint32_t >( row, 2 ) ); - questRequired.push_back( exdData->getField< uint32_t >( row, 3 ) ); - questRequired.push_back( exdData->getField< uint32_t >( row, 4 ) ); - questRequired.push_back( exdData->getField< uint32_t >( row, 5 ) ); - acceptTalk = exdData->getField< int32_t >( row, 6 ); - failTalk = exdData->getField< int32_t >( row, 7 ); + acceptTalk = exdData->getField< int32_t >( row, 3 ); + failTalk = exdData->getField< int32_t >( row, 4 ); } Sapphire::Data::GilShopItem::GilShopItem( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) @@ -3036,6 +3068,20 @@ Sapphire::Data::GuildleveAssignmentCategory::GuildleveAssignmentCategory( uint32 category.push_back( exdData->getField< int32_t >( row, 7 ) ); } +Sapphire::Data::GuildOrder::GuildOrder( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GuildOrderDat.get_row( row_id ); + eNpcName = exdData->getField< uint32_t >( row, 0 ); + objective = exdData->getField< std::string >( row, 1 ); + description1 = exdData->getField< std::string >( row, 2 ); + description2 = exdData->getField< std::string >( row, 3 ); + description3 = exdData->getField< std::string >( row, 4 ); + completionBonusExp = exdData->getField< uint32_t >( row, 5 ); + rewardExp = exdData->getField< uint32_t >( row, 6 ); + completionBonusGil = exdData->getField< uint32_t >( row, 7 ); + rewardGil = exdData->getField< uint32_t >( row, 8 ); +} + Sapphire::Data::GuildOrderGuide::GuildOrderGuide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_GuildOrderGuideDat.get_row( row_id ); @@ -3236,66 +3282,66 @@ Sapphire::Data::HousingLandSet::HousingLandSet( uint32_t row_id, Sapphire::Data: minPrice.push_back( exdData->getField< uint32_t >( row, 117 ) ); minPrice.push_back( exdData->getField< uint32_t >( row, 118 ) ); minPrice.push_back( exdData->getField< uint32_t >( row, 119 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 300 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 301 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 302 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 303 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 304 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 305 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 306 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 307 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 308 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 309 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 310 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 311 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 312 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 313 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 314 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 315 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 316 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 317 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 318 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 319 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 320 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 321 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 322 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 323 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 324 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 325 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 326 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 327 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 328 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 329 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 330 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 331 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 332 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 333 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 334 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 335 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 336 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 337 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 338 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 339 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 340 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 341 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 342 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 343 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 344 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 345 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 346 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 347 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 348 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 349 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 350 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 351 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 352 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 353 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 354 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 355 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 356 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 357 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 358 ) ); - initialPrice.push_back( exdData->getField< uint32_t >( row, 359 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 240 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 241 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 242 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 243 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 244 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 245 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 246 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 247 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 248 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 249 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 250 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 251 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 252 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 253 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 254 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 255 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 256 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 257 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 258 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 259 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 260 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 261 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 262 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 263 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 264 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 265 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 266 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 267 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 268 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 269 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 270 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 271 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 272 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 273 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 274 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 275 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 276 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 277 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 278 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 279 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 280 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 281 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 282 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 283 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 284 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 285 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 286 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 287 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 288 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 289 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 290 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 291 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 292 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 293 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 294 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 295 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 296 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 297 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 298 ) ); + initialPrice.push_back( exdData->getField< uint32_t >( row, 299 ) ); } Sapphire::Data::HousingMapMarkerInfo::HousingMapMarkerInfo( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) @@ -3418,13 +3464,15 @@ Sapphire::Data::InstanceContent::InstanceContent( uint32_t row_id, Sapphire::Dat instanceContentTextDataObjectiveStart = exdData->getField< uint32_t >( row, 15 ); instanceContentTextDataObjectiveEnd = exdData->getField< uint32_t >( row, 16 ); sortKey = exdData->getField< uint16_t >( row, 17 ); + instanceClearExp = exdData->getField< uint32_t >( row, 18 ); newPlayerBonusA = exdData->getField< uint16_t >( row, 20 ); - newPlayerBonusB = exdData->getField< uint16_t >( row, 21 ); - finalBossExp = exdData->getField< uint32_t >( row, 22 ); + finalBossCurrencyC = exdData->getField< uint16_t >( row, 21 ); finalBossCurrencyA = exdData->getField< uint16_t >( row, 23 ); finalBossCurrencyB = exdData->getField< uint16_t >( row, 24 ); - finalBossCurrencyC = exdData->getField< uint16_t >( row, 25 ); - instanceClearExp = exdData->getField< uint32_t >( row, 46 ); + newPlayerBonusB = exdData->getField< uint16_t >( row, 25 ); + instanceClearGil = exdData->getField< uint32_t >( row, 47 ); + instanceContentRewardItem = exdData->getField< uint32_t >( row, 48 ); + finalBossExp = exdData->getField< uint32_t >( row, 50 ); instanceContentBuff = exdData->getField< int32_t >( row, 51 ); reqInstance = exdData->getField< uint32_t >( row, 52 ); partyCondition = exdData->getField< uint8_t >( row, 54 ); @@ -3676,7 +3724,7 @@ Sapphire::Data::JournalGenre::JournalGenre( uint32_t row_id, Sapphire::Data::Exd auto row = exdData->m_JournalGenreDat.get_row( row_id ); icon = exdData->getField< int32_t >( row, 0 ); journalCategory = exdData->getField< uint8_t >( row, 1 ); - name = exdData->getField< std::string >( row, 2 ); + name = exdData->getField< std::string >( row, 3 ); } Sapphire::Data::JournalSection::JournalSection( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -3900,7 +3948,7 @@ Sapphire::Data::MapMarker::MapMarker( uint32_t row_id, uint32_t subRow, Sapphire Sapphire::Data::MapMarkerRegion::MapMarkerRegion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_MapMarkerRegionDat.get_row( row_id ); - x = exdData->getField< int16_t >( row, 0 ); + x = exdData->getField< int16_t >( row, 1 ); } Sapphire::Data::MapSymbol::MapSymbol( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -4021,8 +4069,7 @@ Sapphire::Data::ModelSkeleton::ModelSkeleton( uint32_t row_id, Sapphire::Data::E Sapphire::Data::ModelState::ModelState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_ModelStateDat.get_row( row_id ); - start = exdData->getField< uint16_t >( row, 0 ); - end = exdData->getField< uint16_t >( row, 1 ); + start = exdData->getField< uint16_t >( row, 1 ); } Sapphire::Data::MonsterNote::MonsterNote( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -4085,30 +4132,18 @@ Sapphire::Data::MountAction::MountAction( uint32_t row_id, Sapphire::Data::ExdDa Sapphire::Data::MountCustomize::MountCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_MountCustomizeDat.get_row( row_id ); - hyurMaleScale = exdData->getField< float >( row, 1 ); - hyurFemaleScale = exdData->getField< float >( row, 2 ); - elezenMaleScale = exdData->getField< float >( row, 3 ); - elezenFemaleScale = exdData->getField< float >( row, 4 ); - lalaMaleScale = exdData->getField< float >( row, 5 ); - lalaFemaleScale = exdData->getField< float >( row, 6 ); - miqoMaleScale = exdData->getField< float >( row, 7 ); - miqoFemaleScale = exdData->getField< float >( row, 8 ); - roeMaleScale = exdData->getField< float >( row, 9 ); - roeFemaleScale = exdData->getField< float >( row, 10 ); - auRaMaleScale = exdData->getField< float >( row, 11 ); - auRaFemaleScale = exdData->getField< float >( row, 12 ); - hyurMaleCameraHeight = exdData->getField< uint8_t >( row, 13 ); - hyurFemaleCameraHeight = exdData->getField< uint8_t >( row, 14 ); - elezenMaleCameraHeight = exdData->getField< uint8_t >( row, 15 ); - elezenFemaleCameraHeight = exdData->getField< uint8_t >( row, 16 ); - lalaMaleCameraHeight = exdData->getField< uint8_t >( row, 17 ); - lalaFemaleCameraHeight = exdData->getField< uint8_t >( row, 18 ); - miqoMaleCameraHeight = exdData->getField< uint8_t >( row, 19 ); - miqoFemaleCameraHeight = exdData->getField< uint8_t >( row, 20 ); - roeMaleCameraHeight = exdData->getField< uint8_t >( row, 21 ); - roeFemaleCameraHeight = exdData->getField< uint8_t >( row, 22 ); - auRaMaleCameraHeight = exdData->getField< uint8_t >( row, 23 ); - auRaFemaleCameraHeight = exdData->getField< uint8_t >( row, 24 ); + hyurMaleCameraHeight = exdData->getField< uint8_t >( row, 17 ); + hyurFemaleCameraHeight = exdData->getField< uint8_t >( row, 18 ); + elezenMaleCameraHeight = exdData->getField< uint8_t >( row, 21 ); + elezenFemaleCameraHeight = exdData->getField< uint8_t >( row, 22 ); + lalaMaleCameraHeight = exdData->getField< uint8_t >( row, 23 ); + lalaFemaleCameraHeight = exdData->getField< uint8_t >( row, 24 ); + miqoMaleCameraHeight = exdData->getField< uint8_t >( row, 25 ); + miqoFemaleCameraHeight = exdData->getField< uint8_t >( row, 26 ); + roeMaleCameraHeight = exdData->getField< uint8_t >( row, 27 ); + roeFemaleCameraHeight = exdData->getField< uint8_t >( row, 28 ); + auRaMaleCameraHeight = exdData->getField< uint8_t >( row, 29 ); + auRaFemaleCameraHeight = exdData->getField< uint8_t >( row, 30 ); } Sapphire::Data::MountFlyingCondition::MountFlyingCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -4431,40 +4466,41 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* classJobCategory0 = exdData->getField< uint8_t >( row, 3 ); classJobLevel0 = exdData->getField< uint16_t >( row, 4 ); questLevelOffset = exdData->getField< uint8_t >( row, 5 ); - levelMax = exdData->getField< uint16_t >( row, 6 ); - classJobCategory1 = exdData->getField< uint8_t >( row, 7 ); - classJobLevel1 = exdData->getField< uint16_t >( row, 8 ); - previousQuestJoin = exdData->getField< uint8_t >( row, 9 ); - previousQuest0 = exdData->getField< uint32_t >( row, 10 ); - previousQuest1 = exdData->getField< uint32_t >( row, 12 ); - previousQuest2 = exdData->getField< uint32_t >( row, 13 ); - questLockJoin = exdData->getField< uint8_t >( row, 14 ); + classJobCategory1 = exdData->getField< uint8_t >( row, 6 ); + classJobLevel1 = exdData->getField< uint16_t >( row, 7 ); + previousQuestJoin = exdData->getField< uint8_t >( row, 8 ); + previousQuest0 = exdData->getField< uint32_t >( row, 9 ); + previousQuest1 = exdData->getField< uint32_t >( row, 11 ); + previousQuest2 = exdData->getField< uint32_t >( row, 12 ); + questLockJoin = exdData->getField< uint8_t >( row, 13 ); + questLock.push_back( exdData->getField< uint32_t >( row, 14 ) ); questLock.push_back( exdData->getField< uint32_t >( row, 15 ) ); - questLock.push_back( exdData->getField< uint32_t >( row, 16 ) ); - classJobUnlock = exdData->getField< uint8_t >( row, 20 ); - grandCompany = exdData->getField< uint8_t >( row, 21 ); - grandCompanyRank = exdData->getField< uint8_t >( row, 22 ); - instanceContentJoin = exdData->getField< uint8_t >( row, 23 ); + classJobUnlock = exdData->getField< uint8_t >( row, 19 ); + grandCompany = exdData->getField< uint8_t >( row, 20 ); + grandCompanyRank = exdData->getField< uint8_t >( row, 21 ); + instanceContentJoin = exdData->getField< uint8_t >( row, 22 ); + instanceContent.push_back( exdData->getField< uint32_t >( row, 23 ) ); instanceContent.push_back( exdData->getField< uint32_t >( row, 24 ) ); instanceContent.push_back( exdData->getField< uint32_t >( row, 25 ) ); - instanceContent.push_back( exdData->getField< uint32_t >( row, 26 ) ); - festival = exdData->getField< uint8_t >( row, 27 ); - bellStart = exdData->getField< uint16_t >( row, 30 ); - bellEnd = exdData->getField< uint16_t >( row, 31 ); - beastTribe = exdData->getField< uint8_t >( row, 32 ); - beastReputationRank = exdData->getField< uint8_t >( row, 33 ); - mountRequired = exdData->getField< int32_t >( row, 37 ); - isHouseRequired = exdData->getField< bool >( row, 38 ); - deliveryQuest = exdData->getField< uint8_t >( row, 39 ); - issuerStart = exdData->getField< uint32_t >( row, 40 ); - behavior = exdData->getField< uint16_t >( row, 41 ); - targetEnd = exdData->getField< uint32_t >( row, 42 ); - isRepeatable = exdData->getField< bool >( row, 43 ); - repeatIntervalType = exdData->getField< uint8_t >( row, 44 ); - questRepeatFlag = exdData->getField< uint8_t >( row, 45 ); - unlocksSystemContent = exdData->getField< bool >( row, 46 ); - type = exdData->getField< uint8_t >( row, 48 ); - questClassJobSupply = exdData->getField< uint16_t >( row, 49 ); + festival = exdData->getField< uint8_t >( row, 26 ); + bellStart = exdData->getField< uint16_t >( row, 29 ); + bellEnd = exdData->getField< uint16_t >( row, 30 ); + beastTribe = exdData->getField< uint8_t >( row, 31 ); + beastReputationRank = exdData->getField< uint8_t >( row, 32 ); + levelMax = exdData->getField< uint16_t >( row, 33 ); + mountRequired = exdData->getField< int32_t >( row, 36 ); + isHouseRequired = exdData->getField< bool >( row, 37 ); + deliveryQuest = exdData->getField< uint8_t >( row, 38 ); + issuerStart = exdData->getField< uint32_t >( row, 39 ); + behavior = exdData->getField< uint16_t >( row, 40 ); + targetEnd = exdData->getField< uint32_t >( row, 41 ); + isRepeatable = exdData->getField< bool >( row, 42 ); + repeatIntervalType = exdData->getField< uint8_t >( row, 43 ); + questRepeatFlag = exdData->getField< uint8_t >( row, 44 ); + unlocksSystemContent = exdData->getField< bool >( row, 45 ); + type = exdData->getField< uint8_t >( row, 47 ); + questClassJobSupply = exdData->getField< uint16_t >( row, 48 ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 49 ) ); scriptInstruction.push_back( exdData->getField< std::string >( row, 50 ) ); scriptInstruction.push_back( exdData->getField< std::string >( row, 51 ) ); scriptInstruction.push_back( exdData->getField< std::string >( row, 52 ) ); @@ -4514,7 +4550,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* scriptInstruction.push_back( exdData->getField< std::string >( row, 96 ) ); scriptInstruction.push_back( exdData->getField< std::string >( row, 97 ) ); scriptInstruction.push_back( exdData->getField< std::string >( row, 98 ) ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 99 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 99 ) ); scriptArg.push_back( exdData->getField< uint32_t >( row, 100 ) ); scriptArg.push_back( exdData->getField< uint32_t >( row, 101 ) ); scriptArg.push_back( exdData->getField< uint32_t >( row, 102 ) ); @@ -4564,7 +4600,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* scriptArg.push_back( exdData->getField< uint32_t >( row, 146 ) ); scriptArg.push_back( exdData->getField< uint32_t >( row, 147 ) ); scriptArg.push_back( exdData->getField< uint32_t >( row, 148 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 149 ) ); + actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 149 ) ); actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 150 ) ); actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 151 ) ); actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 152 ) ); @@ -4628,7 +4664,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 210 ) ); actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 211 ) ); actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 212 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 213 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 213 ) ); actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 214 ) ); actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 215 ) ); actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 216 ) ); @@ -4692,7 +4728,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 274 ) ); actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 275 ) ); actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 276 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 277 ) ); + actorSpawn.push_back( exdData->getField< uint32_t >( row, 277 ) ); actorSpawn.push_back( exdData->getField< uint32_t >( row, 278 ) ); actorSpawn.push_back( exdData->getField< uint32_t >( row, 279 ) ); actorSpawn.push_back( exdData->getField< uint32_t >( row, 280 ) ); @@ -4756,7 +4792,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* actorSpawn.push_back( exdData->getField< uint32_t >( row, 338 ) ); actorSpawn.push_back( exdData->getField< uint32_t >( row, 339 ) ); actorSpawn.push_back( exdData->getField< uint32_t >( row, 340 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 341 ) ); + questUInt8A.push_back( exdData->getField< uint8_t >( row, 341 ) ); questUInt8A.push_back( exdData->getField< uint8_t >( row, 342 ) ); questUInt8A.push_back( exdData->getField< uint8_t >( row, 343 ) ); questUInt8A.push_back( exdData->getField< uint8_t >( row, 344 ) ); @@ -4788,7 +4824,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* questUInt8A.push_back( exdData->getField< uint8_t >( row, 370 ) ); questUInt8A.push_back( exdData->getField< uint8_t >( row, 371 ) ); questUInt8A.push_back( exdData->getField< uint8_t >( row, 372 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 373 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 373 ) ); questUInt8B.push_back( exdData->getField< uint8_t >( row, 374 ) ); questUInt8B.push_back( exdData->getField< uint8_t >( row, 375 ) ); questUInt8B.push_back( exdData->getField< uint8_t >( row, 376 ) ); @@ -4820,7 +4856,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* questUInt8B.push_back( exdData->getField< uint8_t >( row, 402 ) ); questUInt8B.push_back( exdData->getField< uint8_t >( row, 403 ) ); questUInt8B.push_back( exdData->getField< uint8_t >( row, 404 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 405 ) ); + toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1173 ) ); toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1174 ) ); toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1175 ) ); toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1176 ) ); @@ -4844,7 +4880,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1194 ) ); toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1195 ) ); toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1196 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1197 ) ); + toDoQty.push_back( exdData->getField< uint8_t >( row, 1197 ) ); toDoQty.push_back( exdData->getField< uint8_t >( row, 1198 ) ); toDoQty.push_back( exdData->getField< uint8_t >( row, 1199 ) ); toDoQty.push_back( exdData->getField< uint8_t >( row, 1200 ) ); @@ -4868,7 +4904,7 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* toDoQty.push_back( exdData->getField< uint8_t >( row, 1218 ) ); toDoQty.push_back( exdData->getField< uint8_t >( row, 1219 ) ); toDoQty.push_back( exdData->getField< uint8_t >( row, 1220 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1221 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1221 ) ); toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1222 ) ); toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1223 ) ); toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1224 ) ); @@ -4892,7 +4928,6 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1242 ) ); toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1243 ) ); toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1244 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1245 ) ); classJobRequired = exdData->getField< uint8_t >( row, 1438 ); expFactor = exdData->getField< uint16_t >( row, 1440 ); gilReward = exdData->getField< uint32_t >( row, 1441 ); @@ -5115,56 +5150,56 @@ Sapphire::Data::QuestBattle::QuestBattle( uint32_t row_id, Sapphire::Data::ExdDa scriptInstruction.push_back( exdData->getField< std::string >( row, 151 ) ); scriptInstruction.push_back( exdData->getField< std::string >( row, 152 ) ); scriptInstruction.push_back( exdData->getField< std::string >( row, 153 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 154 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 155 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 156 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 157 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 158 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 159 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 160 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 161 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 162 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 163 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 164 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 165 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 166 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 167 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 168 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 169 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 170 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 171 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 172 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 173 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 174 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 175 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 176 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 177 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 178 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 179 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 180 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 181 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 182 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 183 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 184 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 185 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 186 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 187 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 188 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 189 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 190 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 191 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 192 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 193 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 194 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 195 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 196 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 197 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 198 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 199 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 200 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 201 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 202 ) ); - scriptValue.push_back( exdData->getField< uint32_t >( row, 203 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 154 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 155 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 156 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 157 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 158 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 159 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 160 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 161 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 162 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 163 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 164 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 165 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 166 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 167 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 168 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 169 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 170 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 171 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 172 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 173 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 174 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 175 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 176 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 177 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 178 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 179 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 180 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 181 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 182 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 183 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 184 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 185 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 186 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 187 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 188 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 189 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 190 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 191 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 192 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 193 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 194 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 195 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 196 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 197 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 198 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 199 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 200 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 201 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 202 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( row, 203 ) ); scriptValue.push_back( exdData->getField< uint32_t >( row, 204 ) ); scriptValue.push_back( exdData->getField< uint32_t >( row, 205 ) ); scriptValue.push_back( exdData->getField< uint32_t >( row, 206 ) ); @@ -5265,6 +5300,106 @@ Sapphire::Data::QuestBattle::QuestBattle( uint32_t row_id, Sapphire::Data::ExdDa scriptValue.push_back( exdData->getField< uint32_t >( row, 301 ) ); scriptValue.push_back( exdData->getField< uint32_t >( row, 302 ) ); scriptValue.push_back( exdData->getField< uint32_t >( row, 303 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 304 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 305 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 306 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 307 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 308 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 309 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 310 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 311 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 312 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 313 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 314 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 315 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 316 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 317 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 318 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 319 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 320 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 321 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 322 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 323 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 324 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 325 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 326 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 327 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 328 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 329 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 330 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 331 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 332 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 333 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 334 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 335 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 336 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 337 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 338 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 339 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 340 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 341 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 342 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 343 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 344 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 345 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 346 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 347 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 348 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 349 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 350 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 351 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 352 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 353 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 354 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 355 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 356 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 357 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 358 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 359 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 360 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 361 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 362 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 363 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 364 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 365 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 366 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 367 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 368 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 369 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 370 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 371 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 372 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 373 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 374 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 375 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 376 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 377 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 378 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 379 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 380 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 381 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 382 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 383 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 384 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 385 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 386 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 387 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 388 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 389 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 390 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 391 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 392 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 393 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 394 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 395 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 396 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 397 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 398 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 399 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 400 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 401 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 402 ) ); + scriptValue.push_back( exdData->getField< uint32_t >( row, 403 ) ); } Sapphire::Data::QuestClassJobReward::QuestClassJobReward( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) @@ -5400,8 +5535,7 @@ Sapphire::Data::Recipe::Recipe( uint32_t row_id, Sapphire::Data::ExdDataGenerate recipeLevelTable = exdData->getField< uint16_t >( row, 2 ); itemResult = exdData->getField< int32_t >( row, 3 ); amountResult = exdData->getField< uint8_t >( row, 4 ); - recipeElement = exdData->getField< uint8_t >( row, 25 ); - isSecondary = exdData->getField< bool >( row, 27 ); + isSecondary = exdData->getField< bool >( row, 26 ); difficultyFactor = exdData->getField< uint16_t >( row, 28 ); qualityFactor = exdData->getField< uint16_t >( row, 29 ); durabilityFactor = exdData->getField< uint16_t >( row, 30 ); @@ -5419,21 +5553,15 @@ Sapphire::Data::Recipe::Recipe( uint32_t row_id, Sapphire::Data::ExdDataGenerate patchNumber = exdData->getField< uint16_t >( row, 44 ); } -Sapphire::Data::RecipeElement::RecipeElement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) -{ - auto row = exdData->m_RecipeElementDat.get_row( row_id ); - name = exdData->getField< std::string >( row, 0 ); -} - Sapphire::Data::RecipeLevelTable::RecipeLevelTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_RecipeLevelTableDat.get_row( row_id ); classJobLevel = exdData->getField< uint8_t >( row, 0 ); stars = exdData->getField< uint8_t >( row, 1 ); suggestedCraftsmanship = exdData->getField< uint16_t >( row, 2 ); - difficulty = exdData->getField< uint16_t >( row, 3 ); - quality = exdData->getField< int16_t >( row, 4 ); - durability = exdData->getField< uint16_t >( row, 5 ); + difficulty = exdData->getField< uint16_t >( row, 4 ); + quality = exdData->getField< uint32_t >( row, 5 ); + durability = exdData->getField< uint16_t >( row, 6 ); } Sapphire::Data::RecipeNotebookList::RecipeNotebookList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -6131,9 +6259,8 @@ Sapphire::Data::SpecialShop::SpecialShop( uint32_t row_id, Sapphire::Data::ExdDa patchNumber.push_back( exdData->getField< uint16_t >( row, 1859 ) ); patchNumber.push_back( exdData->getField< uint16_t >( row, 1860 ) ); questUnlock = exdData->getField< uint32_t >( row, 1862 ); - questShop = exdData->getField< int32_t >( row, 1863 ); - notCompleteText = exdData->getField< int32_t >( row, 1864 ); - completeText = exdData->getField< int32_t >( row, 1865 ); + notCompleteText = exdData->getField< int32_t >( row, 1863 ); + completeText = exdData->getField< int32_t >( row, 1864 ); } Sapphire::Data::SpecialShopItemCategory::SpecialShopItemCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -6164,18 +6291,18 @@ Sapphire::Data::Status::Status( uint32_t row_id, Sapphire::Data::ExdDataGenerate description = exdData->getField< std::string >( row, 1 ); icon = exdData->getField< uint16_t >( row, 2 ); maxStacks = exdData->getField< uint8_t >( row, 3 ); - category = exdData->getField< uint8_t >( row, 4 ); - hitEffect = exdData->getField< uint8_t >( row, 5 ); - vFX = exdData->getField< uint8_t >( row, 6 ); - lockMovement = exdData->getField< bool >( row, 7 ); - lockActions = exdData->getField< bool >( row, 9 ); - lockControl = exdData->getField< bool >( row, 10 ); - transfiguration = exdData->getField< bool >( row, 11 ); - canDispel = exdData->getField< bool >( row, 13 ); - inflictedByActor = exdData->getField< bool >( row, 14 ); - isPermanent = exdData->getField< bool >( row, 15 ); - isFcBuff = exdData->getField< bool >( row, 21 ); - invisibility = exdData->getField< bool >( row, 22 ); + category = exdData->getField< uint8_t >( row, 5 ); + hitEffect = exdData->getField< uint8_t >( row, 6 ); + vFX = exdData->getField< uint8_t >( row, 7 ); + lockMovement = exdData->getField< bool >( row, 8 ); + lockActions = exdData->getField< bool >( row, 10 ); + lockControl = exdData->getField< bool >( row, 11 ); + transfiguration = exdData->getField< bool >( row, 12 ); + canDispel = exdData->getField< bool >( row, 14 ); + inflictedByActor = exdData->getField< bool >( row, 15 ); + isPermanent = exdData->getField< bool >( row, 16 ); + isFcBuff = exdData->getField< bool >( row, 24 ); + invisibility = exdData->getField< bool >( row, 25 ); } Sapphire::Data::StatusHitEffect::StatusHitEffect( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -6202,11 +6329,11 @@ Sapphire::Data::SubmarineExploration::SubmarineExploration( uint32_t row_id, Sap auto row = exdData->m_SubmarineExplorationDat.get_row( row_id ); destination = exdData->getField< std::string >( row, 0 ); location = exdData->getField< std::string >( row, 1 ); - rankReq = exdData->getField< uint8_t >( row, 5 ); - ceruleumTankReq = exdData->getField< uint8_t >( row, 6 ); - durationmin = exdData->getField< uint16_t >( row, 7 ); - distanceForSurvey = exdData->getField< uint8_t >( row, 8 ); - expReward = exdData->getField< uint32_t >( row, 9 ); + rankReq = exdData->getField< uint8_t >( row, 8 ); + ceruleumTankReq = exdData->getField< uint8_t >( row, 9 ); + durationmin = exdData->getField< uint16_t >( row, 10 ); + distanceForSurvey = exdData->getField< uint8_t >( row, 11 ); + expReward = exdData->getField< uint32_t >( row, 12 ); } Sapphire::Data::SubmarinePart::SubmarinePart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -6363,20 +6490,20 @@ Sapphire::Data::Transformation::Transformation( uint32_t row_id, Sapphire::Data: bNpcName = exdData->getField< uint16_t >( row, 2 ); bNpcCustomize = exdData->getField< int32_t >( row, 3 ); npcEquip = exdData->getField< int32_t >( row, 4 ); - action.push_back( exdData->getField< uint16_t >( row, 5 ) ); - action.push_back( exdData->getField< uint16_t >( row, 6 ) ); - action.push_back( exdData->getField< uint16_t >( row, 7 ) ); - action.push_back( exdData->getField< uint16_t >( row, 8 ) ); - action.push_back( exdData->getField< uint16_t >( row, 9 ) ); action.push_back( exdData->getField< uint16_t >( row, 10 ) ); - speed = exdData->getField< float >( row, 13 ); - scale = exdData->getField< float >( row, 14 ); - isPvP = exdData->getField< bool >( row, 15 ); - isEvent = exdData->getField< bool >( row, 16 ); - playerCamera = exdData->getField< bool >( row, 17 ); - startVFX = exdData->getField< uint16_t >( row, 18 ); - endVFX = exdData->getField< uint16_t >( row, 19 ); - rPParameter = exdData->getField< uint8_t >( row, 23 ); + action.push_back( exdData->getField< uint16_t >( row, 11 ) ); + action.push_back( exdData->getField< uint16_t >( row, 12 ) ); + action.push_back( exdData->getField< uint16_t >( row, 13 ) ); + action.push_back( exdData->getField< uint16_t >( row, 14 ) ); + action.push_back( exdData->getField< uint16_t >( row, 15 ) ); + rPParameter = exdData->getField< uint8_t >( row, 18 ); + speed = exdData->getField< float >( row, 19 ); + scale = exdData->getField< float >( row, 20 ); + isPvP = exdData->getField< bool >( row, 21 ); + isEvent = exdData->getField< bool >( row, 22 ); + playerCamera = exdData->getField< bool >( row, 23 ); + startVFX = exdData->getField< uint16_t >( row, 24 ); + endVFX = exdData->getField< uint16_t >( row, 25 ); } Sapphire::Data::Treasure::Treasure( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -7003,6 +7130,7 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_GuardianDeityDat = setupDatAccess( "GuardianDeity", xiv::exd::Language::en ); m_GuildleveAssignmentDat = setupDatAccess( "GuildleveAssignment", xiv::exd::Language::none ); m_GuildleveAssignmentCategoryDat = setupDatAccess( "GuildleveAssignmentCategory", xiv::exd::Language::none ); + m_GuildOrderDat = setupDatAccess( "GuildOrder", xiv::exd::Language::en ); m_GuildOrderGuideDat = setupDatAccess( "GuildOrderGuide", xiv::exd::Language::none ); m_GuildOrderOfficerDat = setupDatAccess( "GuildOrderOfficer", xiv::exd::Language::none ); m_HairMakeTypeDat = setupDatAccess( "HairMakeType", xiv::exd::Language::none ); @@ -7130,7 +7258,6 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_RacingChocoboParamDat = setupDatAccess( "RacingChocoboParam", xiv::exd::Language::en ); m_RecastNavimeshDat = setupDatAccess( "RecastNavimesh", xiv::exd::Language::none ); m_RecipeDat = setupDatAccess( "Recipe", xiv::exd::Language::none ); - m_RecipeElementDat = setupDatAccess( "RecipeElement", xiv::exd::Language::en ); m_RecipeLevelTableDat = setupDatAccess( "RecipeLevelTable", xiv::exd::Language::none ); m_RecipeNotebookListDat = setupDatAccess( "RecipeNotebookList", xiv::exd::Language::none ); m_RecommendContentsDat = setupDatAccess( "RecommendContents", xiv::exd::Language::none ); diff --git a/src/common/Exd/ExdDataGenerated.h b/src/common/Exd/ExdDataGenerated.h index 8a165fc4..725fb2a7 100644 --- a/src/common/Exd/ExdDataGenerated.h +++ b/src/common/Exd/ExdDataGenerated.h @@ -278,6 +278,7 @@ struct GrandCompanyRank; struct GuardianDeity; struct GuildleveAssignment; struct GuildleveAssignmentCategory; +struct GuildOrder; struct GuildOrderGuide; struct GuildOrderOfficer; struct HairMakeType; @@ -405,7 +406,6 @@ struct RacingChocoboNameInfo; struct RacingChocoboParam; struct RecastNavimesh; struct Recipe; -struct RecipeElement; struct RecipeLevelTable; struct RecipeNotebookList; struct RecommendContents; @@ -511,7 +511,7 @@ struct Achievement int32_t key; std::vector< int32_t > data; uint16_t order; - bool initialHide; + uint8_t initialHide; Achievement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -1111,12 +1111,10 @@ struct BeastReputationRank struct BeastTribe { uint8_t minLevel; - uint8_t maxLevel; uint8_t beastRankBonus; uint32_t iconReputation; uint32_t icon; uint8_t maxRank; - uint32_t alliedBeastTribeQuest; uint8_t expansion; uint32_t currencyItem; uint8_t displayOrder; @@ -1734,6 +1732,7 @@ struct ContentFinderCondition uint8_t contentLinkType; uint16_t content; uint8_t contentMemberType; + uint32_t unlockQuest; uint8_t classJobLevelRequired; uint8_t classJobLevelSync; uint16_t itemLevelRequired; @@ -1743,8 +1742,11 @@ struct ContentFinderCondition bool dutyRecorderAllowed; std::string name; uint8_t contentType; + uint8_t transientKey; uint32_t transient; + uint16_t sortKey; uint32_t image; + uint32_t icon; bool levelingRoulette; bool level5060Roulette; bool mSQRoulette; @@ -1843,12 +1845,14 @@ struct ContentRouletteRoleBonus struct ContentsNote { uint8_t contentType; + int32_t icon; uint8_t menuOrder; int32_t requiredAmount; int32_t expMultiplier; int32_t gilRward; uint16_t levelUnlock; uint16_t howTo; + uint32_t reqUnlock; std::string name; std::string description; int32_t expCap; @@ -2351,6 +2355,21 @@ struct ENpcDressUp struct ENpcDressUpDress { uint32_t eNpc; + uint16_t behavior; + uint64_t modelMainHand; + uint8_t dyeMainHand; + uint64_t modelOffHand; + uint8_t dyeOffHand; + uint32_t modelHead; + uint8_t dyeHead; + uint32_t modelBody; + uint8_t dyeBody; + uint32_t modelHands; + uint8_t dyeHands; + uint32_t modelLegs; + uint8_t dyeLegs; + uint32_t modelFeet; + uint8_t dyeFeet; ENpcDressUpDress( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -2688,6 +2707,10 @@ struct FieldMarker struct FishingRecordType { int32_t addon; + uint16_t rankBRequirement; + uint16_t rankARequirement; + uint16_t rankAARequirement; + uint16_t rankAAARequirement; FishingRecordType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -2711,6 +2734,7 @@ struct FishingSpot uint16_t radius; std::vector< int32_t > item; uint16_t placeName; + uint8_t order; FishingSpot( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -2723,10 +2747,10 @@ struct FishParameter bool isHidden; uint8_t fishingRecordType; int32_t territoryType; + uint16_t gatheringSubCategory; bool isInLog; bool timeRestricted; bool weatherRestricted; - uint16_t gatheringSubCategory; FishParameter( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -3133,7 +3157,6 @@ struct GilShop { std::string name; uint32_t icon; - std::vector< uint32_t > questRequired; int32_t acceptTalk; int32_t failTalk; @@ -3215,6 +3238,21 @@ struct GuildleveAssignmentCategory GuildleveAssignmentCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct GuildOrder +{ + uint32_t eNpcName; + std::string objective; + std::string description1; + std::string description2; + std::string description3; + uint32_t completionBonusExp; + uint32_t rewardExp; + uint32_t completionBonusGil; + uint32_t rewardGil; + + GuildOrder( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct GuildOrderGuide { @@ -3422,13 +3460,15 @@ struct InstanceContent uint32_t instanceContentTextDataObjectiveStart; uint32_t instanceContentTextDataObjectiveEnd; uint16_t sortKey; + uint32_t instanceClearExp; uint16_t newPlayerBonusA; - uint16_t newPlayerBonusB; - uint32_t finalBossExp; + uint16_t finalBossCurrencyC; uint16_t finalBossCurrencyA; uint16_t finalBossCurrencyB; - uint16_t finalBossCurrencyC; - uint32_t instanceClearExp; + uint16_t newPlayerBonusB; + uint32_t instanceClearGil; + uint32_t instanceContentRewardItem; + uint32_t finalBossExp; int32_t instanceContentBuff; uint32_t reqInstance; uint8_t partyCondition; @@ -4004,7 +4044,6 @@ struct ModelSkeleton struct ModelState { uint16_t start; - uint16_t end; ModelState( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -4061,18 +4100,6 @@ struct MountAction struct MountCustomize { - float hyurMaleScale; - float hyurFemaleScale; - float elezenMaleScale; - float elezenFemaleScale; - float lalaMaleScale; - float lalaFemaleScale; - float miqoMaleScale; - float miqoFemaleScale; - float roeMaleScale; - float roeFemaleScale; - float auRaMaleScale; - float auRaFemaleScale; uint8_t hyurMaleCameraHeight; uint8_t hyurFemaleCameraHeight; uint8_t elezenMaleCameraHeight; @@ -4436,7 +4463,6 @@ struct Quest uint8_t classJobCategory0; uint16_t classJobLevel0; uint8_t questLevelOffset; - uint16_t levelMax; uint8_t classJobCategory1; uint16_t classJobLevel1; uint8_t previousQuestJoin; @@ -4455,6 +4481,7 @@ struct Quest uint16_t bellEnd; uint8_t beastTribe; uint8_t beastReputationRank; + uint16_t levelMax; int32_t mountRequired; bool isHouseRequired; uint8_t deliveryQuest; @@ -4652,7 +4679,6 @@ struct Recipe uint16_t recipeLevelTable; int32_t itemResult; uint8_t amountResult; - uint8_t recipeElement; bool isSecondary; uint16_t difficultyFactor; uint16_t qualityFactor; @@ -4673,20 +4699,13 @@ struct Recipe Recipe( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; -struct RecipeElement -{ - std::string name; - - RecipeElement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); -}; - struct RecipeLevelTable { uint8_t classJobLevel; uint8_t stars; uint16_t suggestedCraftsmanship; uint16_t difficulty; - int16_t quality; + uint32_t quality; uint16_t durability; RecipeLevelTable( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); @@ -5006,7 +5025,6 @@ struct SpecialShop std::vector< int32_t > achievementUnlock; std::vector< uint16_t > patchNumber; uint32_t questUnlock; - int32_t questShop; int32_t notCompleteText; int32_t completeText; @@ -5232,6 +5250,7 @@ struct Transformation int32_t bNpcCustomize; int32_t npcEquip; std::vector< uint16_t > action; + uint8_t rPParameter; float speed; float scale; bool isPvP; @@ -5239,7 +5258,6 @@ struct Transformation bool playerCamera; uint16_t startVFX; uint16_t endVFX; - uint8_t rPParameter; Transformation( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -5866,6 +5884,7 @@ struct ZoneSharedGroup xiv::exd::Exd m_GuardianDeityDat; xiv::exd::Exd m_GuildleveAssignmentDat; xiv::exd::Exd m_GuildleveAssignmentCategoryDat; + xiv::exd::Exd m_GuildOrderDat; xiv::exd::Exd m_GuildOrderGuideDat; xiv::exd::Exd m_GuildOrderOfficerDat; xiv::exd::Exd m_HairMakeTypeDat; @@ -5993,7 +6012,6 @@ struct ZoneSharedGroup xiv::exd::Exd m_RacingChocoboParamDat; xiv::exd::Exd m_RecastNavimeshDat; xiv::exd::Exd m_RecipeDat; - xiv::exd::Exd m_RecipeElementDat; xiv::exd::Exd m_RecipeLevelTableDat; xiv::exd::Exd m_RecipeNotebookListDat; xiv::exd::Exd m_RecommendContentsDat; @@ -6346,6 +6364,7 @@ struct ZoneSharedGroup using GuardianDeityPtr = std::shared_ptr< GuardianDeity >; using GuildleveAssignmentPtr = std::shared_ptr< GuildleveAssignment >; using GuildleveAssignmentCategoryPtr = std::shared_ptr< GuildleveAssignmentCategory >; + using GuildOrderPtr = std::shared_ptr< GuildOrder >; using GuildOrderGuidePtr = std::shared_ptr< GuildOrderGuide >; using GuildOrderOfficerPtr = std::shared_ptr< GuildOrderOfficer >; using HairMakeTypePtr = std::shared_ptr< HairMakeType >; @@ -6473,7 +6492,6 @@ struct ZoneSharedGroup using RacingChocoboParamPtr = std::shared_ptr< RacingChocoboParam >; using RecastNavimeshPtr = std::shared_ptr< RecastNavimesh >; using RecipePtr = std::shared_ptr< Recipe >; - using RecipeElementPtr = std::shared_ptr< RecipeElement >; using RecipeLevelTablePtr = std::shared_ptr< RecipeLevelTable >; using RecipeNotebookListPtr = std::shared_ptr< RecipeNotebookList >; using RecommendContentsPtr = std::shared_ptr< RecommendContents >; @@ -6826,6 +6844,7 @@ struct ZoneSharedGroup std::set< uint32_t > m_GuardianDeityIdList; std::set< uint32_t > m_GuildleveAssignmentIdList; std::set< uint32_t > m_GuildleveAssignmentCategoryIdList; + std::set< uint32_t > m_GuildOrderIdList; std::set< uint32_t > m_GuildOrderGuideIdList; std::set< uint32_t > m_GuildOrderOfficerIdList; std::set< uint32_t > m_HairMakeTypeIdList; @@ -6953,7 +6972,6 @@ struct ZoneSharedGroup std::set< uint32_t > m_RacingChocoboParamIdList; std::set< uint32_t > m_RecastNavimeshIdList; std::set< uint32_t > m_RecipeIdList; - std::set< uint32_t > m_RecipeElementIdList; std::set< uint32_t > m_RecipeLevelTableIdList; std::set< uint32_t > m_RecipeNotebookListIdList; std::set< uint32_t > m_RecommendContentsIdList; @@ -8606,6 +8624,12 @@ const std::set< uint32_t >& getGuildleveAssignmentCategoryIdList() loadIdList( m_GuildleveAssignmentCategoryDat, m_GuildleveAssignmentCategoryIdList ); return m_GuildleveAssignmentCategoryIdList; } +const std::set< uint32_t >& getGuildOrderIdList() +{ + if( m_GuildOrderIdList.size() == 0 ) + loadIdList( m_GuildOrderDat, m_GuildOrderIdList ); + return m_GuildOrderIdList; +} const std::set< uint32_t >& getGuildOrderGuideIdList() { if( m_GuildOrderGuideIdList.size() == 0 ) @@ -9368,12 +9392,6 @@ const std::set< uint32_t >& getRecipeIdList() loadIdList( m_RecipeDat, m_RecipeIdList ); return m_RecipeIdList; } -const std::set< uint32_t >& getRecipeElementIdList() -{ - if( m_RecipeElementIdList.size() == 0 ) - loadIdList( m_RecipeElementDat, m_RecipeElementIdList ); - return m_RecipeElementIdList; -} const std::set< uint32_t >& getRecipeLevelTableIdList() { if( m_RecipeLevelTableIdList.size() == 0 ) From 40a743c6af9085ade5d08e967d285689e6a3df3f Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 17:40:53 +1000 Subject: [PATCH 02/20] fix lobby encryption key --- src/lobby/GameConnection.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lobby/GameConnection.cpp b/src/lobby/GameConnection.cpp index f531f5c2..f90a4ff1 100644 --- a/src/lobby/GameConnection.cpp +++ b/src/lobby/GameConnection.cpp @@ -453,8 +453,8 @@ void Lobby::GameConnection::generateEncryptionKey( uint32_t key, const std::stri m_baseKey[ 2 ] = 0x34; m_baseKey[ 3 ] = 0x12; memcpy( m_baseKey + 0x04, &key, 4 ); - m_baseKey[ 8 ] = 0xC6; - m_baseKey[ 9 ] = 0x11; + m_baseKey[ 8 ] = 0x88; + m_baseKey[ 9 ] = 0x13; memcpy( ( char* ) m_baseKey + 0x0C, keyPhrase.c_str(), keyPhrase.size() ); Common::Util::md5( m_baseKey, m_encKey, 0x2C ); } From 62bd4666039100ee15bc0be556c54741d133457f Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 17:41:09 +1000 Subject: [PATCH 03/20] fix struct gen tool breaking after an update due to generated data being wrong --- src/tools/exd_struct_gen/main.cpp | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/tools/exd_struct_gen/main.cpp b/src/tools/exd_struct_gen/main.cpp index 7e0a3493..c418dd61 100644 --- a/src/tools/exd_struct_gen/main.cpp +++ b/src/tools/exd_struct_gen/main.cpp @@ -27,6 +27,9 @@ namespace fs = std::experimental::filesystem; Sapphire::Data::ExdDataGenerated g_exdData; bool skipUnmapped = true; +std::shared_ptr< xiv::dat::GameData > m_data; +std::shared_ptr< xiv::exd::ExdData > m_exd_data; + std::map< char, std::string > numberToStringMap { { '0', "zero" }, @@ -83,7 +86,7 @@ std::string generateIdListGetter( const std::string& exd ) std::string generateSetDatAccessCall( const std::string& exd ) { - auto& cat = g_exdData.m_exd_data->get_category( exd ); + auto& cat = m_exd_data->get_category( exd ); auto exh = cat.get_header(); std::string lang = "xiv::exd::Language::none"; @@ -110,7 +113,7 @@ std::map< std::string, std::string > nameTaken; std::string generateStruct( const std::string& exd ) { - auto& cat = g_exdData.m_exd_data->get_category( exd ); + auto& cat = m_exd_data->get_category( exd ); auto exh = cat.get_header(); auto exhMem = exh.get_exh_members(); @@ -261,7 +264,7 @@ std::string generateConstructorsDecl( const std::string& exd ) { std::string result; - auto& cat = g_exdData.m_exd_data->get_category( exd ); + auto& cat = m_exd_data->get_category( exd ); auto exh = cat.get_header(); auto exhMem = exh.get_exh_members(); @@ -355,11 +358,10 @@ int main( int argc, char** argv ) Logger::info( "Setting up EXD data" ); - if( !g_exdData.init( datLocation ) ) - { - Logger::fatal( "Error setting up EXD data " ); - return 0; - } + + m_data = std::make_shared< xiv::dat::GameData >( datLocation ); + m_exd_data = std::make_shared< xiv::exd::ExdData >( *m_data ); + Logger::info( "Generating structs, this may take several minutes..." ); Logger::info( "Go grab a coffee..." ); @@ -385,6 +387,8 @@ int main( int argc, char** argv ) return 1; } + auto& cats = m_exd_data->get_cat_names(); + uint32_t entryCount = 0; for( auto& entry : fs::directory_iterator( "./Definitions/" ) ) { @@ -393,10 +397,14 @@ int main( int argc, char** argv ) if( path.extension() != ".json" ) continue; - entryCount++; - auto name = path.stem().string(); + if( std::find( cats.begin(), cats.end(), name ) == cats.end() ) + { + Logger::warn( "have definition for {} but the sheet doesn't exist", name ); + continue; + } + forwards += "struct " + name + ";\n"; structDefs += generateStruct( name ); dataDecl += generateDatAccessDecl( name ); @@ -405,6 +413,8 @@ int main( int argc, char** argv ) datAccCall += generateSetDatAccessCall( name ); constructorDecl += generateConstructorsDecl( name ); idListGetters += generateIdListGetter( name ); + + entryCount++; } Logger::info( "Processed {} definition files, writing files...", entryCount ); From f8e74c7e0d41b22fd855e7072ede9b3f73217cbd Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 18:25:24 +1000 Subject: [PATCH 04/20] 5.0 opcodes: part 1 --- src/common/Network/PacketDef/Ipcs.h | 64 ++++++++++++++--------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 9979c9a9..a0c4df46 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -60,8 +60,8 @@ namespace Sapphire::Network::Packets /////////////////////////////////////////////////// ChatBanned = 0x006B, - Playtime = 0x006C, // updated 4.5 - Logout = 0x0077, // updated 4.5 + Playtime = 0x0100, // updated 5.0 + Logout = 0x0077, // updated 5.0 CFNotify = 0x0078, CFMemberStatus = 0x0079, CFDutyInfo = 0x007A, @@ -77,20 +77,20 @@ namespace Sapphire::Network::Packets WorldVisitList = 0x00FE, // added 4.5 - SocialList = 0x0103, // updated 4.5 + SocialList = 0x010D, // updated 5.0 - UpdateSearchInfo = 0x0106, // updated 4.5 - InitSearchInfo = 0x0107, // updated 4.4 + UpdateSearchInfo = 0x0110, // updated 5.0 + InitSearchInfo = 0x0111, // updated 5.0 ExamineSearchComment = 0x0102, // updated 4.1 - ServerNoticeShort = 0x010B, // added 4.5 - ServerNotice = 0x010C, // updated 4.5 - SetOnlineStatus = 0x010D, // updated 4.5 + ServerNoticeShort = 0x0115, // updated 5.0 + ServerNotice = 0x0116, // updated 5.0 + SetOnlineStatus = 0x0117, // updated 5.0 - CountdownInitiate = 0x0114, // updated 4.5 - CountdownCancel = 0x0115, // updated 4.5 + CountdownInitiate = 0x011E, // updated 5.0 + CountdownCancel = 0x011F, // updated 5.0 - BlackList = 0x0118, // updated 4.5 + BlackList = 0x0121, // updated 5.0 LogMessage = 0x00D0, @@ -121,27 +121,27 @@ namespace Sapphire::Network::Packets GCAffiliation = 0x0165, // updated 4.5 - PlayerSpawn = 0x0175, // updated 4.5 - NpcSpawn = 0x0176, // updated 4.5 - NpcSpawn2 = 0x0177, // ( Bigger statuseffectlist? ) updated 4.5 - ActorMove = 0x0178, // updated 4.5 + PlayerSpawn = 0x017F, // updated 5.0 + NpcSpawn = 0x0180, // updated 5.0 + NpcSpawn2 = 0x0181, // ( Bigger statuseffectlist? ) updated 5.0 + ActorMove = 0x0182, // updated 5.0 - ActorSetPos = 0x017A, // updated 4.5 + ActorSetPos = 0x0184, // updated 5.0 - ActorCast = 0x017C, // updated 4.5 + ActorCast = 0x0187, // updated 5.0 - PartyList = 0x017E, // updated 4.5 - HateRank = 0x017F, // updated 4.5 - HateList = 0x0180, // updated 4.5 - ObjectSpawn = 0x0181, // updated 4.5 - ObjectDespawn = 0x0182, // updated 4.5 - UpdateClassInfo = 0x0183, // updated 4.5 - SilentSetClassJob = 0x0184, // updated 4.5 - seems to be the case, not sure if it's actually used for anything - PlayerSetup = 0x0185, // updated 4.5 - PlayerStats = 0x0186, // updated 4.5 - ActorOwner = 0x0187, // updated 4.5 - PlayerStateFlags = 0x0188, // updated 4.5 - PlayerClassInfo = 0x0189, // updated 4.5 + PartyList = 0x0188, // updated 5.0 + HateRank = 0x0189, // updated 5.0 + HateList = 0x018A, // updated 5.0 + ObjectSpawn = 0x018B, // updated 5.0 + ObjectDespawn = 0x018C, // updated 5.0 + UpdateClassInfo = 0x018D, // updated 5.0 + SilentSetClassJob = 0x018E, // updated 5.0 - seems to be the case, not sure if it's actually used for anything + PlayerSetup = 0x018F, // updated 5.0 + PlayerStats = 0x0190, // updated 5.0 + ActorOwner = 0x0191, // updated 5.0 + PlayerStateFlags = 0x0192, // updated 5.0 + PlayerClassInfo = 0x0193, // updated 5.0 ModelEquip = 0x018B, // updated 4.5 Examine = 0x018C, // updated 4.5 @@ -149,12 +149,12 @@ namespace Sapphire::Network::Packets SetLevelSync = 0x1186, // not updated for 4.4, not sure what it is anymore - ItemInfo = 0x0196, // updated 4.5 - ContainerInfo = 0x0197, // updated 4.5 + ItemInfo = 0x01A1, // updated 5.0 + ContainerInfo = 0x01A2, // updated 5.0 InventoryTransactionFinish = 0x0198, // updated 4.5 InventoryTransaction = 0x0199, // updated 4.5 - CurrencyCrystalInfo = 0x019B, // updated 4.5 + CurrencyCrystalInfo = 0x01A5, // updated 5.0 InventoryActionAck = 0x019D, // updated 4.5 UpdateInventorySlot = 0x019E, // updated 4.5 From bbc981d481a0bf7506768e3e872d539165d41b8f Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 18:35:26 +1000 Subject: [PATCH 05/20] enough to get ingame now --- src/common/Network/PacketDef/Ipcs.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index a0c4df46..9ae201af 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -159,11 +159,11 @@ namespace Sapphire::Network::Packets InventoryActionAck = 0x019D, // updated 4.5 UpdateInventorySlot = 0x019E, // updated 4.5 - HuntingLogEntry = 0x01A9, // added 4.5 + HuntingLogEntry = 0x01B3, // updated 5.0 - EventPlay = 0x01AB, // updated 4.5 - DirectorPlayScene = 0x01AF, // updated 4.5 - EventOpenGilShop = 0x01B2, // updated 4.5 + EventPlay = 0x01B5, // updated 5.0 + DirectorPlayScene = 0x01B9, // updated 5.0 + EventOpenGilShop = 0x01BC, // updated 5.0 EventStart = 0x01B4, // updated 4.5 EventFinish = 0x01B5, // updated 4.5 @@ -233,8 +233,8 @@ namespace Sapphire::Network::Packets // Unknown IPC types that still need to be sent // TODO: figure all these out properly - IPCTYPE_UNK_320 = 0x0253, // updated 4.5 - IPCTYPE_UNK_322 = 0x0255, // updated 4.5 + IPCTYPE_UNK_320 = 0x025E, // updated 4.5 + IPCTYPE_UNK_322 = 0x0260, // updated 4.5 /// Doman Mahjong ////////////////////////////////////// MahjongOpenGui = 0x02BC, // only available in mahjong instance From b2b582fd92231daa2f0f03d30245119d3c7ad4e1 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 20:21:58 +1000 Subject: [PATCH 06/20] add path arg to common gen, new common gen file --- src/common/CommonGen.h | 49 +++++++++++++++++++++++-------- src/tools/exd_common_gen/main.cpp | 15 ++++++---- 2 files changed, 47 insertions(+), 17 deletions(-) diff --git a/src/common/CommonGen.h b/src/common/CommonGen.h index 078efa3c..9b80d3f1 100644 --- a/src/common/CommonGen.h +++ b/src/common/CommonGen.h @@ -6,8 +6,7 @@ /* This file has been automatically generated. Changes will be lost upon regeneration. To change the content edit tools/exd_common_gen */ -namespace Sapphire { -namespace Common { +namespace Sapphire::Common { /////////////////////////////////////////////////////////// //ActionCategory.exd @@ -173,6 +172,8 @@ enum class ClassJob : uint8_t Samurai = 34, Redmage = 35, Bluemage = 36, + Gunbreaker = 37, + Dancer = 38, }; /////////////////////////////////////////////////////////// @@ -199,14 +200,10 @@ enum class ContentType : uint8_t DisciplesoftheHand = 17, RetainerVentures = 18, GoldSaucer = 19, - one = 20, DeepDungeons = 21, - two = 22, - three = 23, WondrousTails = 24, CustomDeliveries = 25, Eureka = 26, - four = 27, }; /////////////////////////////////////////////////////////// @@ -217,7 +214,6 @@ enum class EmoteCategory : uint8_t General = 1, Special = 2, Expressions = 3, - one = 4, }; /////////////////////////////////////////////////////////// @@ -227,7 +223,7 @@ enum class ExVersion : uint8_t ARealmReborn = 0, Heavensward = 1, Stormblood = 2, - three = 3, + Shadowbringers = 3, }; /////////////////////////////////////////////////////////// @@ -369,6 +365,8 @@ enum class ItemUICategory : uint8_t SubmersibleBow = 103, SubmersibleBridge = 104, BlueMagesArm = 105, + GunbreakersArm = 106, + DancersArm = 107, }; /////////////////////////////////////////////////////////// @@ -393,7 +391,7 @@ enum class ItemSearchCategory : uint8_t ConjurersArms = 15, ArcanistsArms = 16, Shields = 17, - ThrowingWeapons = 18, + DancersArms = 18, CarpentersTools = 19, BlacksmithsTools = 20, ArmorersTools = 21, @@ -454,13 +452,15 @@ enum class ItemSearchCategory : uint8_t DarkKnightsArms = 76, MachinistsArms = 77, AstrologiansArms = 78, - Airship_SubmersibleComponents = 79, + AirshipSubmersibleComponents = 79, OrchestrionComponents = 80, GardeningItems = 81, Paintings = 82, SamuraisArms = 83, RedMagesArms = 84, ScholarsArms = 85, + GunbreakersArms = 86, + ThrowingWeapons = 87, }; /////////////////////////////////////////////////////////// @@ -527,6 +527,8 @@ enum class Race : uint8_t Miqote = 4, Roegadyn = 5, AuRa = 6, + Hrothgar = 7, + Viera = 8, }; /////////////////////////////////////////////////////////// @@ -546,6 +548,10 @@ enum class Tribe : uint8_t Hellsguard = 10, Raen = 11, Xaela = 12, + Helions = 13, + TheLost = 14, + Rava = 15, + Veena = 16, }; /////////////////////////////////////////////////////////// @@ -558,6 +564,7 @@ enum class Town : uint8_t Uldah = 3, Ishgard = 4, Kugane = 7, + TheCrystarium = 10, }; /////////////////////////////////////////////////////////// @@ -680,7 +687,21 @@ enum class Weather : uint8_t TrueBlue = 113, TrueBlue1 = 114, TrueBlue2 = 115, + UmbralTurbulence = 116, TrueBlue3 = 117, + EverlastingLight = 118, + Gales2 = 119, + Termination = 120, + Termination1 = 121, + Dreams = 122, + Dreams1 = 123, + Dreams2 = 124, + Brilliance = 125, + Brilliance1 = 126, + Termination2 = 127, + Termination3 = 128, + EverlastingLight1 = 129, + Termination4 = 131, }; /////////////////////////////////////////////////////////// @@ -695,7 +716,7 @@ enum class HousingAppeal : uint8_t Tavern = 5, Eatery = 6, ImmersiveExperience = 7, - Cafe = 8, + Café = 8, Aquarium = 9, Sanctum = 10, Venue = 11, @@ -703,8 +724,12 @@ enum class HousingAppeal : uint8_t Library = 14, PhotoStudio = 15, HauntedHouse = 16, + Atelier = 17, + Bathhouse = 18, + Garden = 19, + FarEastern = 20, }; -} + } #endif diff --git a/src/tools/exd_common_gen/main.cpp b/src/tools/exd_common_gen/main.cpp index 43a27473..768b53c4 100644 --- a/src/tools/exd_common_gen/main.cpp +++ b/src/tools/exd_common_gen/main.cpp @@ -21,7 +21,7 @@ Sapphire::Data::ExdDataGenerated g_exdData; using namespace Sapphire; //const std::string datLocation( "/opt/sapphire_3_15_0/bin/sqpack" ); -const std::string datLocation( "C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack" ); +std::string datLocation( "C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack" ); std::string generateEnum( const std::string& exd, int8_t nameIndex, const std::string& type, bool useLang = true ) { @@ -86,13 +86,20 @@ std::string generateEnum( const std::string& exd, int8_t nameIndex, const std::s } -int main() +int main( int argc, char** argv ) { Logger::init( "commongen" ); Logger::info( "Setting up EXD data" ); + + if( argc > 1 ) + { + Logger::info( "using dat path: {0}", std::string( argv[ 1 ] ) ); + datLocation = std::string( argv[ 1 ] ); + } + if( !g_exdData.init( datLocation ) ) { Logger::fatal( "Error setting up EXD data " ); @@ -107,8 +114,7 @@ int main() "/* This file has been automatically generated.\n Changes will be lost upon regeneration.\n To change the content edit tools/exd_common_gen */\n"; - result += "namespace Sapphire {\n"; - result += "namespace Common {\n"; + result += "namespace Sapphire::Common {\n"; result += generateEnum( "ActionCategory", 0, "uint8_t" ); result += generateEnum( "BaseParam", 1, "uint8_t" ); result += generateEnum( "BeastReputationRank", 1, "uint8_t" ); @@ -127,7 +133,6 @@ int main() result += generateEnum( "Town", 0, "uint8_t" ); result += generateEnum( "Weather", 1, "uint8_t" ); result += generateEnum( "HousingAppeal", 0, "uint8_t" ); - result += "}\n"; result += "}\n#endif\n"; Logger::info( result ); return 0; From 93173e78b027cf8ea1c472f5db8fe6149e48fea7 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 20:32:42 +1000 Subject: [PATCH 07/20] more opcodes --- src/common/CommonGen.h | 2 +- src/common/Network/PacketDef/Ipcs.h | 70 +++++++++++++++++------------ 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/src/common/CommonGen.h b/src/common/CommonGen.h index 9b80d3f1..4833e57a 100644 --- a/src/common/CommonGen.h +++ b/src/common/CommonGen.h @@ -716,7 +716,7 @@ enum class HousingAppeal : uint8_t Tavern = 5, Eatery = 6, ImmersiveExperience = 7, - Café = 8, + Cafe = 8, Aquarium = 9, Sanctum = 10, Venue = 11, diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 9ae201af..a1a17d1c 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -96,10 +96,21 @@ namespace Sapphire::Network::Packets LinkshellList = 0x011F, // updated 4.5 - MailDeleteRequest = 0x0120, // updated 4.5 - ReqMoogleMailList = 0x0121, // updated 4.5 - ReqMoogleMailLetter = 0x0122, // updated 4.5 - MailLetterNotification = 0x0123, // updated 4.5 + MailDeleteRequest = 0x012B, // updated 5.0 + // gap added in 5.0 + // 0x12D + // 0x12E + // 0x12F + // 0x130 + // 0x132 + // 0x133 + // 0x134 + // 0x135 + // 0x136 + // 0x137 + ReqMoogleMailList = 0x0138, // updated 5.0 + ReqMoogleMailLetter = 0x0122, // unchanged 5.0??? + MailLetterNotification = 0x0123, // unchanged 5.0??? MarketBoardItemListingCount = 0x0125, // updated 4.5 MarketBoardItemListing = 0x0126, // updated 4.5 @@ -111,15 +122,16 @@ namespace Sapphire::Network::Packets FreeCompanyInfo = 0x013D, // updated 4.5 ExamineFreeCompanyInfo = 0x013E, // updated 4.5 - StatusEffectList = 0x0151, // updated 4.5 - Effect = 0x0154, // updated 4.5 - AoeEffect8 = 0x0157, // updated 4.5 - AoeEffect16 = 0x0158, // updated 4.5 - AoeEffect24 = 0x0159, // updated 4.5 - AoeEffect32 = 0x015A, // updated 4.5 - PersistantEffect = 0x015B, // updated 4.5 + StatusEffectList = 0x015B, // updated 5.0 + EurekaStatusEffectList = 0x015C, // updated 5.0 + Effect = 0x015E, // updated 5.0 + AoeEffect8 = 0x0161, // updated 5.0 + AoeEffect16 = 0x0162, // updated 5.0 + AoeEffect24 = 0x0163, // updated 5.0 + AoeEffect32 = 0x0164, // updated 5.0 + PersistantEffect = 0x0165, // updated 5.0 - GCAffiliation = 0x0165, // updated 4.5 + GCAffiliation = 0x016F, // updated 5.0 PlayerSpawn = 0x017F, // updated 5.0 NpcSpawn = 0x0180, // updated 5.0 @@ -140,8 +152,8 @@ namespace Sapphire::Network::Packets PlayerSetup = 0x018F, // updated 5.0 PlayerStats = 0x0190, // updated 5.0 ActorOwner = 0x0191, // updated 5.0 - PlayerStateFlags = 0x0192, // updated 5.0 - PlayerClassInfo = 0x0193, // updated 5.0 + PlayerStateFlags = 0x0193, // updated 5.0 + PlayerClassInfo = 0x0194, // updated 5.0 ModelEquip = 0x018B, // updated 4.5 Examine = 0x018C, // updated 4.5 @@ -273,18 +285,18 @@ namespace Sapphire::Network::Packets SocialReqSendHandler = 0x00AE, // updated 4.1 CreateCrossWorldLS = 0x00AF, // updated 4.3 - ChatHandler = 0x00D7, // updated 4.5 + ChatHandler = 0x00D9, // updated 5.0 - SocialListHandler = 0x00DF, // updated 4.5 - ReqSearchInfoHandler = 0x00E4, // updated 4.5 - ReqExamineSearchCommentHandler = 0x00E5, // updated 4.5 + SocialListHandler = 0x00E1, // updated 5.0 + ReqSearchInfoHandler = 0x00E6, // updated 5.0 + ReqExamineSearchCommentHandler = 0x00E7, // updated 5.0 - SetSearchInfoHandler = 0x00E2, // unchanged 4.5 + SetSearchInfoHandler = 0x00E4, // updated 5.0 - BlackListHandler = 0x00F0, // updated 4.5 + BlackListHandler = 0x00F2, // updated 5.0 PlayerSearchHandler = 0x00E6, // updated 4.5 - LinkshellListHandler = 0x00F8, // updated 4.5 + LinkshellListHandler = 0x00FA, // updated 5.0 MarketBoardRequestItemListingInfo = 0x0102, // updated 4.5 MarketBoardRequestItemListings = 0x0103, // updated 4.5 @@ -302,18 +314,18 @@ namespace Sapphire::Network::Packets ReqCountdownCancel = 0x0134, // updated 4.5 ClearWaymarks = 0x0135, // updated 4.5 - ZoneLineHandler = 0x0137, // updated 4.5 - ClientTrigger = 0x0138, // updated 4.5 - DiscoveryHandler = 0x0139, // updated 4.5 + ZoneLineHandler = 0x0139, // updated 5.0 + ClientTrigger = 0x0140, // updated 5.0 + DiscoveryHandler = 0x0141, // updated 5.0 AddWaymark = 0x013A, // updated 4.5 - SkillHandler = 0x013B, // updated 4.5 - GMCommand1 = 0x013C, // updated 4.5 - GMCommand2 = 0x013D, // updated 4.5 - AoESkillHandler = 0x13E, // updated 4.5 + SkillHandler = 0x013D, // updated 5.0 + GMCommand1 = 0x013E, // updated 5.0 + GMCommand2 = 0x013F, // updated 5.0 + AoESkillHandler = 0x140, // updated 5.0 - UpdatePositionHandler = 0x013F, // updated 4.5 + UpdatePositionHandler = 0x0141, // updated 5.0 UpdatePositionInstance = 0x0183, // updated 4.3 InventoryModifyHandler = 0x0146, // updated 4.5 ( +4 ) From 4ec48641f51cf44de0d5d5373e00e5a429edf240 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 21:06:23 +1000 Subject: [PATCH 08/20] fix client/server event opcodes --- src/common/Network/PacketDef/Ipcs.h | 46 ++++++++++++++--------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index a1a17d1c..95fe9ca8 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -151,7 +151,7 @@ namespace Sapphire::Network::Packets SilentSetClassJob = 0x018E, // updated 5.0 - seems to be the case, not sure if it's actually used for anything PlayerSetup = 0x018F, // updated 5.0 PlayerStats = 0x0190, // updated 5.0 - ActorOwner = 0x0191, // updated 5.0 + ActorOwner = 0x0192, // updated 5.0 PlayerStateFlags = 0x0193, // updated 5.0 PlayerClassInfo = 0x0194, // updated 5.0 @@ -177,8 +177,8 @@ namespace Sapphire::Network::Packets DirectorPlayScene = 0x01B9, // updated 5.0 EventOpenGilShop = 0x01BC, // updated 5.0 - EventStart = 0x01B4, // updated 4.5 - EventFinish = 0x01B5, // updated 4.5 + EventStart = 0x01BE, // updated 5.0 + EventFinish = 0x01BF, // updated 5.0 EventLinkshell = 0x1169, @@ -201,9 +201,9 @@ namespace Sapphire::Network::Packets CFAvailableContents = 0xF1FD, // updated 4.2 - WeatherChange = 0x0205, // updated 4.5 - PlayerTitleList = 0x0206, // updated 4.5? - Discovery = 0x0207, // updated 4.5? + WeatherChange = 0x0210, // updated 5.0 + PlayerTitleList = 0x0211, // updated 5.0 + Discovery = 0x0212, // updated 5.0 EorzeaTimeOffset = 0x0209, // updated 4.5 @@ -328,34 +328,34 @@ namespace Sapphire::Network::Packets UpdatePositionHandler = 0x0141, // updated 5.0 UpdatePositionInstance = 0x0183, // updated 4.3 - InventoryModifyHandler = 0x0146, // updated 4.5 ( +4 ) + InventoryModifyHandler = 0x0148, // updated 5.0 - ReqPlaceHousingItem = 0x149, // updated 4.5 + ReqPlaceHousingItem = 0x014B, // updated 5.0 + BuildPresetHandler = 0x014F, // updated 5.0 - BuildPresetHandler = 0x014E, // updated 4.5 - TalkEventHandler = 0x014F, // updated 4.5 - EmoteEventHandler = 0x0150, // updated 4.5 - WithinRangeEventHandler = 0x0151, // updated 4.5 - OutOfRangeEventHandler = 0x0152, // updated 4.5 - EnterTeriEventHandler = 0x0153, // updated 4.5 + TalkEventHandler = 0x0151, // updated 5.0 + EmoteEventHandler = 0x0152, // updated 5.0 + WithinRangeEventHandler = 0x0153, // updated 5.0 + OutOfRangeEventHandler = 0x0154, // updated 5.0 + EnterTeriEventHandler = 0x0155, // updated 5.0 + ShopEventHandler = 0x0156, // updated 5.0 - ShopEventHandler = 0x0155, // updated 4.5 - - ReturnEventHandler = 0x0158, // updated 4.5 - TradeReturnEventHandler = 0x0159, // updated 4.5 + ReturnEventHandler = 0x015A, // updated 5.0? + TradeReturnEventHandler = 0x015B, // updated 5.0? LinkshellEventHandler = 0x016B, // updated 4.5 LinkshellEventHandler1 = 0x016C, // updated 4.5 - LandRenameHandler = 0x0175, // updated 4.5 - HousingUpdateHouseGreeting = 0x0176, // updated 4.5 - HousingUpdateObjectPosition = 0x0177, // updated 4.5 + ReqEquipDisplayFlagsChange = 0x0175, // updated 5.0 - SetSharedEstateSettings = 0x017B, // updated 4.5 + LandRenameHandler = 0x0177, // updated 5.0 + HousingUpdateHouseGreeting = 0x0178, // updated 5.0 + HousingUpdateObjectPosition = 0x0179, // updated 5.0 + + SetSharedEstateSettings = 0x017B, // updated 5.0 PerformNoteHandler = 0x029B, // updated 4.3 - ReqEquipDisplayFlagsChange = 0x0173, // updated 4.5 }; From 64be2964c94f82781d5bfeea21c7a536c885bc37 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 21:15:22 +1000 Subject: [PATCH 09/20] quest/housing related opcode fixes --- src/common/Network/PacketDef/Ipcs.h | 54 ++++++++++++++--------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 95fe9ca8..05da10e8 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -182,22 +182,22 @@ namespace Sapphire::Network::Packets EventLinkshell = 0x1169, - QuestActiveList = 0x01C8, // updated 4.5 - QuestUpdate = 0x01C9, // updated 4.5 - QuestCompleteList = 0x01CA, // updated 4.5 + QuestActiveList = 0x01D2, // updated 5.0 + QuestUpdate = 0x01D3, // updated 5.0 + QuestCompleteList = 0x01D4, // updated 5.0 - QuestFinish = 0x01CB, // updated 4.5 - MSQTrackerComplete = 0x01CC, // updated 4.5 + QuestFinish = 0x01D5, // updated 5.0 + MSQTrackerComplete = 0x01D6, // updated 5.0 MSQTrackerProgress = 0xF1CD, // updated 4.5 ? this actually looks like the two opcodes have been combined, see #474 - QuestMessage = 0x01D3, // updated 4.5 + QuestMessage = 0x01DE, // updated 5.0 - QuestTracker = 0x01D8, // updated 4.5 + QuestTracker = 0x01E3, // updated 5.0 - Mount = 0x01E8, // updated 4.5 + Mount = 0x01F3, // updated 5.0 - DirectorVars = 0x01EA, // updated 4.5 - DirectorPopUp = 0x01F5, // display dialogue pop-ups in duties and FATEs, for example, Teraflare's countdown + DirectorVars = 0x01F5, // updated 5.0 + DirectorPopUp = 0x0200, // updated 5.0 - display dialogue pop-ups in duties and FATEs, for example, Teraflare's countdown CFAvailableContents = 0xF1FD, // updated 4.2 @@ -205,29 +205,29 @@ namespace Sapphire::Network::Packets PlayerTitleList = 0x0211, // updated 5.0 Discovery = 0x0212, // updated 5.0 - EorzeaTimeOffset = 0x0209, // updated 4.5 + EorzeaTimeOffset = 0x0214, // updated 5.0 - EquipDisplayFlags = 0x0215, // updated 4.5 + EquipDisplayFlags = 0x0220, // updated 5.0 /// Housing ////////////////////////////////////// - LandSetInitialize = 0x0229, // updated 4.5 - LandUpdate = 0x022A, // updated 4.5 - YardObjectSpawn = 0x022B, // updated 4.5 - HousingIndoorInitialize = 0x022C, // updated 4.5 - LandPriceUpdate = 0x022D, // updated 4.5 - LandInfoSign = 0x022E, // updated 4.5 - LandRename = 0x022F, // updated 4.5 - HousingEstateGreeting = 0x0230, // updated 4.5 - HousingUpdateLandFlagsSlot = 0x0231, // updated 4.5 - HousingLandFlags = 0x0232, // updated 4.5 - HousingShowEstateGuestAccess = 0x0233, // updated 4.5 + LandSetInitialize = 0x0234, // updated 5.0 + LandUpdate = 0x0235, // updated 5.0 + YardObjectSpawn = 0x0236, // updated 5.0 + HousingIndoorInitialize = 0x0237, // updated 5.0 + LandPriceUpdate = 0x0238, // updated 5.0 + LandInfoSign = 0x0239, // updated 5.0 + LandRename = 0x023A, // updated 5.0 + HousingEstateGreeting = 0x023B, // updated 5.0 + HousingUpdateLandFlagsSlot = 0x023C, // updated 5.0 + HousingLandFlags = 0x023D, // updated 5.0 + HousingShowEstateGuestAccess = 0x023E, // updated 5.0 - HousingObjectInitialize = 0x0235, // updated 4.45 - HousingInternalObjectSpawn = 0x236, // updated 4.5 + HousingObjectInitialize = 0x0240, // updated 5.0 + HousingInternalObjectSpawn = 0x241, // updated 5.0 - HousingWardInfo = 0x0238, // updated 4.5 - HousingObjectMove = 0x0239, // updated 4.5 + HousingWardInfo = 0x0243, // updated 5.0 + HousingObjectMove = 0x0244, // updated 5.0 SharedEstateSettingsResponse = 0x0245, // updated 4.5 From 324f1bd000e0796547bb0414ac838c859d67124b Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 21:27:53 +1000 Subject: [PATCH 10/20] fix modelequip, examine, etc --- src/common/Network/PacketDef/Ipcs.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 05da10e8..c88ea182 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -155,9 +155,9 @@ namespace Sapphire::Network::Packets PlayerStateFlags = 0x0193, // updated 5.0 PlayerClassInfo = 0x0194, // updated 5.0 - ModelEquip = 0x018B, // updated 4.5 - Examine = 0x018C, // updated 4.5 - CharaNameReq = 0x018D, // updated 4.5 + ModelEquip = 0x0196, // updated 5.0 + Examine = 0x0197, // updated 5.0 + CharaNameReq = 0x0198, // updated 5.0 SetLevelSync = 0x1186, // not updated for 4.4, not sure what it is anymore From a2a5a6bd6912e42d9b8aab37d05ad49917bcdeb8 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 21:58:26 +1000 Subject: [PATCH 11/20] fix my inability to count in hexadecimal, in turn breaking everything --- src/common/Network/PacketDef/Ipcs.h | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index c88ea182..7f45fcb5 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -94,20 +94,20 @@ namespace Sapphire::Network::Packets LogMessage = 0x00D0, - LinkshellList = 0x011F, // updated 4.5 + LinkshellList = 0x012A, // updated 5.0 MailDeleteRequest = 0x012B, // updated 5.0 - // gap added in 5.0 - // 0x12D - // 0x12E - // 0x12F - // 0x130 - // 0x132 - // 0x133 - // 0x134 - // 0x135 - // 0x136 - // 0x137 + // gap added in 5.0 - reshuffled from somewhere else? + // 0x012D + // 0x012E + // 0x012F + // 0x0130 + // 0x0132 + // 0x0133 + // 0x0134 + // 0x0135 + // 0x0136 + // 0x0137 ReqMoogleMailList = 0x0138, // updated 5.0 ReqMoogleMailLetter = 0x0122, // unchanged 5.0??? MailLetterNotification = 0x0123, // unchanged 5.0??? @@ -315,8 +315,8 @@ namespace Sapphire::Network::Packets ClearWaymarks = 0x0135, // updated 4.5 ZoneLineHandler = 0x0139, // updated 5.0 - ClientTrigger = 0x0140, // updated 5.0 - DiscoveryHandler = 0x0141, // updated 5.0 + ClientTrigger = 0x013A, // updated 5.0 + DiscoveryHandler = 0x013B, // updated 5.0 AddWaymark = 0x013A, // updated 4.5 From 4aa8971195842fb5d59cfd2b6744e0c2ec56120c Mon Sep 17 00:00:00 2001 From: NotAdam Date: Fri, 28 Jun 2019 22:49:42 +1000 Subject: [PATCH 12/20] fixed chat packet, may you be blessed by working debug messages --- src/common/Network/PacketDef/Ipcs.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 7f45fcb5..1fa89fae 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -73,7 +73,7 @@ namespace Sapphire::Network::Packets SocialRequestResponse = 0x00BB, // updated 4.1 CancelAllianceForming = 0x00C6, // updated 4.2 - Chat = 0x00F7, // updated 4.5? + Chat = 0x0104, // updated 5.0 WorldVisitList = 0x00FE, // added 4.5 @@ -288,11 +288,10 @@ namespace Sapphire::Network::Packets ChatHandler = 0x00D9, // updated 5.0 SocialListHandler = 0x00E1, // updated 5.0 + SetSearchInfoHandler = 0x00E4, // updated 5.0 ReqSearchInfoHandler = 0x00E6, // updated 5.0 ReqExamineSearchCommentHandler = 0x00E7, // updated 5.0 - SetSearchInfoHandler = 0x00E4, // updated 5.0 - BlackListHandler = 0x00F2, // updated 5.0 PlayerSearchHandler = 0x00E6, // updated 4.5 From 11bbb6d830887c25268a6f0e5558d80728070644 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sun, 30 Jun 2019 18:32:44 +1000 Subject: [PATCH 13/20] fix a bunch of playersetup --- src/common/Network/PacketDef/Ipcs.h | 12 +---------- .../Network/PacketDef/Zone/ServerZoneDef.h | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 1fa89fae..754b1bf4 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -97,17 +97,7 @@ namespace Sapphire::Network::Packets LinkshellList = 0x012A, // updated 5.0 MailDeleteRequest = 0x012B, // updated 5.0 - // gap added in 5.0 - reshuffled from somewhere else? - // 0x012D - // 0x012E - // 0x012F - // 0x0130 - // 0x0132 - // 0x0133 - // 0x0134 - // 0x0135 - // 0x0136 - // 0x0137 + // 12D - 137 - constant gap between 4.5x -> 5.0 ReqMoogleMailList = 0x0138, // updated 5.0 ReqMoogleMailLetter = 0x0122, // unchanged 5.0??? MailLetterNotification = 0x0123, // unchanged 5.0??? diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index dc93c0f0..bc188779 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -841,8 +841,9 @@ namespace Sapphire::Network::Packets::Server unsigned char namedayMonth; unsigned char namedayDay; unsigned char cityState; + unsigned char unknown80; unsigned char homepoint; - unsigned char unknown81; + unsigned char unknown82; unsigned char petHotBar; unsigned char companionRank; unsigned char companionStars; @@ -856,16 +857,16 @@ namespace Sapphire::Network::Packets::Server unsigned char relicBookId; unsigned char unknown90[4]; unsigned char craftingMasterMask; - unsigned char unknown95[10]; + unsigned char unknown95[9]; unsigned char unknown9F[2]; unsigned char unknownA1[3]; - unsigned int exp[26]; + unsigned int exp[28]; unsigned int unknown108; unsigned int pvpTotalExp; unsigned int unknownPvp110; unsigned int pvpExp; unsigned int pvpFrontlineOverallRanks[3]; - unsigned short levels[26]; + unsigned short levels[28]; unsigned short unknown15C[9]; unsigned short u1; unsigned short u2; @@ -880,17 +881,17 @@ namespace Sapphire::Network::Packets::Server unsigned char companionAttRank; unsigned char companionHealRank; unsigned char u19[2]; - unsigned char mountGuideMask[17]; + unsigned char mountGuideMask[19]; char name[32]; unsigned char unknownOword[16]; unsigned char unknownOw; unsigned char unlockBitmask[64]; - unsigned char aetheryte[17]; - unsigned char discovery[421]; + unsigned char aetheryte[21]; + unsigned char discovery[445]; unsigned char howto[34]; - unsigned char minions[42]; - unsigned char chocoboTaxiMask[8]; - unsigned char watchedCutscenes[118]; + unsigned char minions[45]; + unsigned char chocoboTaxiMask[10]; + unsigned char watchedCutscenes[124]; unsigned char companionBardingMask[9]; unsigned char companionEquippedHead; unsigned char companionEquippedBody; From 050465bd732fb5f32c77968a964906d3bc845191 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sun, 30 Jun 2019 18:59:11 +1000 Subject: [PATCH 14/20] fix a bunch more playersetup masks --- src/common/Network/PacketDef/Zone/ServerZoneDef.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index bc188779..200e0907 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -835,13 +835,13 @@ namespace Sapphire::Network::Packets::Server unsigned char race; unsigned char tribe; unsigned char gender; + unsigned char unknown7A; unsigned char currentJob; unsigned char currentClass; unsigned char deity; unsigned char namedayMonth; unsigned char namedayDay; unsigned char cityState; - unsigned char unknown80; unsigned char homepoint; unsigned char unknown82; unsigned char petHotBar; @@ -892,21 +892,21 @@ namespace Sapphire::Network::Packets::Server unsigned char minions[45]; unsigned char chocoboTaxiMask[10]; unsigned char watchedCutscenes[124]; - unsigned char companionBardingMask[9]; + unsigned char companionBardingMask[10]; unsigned char companionEquippedHead; unsigned char companionEquippedBody; unsigned char companionEquippedLegs; unsigned char unknown52A[4]; unsigned char unknownMask52E[11]; - unsigned char fishingGuideMask[89]; - unsigned char fishingSpotVisited[25]; - unsigned char unknown59A[15]; - unsigned char unknown5A9[5]; + unsigned char fishingGuideMask[105]; + unsigned char fishingSpotVisited[31]; + unsigned char unknown59A[27]; + unsigned char unknown5A9[7]; unsigned char beastRank[11]; unsigned char unknownPvp5AB[11]; unsigned char unknown5B9[5]; - unsigned char unknown5B91; unsigned char pose; + unsigned char unknown5B91; unsigned char challengeLogComplete[9]; unsigned char weaponPose; unsigned char unknownMask673[10]; From 0efcfefa8c56f312f58bc6e2caf908bbd0099da7 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sun, 30 Jun 2019 19:51:18 +1000 Subject: [PATCH 15/20] cap level to 80, enable shadowbringers, new mp calc --- src/common/Common.h | 3 + src/world/Action/Action.cpp | 2 +- src/world/Actor/Player.cpp | 2 +- src/world/Math/CalcStats.cpp | 100 +++--------------- src/world/Math/CalcStats.h | 9 -- .../PacketWrappers/PlayerSetupPacket.h | 4 +- 6 files changed, 23 insertions(+), 97 deletions(-) diff --git a/src/common/Common.h b/src/common/Common.h index 5965228f..05463273 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -21,6 +21,9 @@ namespace Sapphire::Common const int32_t INVALID_GAME_OBJECT_ID = 0xE0000000; const uint64_t INVALID_GAME_OBJECT_ID64 = 0xE0000000; + const uint16_t MAX_PLAYER_LEVEL = 80; + const uint8_t CURRENT_EXPANSION_ID = 3; + /*! * @brief The maximum length (in ms) of a combo before it is canceled/voided. * diff --git a/src/world/Action/Action.cpp b/src/world/Action/Action.cpp index e4d67f4d..ba1665d0 100644 --- a/src/world/Action/Action.cpp +++ b/src/world/Action/Action.cpp @@ -466,7 +466,7 @@ bool Action::Action::primaryCostCheck( bool subtractCosts ) { auto curMp = m_pSource->getMp(); - auto cost = Math::CalcStats::calculateMpCost( *m_pSource, m_primaryCost ); + auto cost = m_primaryCost * 100; if( curMp < cost ) return false; diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index adab91ab..f51d4eb0 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -695,7 +695,7 @@ void Sapphire::Entity::Player::gainExp( uint32_t amount ) queuePacket( makeActorControl143( getId(), GainExpMsg, static_cast< uint8_t >( getClass() ), amount ) ); - if( level >= 70 ) // temporary fix for leveling over levelcap + if( level >= Common::MAX_PLAYER_LEVEL ) // temporary fix for leveling over levelcap { queuePacket( makeActorControl143( getId(), UpdateUiExp, static_cast< uint8_t >( getClass() ), amount ) ); return; diff --git a/src/world/Math/CalcStats.cpp b/src/world/Math/CalcStats.cpp index b455b48a..f3cbc566 100644 --- a/src/world/Math/CalcStats.cpp +++ b/src/world/Math/CalcStats.cpp @@ -15,7 +15,7 @@ using namespace Sapphire::Math; using namespace Sapphire::Entity; -const int levelTable[71][7] = +const int levelTable[81][7] = { // PIE, MP, MAIN,SUB,DIV,HP,ELMT,THREAT { 1, 1, 1, 1, 1, 1, 1 }, @@ -88,7 +88,19 @@ const int levelTable[71][7] = { 830, 10560, 268, 361, 1643, 3300, 292 }, { 860, 10980, 276, 362, 1802, 3400, 293 }, { 890, 11450, 284, 363, 1978, 3500, 294 }, - { 890, 12000, 292, 364, 2170, 3600, 295 } + { 890, 12000, 292, 364, 2170, 3600, 295 }, + + // todo: add proper shbr values + { 890, 12000, 292, 364, 2170, 3600, 295 }, + { 890, 12000, 292, 364, 2170, 3600, 295 }, + { 890, 12000, 292, 364, 2170, 3600, 295 }, + { 890, 12000, 292, 364, 2170, 3600, 295 }, + { 890, 12000, 292, 364, 2170, 3600, 295 }, + { 890, 12000, 292, 364, 2170, 3600, 295 }, + { 890, 12000, 292, 364, 2170, 3600, 295 }, + { 890, 12000, 292, 364, 2170, 3600, 295 }, + { 890, 12000, 292, 364, 2170, 3600, 295 }, + { 890, 12000, 292, 364, 2170, 3600, 295 }, }; /* @@ -115,8 +127,8 @@ float CalcStats::calculateBaseStat( const Chara& chara ) float base = 0.0f; uint8_t level = chara.getLevel(); - if( level > 70 ) - level = 70; + if( level > Common::MAX_PLAYER_LEVEL ) + level = Common::MAX_PLAYER_LEVEL; return static_cast< float >( levelTable[level][2] ); } @@ -187,86 +199,6 @@ uint32_t CalcStats::calculateMaxMp( PlayerPtr pPlayer, Sapphire::FrameworkPtr pF return result; } -uint16_t CalcStats::calculateMpCost( const Sapphire::Entity::Chara& chara, uint16_t baseCost ) -{ - auto level = chara.getLevel(); - - // each level range is 1-10, 11-20, 21-30, ... therefore: - // level 50 should be in the 4th group, not the 5t - // dividing by 10 on the border will break this unless we subtract 1 - auto levelGroup = std::max< uint8_t >( level - 1, 1 ) / 10; - - float cost = baseCost; - - // thanks to andrew for helping me figure this shit out - // played with this some more and it seems to be accurate for everything i've tried - switch( levelGroup ) - { - // level 1-10 - case 0: - { - // r^2 = 0.9999 - cost = 0.0952f * level + 0.9467f; - break; - } - - // level 11-20 - case 1: - { - // r^2 = 1 - cost = 0.19f * level; - break; - } - - // level 21-30 - case 2: - { - // r^2 = 1 - cost = 0.38f * level - 3.8f; - break; - } - - // level 31-40 - case 3: - { - // r^2 = 1 - cost = 0.6652f * level - 12.358f; - break; - } - - // level 41-50 - case 4: - { - // r^2 = 1 - cost = 1.2352f * level - 35.159f; - break; - } - - // level 51-60 - case 5: - { - // r^2 = 1 - cost = 0.0654f * std::exp( 0.1201f * level ); - break; - } - - // level 61-70 - case 6: - { - // r^2 = 0.9998 - cost = 0.2313f * ( level * level ) - 26.98f * level + 875.21f; - break; - } - - default: - { - return 0; - } - } - - return static_cast< uint16_t >( std::round( cost * baseCost ) ); -} - float CalcStats::blockProbability( const Chara& chara ) { auto level = chara.getLevel(); diff --git a/src/world/Math/CalcStats.h b/src/world/Math/CalcStats.h index 92402124..ad8a086f 100644 --- a/src/world/Math/CalcStats.h +++ b/src/world/Math/CalcStats.h @@ -19,15 +19,6 @@ namespace Sapphire::Math static uint32_t calculateMaxHp( Sapphire::Entity::PlayerPtr pPlayer, FrameworkPtr pFw ); - /*! - * @brief Calculates the MP cost of a spell given its base cost - * - * @param chara The Chara that is casting the action - * @param baseCost The action cost - * @return The total MP to be consumed by a successful cast - */ - static uint16_t calculateMpCost( const Sapphire::Entity::Chara& chara, uint16_t baseCost ); - /*! * @brief Calculates the probability of a block happening */ diff --git a/src/world/Network/PacketWrappers/PlayerSetupPacket.h b/src/world/Network/PacketWrappers/PlayerSetupPacket.h index bc2ca1e0..2424e651 100644 --- a/src/world/Network/PacketWrappers/PlayerSetupPacket.h +++ b/src/world/Network/PacketWrappers/PlayerSetupPacket.h @@ -71,8 +71,8 @@ namespace Sapphire::Network::Packets::Server memcpy( m_data.howto, player.getHowToArray(), sizeof( m_data.howto ) ); // possibly max level or current level - m_data.maxLevel = 0x46; - m_data.expansion = 2; + m_data.maxLevel = Common::MAX_PLAYER_LEVEL; + m_data.expansion = Common::CURRENT_EXPANSION_ID; // df stuff // todo: actually do this properly From 9e862b022c7d9192426573179a9d13dffccd3901 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sun, 30 Jun 2019 20:05:58 +1000 Subject: [PATCH 16/20] #565: add cancel logout opcode --- src/common/Network/PacketDef/Ipcs.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 754b1bf4..ae64deb3 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -269,6 +269,7 @@ namespace Sapphire::Network::Packets CFRegisterRoulette = 0x0072, PlayTimeHandler = 0x0073, // unchanged 4.5 LogoutHandler = 0x0074, // unchanged 4.5 + CancelLogout = 0x0075, // updated 5.0 CFDutyInfoHandler = 0x0078, // updated 4.2 From eefc9ab7a7fddc27d9a3ca52735cb4c40f47260d Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sun, 30 Jun 2019 20:06:14 +1000 Subject: [PATCH 17/20] more client opcode updates --- src/common/Network/PacketDef/Ipcs.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index ae64deb3..24126682 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -257,18 +257,18 @@ namespace Sapphire::Network::Packets enum ClientZoneIpcType : uint16_t { - PingHandler = 0x0065, // unchanged 4.5 - InitHandler = 0x0066, // unchanged 4.5 + PingHandler = 0x0065, // unchanged 5.0 + InitHandler = 0x0066, // unchanged 5.0 - FinishLoadingHandler = 0x0069, // unchanged 4.5 + FinishLoadingHandler = 0x0069, // unchanged 5.0 CFCommenceHandler = 0x006F, CFRegisterDuty = 0x0071, CFRegisterRoulette = 0x0072, - PlayTimeHandler = 0x0073, // unchanged 4.5 - LogoutHandler = 0x0074, // unchanged 4.5 + PlayTimeHandler = 0x0073, // unchanged 5.0 + LogoutHandler = 0x0074, // unchanged 5.0 CancelLogout = 0x0075, // updated 5.0 CFDutyInfoHandler = 0x0078, // updated 4.2 @@ -283,8 +283,9 @@ namespace Sapphire::Network::Packets ReqSearchInfoHandler = 0x00E6, // updated 5.0 ReqExamineSearchCommentHandler = 0x00E7, // updated 5.0 + ReqRemovePlayerFromBlacklist = 0x00F1, // updated 5.0 BlackListHandler = 0x00F2, // updated 5.0 - PlayerSearchHandler = 0x00E6, // updated 4.5 + PlayerSearchHandler = 0x00F4, // updated 5.0 LinkshellListHandler = 0x00FA, // updated 5.0 From 8e688a48715e9bc1a80dd5103bbcbae7a279bf8c Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sun, 30 Jun 2019 20:22:22 +1000 Subject: [PATCH 18/20] fix #565: add retainer item sale price packet opcode --- src/common/Network/PacketDef/Ipcs.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 24126682..06321639 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -149,6 +149,9 @@ namespace Sapphire::Network::Packets Examine = 0x0197, // updated 5.0 CharaNameReq = 0x0198, // updated 5.0 + // nb: see #565 on github + UpdateRetainerItemSalePrice = 0x019D, // updated 5.0 + SetLevelSync = 0x1186, // not updated for 4.4, not sure what it is anymore ItemInfo = 0x01A1, // updated 5.0 From d3337bbec79fbdbdf1555da124cdfc0aa4f8e405 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sun, 30 Jun 2019 20:47:39 +1000 Subject: [PATCH 19/20] more opcode fixes --- src/common/Network/PacketDef/Ipcs.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 06321639..2f3d180d 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -156,13 +156,13 @@ namespace Sapphire::Network::Packets ItemInfo = 0x01A1, // updated 5.0 ContainerInfo = 0x01A2, // updated 5.0 - InventoryTransactionFinish = 0x0198, // updated 4.5 - InventoryTransaction = 0x0199, // updated 4.5 + InventoryTransactionFinish = 0x01A3, // updated 5.0 + InventoryTransaction = 0x01A4, // updated 5.0 CurrencyCrystalInfo = 0x01A5, // updated 5.0 - InventoryActionAck = 0x019D, // updated 4.5 - UpdateInventorySlot = 0x019E, // updated 4.5 + InventoryActionAck = 0x01A7, // updated 5.0 + UpdateInventorySlot = 0x01A8, // updated 5.0 HuntingLogEntry = 0x01B3, // updated 5.0 @@ -233,16 +233,17 @@ namespace Sapphire::Network::Packets DuelChallenge = 0x0277, // 4.2; this is responsible for opening the ui PerformNote = 0x0286, // updated 4.3 - PrepareZoning = 0x0299, // updated 4.5 + PrepareZoning = 0x02A4, // updated 5.0 ActorGauge = 0x0292, // updated 4.3 // Unknown IPC types that still need to be sent // TODO: figure all these out properly - IPCTYPE_UNK_320 = 0x025E, // updated 4.5 - IPCTYPE_UNK_322 = 0x0260, // updated 4.5 + // daily quest related, init seed and current quota probably + IPCTYPE_UNK_320 = 0x025E, // updated 5.0 + IPCTYPE_UNK_322 = 0x0260, // updated 5.0 /// Doman Mahjong ////////////////////////////////////// - MahjongOpenGui = 0x02BC, // only available in mahjong instance + MahjongOpenGui = 0x02A4, // only available in mahjong instance MahjongNextRound = 0x02BD, // initial hands(baipai), # of riichi(wat), winds, honba, score and stuff MahjongPlayerAction = 0x02BE, // tsumo(as in drawing a tile) called chi/pon/kan/riichi MahjongEndRoundTsumo = 0x02BF, // called tsumo From b558b45b046055ecc5331ad4e97d2d373e910702 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sun, 30 Jun 2019 21:08:51 +1000 Subject: [PATCH 20/20] add some new blacklist opcodes, fix mail opcodes --- src/common/Network/PacketDef/Ipcs.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 2f3d180d..196c747c 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -73,6 +73,8 @@ namespace Sapphire::Network::Packets SocialRequestResponse = 0x00BB, // updated 4.1 CancelAllianceForming = 0x00C6, // updated 4.2 + LogMessage = 0x00D0, + Chat = 0x0104, // updated 5.0 WorldVisitList = 0x00FE, // added 4.5 @@ -90,17 +92,17 @@ namespace Sapphire::Network::Packets CountdownInitiate = 0x011E, // updated 5.0 CountdownCancel = 0x011F, // updated 5.0 - BlackList = 0x0121, // updated 5.0 - - LogMessage = 0x00D0, - + PlayerAddedToBlacklist = 0x0120, // updated 5.0 + PlayerRemovedFromBlacklist = 0x0121, // updated 5.0 + BlackList = 0x0123, // updated 5.0 + LinkshellList = 0x012A, // updated 5.0 MailDeleteRequest = 0x012B, // updated 5.0 // 12D - 137 - constant gap between 4.5x -> 5.0 ReqMoogleMailList = 0x0138, // updated 5.0 - ReqMoogleMailLetter = 0x0122, // unchanged 5.0??? - MailLetterNotification = 0x0123, // unchanged 5.0??? + ReqMoogleMailLetter = 0x0139, // updated 5.0 + MailLetterNotification = 0x013A, // updated 5.0 MarketBoardItemListingCount = 0x0125, // updated 4.5 MarketBoardItemListing = 0x0126, // updated 4.5