diff --git a/deps/mysqlConnector/Connection.cpp b/deps/mysqlConnector/Connection.cpp index 9b317dc9..a1c2a58e 100644 --- a/deps/mysqlConnector/Connection.cpp +++ b/deps/mysqlConnector/Connection.cpp @@ -4,6 +4,7 @@ #include "PreparedStatement.h" #include +#include #include Mysql::Connection::Connection( std::shared_ptr< MySqlBase > pBase, diff --git a/deps/mysqlConnector/Connection.h b/deps/mysqlConnector/Connection.h index 1283ead5..e09bda69 100644 --- a/deps/mysqlConnector/Connection.h +++ b/deps/mysqlConnector/Connection.h @@ -3,6 +3,7 @@ #include #include +#include #include "MysqlCommon.h" typedef struct st_mysql MYSQL; diff --git a/src/api/PlayerMinimal.h b/src/api/PlayerMinimal.h index d51251c2..47b902b3 100644 --- a/src/api/PlayerMinimal.h +++ b/src/api/PlayerMinimal.h @@ -3,7 +3,8 @@ #include #include -#include +#include // ? +#include namespace Sapphire::Api { diff --git a/src/common/Common.h b/src/common/Common.h index 7bb57000..a78728e4 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -27,6 +27,8 @@ namespace Sapphire::Common const uint8_t CLASSJOB_TOTAL = 38; const uint8_t CLASSJOB_SLOTS = 28; + const uint8_t TOWN_COUNT = 6; + /*! * @brief The maximum length (in ms) of a combo before it is canceled/voided. * @@ -214,6 +216,8 @@ namespace Sapphire::Common HandIn = 2005, DamagedGear = 2007, //UNKNOWN_1 = 2008, + // Temporary inventory that is used for the "trade" window + TradeInventory = 2009, ArmoryOff = 3200, ArmoryHead = 3201, @@ -232,6 +236,9 @@ namespace Sapphire::Common SaddleBag0 = 4000, SaddleBag1 = 4001, + // These are the ones you get when paying for premium companion app + PremiumSaddleBag0 = 4100, + PremiumSaddleBag1 = 4101, RetainerBag0 = 10000, RetainerBag1 = 10001, diff --git a/src/common/Database/DbCommon.h b/src/common/Database/DbCommon.h index 89d537b6..d702ce72 100644 --- a/src/common/Database/DbCommon.h +++ b/src/common/Database/DbCommon.h @@ -1,6 +1,8 @@ #ifndef SAPPHIRE_DBCOMMON_H #define SAPPHIRE_DBCOMMON_H +#include + namespace Sapphire::Db { struct ConnectionInfo diff --git a/src/common/Exd/ExdDataGenerated.cpp b/src/common/Exd/ExdDataGenerated.cpp index f5f038aa..a04c621e 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< uint8_t >( row, 20 ); + achievementHideCondition = exdData->getField< uint8_t >( row, 20 ); } Sapphire::Data::AchievementCategory::AchievementCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -33,6 +33,14 @@ Sapphire::Data::AchievementCategory::AchievementCategory( uint32_t row_id, Sapph hideCategory = exdData->getField< bool >( row, 3 ); } +Sapphire::Data::AchievementHideCondition::AchievementHideCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_AchievementHideConditionDat.get_row( row_id ); + hideAchievement = exdData->getField< bool >( row, 0 ); + hideName = exdData->getField< bool >( row, 1 ); + hideConditions = exdData->getField< bool >( row, 2 ); +} + Sapphire::Data::AchievementKind::AchievementKind( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_AchievementKindDat.get_row( row_id ); @@ -50,6 +58,7 @@ Sapphire::Data::Action::Action( uint32_t row_id, Sapphire::Data::ExdDataGenerate animationEnd = exdData->getField< int16_t >( row, 7 ); actionTimelineHit = exdData->getField< uint16_t >( row, 8 ); classJob = exdData->getField< int8_t >( row, 10 ); + behaviourType = exdData->getField< uint8_t >( row, 11 ); classJobLevel = exdData->getField< uint8_t >( row, 12 ); isRoleAction = exdData->getField< bool >( row, 13 ); range = exdData->getField< int8_t >( row, 14 ); @@ -71,6 +80,7 @@ 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 ); + maxCharges = exdData->getField< uint8_t >( row, 41 ); attackType = exdData->getField< int8_t >( row, 42 ); aspect = exdData->getField< uint8_t >( row, 43 ); actionProcStatus = exdData->getField< uint8_t >( row, 44 ); @@ -78,7 +88,7 @@ Sapphire::Data::Action::Action( uint32_t row_id, Sapphire::Data::ExdDataGenerate 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 ); + omen = exdData->getField< uint16_t >( row, 52 ); isPvP = exdData->getField< bool >( row, 53 ); isPlayerAction = exdData->getField< bool >( row, 65 ); } @@ -197,14 +207,6 @@ Sapphire::Data::Addon::Addon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* text = exdData->getField< std::string >( row, 0 ); } -Sapphire::Data::AddonHud::AddonHud( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) -{ - auto row = exdData->m_AddonHudDat.get_row( row_id ); - _long = exdData->getField< std::string >( row, 0 ); - _short = exdData->getField< std::string >( row, 1 ); - function = exdData->getField< std::string >( row, 2 ); -} - Sapphire::Data::Adventure::Adventure( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_AdventureDat.get_row( row_id ); @@ -284,11 +286,11 @@ Sapphire::Data::Aetheryte::Aetheryte( uint32_t row_id, Sapphire::Data::ExdDataGe level.push_back( exdData->getField< uint32_t >( row, 13 ) ); level.push_back( exdData->getField< uint32_t >( row, 14 ) ); isAetheryte = exdData->getField< bool >( row, 15 ); - aethernetGroup = exdData->getField< uint8_t >( row, 16 ); - requiredQuest = exdData->getField< uint32_t >( row, 18 ); - map = exdData->getField< uint16_t >( row, 19 ); - aetherstreamX = exdData->getField< int16_t >( row, 20 ); - aetherstreamY = exdData->getField< int16_t >( row, 21 ); + aethernetGroup = exdData->getField< uint8_t >( row, 17 ); + requiredQuest = exdData->getField< uint32_t >( row, 19 ); + map = exdData->getField< uint16_t >( row, 20 ); + aetherstreamX = exdData->getField< int16_t >( row, 21 ); + aetherstreamY = exdData->getField< int16_t >( row, 22 ); } Sapphire::Data::AetheryteSystemDefine::AetheryteSystemDefine( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -674,6 +676,35 @@ Sapphire::Data::Behavior::Behavior( uint32_t row_id, uint32_t subRow, Sapphire:: balloon = exdData->getField< uint16_t >( row, 7 ); } +Sapphire::Data::BenchmarkOverrideEquipment::BenchmarkOverrideEquipment( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_BenchmarkOverrideEquipmentDat.get_row( row_id ); + modelMainHand = exdData->getField< uint64_t >( row, 4 ); + dyeMainHand = exdData->getField< uint8_t >( row, 5 ); + modelOffHand = exdData->getField< uint64_t >( row, 6 ); + dyeOffHand = exdData->getField< uint8_t >( row, 7 ); + modelHead = exdData->getField< uint32_t >( row, 10 ); + dyeHead = exdData->getField< uint8_t >( row, 11 ); + modelBody = exdData->getField< uint32_t >( row, 12 ); + dyeBody = exdData->getField< uint8_t >( row, 13 ); + modelHands = exdData->getField< uint32_t >( row, 14 ); + dyeHands = exdData->getField< uint8_t >( row, 15 ); + modelLegs = exdData->getField< uint32_t >( row, 16 ); + dyeLegs = exdData->getField< uint8_t >( row, 17 ); + modelFeet = exdData->getField< uint32_t >( row, 18 ); + dyeFeet = exdData->getField< uint8_t >( row, 19 ); + modelEars = exdData->getField< uint32_t >( row, 20 ); + dyeEars = exdData->getField< uint8_t >( row, 21 ); + modelNeck = exdData->getField< uint32_t >( row, 22 ); + dyeNeck = exdData->getField< uint8_t >( row, 23 ); + modelWrists = exdData->getField< uint32_t >( row, 24 ); + dyeWrists = exdData->getField< uint8_t >( row, 25 ); + modelLeftRing = exdData->getField< uint32_t >( row, 26 ); + dyeLeftRing = exdData->getField< uint8_t >( row, 27 ); + modelRightRing = exdData->getField< uint32_t >( row, 28 ); + dyeRightRing = exdData->getField< uint8_t >( row, 29 ); +} + Sapphire::Data::BGM::BGM( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_BGMDat.get_row( row_id ); @@ -955,6 +986,7 @@ Sapphire::Data::Calendar::Calendar( uint32_t row_id, Sapphire::Data::ExdDataGene Sapphire::Data::CharaMakeCustomize::CharaMakeCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_CharaMakeCustomizeDat.get_row( row_id ); + featureID = exdData->getField< uint8_t >( row, 0 ); icon = exdData->getField< uint32_t >( row, 1 ); data = exdData->getField< uint16_t >( row, 2 ); isPurchasable = exdData->getField< bool >( row, 3 ); @@ -966,6 +998,8 @@ 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 ) ); @@ -1115,6 +1149,7 @@ Sapphire::Data::ClassJob::ClassJob( uint32_t row_id, Sapphire::Data::ExdDataGene abbreviation = exdData->getField< std::string >( row, 1 ); classJobCategory = exdData->getField< uint8_t >( row, 3 ); expArrayIndex = exdData->getField< int8_t >( row, 4 ); + jobIndex = exdData->getField< uint8_t >( row, 7 ); modifierHitPoints = exdData->getField< uint16_t >( row, 9 ); modifierManaPoints = exdData->getField< uint16_t >( row, 10 ); modifierStrength = exdData->getField< uint16_t >( row, 11 ); @@ -1132,6 +1167,7 @@ Sapphire::Data::ClassJob::ClassJob( uint32_t row_id, Sapphire::Data::ExdDataGene limitBreak1 = exdData->getField< uint16_t >( row, 34 ); limitBreak2 = exdData->getField< uint16_t >( row, 35 ); limitBreak3 = exdData->getField< uint16_t >( row, 36 ); + uIPriority = exdData->getField< uint8_t >( row, 37 ); itemSoulCrystal = exdData->getField< uint32_t >( row, 38 ); unlockQuest = exdData->getField< uint32_t >( row, 39 ); relicQuest = exdData->getField< uint32_t >( row, 40 ); @@ -1139,6 +1175,7 @@ Sapphire::Data::ClassJob::ClassJob( uint32_t row_id, Sapphire::Data::ExdDataGene startingLevel = exdData->getField< uint8_t >( row, 42 ); partyBonus = exdData->getField< uint8_t >( row, 43 ); isLimitedJob = exdData->getField< bool >( row, 44 ); + canQueueForDuty = exdData->getField< bool >( row, 45 ); } Sapphire::Data::ClassJobCategory::ClassJobCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -1181,6 +1218,9 @@ Sapphire::Data::ClassJobCategory::ClassJobCategory( uint32_t row_id, Sapphire::D aST = exdData->getField< bool >( row, 34 ); sAM = exdData->getField< bool >( row, 35 ); rDM = exdData->getField< bool >( row, 36 ); + bLU = exdData->getField< bool >( row, 37 ); + gNB = exdData->getField< bool >( row, 38 ); + dNC = exdData->getField< bool >( row, 39 ); } Sapphire::Data::Companion::Companion( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -1383,6 +1423,7 @@ Sapphire::Data::ContentFinderCondition::ContentFinderCondition( uint32_t row_id, classJobLevelSync = exdData->getField< uint8_t >( row, 16 ); itemLevelRequired = exdData->getField< uint16_t >( row, 17 ); itemLevelSync = exdData->getField< uint16_t >( row, 18 ); + allowUndersized = exdData->getField< bool >( row, 19 ); allowReplacement = exdData->getField< bool >( row, 20 ); highEndDuty = exdData->getField< bool >( row, 26 ); dutyRecorderAllowed = exdData->getField< bool >( row, 30 ); @@ -1450,6 +1491,12 @@ Sapphire::Data::ContentNpcTalk::ContentNpcTalk( uint32_t row_id, Sapphire::Data: contentTalk.push_back( exdData->getField< uint32_t >( row, 8 ) ); } +Sapphire::Data::ContentRandomSelect::ContentRandomSelect( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ContentRandomSelectDat.get_row( row_id, subRow ); + name = exdData->getField< uint16_t >( row, 0 ); +} + Sapphire::Data::ContentRoulette::ContentRoulette( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_ContentRouletteDat.get_row( row_id ); @@ -1556,6 +1603,14 @@ Sapphire::Data::CraftLeve::CraftLeve( uint32_t row_id, Sapphire::Data::ExdDataGe repeats = exdData->getField< uint8_t >( row, 2 ); } +Sapphire::Data::CraftLevelDifference::CraftLevelDifference( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_CraftLevelDifferenceDat.get_row( row_id ); + difference = exdData->getField< int16_t >( row, 0 ); + progressFactor = exdData->getField< int16_t >( row, 1 ); + qualityFactor = exdData->getField< int16_t >( row, 2 ); +} + Sapphire::Data::CraftType::CraftType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_CraftTypeDat.get_row( row_id ); @@ -1710,6 +1765,43 @@ Sapphire::Data::DailySupplyItem::DailySupplyItem( uint32_t row_id, Sapphire::Dat auto row = exdData->m_DailySupplyItemDat.get_row( row_id ); } +Sapphire::Data::DawnContent::DawnContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DawnContentDat.get_row( row_id ); + content = exdData->getField< uint32_t >( row, 0 ); + exp = exdData->getField< uint32_t >( row, 1 ); +} + +Sapphire::Data::DawnGrowMember::DawnGrowMember( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DawnGrowMemberDat.get_row( row_id ); + member = exdData->getField< uint32_t >( row, 0 ); + imageName = exdData->getField< uint32_t >( row, 1 ); + bigImageOld = exdData->getField< uint32_t >( row, 2 ); + bigImageNew = exdData->getField< uint32_t >( row, 3 ); + smallImageOld = exdData->getField< uint32_t >( row, 4 ); + smallImageNew = exdData->getField< uint32_t >( row, 5 ); + _class = exdData->getField< uint8_t >( row, 6 ); +} + +Sapphire::Data::DawnMemberUIParam::DawnMemberUIParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DawnMemberUIParamDat.get_row( row_id ); + classSingular = exdData->getField< std::string >( row, 0 ); + voiceLine = exdData->getField< uint32_t >( row, 1 ); + classPlural = exdData->getField< std::string >( row, 2 ); +} + +Sapphire::Data::DawnQuestMember::DawnQuestMember( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_DawnQuestMemberDat.get_row( row_id ); + member = exdData->getField< uint32_t >( row, 0 ); + imageName = exdData->getField< uint32_t >( row, 1 ); + bigImageOld = exdData->getField< uint32_t >( row, 2 ); + bigImageNew = exdData->getField< uint32_t >( row, 3 ); + _class = exdData->getField< uint8_t >( row, 4 ); +} + Sapphire::Data::DeepDungeon::DeepDungeon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_DeepDungeonDat.get_row( row_id ); @@ -1846,23 +1938,23 @@ Sapphire::Data::DeliveryQuest::DeliveryQuest( uint32_t row_id, Sapphire::Data::E Sapphire::Data::DescriptionPage::DescriptionPage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_DescriptionPageDat.get_row( row_id, subRow ); - text1 = exdData->getField< uint32_t >( row, 1 ); + text1 = exdData->getField< uint16_t >( row, 1 ); image1 = exdData->getField< uint32_t >( row, 2 ); - text2 = exdData->getField< uint32_t >( row, 3 ); + text2 = exdData->getField< uint16_t >( row, 3 ); image2 = exdData->getField< uint32_t >( row, 4 ); - text3 = exdData->getField< uint32_t >( row, 5 ); + text3 = exdData->getField< uint16_t >( row, 5 ); image3 = exdData->getField< uint32_t >( row, 6 ); - text4 = exdData->getField< uint32_t >( row, 7 ); + text4 = exdData->getField< uint16_t >( row, 7 ); image4 = exdData->getField< uint32_t >( row, 8 ); - text5 = exdData->getField< uint32_t >( row, 9 ); + text5 = exdData->getField< uint16_t >( row, 9 ); image5 = exdData->getField< uint32_t >( row, 10 ); - text6 = exdData->getField< uint32_t >( row, 11 ); + text6 = exdData->getField< uint16_t >( row, 11 ); image6 = exdData->getField< uint32_t >( row, 12 ); - text7 = exdData->getField< uint32_t >( row, 13 ); + text7 = exdData->getField< uint16_t >( row, 13 ); image7 = exdData->getField< uint32_t >( row, 14 ); - text8 = exdData->getField< uint32_t >( row, 15 ); + text8 = exdData->getField< uint16_t >( row, 15 ); image8 = exdData->getField< uint32_t >( row, 16 ); - text9 = exdData->getField< uint32_t >( row, 17 ); + text9 = exdData->getField< uint16_t >( row, 17 ); image9 = exdData->getField< uint32_t >( row, 18 ); } @@ -2325,13 +2417,23 @@ Sapphire::Data::Fate::Fate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* e 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 ) ); + name = exdData->getField< std::string >( row, 26 ); + description = exdData->getField< std::string >( row, 27 ); + objective = exdData->getField< std::string >( row, 28 ); statusText.push_back( exdData->getField< std::string >( row, 29 ) ); statusText.push_back( exdData->getField< std::string >( row, 30 ) ); - arrayIndex = exdData->getField< uint32_t >( row, 31 ); + statusText.push_back( exdData->getField< std::string >( row, 31 ) ); + arrayIndex = exdData->getField< uint32_t >( row, 32 ); +} + +Sapphire::Data::FateProgressUI::FateProgressUI( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FateProgressUIDat.get_row( row_id ); + location = exdData->getField< int32_t >( row, 0 ); + achievement = exdData->getField< int32_t >( row, 1 ); + reqFatesToRank2 = exdData->getField< uint8_t >( row, 2 ); + reqFatesToRank3 = exdData->getField< uint8_t >( row, 3 ); + displayOrder = exdData->getField< uint8_t >( row, 4 ); } Sapphire::Data::FCActivity::FCActivity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -2522,6 +2624,20 @@ Sapphire::Data::Frontline04::Frontline04( uint32_t row_id, Sapphire::Data::ExdDa unknownLevel.push_back( exdData->getField< int32_t >( row, 32 ) ); } +Sapphire::Data::FurnitureCatalogCategory::FurnitureCatalogCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FurnitureCatalogCategoryDat.get_row( row_id ); + category = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::FurnitureCatalogItemList::FurnitureCatalogItemList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FurnitureCatalogItemListDat.get_row( row_id ); + category = exdData->getField< uint16_t >( row, 0 ); + item = exdData->getField< int32_t >( row, 1 ); + patch = exdData->getField< uint16_t >( row, 2 ); +} + Sapphire::Data::GardeningSeed::GardeningSeed( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_GardeningSeedDat.get_row( row_id ); @@ -2538,7 +2654,7 @@ Sapphire::Data::GatheringCondition::GatheringCondition( uint32_t row_id, Sapphir Sapphire::Data::GatheringExp::GatheringExp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_GatheringExpDat.get_row( row_id ); - exp = exdData->getField< uint16_t >( row, 0 ); + exp = exdData->getField< int32_t >( row, 0 ); } Sapphire::Data::GatheringItem::GatheringItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -3047,6 +3163,32 @@ Sapphire::Data::GuardianDeity::GuardianDeity( uint32_t row_id, Sapphire::Data::E icon = exdData->getField< uint16_t >( row, 2 ); } +Sapphire::Data::Guide::Guide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GuideDat.get_row( row_id ); + guideTitle = exdData->getField< uint16_t >( row, 0 ); + guidePage = exdData->getField< uint16_t >( row, 1 ); +} + +Sapphire::Data::GuidePage::GuidePage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GuidePageDat.get_row( row_id, subRow ); + key = exdData->getField< uint8_t >( row, 0 ); + output = exdData->getField< uint32_t >( row, 1 ); +} + +Sapphire::Data::GuidePageString::GuidePageString( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GuidePageStringDat.get_row( row_id ); + string = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::GuideTitle::GuideTitle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_GuideTitleDat.get_row( row_id ); + title = exdData->getField< std::string >( row, 0 ); +} + Sapphire::Data::GuildleveAssignment::GuildleveAssignment( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_GuildleveAssignmentDat.get_row( row_id ); @@ -3447,6 +3589,60 @@ Sapphire::Data::HowToPage::HowToPage( uint32_t row_id, Sapphire::Data::ExdDataGe image = exdData->getField< int32_t >( row, 2 ); } +Sapphire::Data::HugeCraftworksNpc::HugeCraftworksNpc( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HugeCraftworksNpcDat.get_row( row_id ); + eNpcResident = exdData->getField< uint32_t >( row, 0 ); + classJobCategory = exdData->getField< uint16_t >( row, 1 ); + itemRequested.push_back( exdData->getField< uint32_t >( row, 3 ) ); + itemRequested.push_back( exdData->getField< uint32_t >( row, 4 ) ); + itemRequested.push_back( exdData->getField< uint32_t >( row, 5 ) ); + itemRequested.push_back( exdData->getField< uint32_t >( row, 6 ) ); + qtyRequested.push_back( exdData->getField< uint8_t >( row, 9 ) ); + qtyRequested.push_back( exdData->getField< uint8_t >( row, 10 ) ); + qtyRequested.push_back( exdData->getField< uint8_t >( row, 11 ) ); + qtyRequested.push_back( exdData->getField< uint8_t >( row, 12 ) ); + itemReward.push_back( exdData->getField< uint32_t >( row, 52 ) ); + itemReward.push_back( exdData->getField< uint32_t >( row, 53 ) ); + itemReward.push_back( exdData->getField< uint32_t >( row, 54 ) ); + itemReward.push_back( exdData->getField< uint32_t >( row, 55 ) ); + qtyItemReward.push_back( exdData->getField< uint8_t >( row, 64 ) ); + qtyItemReward.push_back( exdData->getField< uint8_t >( row, 65 ) ); + qtyItemReward.push_back( exdData->getField< uint8_t >( row, 66 ) ); + qtyItemReward.push_back( exdData->getField< uint8_t >( row, 67 ) ); + itemUnkown.push_back( exdData->getField< uint32_t >( row, 70 ) ); + itemUnkown.push_back( exdData->getField< uint32_t >( row, 71 ) ); + itemUnkown.push_back( exdData->getField< uint32_t >( row, 72 ) ); + itemUnkown.push_back( exdData->getField< uint32_t >( row, 73 ) ); + qtyItemUnkown.push_back( exdData->getField< uint8_t >( row, 82 ) ); + qtyItemUnkown.push_back( exdData->getField< uint8_t >( row, 83 ) ); + qtyItemUnkown.push_back( exdData->getField< uint8_t >( row, 84 ) ); + qtyItemUnkown.push_back( exdData->getField< uint8_t >( row, 85 ) ); + transient = exdData->getField< std::string >( row, 86 ); +} + +Sapphire::Data::HugeCraftworksRank::HugeCraftworksRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_HugeCraftworksRankDat.get_row( row_id ); + crafterLevel = exdData->getField< uint8_t >( row, 0 ); + expRewardPerItem = exdData->getField< uint32_t >( row, 1 ); +} + +Sapphire::Data::IndividualWeather::IndividualWeather( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_IndividualWeatherDat.get_row( row_id ); + weather.push_back( exdData->getField< uint8_t >( row, 0 ) ); + weather.push_back( exdData->getField< uint8_t >( row, 1 ) ); + weather.push_back( exdData->getField< uint8_t >( row, 2 ) ); + weather.push_back( exdData->getField< uint8_t >( row, 3 ) ); + weather.push_back( exdData->getField< uint8_t >( row, 4 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 10 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 11 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 12 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 13 ) ); + quest.push_back( exdData->getField< uint32_t >( row, 14 ) ); +} + Sapphire::Data::InstanceContent::InstanceContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_InstanceContentDat.get_row( row_id ); @@ -3541,35 +3737,35 @@ Sapphire::Data::Item::Item( uint32_t row_id, Sapphire::Data::ExdDataGenerated* e itemGlamour = exdData->getField< int32_t >( row, 34 ); salvage = exdData->getField< uint16_t >( row, 35 ); isCollectable = exdData->getField< bool >( row, 36 ); - aetherialReduce = exdData->getField< uint16_t >( row, 37 ); - levelEquip = exdData->getField< uint8_t >( row, 38 ); - equipRestriction = exdData->getField< uint8_t >( row, 40 ); - classJobCategory = exdData->getField< uint8_t >( row, 41 ); - grandCompany = exdData->getField< uint8_t >( row, 42 ); - itemSeries = exdData->getField< uint8_t >( row, 43 ); - baseParamModifier = exdData->getField< uint8_t >( row, 44 ); - modelMain = exdData->getField< uint64_t >( row, 45 ); - modelSub = exdData->getField< uint64_t >( row, 46 ); - classJobUse = exdData->getField< uint8_t >( row, 47 ); - damagePhys = exdData->getField< uint16_t >( row, 49 ); - damageMag = exdData->getField< uint16_t >( row, 50 ); - delayms = exdData->getField< uint16_t >( row, 51 ); - blockRate = exdData->getField< uint16_t >( row, 53 ); - block = exdData->getField< uint16_t >( row, 54 ); - defensePhys = exdData->getField< uint16_t >( row, 55 ); - defenseMag = exdData->getField< uint16_t >( row, 56 ); - itemSpecialBonus = exdData->getField< uint8_t >( row, 69 ); - itemSpecialBonusParam = exdData->getField< uint8_t >( row, 70 ); - materializeType = exdData->getField< uint8_t >( row, 83 ); - materiaSlotCount = exdData->getField< uint8_t >( row, 84 ); - isAdvancedMeldingPermitted = exdData->getField< bool >( row, 85 ); - isPvP = exdData->getField< bool >( row, 86 ); - isGlamourous = exdData->getField< bool >( row, 88 ); + aetherialReduce = exdData->getField< uint16_t >( row, 38 ); + levelEquip = exdData->getField< uint8_t >( row, 39 ); + equipRestriction = exdData->getField< uint8_t >( row, 41 ); + classJobCategory = exdData->getField< uint8_t >( row, 42 ); + grandCompany = exdData->getField< uint8_t >( row, 43 ); + itemSeries = exdData->getField< uint8_t >( row, 44 ); + baseParamModifier = exdData->getField< uint8_t >( row, 45 ); + modelMain = exdData->getField< uint64_t >( row, 46 ); + modelSub = exdData->getField< uint64_t >( row, 47 ); + classJobUse = exdData->getField< uint8_t >( row, 48 ); + damagePhys = exdData->getField< uint16_t >( row, 50 ); + damageMag = exdData->getField< uint16_t >( row, 51 ); + delayms = exdData->getField< uint16_t >( row, 52 ); + blockRate = exdData->getField< uint16_t >( row, 54 ); + block = exdData->getField< uint16_t >( row, 55 ); + defensePhys = exdData->getField< uint16_t >( row, 56 ); + defenseMag = exdData->getField< uint16_t >( row, 57 ); + itemSpecialBonus = exdData->getField< uint8_t >( row, 70 ); + itemSpecialBonusParam = exdData->getField< uint8_t >( row, 71 ); + materializeType = exdData->getField< uint8_t >( row, 84 ); + materiaSlotCount = exdData->getField< uint8_t >( row, 85 ); + isAdvancedMeldingPermitted = exdData->getField< bool >( row, 86 ); + isPvP = exdData->getField< bool >( row, 87 ); + isGlamourous = exdData->getField< bool >( row, 89 ); for( int i = 0; i < 6; ++i ) { - param[i].baseparam = exdData->getField< uint8_t >( row, 57 + i * 2 ); - param[i].value = exdData->getField< int16_t >( row, 58 + i * 2 ); + param[i].baseparam = exdData->getField< uint8_t >( row, 58 + i * 2 ); + param[i].value = exdData->getField< int16_t >( row, 59 + i * 2 ); } } @@ -3712,6 +3908,21 @@ Sapphire::Data::ItemUICategory::ItemUICategory( uint32_t row_id, Sapphire::Data: orderMajor = exdData->getField< uint8_t >( row, 3 ); } +Sapphire::Data::JobHudManual::JobHudManual( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_JobHudManualDat.get_row( row_id ); + action = exdData->getField< uint32_t >( row, 2 ); + guide = exdData->getField< uint16_t >( row, 5 ); +} + +Sapphire::Data::JobHudManualPriority::JobHudManualPriority( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_JobHudManualPriorityDat.get_row( row_id ); + jobHudManual.push_back( exdData->getField< uint8_t >( row, 0 ) ); + jobHudManual.push_back( exdData->getField< uint8_t >( row, 1 ) ); + jobHudManual.push_back( exdData->getField< uint8_t >( row, 2 ) ); +} + Sapphire::Data::JournalCategory::JournalCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_JournalCategoryDat.get_row( row_id ); @@ -3916,19 +4127,19 @@ Sapphire::Data::ManeuversArmor::ManeuversArmor( uint32_t row_id, Sapphire::Data: Sapphire::Data::Map::Map( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_MapDat.get_row( row_id ); - mapIndex = exdData->getField< int8_t >( row, 2 ); - hierarchy = exdData->getField< uint8_t >( row, 3 ); - mapMarkerRange = exdData->getField< uint16_t >( row, 4 ); - id = exdData->getField< std::string >( row, 5 ); - sizeFactor = exdData->getField< uint16_t >( row, 6 ); - offsetX = exdData->getField< int16_t >( row, 7 ); - offsetY = exdData->getField< int16_t >( row, 8 ); - placeNameRegion = exdData->getField< uint16_t >( row, 9 ); - placeName = exdData->getField< uint16_t >( row, 10 ); - placeNameSub = exdData->getField< uint16_t >( row, 11 ); - discoveryIndex = exdData->getField< int16_t >( row, 12 ); - territoryType = exdData->getField< uint16_t >( row, 14 ); - discoveryArrayByte = exdData->getField< bool >( row, 15 ); + mapIndex = exdData->getField< int8_t >( row, 3 ); + hierarchy = exdData->getField< uint8_t >( row, 4 ); + mapMarkerRange = exdData->getField< uint16_t >( row, 5 ); + id = exdData->getField< std::string >( row, 6 ); + sizeFactor = exdData->getField< uint16_t >( row, 7 ); + offsetX = exdData->getField< int16_t >( row, 8 ); + offsetY = exdData->getField< int16_t >( row, 9 ); + placeNameRegion = exdData->getField< uint16_t >( row, 10 ); + placeName = exdData->getField< uint16_t >( row, 11 ); + placeNameSub = exdData->getField< uint16_t >( row, 12 ); + discoveryIndex = exdData->getField< int16_t >( row, 13 ); + territoryType = exdData->getField< uint16_t >( row, 15 ); + discoveryArrayByte = exdData->getField< bool >( row, 16 ); } Sapphire::Data::MapMarker::MapMarker( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) @@ -4008,6 +4219,32 @@ Sapphire::Data::Materia::Materia( uint32_t row_id, Sapphire::Data::ExdDataGenera value.push_back( exdData->getField< uint8_t >( row, 20 ) ); } +Sapphire::Data::MateriaJoinRate::MateriaJoinRate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MateriaJoinRateDat.get_row( row_id ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 0 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 1 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 2 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 3 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 4 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 5 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 6 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 7 ) ); +} + +Sapphire::Data::MateriaJoinRateGatherCraft::MateriaJoinRateGatherCraft( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MateriaJoinRateGatherCraftDat.get_row( row_id ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 0 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 1 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 2 ) ); + NQOvermeldSlot.push_back( exdData->getField< float >( row, 3 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 4 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 5 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 6 ) ); + HQOvermeldSlot.push_back( exdData->getField< float >( row, 7 ) ); +} + Sapphire::Data::MiniGameRA::MiniGameRA( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_MiniGameRADat.get_row( row_id ); @@ -4034,11 +4271,35 @@ Sapphire::Data::MinionSkillType::MinionSkillType( uint32_t row_id, Sapphire::Dat name = exdData->getField< std::string >( row, 0 ); } +Sapphire::Data::MobHuntOrder::MobHuntOrder( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MobHuntOrderDat.get_row( row_id, subRow ); + target = exdData->getField< uint16_t >( row, 0 ); + stars = exdData->getField< uint8_t >( row, 1 ); + mobHuntReward = exdData->getField< uint8_t >( row, 4 ); +} + Sapphire::Data::MobHuntOrderType::MobHuntOrderType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_MobHuntOrderTypeDat.get_row( row_id ); quest = exdData->getField< uint32_t >( row, 1 ); eventItem = exdData->getField< uint32_t >( row, 2 ); + orderStart = exdData->getField< uint16_t >( row, 3 ); + orderAmount = exdData->getField< uint8_t >( row, 4 ); +} + +Sapphire::Data::MobHuntReward::MobHuntReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MobHuntRewardDat.get_row( row_id ); + expReward = exdData->getField< uint32_t >( row, 0 ); + gilReward = exdData->getField< uint16_t >( row, 1 ); + currencyReward = exdData->getField< uint16_t >( row, 3 ); +} + +Sapphire::Data::MobHuntRewardCap::MobHuntRewardCap( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MobHuntRewardCapDat.get_row( row_id ); + expCap = exdData->getField< uint32_t >( row, 0 ); } Sapphire::Data::MobHuntTarget::MobHuntTarget( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -4132,18 +4393,38 @@ 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< uint16_t >( row, 1 ); + hyurFemaleScale = exdData->getField< uint16_t >( row, 2 ); + elezenMaleScale = exdData->getField< uint16_t >( row, 3 ); + elezenFemaleScale = exdData->getField< uint16_t >( row, 4 ); + lalaMaleScale = exdData->getField< uint16_t >( row, 5 ); + lalaFemaleScale = exdData->getField< uint16_t >( row, 6 ); + miqoMaleScale = exdData->getField< uint16_t >( row, 7 ); + miqoFemaleScale = exdData->getField< uint16_t >( row, 8 ); + roeMaleScale = exdData->getField< uint16_t >( row, 9 ); + roeFemaleScale = exdData->getField< uint16_t >( row, 10 ); + auRaMaleScale = exdData->getField< uint16_t >( row, 11 ); + auRaFemaleScale = exdData->getField< uint16_t >( row, 12 ); + hrothgarMaleScale = exdData->getField< uint16_t >( row, 13 ); + hrothgarFemaleScale = exdData->getField< uint16_t >( row, 14 ); + vieraMaleScale = exdData->getField< uint16_t >( row, 15 ); + vieraFemaleScale = exdData->getField< uint16_t >( row, 16 ); 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 ); + elezenMaleCameraHeight = exdData->getField< uint8_t >( row, 19 ); + elezenFemaleCameraHeight = exdData->getField< uint8_t >( row, 20 ); + lalaMaleCameraHeight = exdData->getField< uint8_t >( row, 21 ); + lalaFemaleCameraHeight = exdData->getField< uint8_t >( row, 22 ); + miqoMaleCameraHeight = exdData->getField< uint8_t >( row, 23 ); + miqoFemaleCameraHeight = exdData->getField< uint8_t >( row, 24 ); + roeMaleCameraHeight = exdData->getField< uint8_t >( row, 25 ); + roeFemaleCameraHeight = exdData->getField< uint8_t >( row, 26 ); + auRaMaleCameraHeight = exdData->getField< uint8_t >( row, 27 ); + auRaFemaleCameraHeight = exdData->getField< uint8_t >( row, 28 ); + hrothgarMaleCameraHeight = exdData->getField< uint8_t >( row, 29 ); + hrothgarRoeFemaleCameraHeight = exdData->getField< uint8_t >( row, 30 ); + vieraMaleCameraHeight = exdData->getField< uint8_t >( row, 31 ); + vieraFemaleCameraHeight = exdData->getField< uint8_t >( row, 32 ); } Sapphire::Data::MountFlyingCondition::MountFlyingCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -4201,6 +4482,14 @@ Sapphire::Data::NotebookDivisionCategory::NotebookDivisionCategory( uint32_t row name = exdData->getField< std::string >( row, 0 ); } +Sapphire::Data::NotoriousMonster::NotoriousMonster( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_NotoriousMonsterDat.get_row( row_id ); + bNpcBase = exdData->getField< int32_t >( row, 0 ); + rank = exdData->getField< uint8_t >( row, 1 ); + bNpcName = exdData->getField< uint32_t >( row, 2 ); +} + Sapphire::Data::NpcEquip::NpcEquip( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_NpcEquipDat.get_row( row_id ); @@ -4251,6 +4540,49 @@ Sapphire::Data::OnlineStatus::OnlineStatus( uint32_t row_id, Sapphire::Data::Exd icon = exdData->getField< uint32_t >( row, 4 ); } +Sapphire::Data::OpenContent::OpenContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_OpenContentDat.get_row( row_id ); + content.push_back( exdData->getField< uint16_t >( row, 0 ) ); + content.push_back( exdData->getField< uint16_t >( row, 1 ) ); + content.push_back( exdData->getField< uint16_t >( row, 2 ) ); + content.push_back( exdData->getField< uint16_t >( row, 3 ) ); + content.push_back( exdData->getField< uint16_t >( row, 4 ) ); + content.push_back( exdData->getField< uint16_t >( row, 5 ) ); + content.push_back( exdData->getField< uint16_t >( row, 6 ) ); + content.push_back( exdData->getField< uint16_t >( row, 7 ) ); + content.push_back( exdData->getField< uint16_t >( row, 8 ) ); + content.push_back( exdData->getField< uint16_t >( row, 9 ) ); + content.push_back( exdData->getField< uint16_t >( row, 10 ) ); + content.push_back( exdData->getField< uint16_t >( row, 11 ) ); + content.push_back( exdData->getField< uint16_t >( row, 12 ) ); + content.push_back( exdData->getField< uint16_t >( row, 13 ) ); + content.push_back( exdData->getField< uint16_t >( row, 14 ) ); + content.push_back( exdData->getField< uint16_t >( row, 15 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 16 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 17 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 18 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 19 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 20 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 21 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 22 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 23 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 24 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 25 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 26 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 27 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 28 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 29 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 30 ) ); + candidateName.push_back( exdData->getField< uint32_t >( row, 31 ) ); +} + +Sapphire::Data::OpenContentCandidateName::OpenContentCandidateName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_OpenContentCandidateNameDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + Sapphire::Data::Opening::Opening( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_OpeningDat.get_row( row_id ); @@ -4297,6 +4629,7 @@ Sapphire::Data::ParamGrow::ParamGrow( uint32_t row_id, Sapphire::Data::ExdDataGe hpModifier = exdData->getField< uint16_t >( row, 8 ); huntingLogExpReward = exdData->getField< int32_t >( row, 9 ); itemLevelSync = exdData->getField< uint16_t >( row, 11 ); + craftingLevel = exdData->getField< uint16_t >( row, 14 ); } Sapphire::Data::PartyContent::PartyContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) @@ -4492,15 +4825,14 @@ Sapphire::Data::Quest::Quest( uint32_t row_id, Sapphire::Data::ExdDataGenerated* 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 ) ); + behavior = exdData->getField< uint32_t >( row, 40 ); + 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 ); 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 ) ); @@ -4550,7 +4882,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 ) ); - scriptArg.push_back( exdData->getField< uint32_t >( row, 99 ) ); + scriptInstruction.push_back( exdData->getField< std::string >( 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 ) ); @@ -4600,7 +4932,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 ) ); - actorSpawnSeq.push_back( exdData->getField< uint8_t >( row, 149 ) ); + scriptArg.push_back( exdData->getField< uint32_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 ) ); @@ -4664,7 +4996,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 ) ); - actorDespawnSeq.push_back( exdData->getField< uint8_t >( row, 213 ) ); + actorSpawnSeq.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 ) ); @@ -4728,7 +5060,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 ) ); - actorSpawn.push_back( exdData->getField< uint32_t >( row, 277 ) ); + actorDespawnSeq.push_back( exdData->getField< uint8_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 ) ); @@ -4792,7 +5124,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 ) ); - questUInt8A.push_back( exdData->getField< uint8_t >( row, 341 ) ); + actorSpawn.push_back( exdData->getField< uint32_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 ) ); @@ -4824,7 +5156,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 ) ); - questUInt8B.push_back( exdData->getField< uint8_t >( row, 373 ) ); + questUInt8A.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 ) ); @@ -4856,7 +5188,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 ) ); - toDoCompleteSeq.push_back( exdData->getField< uint8_t >( row, 1173 ) ); + questUInt8B.push_back( exdData->getField< uint8_t >( row, 405 ) ); 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 ) ); @@ -4880,7 +5212,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 ) ); - toDoQty.push_back( exdData->getField< uint8_t >( row, 1197 ) ); + toDoCompleteSeq.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 ) ); @@ -4904,7 +5236,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 ) ); - toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1221 ) ); + toDoQty.push_back( exdData->getField< uint8_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 ) ); @@ -4928,76 +5260,78 @@ 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 ) ); - classJobRequired = exdData->getField< uint8_t >( row, 1438 ); - expFactor = exdData->getField< uint16_t >( row, 1440 ); - gilReward = exdData->getField< uint32_t >( row, 1441 ); - gCSeals = exdData->getField< uint16_t >( row, 1443 ); - itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1444 ) ); + toDoMainLocation.push_back( exdData->getField< uint32_t >( row, 1245 ) ); + classJobRequired = exdData->getField< uint8_t >( row, 1439 ); + expFactor = exdData->getField< uint16_t >( row, 1441 ); + gilReward = exdData->getField< uint32_t >( row, 1442 ); + gCSeals = exdData->getField< uint16_t >( row, 1444 ); itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1445 ) ); itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1446 ) ); - itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1447 ) ); + itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1447 ) ); itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1448 ) ); itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1449 ) ); - itemRewardType = exdData->getField< uint8_t >( row, 1450 ); - itemReward0.push_back( exdData->getField< uint32_t >( row, 1451 ) ); + itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1450 ) ); + itemRewardType = exdData->getField< uint8_t >( row, 1451 ); itemReward0.push_back( exdData->getField< uint32_t >( row, 1452 ) ); itemReward0.push_back( exdData->getField< uint32_t >( row, 1453 ) ); itemReward0.push_back( exdData->getField< uint32_t >( row, 1454 ) ); itemReward0.push_back( exdData->getField< uint32_t >( row, 1455 ) ); itemReward0.push_back( exdData->getField< uint32_t >( row, 1456 ) ); - itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1458 ) ); + itemReward0.push_back( exdData->getField< uint32_t >( row, 1457 ) ); itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1459 ) ); itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1460 ) ); itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1461 ) ); itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1462 ) ); itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1463 ) ); - stainReward0.push_back( exdData->getField< uint8_t >( row, 1465 ) ); + itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1464 ) ); stainReward0.push_back( exdData->getField< uint8_t >( row, 1466 ) ); stainReward0.push_back( exdData->getField< uint8_t >( row, 1467 ) ); stainReward0.push_back( exdData->getField< uint8_t >( row, 1468 ) ); stainReward0.push_back( exdData->getField< uint8_t >( row, 1469 ) ); stainReward0.push_back( exdData->getField< uint8_t >( row, 1470 ) ); - itemReward1.push_back( exdData->getField< uint32_t >( row, 1472 ) ); + stainReward0.push_back( exdData->getField< uint8_t >( row, 1471 ) ); itemReward1.push_back( exdData->getField< uint32_t >( row, 1473 ) ); itemReward1.push_back( exdData->getField< uint32_t >( row, 1474 ) ); itemReward1.push_back( exdData->getField< uint32_t >( row, 1475 ) ); itemReward1.push_back( exdData->getField< uint32_t >( row, 1476 ) ); - itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1477 ) ); + itemReward1.push_back( exdData->getField< uint32_t >( row, 1477 ) ); itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1478 ) ); itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1479 ) ); itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1480 ) ); itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1481 ) ); - isHQReward1.push_back( exdData->getField< bool >( row, 1482 ) ); + itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1482 ) ); isHQReward1.push_back( exdData->getField< bool >( row, 1483 ) ); isHQReward1.push_back( exdData->getField< bool >( row, 1484 ) ); isHQReward1.push_back( exdData->getField< bool >( row, 1485 ) ); isHQReward1.push_back( exdData->getField< bool >( row, 1486 ) ); - stainReward1.push_back( exdData->getField< uint8_t >( row, 1487 ) ); + isHQReward1.push_back( exdData->getField< bool >( row, 1487 ) ); stainReward1.push_back( exdData->getField< uint8_t >( row, 1488 ) ); stainReward1.push_back( exdData->getField< uint8_t >( row, 1489 ) ); stainReward1.push_back( exdData->getField< uint8_t >( row, 1490 ) ); stainReward1.push_back( exdData->getField< uint8_t >( row, 1491 ) ); - emoteReward = exdData->getField< uint8_t >( row, 1492 ); - actionReward = exdData->getField< uint16_t >( row, 1493 ); - generalActionReward.push_back( exdData->getField< uint8_t >( row, 1494 ) ); + stainReward1.push_back( exdData->getField< uint8_t >( row, 1492 ) ); + emoteReward = exdData->getField< uint8_t >( row, 1493 ); + actionReward = exdData->getField< uint16_t >( row, 1494 ); generalActionReward.push_back( exdData->getField< uint8_t >( row, 1495 ) ); - otherReward = exdData->getField< uint8_t >( row, 1497 ); - instanceContentUnlock = exdData->getField< uint32_t >( row, 1500 ); - tomestoneReward = exdData->getField< uint8_t >( row, 1502 ); - tomestoneCountReward = exdData->getField< uint8_t >( row, 1503 ); - reputationReward = exdData->getField< uint8_t >( row, 1504 ); - placeName = exdData->getField< uint16_t >( row, 1505 ); - journalGenre = exdData->getField< uint8_t >( row, 1506 ); - icon = exdData->getField< uint32_t >( row, 1508 ); - iconSpecial = exdData->getField< uint32_t >( row, 1509 ); - eventIconType = exdData->getField< uint8_t >( row, 1512 ); - sortKey = exdData->getField< uint16_t >( row, 1514 ); + generalActionReward.push_back( exdData->getField< uint8_t >( row, 1496 ) ); + otherReward = exdData->getField< uint8_t >( row, 1498 ); + instanceContentUnlock = exdData->getField< uint32_t >( row, 1501 ); + tomestoneReward = exdData->getField< uint8_t >( row, 1503 ); + tomestoneCountReward = exdData->getField< uint8_t >( row, 1504 ); + reputationReward = exdData->getField< uint8_t >( row, 1505 ); + placeName = exdData->getField< uint16_t >( row, 1506 ); + journalGenre = exdData->getField< uint8_t >( row, 1507 ); + icon = exdData->getField< uint32_t >( row, 1509 ); + iconSpecial = exdData->getField< uint32_t >( row, 1510 ); + eventIconType = exdData->getField< uint8_t >( row, 1513 ); + sortKey = exdData->getField< uint16_t >( row, 1515 ); } Sapphire::Data::QuestBattle::QuestBattle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_QuestBattleDat.get_row( row_id ); quest = exdData->getField< int32_t >( row, 0 ); + questBattleScene = exdData->getField< uint8_t >( row, 1 ); timeLimit = exdData->getField< uint16_t >( row, 2 ); levelSync = exdData->getField< uint16_t >( row, 3 ); scriptInstruction.push_back( exdData->getField< std::string >( row, 4 ) ); @@ -5536,6 +5870,7 @@ Sapphire::Data::Recipe::Recipe( uint32_t row_id, Sapphire::Data::ExdDataGenerate itemResult = exdData->getField< int32_t >( row, 3 ); amountResult = exdData->getField< uint8_t >( row, 4 ); isSecondary = exdData->getField< bool >( row, 26 ); + materialQualityFactor = exdData->getField< uint8_t >( row, 27 ); difficultyFactor = exdData->getField< uint16_t >( row, 28 ); qualityFactor = exdData->getField< uint16_t >( row, 29 ); durabilityFactor = exdData->getField< uint16_t >( row, 30 ); @@ -5559,6 +5894,7 @@ Sapphire::Data::RecipeLevelTable::RecipeLevelTable( uint32_t row_id, Sapphire::D classJobLevel = exdData->getField< uint8_t >( row, 0 ); stars = exdData->getField< uint8_t >( row, 1 ); suggestedCraftsmanship = exdData->getField< uint16_t >( row, 2 ); + suggestedControl = exdData->getField< uint16_t >( row, 3 ); difficulty = exdData->getField< uint16_t >( row, 4 ); quality = exdData->getField< uint32_t >( row, 5 ); durability = exdData->getField< uint16_t >( row, 6 ); @@ -5985,6 +6321,19 @@ Sapphire::Data::SkyIsland2RangeType::SkyIsland2RangeType( uint32_t row_id, Sapph type = exdData->getField< uint8_t >( row, 0 ); } +Sapphire::Data::SnipeTalk::SnipeTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_SnipeTalkDat.get_row( row_id ); + name = exdData->getField< uint16_t >( row, 2 ); + text = exdData->getField< std::string >( row, 3 ); +} + +Sapphire::Data::SnipeTalkName::SnipeTalkName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_SnipeTalkNameDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); +} + Sapphire::Data::SpearfishingItem::SpearfishingItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_SpearfishingItemDat.get_row( row_id ); @@ -6336,6 +6685,13 @@ Sapphire::Data::SubmarineExploration::SubmarineExploration( uint32_t row_id, Sap expReward = exdData->getField< uint32_t >( row, 12 ); } +Sapphire::Data::SubmarineMap::SubmarineMap( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_SubmarineMapDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + image = exdData->getField< uint32_t >( row, 1 ); +} + Sapphire::Data::SubmarinePart::SubmarinePart( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_SubmarinePartDat.get_row( row_id ); @@ -6402,6 +6758,7 @@ Sapphire::Data::TerritoryType::TerritoryType( uint32_t row_id, Sapphire::Data::E placeNameZone = exdData->getField< uint16_t >( row, 4 ); placeName = exdData->getField< uint16_t >( row, 5 ); map = exdData->getField< uint16_t >( row, 6 ); + loadingImage = exdData->getField< uint8_t >( row, 7 ); territoryIntendedUse = exdData->getField< uint8_t >( row, 9 ); weatherRate = exdData->getField< uint8_t >( row, 12 ); placeNameRegionIcon = exdData->getField< int32_t >( row, 20 ); @@ -6816,6 +7173,20 @@ Sapphire::Data::WorldDCGroupType::WorldDCGroupType( uint32_t row_id, Sapphire::D region = exdData->getField< uint8_t >( row, 1 ); } +Sapphire::Data::YardCatalogCategory::YardCatalogCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_YardCatalogCategoryDat.get_row( row_id ); + category = exdData->getField< std::string >( row, 0 ); +} + +Sapphire::Data::YardCatalogItemList::YardCatalogItemList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_YardCatalogItemListDat.get_row( row_id ); + category = exdData->getField< uint16_t >( row, 0 ); + item = exdData->getField< int32_t >( row, 1 ); + patch = exdData->getField< uint16_t >( row, 2 ); +} + Sapphire::Data::YKW::YKW( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_YKWDat.get_row( row_id ); @@ -6872,6 +7243,7 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_AchievementDat = setupDatAccess( "Achievement", xiv::exd::Language::en ); m_AchievementCategoryDat = setupDatAccess( "AchievementCategory", xiv::exd::Language::en ); + m_AchievementHideConditionDat = setupDatAccess( "AchievementHideCondition", xiv::exd::Language::none ); m_AchievementKindDat = setupDatAccess( "AchievementKind", xiv::exd::Language::en ); m_ActionDat = setupDatAccess( "Action", xiv::exd::Language::en ); m_ActionCastTimelineDat = setupDatAccess( "ActionCastTimeline", xiv::exd::Language::none ); @@ -6890,7 +7262,6 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_ActivityFeedGroupCaptionsDat = setupDatAccess( "ActivityFeedGroupCaptions", xiv::exd::Language::none ); m_ActivityFeedImagesDat = setupDatAccess( "ActivityFeedImages", xiv::exd::Language::none ); m_AddonDat = setupDatAccess( "Addon", xiv::exd::Language::en ); - m_AddonHudDat = setupDatAccess( "AddonHud", xiv::exd::Language::en ); m_AdventureDat = setupDatAccess( "Adventure", xiv::exd::Language::en ); m_AdventureExPhaseDat = setupDatAccess( "AdventureExPhase", xiv::exd::Language::none ); m_AetherCurrentDat = setupDatAccess( "AetherCurrent", xiv::exd::Language::none ); @@ -6931,6 +7302,7 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_BeastReputationRankDat = setupDatAccess( "BeastReputationRank", xiv::exd::Language::en ); m_BeastTribeDat = setupDatAccess( "BeastTribe", xiv::exd::Language::en ); m_BehaviorDat = setupDatAccess( "Behavior", xiv::exd::Language::none ); + m_BenchmarkOverrideEquipmentDat = setupDatAccess( "BenchmarkOverrideEquipment", xiv::exd::Language::none ); m_BGMDat = setupDatAccess( "BGM", xiv::exd::Language::none ); m_BGMFadeDat = setupDatAccess( "BGMFade", xiv::exd::Language::none ); m_BGMSituationDat = setupDatAccess( "BGMSituation", xiv::exd::Language::none ); @@ -6989,6 +7361,7 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_ContentGaugeColorDat = setupDatAccess( "ContentGaugeColor", xiv::exd::Language::none ); m_ContentMemberTypeDat = setupDatAccess( "ContentMemberType", xiv::exd::Language::none ); m_ContentNpcTalkDat = setupDatAccess( "ContentNpcTalk", xiv::exd::Language::none ); + m_ContentRandomSelectDat = setupDatAccess( "ContentRandomSelect", xiv::exd::Language::none ); m_ContentRouletteDat = setupDatAccess( "ContentRoulette", xiv::exd::Language::en ); m_ContentRouletteOpenRuleDat = setupDatAccess( "ContentRouletteOpenRule", xiv::exd::Language::none ); m_ContentRouletteRoleBonusDat = setupDatAccess( "ContentRouletteRoleBonus", xiv::exd::Language::none ); @@ -6998,6 +7371,7 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_ContentTypeDat = setupDatAccess( "ContentType", xiv::exd::Language::en ); m_CraftActionDat = setupDatAccess( "CraftAction", xiv::exd::Language::en ); m_CraftLeveDat = setupDatAccess( "CraftLeve", xiv::exd::Language::none ); + m_CraftLevelDifferenceDat = setupDatAccess( "CraftLevelDifference", xiv::exd::Language::none ); m_CraftTypeDat = setupDatAccess( "CraftType", xiv::exd::Language::en ); m_CreditDat = setupDatAccess( "Credit", xiv::exd::Language::none ); m_CreditBackImageDat = setupDatAccess( "CreditBackImage", xiv::exd::Language::none ); @@ -7011,6 +7385,10 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_CutsceneDat = setupDatAccess( "Cutscene", xiv::exd::Language::none ); m_CutScreenImageDat = setupDatAccess( "CutScreenImage", xiv::exd::Language::none ); m_DailySupplyItemDat = setupDatAccess( "DailySupplyItem", xiv::exd::Language::none ); + m_DawnContentDat = setupDatAccess( "DawnContent", xiv::exd::Language::none ); + m_DawnGrowMemberDat = setupDatAccess( "DawnGrowMember", xiv::exd::Language::none ); + m_DawnMemberUIParamDat = setupDatAccess( "DawnMemberUIParam", xiv::exd::Language::en ); + m_DawnQuestMemberDat = setupDatAccess( "DawnQuestMember", xiv::exd::Language::none ); m_DeepDungeonDat = setupDatAccess( "DeepDungeon", xiv::exd::Language::en ); m_DeepDungeonBanDat = setupDatAccess( "DeepDungeonBan", xiv::exd::Language::none ); m_DeepDungeonDangerDat = setupDatAccess( "DeepDungeonDanger", xiv::exd::Language::none ); @@ -7063,6 +7441,7 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_ExportedSGDat = setupDatAccess( "ExportedSG", xiv::exd::Language::none ); m_ExVersionDat = setupDatAccess( "ExVersion", xiv::exd::Language::en ); m_FateDat = setupDatAccess( "Fate", xiv::exd::Language::en ); + m_FateProgressUIDat = setupDatAccess( "FateProgressUI", xiv::exd::Language::none ); m_FCActivityDat = setupDatAccess( "FCActivity", xiv::exd::Language::en ); m_FCActivityCategoryDat = setupDatAccess( "FCActivityCategory", xiv::exd::Language::en ); m_FCAuthorityDat = setupDatAccess( "FCAuthority", xiv::exd::Language::en ); @@ -7081,6 +7460,8 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_FishParameterDat = setupDatAccess( "FishParameter", xiv::exd::Language::en ); m_Frontline03Dat = setupDatAccess( "Frontline03", xiv::exd::Language::none ); m_Frontline04Dat = setupDatAccess( "Frontline04", xiv::exd::Language::none ); + m_FurnitureCatalogCategoryDat = setupDatAccess( "FurnitureCatalogCategory", xiv::exd::Language::en ); + m_FurnitureCatalogItemListDat = setupDatAccess( "FurnitureCatalogItemList", xiv::exd::Language::none ); m_GardeningSeedDat = setupDatAccess( "GardeningSeed", xiv::exd::Language::none ); m_GatheringConditionDat = setupDatAccess( "GatheringCondition", xiv::exd::Language::en ); m_GatheringExpDat = setupDatAccess( "GatheringExp", xiv::exd::Language::none ); @@ -7128,6 +7509,10 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_GrandCompanyDat = setupDatAccess( "GrandCompany", xiv::exd::Language::en ); m_GrandCompanyRankDat = setupDatAccess( "GrandCompanyRank", xiv::exd::Language::none ); m_GuardianDeityDat = setupDatAccess( "GuardianDeity", xiv::exd::Language::en ); + m_GuideDat = setupDatAccess( "Guide", xiv::exd::Language::none ); + m_GuidePageDat = setupDatAccess( "GuidePage", xiv::exd::Language::none ); + m_GuidePageStringDat = setupDatAccess( "GuidePageString", xiv::exd::Language::en ); + m_GuideTitleDat = setupDatAccess( "GuideTitle", 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 ); @@ -7151,6 +7536,9 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_HowToDat = setupDatAccess( "HowTo", xiv::exd::Language::en ); m_HowToCategoryDat = setupDatAccess( "HowToCategory", xiv::exd::Language::en ); m_HowToPageDat = setupDatAccess( "HowToPage", xiv::exd::Language::en ); + m_HugeCraftworksNpcDat = setupDatAccess( "HugeCraftworksNpc", xiv::exd::Language::en ); + m_HugeCraftworksRankDat = setupDatAccess( "HugeCraftworksRank", xiv::exd::Language::none ); + m_IndividualWeatherDat = setupDatAccess( "IndividualWeather", xiv::exd::Language::none ); m_InstanceContentDat = setupDatAccess( "InstanceContent", xiv::exd::Language::en ); m_InstanceContentBuffDat = setupDatAccess( "InstanceContentBuff", xiv::exd::Language::none ); m_InstanceContentCSBonusDat = setupDatAccess( "InstanceContentCSBonus", xiv::exd::Language::none ); @@ -7164,6 +7552,8 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_ItemSeriesDat = setupDatAccess( "ItemSeries", xiv::exd::Language::en ); m_ItemSpecialBonusDat = setupDatAccess( "ItemSpecialBonus", xiv::exd::Language::en ); m_ItemUICategoryDat = setupDatAccess( "ItemUICategory", xiv::exd::Language::en ); + m_JobHudManualDat = setupDatAccess( "JobHudManual", xiv::exd::Language::none ); + m_JobHudManualPriorityDat = setupDatAccess( "JobHudManualPriority", xiv::exd::Language::none ); m_JournalCategoryDat = setupDatAccess( "JournalCategory", xiv::exd::Language::en ); m_JournalGenreDat = setupDatAccess( "JournalGenre", xiv::exd::Language::en ); m_JournalSectionDat = setupDatAccess( "JournalSection", xiv::exd::Language::en ); @@ -7192,11 +7582,16 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_MasterpieceSupplyDutyDat = setupDatAccess( "MasterpieceSupplyDuty", xiv::exd::Language::none ); m_MasterpieceSupplyMultiplierDat = setupDatAccess( "MasterpieceSupplyMultiplier", xiv::exd::Language::none ); m_MateriaDat = setupDatAccess( "Materia", xiv::exd::Language::none ); + m_MateriaJoinRateDat = setupDatAccess( "MateriaJoinRate", xiv::exd::Language::none ); + m_MateriaJoinRateGatherCraftDat = setupDatAccess( "MateriaJoinRateGatherCraft", xiv::exd::Language::none ); m_MiniGameRADat = setupDatAccess( "MiniGameRA", xiv::exd::Language::none ); m_MinionRaceDat = setupDatAccess( "MinionRace", xiv::exd::Language::en ); m_MinionRulesDat = setupDatAccess( "MinionRules", xiv::exd::Language::en ); m_MinionSkillTypeDat = setupDatAccess( "MinionSkillType", xiv::exd::Language::en ); + m_MobHuntOrderDat = setupDatAccess( "MobHuntOrder", xiv::exd::Language::none ); m_MobHuntOrderTypeDat = setupDatAccess( "MobHuntOrderType", xiv::exd::Language::none ); + m_MobHuntRewardDat = setupDatAccess( "MobHuntReward", xiv::exd::Language::none ); + m_MobHuntRewardCapDat = setupDatAccess( "MobHuntRewardCap", xiv::exd::Language::none ); m_MobHuntTargetDat = setupDatAccess( "MobHuntTarget", xiv::exd::Language::none ); m_ModelCharaDat = setupDatAccess( "ModelChara", xiv::exd::Language::none ); m_ModelSkeletonDat = setupDatAccess( "ModelSkeleton", xiv::exd::Language::none ); @@ -7213,10 +7608,13 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_MoveVfxDat = setupDatAccess( "MoveVfx", xiv::exd::Language::none ); m_NotebookDivisionDat = setupDatAccess( "NotebookDivision", xiv::exd::Language::en ); m_NotebookDivisionCategoryDat = setupDatAccess( "NotebookDivisionCategory", xiv::exd::Language::en ); + m_NotoriousMonsterDat = setupDatAccess( "NotoriousMonster", xiv::exd::Language::none ); m_NpcEquipDat = setupDatAccess( "NpcEquip", xiv::exd::Language::none ); m_NpcYellDat = setupDatAccess( "NpcYell", xiv::exd::Language::en ); m_OmenDat = setupDatAccess( "Omen", xiv::exd::Language::none ); m_OnlineStatusDat = setupDatAccess( "OnlineStatus", xiv::exd::Language::en ); + m_OpenContentDat = setupDatAccess( "OpenContent", xiv::exd::Language::none ); + m_OpenContentCandidateNameDat = setupDatAccess( "OpenContentCandidateName", xiv::exd::Language::en ); m_OpeningDat = setupDatAccess( "Opening", xiv::exd::Language::none ); m_OrchestrionDat = setupDatAccess( "Orchestrion", xiv::exd::Language::en ); m_OrchestrionCategoryDat = setupDatAccess( "OrchestrionCategory", xiv::exd::Language::en ); @@ -7288,6 +7686,8 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_SkyIsland2MissionDetailDat = setupDatAccess( "SkyIsland2MissionDetail", xiv::exd::Language::en ); m_SkyIsland2MissionTypeDat = setupDatAccess( "SkyIsland2MissionType", xiv::exd::Language::none ); m_SkyIsland2RangeTypeDat = setupDatAccess( "SkyIsland2RangeType", xiv::exd::Language::none ); + m_SnipeTalkDat = setupDatAccess( "SnipeTalk", xiv::exd::Language::en ); + m_SnipeTalkNameDat = setupDatAccess( "SnipeTalkName", xiv::exd::Language::en ); m_SpearfishingItemDat = setupDatAccess( "SpearfishingItem", xiv::exd::Language::en ); m_SpearfishingNotebookDat = setupDatAccess( "SpearfishingNotebook", xiv::exd::Language::none ); m_SpearfishingRecordPageDat = setupDatAccess( "SpearfishingRecordPage", xiv::exd::Language::none ); @@ -7300,6 +7700,7 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_StatusLoopVFXDat = setupDatAccess( "StatusLoopVFX", xiv::exd::Language::none ); m_StoryDat = setupDatAccess( "Story", xiv::exd::Language::none ); m_SubmarineExplorationDat = setupDatAccess( "SubmarineExploration", xiv::exd::Language::en ); + m_SubmarineMapDat = setupDatAccess( "SubmarineMap", xiv::exd::Language::en ); m_SubmarinePartDat = setupDatAccess( "SubmarinePart", xiv::exd::Language::none ); m_SubmarineRankDat = setupDatAccess( "SubmarineRank", xiv::exd::Language::none ); m_SwitchTalkDat = setupDatAccess( "SwitchTalk", xiv::exd::Language::none ); @@ -7346,6 +7747,8 @@ bool Sapphire::Data::ExdDataGenerated::init( const std::string& path ) m_WeeklyLotBonusDat = setupDatAccess( "WeeklyLotBonus", xiv::exd::Language::none ); m_WorldDat = setupDatAccess( "World", xiv::exd::Language::none ); m_WorldDCGroupTypeDat = setupDatAccess( "WorldDCGroupType", xiv::exd::Language::none ); + m_YardCatalogCategoryDat = setupDatAccess( "YardCatalogCategory", xiv::exd::Language::en ); + m_YardCatalogItemListDat = setupDatAccess( "YardCatalogItemList", xiv::exd::Language::none ); m_YKWDat = setupDatAccess( "YKW", xiv::exd::Language::en ); m_ZoneSharedGroupDat = setupDatAccess( "ZoneSharedGroup", xiv::exd::Language::none ); diff --git a/src/common/Exd/ExdDataGenerated.h b/src/common/Exd/ExdDataGenerated.h index 5c93319f..c116c729 100644 --- a/src/common/Exd/ExdDataGenerated.h +++ b/src/common/Exd/ExdDataGenerated.h @@ -20,6 +20,7 @@ class ExdDataGenerated; struct Achievement; struct AchievementCategory; +struct AchievementHideCondition; struct AchievementKind; struct Action; struct ActionCastTimeline; @@ -38,7 +39,6 @@ struct ActivityFeedCaptions; struct ActivityFeedGroupCaptions; struct ActivityFeedImages; struct Addon; -struct AddonHud; struct Adventure; struct AdventureExPhase; struct AetherCurrent; @@ -79,6 +79,7 @@ struct BeastRankBonus; struct BeastReputationRank; struct BeastTribe; struct Behavior; +struct BenchmarkOverrideEquipment; struct BGM; struct BGMFade; struct BGMSituation; @@ -137,6 +138,7 @@ struct ContentGauge; struct ContentGaugeColor; struct ContentMemberType; struct ContentNpcTalk; +struct ContentRandomSelect; struct ContentRoulette; struct ContentRouletteOpenRule; struct ContentRouletteRoleBonus; @@ -146,6 +148,7 @@ struct ContentTalkParam; struct ContentType; struct CraftAction; struct CraftLeve; +struct CraftLevelDifference; struct CraftType; struct Credit; struct CreditBackImage; @@ -159,6 +162,10 @@ struct CustomTalkNestHandlers; struct Cutscene; struct CutScreenImage; struct DailySupplyItem; +struct DawnContent; +struct DawnGrowMember; +struct DawnMemberUIParam; +struct DawnQuestMember; struct DeepDungeon; struct DeepDungeonBan; struct DeepDungeonDanger; @@ -211,6 +218,7 @@ struct EventItemTimeline; struct ExportedSG; struct ExVersion; struct Fate; +struct FateProgressUI; struct FCActivity; struct FCActivityCategory; struct FCAuthority; @@ -229,6 +237,8 @@ struct FishingSpot; struct FishParameter; struct Frontline03; struct Frontline04; +struct FurnitureCatalogCategory; +struct FurnitureCatalogItemList; struct GardeningSeed; struct GatheringCondition; struct GatheringExp; @@ -276,6 +286,10 @@ struct GoldSaucerTextData; struct GrandCompany; struct GrandCompanyRank; struct GuardianDeity; +struct Guide; +struct GuidePage; +struct GuidePageString; +struct GuideTitle; struct GuildleveAssignment; struct GuildleveAssignmentCategory; struct GuildOrder; @@ -299,6 +313,9 @@ struct HousingYardObject; struct HowTo; struct HowToCategory; struct HowToPage; +struct HugeCraftworksNpc; +struct HugeCraftworksRank; +struct IndividualWeather; struct InstanceContent; struct InstanceContentBuff; struct InstanceContentCSBonus; @@ -312,6 +329,8 @@ struct ItemSearchCategory; struct ItemSeries; struct ItemSpecialBonus; struct ItemUICategory; +struct JobHudManual; +struct JobHudManualPriority; struct JournalCategory; struct JournalGenre; struct JournalSection; @@ -340,11 +359,16 @@ struct Marker; struct MasterpieceSupplyDuty; struct MasterpieceSupplyMultiplier; struct Materia; +struct MateriaJoinRate; +struct MateriaJoinRateGatherCraft; struct MiniGameRA; struct MinionRace; struct MinionRules; struct MinionSkillType; +struct MobHuntOrder; struct MobHuntOrderType; +struct MobHuntReward; +struct MobHuntRewardCap; struct MobHuntTarget; struct ModelChara; struct ModelSkeleton; @@ -361,10 +385,13 @@ struct MoveTimeline; struct MoveVfx; struct NotebookDivision; struct NotebookDivisionCategory; +struct NotoriousMonster; struct NpcEquip; struct NpcYell; struct Omen; struct OnlineStatus; +struct OpenContent; +struct OpenContentCandidateName; struct Opening; struct Orchestrion; struct OrchestrionCategory; @@ -436,6 +463,8 @@ struct SkyIsland2Mission; struct SkyIsland2MissionDetail; struct SkyIsland2MissionType; struct SkyIsland2RangeType; +struct SnipeTalk; +struct SnipeTalkName; struct SpearfishingItem; struct SpearfishingNotebook; struct SpearfishingRecordPage; @@ -448,6 +477,7 @@ struct StatusHitEffect; struct StatusLoopVFX; struct Story; struct SubmarineExploration; +struct SubmarineMap; struct SubmarinePart; struct SubmarineRank; struct SwitchTalk; @@ -494,6 +524,8 @@ struct WeeklyBingoText; struct WeeklyLotBonus; struct World; struct WorldDCGroupType; +struct YardCatalogCategory; +struct YardCatalogItemList; struct YKW; struct ZoneSharedGroup; @@ -511,7 +543,7 @@ struct Achievement int32_t key; std::vector< int32_t > data; uint16_t order; - uint8_t initialHide; + uint8_t achievementHideCondition; Achievement( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -525,6 +557,15 @@ struct AchievementCategory AchievementCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct AchievementHideCondition +{ + bool hideAchievement; + bool hideName; + bool hideConditions; + + AchievementHideCondition( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct AchievementKind { std::string name; @@ -542,6 +583,7 @@ struct Action int16_t animationEnd; uint16_t actionTimelineHit; int8_t classJob; + uint8_t behaviourType; uint8_t classJobLevel; bool isRoleAction; int8_t range; @@ -563,6 +605,7 @@ struct Action uint16_t cast100ms; uint16_t recast100ms; uint8_t cooldownGroup; + uint8_t maxCharges; int8_t attackType; uint8_t aspect; uint8_t actionProcStatus; @@ -570,7 +613,7 @@ struct Action uint32_t unlockLink; uint8_t classJobCategory; bool affectsPosition; - uint8_t omen; + uint16_t omen; bool isPvP; bool isPlayerAction; @@ -704,15 +747,6 @@ struct Addon Addon( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; -struct AddonHud -{ - std::string _long; - std::string _short; - std::string function; - - AddonHud( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); -}; - struct Adventure { int32_t level; @@ -1131,6 +1165,36 @@ struct Behavior Behavior( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct BenchmarkOverrideEquipment +{ + 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; + uint32_t modelEars; + uint8_t dyeEars; + uint32_t modelNeck; + uint8_t dyeNeck; + uint32_t modelWrists; + uint8_t dyeWrists; + uint32_t modelLeftRing; + uint8_t dyeLeftRing; + uint32_t modelRightRing; + uint8_t dyeRightRing; + + BenchmarkOverrideEquipment( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct BGM { std::string file; @@ -1368,6 +1432,7 @@ struct Calendar struct CharaMakeCustomize { + uint8_t featureID; uint32_t icon; uint16_t data; bool isPurchasable; @@ -1481,6 +1546,7 @@ struct ClassJob std::string abbreviation; uint8_t classJobCategory; int8_t expArrayIndex; + uint8_t jobIndex; uint16_t modifierHitPoints; uint16_t modifierManaPoints; uint16_t modifierStrength; @@ -1498,6 +1564,7 @@ struct ClassJob uint16_t limitBreak1; uint16_t limitBreak2; uint16_t limitBreak3; + uint8_t uIPriority; uint32_t itemSoulCrystal; uint32_t unlockQuest; uint32_t relicQuest; @@ -1505,6 +1572,7 @@ struct ClassJob uint8_t startingLevel; uint8_t partyBonus; bool isLimitedJob; + bool canQueueForDuty; ClassJob( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -1548,6 +1616,9 @@ struct ClassJobCategory bool aST; bool sAM; bool rDM; + bool bLU; + bool gNB; + bool dNC; ClassJobCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -1737,6 +1808,7 @@ struct ContentFinderCondition uint8_t classJobLevelSync; uint16_t itemLevelRequired; uint16_t itemLevelSync; + bool allowUndersized; bool allowReplacement; bool highEndDuty; bool dutyRecorderAllowed; @@ -1804,6 +1876,13 @@ struct ContentNpcTalk ContentNpcTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct ContentRandomSelect +{ + uint16_t name; + + ContentRandomSelect( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct ContentRoulette { std::string name; @@ -1919,6 +1998,15 @@ struct CraftLeve CraftLeve( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct CraftLevelDifference +{ + int16_t difference; + int16_t progressFactor; + int16_t qualityFactor; + + CraftLevelDifference( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct CraftType { std::string name; @@ -2028,6 +2116,47 @@ struct DailySupplyItem DailySupplyItem( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct DawnContent +{ + uint32_t content; + uint32_t exp; + + DawnContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DawnGrowMember +{ + uint32_t member; + uint32_t imageName; + uint32_t bigImageOld; + uint32_t bigImageNew; + uint32_t smallImageOld; + uint32_t smallImageNew; + uint8_t _class; + + DawnGrowMember( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DawnMemberUIParam +{ + std::string classSingular; + uint32_t voiceLine; + std::string classPlural; + + DawnMemberUIParam( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct DawnQuestMember +{ + uint32_t member; + uint32_t imageName; + uint32_t bigImageOld; + uint32_t bigImageNew; + uint8_t _class; + + DawnQuestMember( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct DeepDungeon { std::string name; @@ -2165,23 +2294,23 @@ struct DeliveryQuest struct DescriptionPage { - uint32_t text1; + uint16_t text1; uint32_t image1; - uint32_t text2; + uint16_t text2; uint32_t image2; - uint32_t text3; + uint16_t text3; uint32_t image3; - uint32_t text4; + uint16_t text4; uint32_t image4; - uint32_t text5; + uint16_t text5; uint32_t image5; - uint32_t text6; + uint16_t text6; uint32_t image6; - uint32_t text7; + uint16_t text7; uint32_t image7; - uint32_t text8; + uint16_t text8; uint32_t image8; - uint32_t text9; + uint16_t text9; uint32_t image9; DescriptionPage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); @@ -2612,6 +2741,17 @@ struct Fate Fate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct FateProgressUI +{ + int32_t location; + int32_t achievement; + uint8_t reqFatesToRank2; + uint8_t reqFatesToRank3; + uint8_t displayOrder; + + FateProgressUI( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct FCActivity { std::string text; @@ -2775,6 +2915,22 @@ struct Frontline04 Frontline04( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct FurnitureCatalogCategory +{ + std::string category; + + FurnitureCatalogCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct FurnitureCatalogItemList +{ + uint16_t category; + int32_t item; + uint16_t patch; + + FurnitureCatalogItemList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct GardeningSeed { uint32_t item; @@ -2792,7 +2948,7 @@ struct GatheringCondition struct GatheringExp { - uint16_t exp; + int32_t exp; GatheringExp( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -3223,6 +3379,36 @@ struct GuardianDeity GuardianDeity( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct Guide +{ + uint16_t guideTitle; + uint16_t guidePage; + + Guide( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GuidePage +{ + uint8_t key; + uint32_t output; + + GuidePage( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GuidePageString +{ + std::string string; + + GuidePageString( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct GuideTitle +{ + std::string title; + + GuideTitle( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct GuildleveAssignment { uint32_t assignmentTalk; @@ -3444,6 +3630,37 @@ struct HowToPage HowToPage( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct HugeCraftworksNpc +{ + uint32_t eNpcResident; + uint16_t classJobCategory; + std::vector< uint32_t > itemRequested; + std::vector< uint8_t > qtyRequested; + std::vector< uint32_t > itemReward; + std::vector< uint8_t > qtyItemReward; + std::vector< uint32_t > itemUnkown; + std::vector< uint8_t > qtyItemUnkown; + std::string transient; + + HugeCraftworksNpc( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct HugeCraftworksRank +{ + uint8_t crafterLevel; + uint32_t expRewardPerItem; + + HugeCraftworksRank( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct IndividualWeather +{ + std::vector< uint8_t > weather; + std::vector< uint32_t > quest; + + IndividualWeather( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct InstanceContent { uint8_t instanceContentType; @@ -3706,6 +3923,21 @@ struct ItemUICategory ItemUICategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct JobHudManual +{ + uint32_t action; + uint16_t guide; + + JobHudManual( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct JobHudManualPriority +{ + std::vector< uint8_t > jobHudManual; + + JobHudManualPriority( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct JournalCategory { std::string name; @@ -3975,6 +4207,22 @@ struct Materia Materia( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct MateriaJoinRate +{ + std::vector< float > NQOvermeldSlot; + std::vector< float > HQOvermeldSlot; + + MateriaJoinRate( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MateriaJoinRateGatherCraft +{ + std::vector< float > NQOvermeldSlot; + std::vector< float > HQOvermeldSlot; + + MateriaJoinRateGatherCraft( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct MiniGameRA { int32_t icon; @@ -4005,14 +4253,41 @@ struct MinionSkillType MinionSkillType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct MobHuntOrder +{ + uint16_t target; + uint8_t stars; + uint8_t mobHuntReward; + + MobHuntOrder( uint32_t row_id, uint32_t subRow, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct MobHuntOrderType { uint32_t quest; uint32_t eventItem; + uint16_t orderStart; + uint8_t orderAmount; MobHuntOrderType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct MobHuntReward +{ + uint32_t expReward; + uint16_t gilReward; + uint16_t currencyReward; + + MobHuntReward( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct MobHuntRewardCap +{ + uint32_t expCap; + + MobHuntRewardCap( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct MobHuntTarget { uint16_t name; @@ -4100,6 +4375,22 @@ struct MountAction struct MountCustomize { + uint16_t hyurMaleScale; + uint16_t hyurFemaleScale; + uint16_t elezenMaleScale; + uint16_t elezenFemaleScale; + uint16_t lalaMaleScale; + uint16_t lalaFemaleScale; + uint16_t miqoMaleScale; + uint16_t miqoFemaleScale; + uint16_t roeMaleScale; + uint16_t roeFemaleScale; + uint16_t auRaMaleScale; + uint16_t auRaFemaleScale; + uint16_t hrothgarMaleScale; + uint16_t hrothgarFemaleScale; + uint16_t vieraMaleScale; + uint16_t vieraFemaleScale; uint8_t hyurMaleCameraHeight; uint8_t hyurFemaleCameraHeight; uint8_t elezenMaleCameraHeight; @@ -4112,6 +4403,10 @@ struct MountCustomize uint8_t roeFemaleCameraHeight; uint8_t auRaMaleCameraHeight; uint8_t auRaFemaleCameraHeight; + uint8_t hrothgarMaleCameraHeight; + uint8_t hrothgarRoeFemaleCameraHeight; + uint8_t vieraMaleCameraHeight; + uint8_t vieraFemaleCameraHeight; MountCustomize( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -4178,6 +4473,15 @@ struct NotebookDivisionCategory NotebookDivisionCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct NotoriousMonster +{ + int32_t bNpcBase; + uint8_t rank; + uint32_t bNpcName; + + NotoriousMonster( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct NpcEquip { uint64_t modelMainHand; @@ -4232,6 +4536,21 @@ struct OnlineStatus OnlineStatus( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct OpenContent +{ + std::vector< uint16_t > content; + std::vector< uint32_t > candidateName; + + OpenContent( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct OpenContentCandidateName +{ + std::string name; + + OpenContentCandidateName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct Opening { std::string name; @@ -4282,6 +4601,7 @@ struct ParamGrow uint16_t hpModifier; int32_t huntingLogExpReward; uint16_t itemLevelSync; + uint16_t craftingLevel; ParamGrow( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; @@ -4486,7 +4806,7 @@ struct Quest bool isHouseRequired; uint8_t deliveryQuest; uint32_t issuerStart; - uint16_t behavior; + uint32_t behavior; uint32_t targetEnd; bool isRepeatable; uint8_t repeatIntervalType; @@ -4539,6 +4859,7 @@ struct Quest struct QuestBattle { int32_t quest; + uint8_t questBattleScene; uint16_t timeLimit; uint16_t levelSync; std::vector< std::string > scriptInstruction; @@ -4680,6 +5001,7 @@ struct Recipe int32_t itemResult; uint8_t amountResult; bool isSecondary; + uint8_t materialQualityFactor; uint16_t difficultyFactor; uint16_t qualityFactor; uint16_t durabilityFactor; @@ -4704,6 +5026,7 @@ struct RecipeLevelTable uint8_t classJobLevel; uint8_t stars; uint16_t suggestedCraftsmanship; + uint16_t suggestedControl; uint16_t difficulty; uint32_t quality; uint16_t durability; @@ -4985,6 +5308,21 @@ struct SkyIsland2RangeType SkyIsland2RangeType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct SnipeTalk +{ + uint16_t name; + std::string text; + + SnipeTalk( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct SnipeTalkName +{ + std::string name; + + SnipeTalkName( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct SpearfishingItem { std::string description; @@ -5112,6 +5450,14 @@ struct SubmarineExploration SubmarineExploration( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct SubmarineMap +{ + std::string name; + uint32_t image; + + SubmarineMap( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct SubmarinePart { uint8_t slot; @@ -5151,6 +5497,7 @@ struct TerritoryType uint16_t placeNameZone; uint16_t placeName; uint16_t map; + uint8_t loadingImage; uint8_t territoryIntendedUse; uint8_t weatherRate; int32_t placeNameRegionIcon; @@ -5551,6 +5898,22 @@ struct WorldDCGroupType WorldDCGroupType( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); }; +struct YardCatalogCategory +{ + std::string category; + + YardCatalogCategory( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + +struct YardCatalogItemList +{ + uint16_t category; + int32_t item; + uint16_t patch; + + YardCatalogItemList( uint32_t row_id, Sapphire::Data::ExdDataGenerated* exdData ); +}; + struct YKW { uint32_t item; @@ -5631,6 +5994,7 @@ struct ZoneSharedGroup xiv::exd::Exd m_AchievementDat; xiv::exd::Exd m_AchievementCategoryDat; + xiv::exd::Exd m_AchievementHideConditionDat; xiv::exd::Exd m_AchievementKindDat; xiv::exd::Exd m_ActionDat; xiv::exd::Exd m_ActionCastTimelineDat; @@ -5649,7 +6013,6 @@ struct ZoneSharedGroup xiv::exd::Exd m_ActivityFeedGroupCaptionsDat; xiv::exd::Exd m_ActivityFeedImagesDat; xiv::exd::Exd m_AddonDat; - xiv::exd::Exd m_AddonHudDat; xiv::exd::Exd m_AdventureDat; xiv::exd::Exd m_AdventureExPhaseDat; xiv::exd::Exd m_AetherCurrentDat; @@ -5690,6 +6053,7 @@ struct ZoneSharedGroup xiv::exd::Exd m_BeastReputationRankDat; xiv::exd::Exd m_BeastTribeDat; xiv::exd::Exd m_BehaviorDat; + xiv::exd::Exd m_BenchmarkOverrideEquipmentDat; xiv::exd::Exd m_BGMDat; xiv::exd::Exd m_BGMFadeDat; xiv::exd::Exd m_BGMSituationDat; @@ -5748,6 +6112,7 @@ struct ZoneSharedGroup xiv::exd::Exd m_ContentGaugeColorDat; xiv::exd::Exd m_ContentMemberTypeDat; xiv::exd::Exd m_ContentNpcTalkDat; + xiv::exd::Exd m_ContentRandomSelectDat; xiv::exd::Exd m_ContentRouletteDat; xiv::exd::Exd m_ContentRouletteOpenRuleDat; xiv::exd::Exd m_ContentRouletteRoleBonusDat; @@ -5757,6 +6122,7 @@ struct ZoneSharedGroup xiv::exd::Exd m_ContentTypeDat; xiv::exd::Exd m_CraftActionDat; xiv::exd::Exd m_CraftLeveDat; + xiv::exd::Exd m_CraftLevelDifferenceDat; xiv::exd::Exd m_CraftTypeDat; xiv::exd::Exd m_CreditDat; xiv::exd::Exd m_CreditBackImageDat; @@ -5770,6 +6136,10 @@ struct ZoneSharedGroup xiv::exd::Exd m_CutsceneDat; xiv::exd::Exd m_CutScreenImageDat; xiv::exd::Exd m_DailySupplyItemDat; + xiv::exd::Exd m_DawnContentDat; + xiv::exd::Exd m_DawnGrowMemberDat; + xiv::exd::Exd m_DawnMemberUIParamDat; + xiv::exd::Exd m_DawnQuestMemberDat; xiv::exd::Exd m_DeepDungeonDat; xiv::exd::Exd m_DeepDungeonBanDat; xiv::exd::Exd m_DeepDungeonDangerDat; @@ -5822,6 +6192,7 @@ struct ZoneSharedGroup xiv::exd::Exd m_ExportedSGDat; xiv::exd::Exd m_ExVersionDat; xiv::exd::Exd m_FateDat; + xiv::exd::Exd m_FateProgressUIDat; xiv::exd::Exd m_FCActivityDat; xiv::exd::Exd m_FCActivityCategoryDat; xiv::exd::Exd m_FCAuthorityDat; @@ -5840,6 +6211,8 @@ struct ZoneSharedGroup xiv::exd::Exd m_FishParameterDat; xiv::exd::Exd m_Frontline03Dat; xiv::exd::Exd m_Frontline04Dat; + xiv::exd::Exd m_FurnitureCatalogCategoryDat; + xiv::exd::Exd m_FurnitureCatalogItemListDat; xiv::exd::Exd m_GardeningSeedDat; xiv::exd::Exd m_GatheringConditionDat; xiv::exd::Exd m_GatheringExpDat; @@ -5887,6 +6260,10 @@ struct ZoneSharedGroup xiv::exd::Exd m_GrandCompanyDat; xiv::exd::Exd m_GrandCompanyRankDat; xiv::exd::Exd m_GuardianDeityDat; + xiv::exd::Exd m_GuideDat; + xiv::exd::Exd m_GuidePageDat; + xiv::exd::Exd m_GuidePageStringDat; + xiv::exd::Exd m_GuideTitleDat; xiv::exd::Exd m_GuildleveAssignmentDat; xiv::exd::Exd m_GuildleveAssignmentCategoryDat; xiv::exd::Exd m_GuildOrderDat; @@ -5910,6 +6287,9 @@ struct ZoneSharedGroup xiv::exd::Exd m_HowToDat; xiv::exd::Exd m_HowToCategoryDat; xiv::exd::Exd m_HowToPageDat; + xiv::exd::Exd m_HugeCraftworksNpcDat; + xiv::exd::Exd m_HugeCraftworksRankDat; + xiv::exd::Exd m_IndividualWeatherDat; xiv::exd::Exd m_InstanceContentDat; xiv::exd::Exd m_InstanceContentBuffDat; xiv::exd::Exd m_InstanceContentCSBonusDat; @@ -5923,6 +6303,8 @@ struct ZoneSharedGroup xiv::exd::Exd m_ItemSeriesDat; xiv::exd::Exd m_ItemSpecialBonusDat; xiv::exd::Exd m_ItemUICategoryDat; + xiv::exd::Exd m_JobHudManualDat; + xiv::exd::Exd m_JobHudManualPriorityDat; xiv::exd::Exd m_JournalCategoryDat; xiv::exd::Exd m_JournalGenreDat; xiv::exd::Exd m_JournalSectionDat; @@ -5951,11 +6333,16 @@ struct ZoneSharedGroup xiv::exd::Exd m_MasterpieceSupplyDutyDat; xiv::exd::Exd m_MasterpieceSupplyMultiplierDat; xiv::exd::Exd m_MateriaDat; + xiv::exd::Exd m_MateriaJoinRateDat; + xiv::exd::Exd m_MateriaJoinRateGatherCraftDat; xiv::exd::Exd m_MiniGameRADat; xiv::exd::Exd m_MinionRaceDat; xiv::exd::Exd m_MinionRulesDat; xiv::exd::Exd m_MinionSkillTypeDat; + xiv::exd::Exd m_MobHuntOrderDat; xiv::exd::Exd m_MobHuntOrderTypeDat; + xiv::exd::Exd m_MobHuntRewardDat; + xiv::exd::Exd m_MobHuntRewardCapDat; xiv::exd::Exd m_MobHuntTargetDat; xiv::exd::Exd m_ModelCharaDat; xiv::exd::Exd m_ModelSkeletonDat; @@ -5972,10 +6359,13 @@ struct ZoneSharedGroup xiv::exd::Exd m_MoveVfxDat; xiv::exd::Exd m_NotebookDivisionDat; xiv::exd::Exd m_NotebookDivisionCategoryDat; + xiv::exd::Exd m_NotoriousMonsterDat; xiv::exd::Exd m_NpcEquipDat; xiv::exd::Exd m_NpcYellDat; xiv::exd::Exd m_OmenDat; xiv::exd::Exd m_OnlineStatusDat; + xiv::exd::Exd m_OpenContentDat; + xiv::exd::Exd m_OpenContentCandidateNameDat; xiv::exd::Exd m_OpeningDat; xiv::exd::Exd m_OrchestrionDat; xiv::exd::Exd m_OrchestrionCategoryDat; @@ -6047,6 +6437,8 @@ struct ZoneSharedGroup xiv::exd::Exd m_SkyIsland2MissionDetailDat; xiv::exd::Exd m_SkyIsland2MissionTypeDat; xiv::exd::Exd m_SkyIsland2RangeTypeDat; + xiv::exd::Exd m_SnipeTalkDat; + xiv::exd::Exd m_SnipeTalkNameDat; xiv::exd::Exd m_SpearfishingItemDat; xiv::exd::Exd m_SpearfishingNotebookDat; xiv::exd::Exd m_SpearfishingRecordPageDat; @@ -6059,6 +6451,7 @@ struct ZoneSharedGroup xiv::exd::Exd m_StatusLoopVFXDat; xiv::exd::Exd m_StoryDat; xiv::exd::Exd m_SubmarineExplorationDat; + xiv::exd::Exd m_SubmarineMapDat; xiv::exd::Exd m_SubmarinePartDat; xiv::exd::Exd m_SubmarineRankDat; xiv::exd::Exd m_SwitchTalkDat; @@ -6105,12 +6498,15 @@ struct ZoneSharedGroup xiv::exd::Exd m_WeeklyLotBonusDat; xiv::exd::Exd m_WorldDat; xiv::exd::Exd m_WorldDCGroupTypeDat; + xiv::exd::Exd m_YardCatalogCategoryDat; + xiv::exd::Exd m_YardCatalogItemListDat; xiv::exd::Exd m_YKWDat; xiv::exd::Exd m_ZoneSharedGroupDat; using AchievementPtr = std::shared_ptr< Achievement >; using AchievementCategoryPtr = std::shared_ptr< AchievementCategory >; + using AchievementHideConditionPtr = std::shared_ptr< AchievementHideCondition >; using AchievementKindPtr = std::shared_ptr< AchievementKind >; using ActionPtr = std::shared_ptr< Action >; using ActionCastTimelinePtr = std::shared_ptr< ActionCastTimeline >; @@ -6129,7 +6525,6 @@ struct ZoneSharedGroup using ActivityFeedGroupCaptionsPtr = std::shared_ptr< ActivityFeedGroupCaptions >; using ActivityFeedImagesPtr = std::shared_ptr< ActivityFeedImages >; using AddonPtr = std::shared_ptr< Addon >; - using AddonHudPtr = std::shared_ptr< AddonHud >; using AdventurePtr = std::shared_ptr< Adventure >; using AdventureExPhasePtr = std::shared_ptr< AdventureExPhase >; using AetherCurrentPtr = std::shared_ptr< AetherCurrent >; @@ -6170,6 +6565,7 @@ struct ZoneSharedGroup using BeastReputationRankPtr = std::shared_ptr< BeastReputationRank >; using BeastTribePtr = std::shared_ptr< BeastTribe >; using BehaviorPtr = std::shared_ptr< Behavior >; + using BenchmarkOverrideEquipmentPtr = std::shared_ptr< BenchmarkOverrideEquipment >; using BGMPtr = std::shared_ptr< BGM >; using BGMFadePtr = std::shared_ptr< BGMFade >; using BGMSituationPtr = std::shared_ptr< BGMSituation >; @@ -6228,6 +6624,7 @@ struct ZoneSharedGroup using ContentGaugeColorPtr = std::shared_ptr< ContentGaugeColor >; using ContentMemberTypePtr = std::shared_ptr< ContentMemberType >; using ContentNpcTalkPtr = std::shared_ptr< ContentNpcTalk >; + using ContentRandomSelectPtr = std::shared_ptr< ContentRandomSelect >; using ContentRoulettePtr = std::shared_ptr< ContentRoulette >; using ContentRouletteOpenRulePtr = std::shared_ptr< ContentRouletteOpenRule >; using ContentRouletteRoleBonusPtr = std::shared_ptr< ContentRouletteRoleBonus >; @@ -6237,6 +6634,7 @@ struct ZoneSharedGroup using ContentTypePtr = std::shared_ptr< ContentType >; using CraftActionPtr = std::shared_ptr< CraftAction >; using CraftLevePtr = std::shared_ptr< CraftLeve >; + using CraftLevelDifferencePtr = std::shared_ptr< CraftLevelDifference >; using CraftTypePtr = std::shared_ptr< CraftType >; using CreditPtr = std::shared_ptr< Credit >; using CreditBackImagePtr = std::shared_ptr< CreditBackImage >; @@ -6250,6 +6648,10 @@ struct ZoneSharedGroup using CutscenePtr = std::shared_ptr< Cutscene >; using CutScreenImagePtr = std::shared_ptr< CutScreenImage >; using DailySupplyItemPtr = std::shared_ptr< DailySupplyItem >; + using DawnContentPtr = std::shared_ptr< DawnContent >; + using DawnGrowMemberPtr = std::shared_ptr< DawnGrowMember >; + using DawnMemberUIParamPtr = std::shared_ptr< DawnMemberUIParam >; + using DawnQuestMemberPtr = std::shared_ptr< DawnQuestMember >; using DeepDungeonPtr = std::shared_ptr< DeepDungeon >; using DeepDungeonBanPtr = std::shared_ptr< DeepDungeonBan >; using DeepDungeonDangerPtr = std::shared_ptr< DeepDungeonDanger >; @@ -6302,6 +6704,7 @@ struct ZoneSharedGroup using ExportedSGPtr = std::shared_ptr< ExportedSG >; using ExVersionPtr = std::shared_ptr< ExVersion >; using FatePtr = std::shared_ptr< Fate >; + using FateProgressUIPtr = std::shared_ptr< FateProgressUI >; using FCActivityPtr = std::shared_ptr< FCActivity >; using FCActivityCategoryPtr = std::shared_ptr< FCActivityCategory >; using FCAuthorityPtr = std::shared_ptr< FCAuthority >; @@ -6320,6 +6723,8 @@ struct ZoneSharedGroup using FishParameterPtr = std::shared_ptr< FishParameter >; using Frontline03Ptr = std::shared_ptr< Frontline03 >; using Frontline04Ptr = std::shared_ptr< Frontline04 >; + using FurnitureCatalogCategoryPtr = std::shared_ptr< FurnitureCatalogCategory >; + using FurnitureCatalogItemListPtr = std::shared_ptr< FurnitureCatalogItemList >; using GardeningSeedPtr = std::shared_ptr< GardeningSeed >; using GatheringConditionPtr = std::shared_ptr< GatheringCondition >; using GatheringExpPtr = std::shared_ptr< GatheringExp >; @@ -6367,6 +6772,10 @@ struct ZoneSharedGroup using GrandCompanyPtr = std::shared_ptr< GrandCompany >; using GrandCompanyRankPtr = std::shared_ptr< GrandCompanyRank >; using GuardianDeityPtr = std::shared_ptr< GuardianDeity >; + using GuidePtr = std::shared_ptr< Guide >; + using GuidePagePtr = std::shared_ptr< GuidePage >; + using GuidePageStringPtr = std::shared_ptr< GuidePageString >; + using GuideTitlePtr = std::shared_ptr< GuideTitle >; using GuildleveAssignmentPtr = std::shared_ptr< GuildleveAssignment >; using GuildleveAssignmentCategoryPtr = std::shared_ptr< GuildleveAssignmentCategory >; using GuildOrderPtr = std::shared_ptr< GuildOrder >; @@ -6390,6 +6799,9 @@ struct ZoneSharedGroup using HowToPtr = std::shared_ptr< HowTo >; using HowToCategoryPtr = std::shared_ptr< HowToCategory >; using HowToPagePtr = std::shared_ptr< HowToPage >; + using HugeCraftworksNpcPtr = std::shared_ptr< HugeCraftworksNpc >; + using HugeCraftworksRankPtr = std::shared_ptr< HugeCraftworksRank >; + using IndividualWeatherPtr = std::shared_ptr< IndividualWeather >; using InstanceContentPtr = std::shared_ptr< InstanceContent >; using InstanceContentBuffPtr = std::shared_ptr< InstanceContentBuff >; using InstanceContentCSBonusPtr = std::shared_ptr< InstanceContentCSBonus >; @@ -6403,6 +6815,8 @@ struct ZoneSharedGroup using ItemSeriesPtr = std::shared_ptr< ItemSeries >; using ItemSpecialBonusPtr = std::shared_ptr< ItemSpecialBonus >; using ItemUICategoryPtr = std::shared_ptr< ItemUICategory >; + using JobHudManualPtr = std::shared_ptr< JobHudManual >; + using JobHudManualPriorityPtr = std::shared_ptr< JobHudManualPriority >; using JournalCategoryPtr = std::shared_ptr< JournalCategory >; using JournalGenrePtr = std::shared_ptr< JournalGenre >; using JournalSectionPtr = std::shared_ptr< JournalSection >; @@ -6431,11 +6845,16 @@ struct ZoneSharedGroup using MasterpieceSupplyDutyPtr = std::shared_ptr< MasterpieceSupplyDuty >; using MasterpieceSupplyMultiplierPtr = std::shared_ptr< MasterpieceSupplyMultiplier >; using MateriaPtr = std::shared_ptr< Materia >; + using MateriaJoinRatePtr = std::shared_ptr< MateriaJoinRate >; + using MateriaJoinRateGatherCraftPtr = std::shared_ptr< MateriaJoinRateGatherCraft >; using MiniGameRAPtr = std::shared_ptr< MiniGameRA >; using MinionRacePtr = std::shared_ptr< MinionRace >; using MinionRulesPtr = std::shared_ptr< MinionRules >; using MinionSkillTypePtr = std::shared_ptr< MinionSkillType >; + using MobHuntOrderPtr = std::shared_ptr< MobHuntOrder >; using MobHuntOrderTypePtr = std::shared_ptr< MobHuntOrderType >; + using MobHuntRewardPtr = std::shared_ptr< MobHuntReward >; + using MobHuntRewardCapPtr = std::shared_ptr< MobHuntRewardCap >; using MobHuntTargetPtr = std::shared_ptr< MobHuntTarget >; using ModelCharaPtr = std::shared_ptr< ModelChara >; using ModelSkeletonPtr = std::shared_ptr< ModelSkeleton >; @@ -6452,10 +6871,13 @@ struct ZoneSharedGroup using MoveVfxPtr = std::shared_ptr< MoveVfx >; using NotebookDivisionPtr = std::shared_ptr< NotebookDivision >; using NotebookDivisionCategoryPtr = std::shared_ptr< NotebookDivisionCategory >; + using NotoriousMonsterPtr = std::shared_ptr< NotoriousMonster >; using NpcEquipPtr = std::shared_ptr< NpcEquip >; using NpcYellPtr = std::shared_ptr< NpcYell >; using OmenPtr = std::shared_ptr< Omen >; using OnlineStatusPtr = std::shared_ptr< OnlineStatus >; + using OpenContentPtr = std::shared_ptr< OpenContent >; + using OpenContentCandidateNamePtr = std::shared_ptr< OpenContentCandidateName >; using OpeningPtr = std::shared_ptr< Opening >; using OrchestrionPtr = std::shared_ptr< Orchestrion >; using OrchestrionCategoryPtr = std::shared_ptr< OrchestrionCategory >; @@ -6527,6 +6949,8 @@ struct ZoneSharedGroup using SkyIsland2MissionDetailPtr = std::shared_ptr< SkyIsland2MissionDetail >; using SkyIsland2MissionTypePtr = std::shared_ptr< SkyIsland2MissionType >; using SkyIsland2RangeTypePtr = std::shared_ptr< SkyIsland2RangeType >; + using SnipeTalkPtr = std::shared_ptr< SnipeTalk >; + using SnipeTalkNamePtr = std::shared_ptr< SnipeTalkName >; using SpearfishingItemPtr = std::shared_ptr< SpearfishingItem >; using SpearfishingNotebookPtr = std::shared_ptr< SpearfishingNotebook >; using SpearfishingRecordPagePtr = std::shared_ptr< SpearfishingRecordPage >; @@ -6539,6 +6963,7 @@ struct ZoneSharedGroup using StatusLoopVFXPtr = std::shared_ptr< StatusLoopVFX >; using StoryPtr = std::shared_ptr< Story >; using SubmarineExplorationPtr = std::shared_ptr< SubmarineExploration >; + using SubmarineMapPtr = std::shared_ptr< SubmarineMap >; using SubmarinePartPtr = std::shared_ptr< SubmarinePart >; using SubmarineRankPtr = std::shared_ptr< SubmarineRank >; using SwitchTalkPtr = std::shared_ptr< SwitchTalk >; @@ -6585,12 +7010,15 @@ struct ZoneSharedGroup using WeeklyLotBonusPtr = std::shared_ptr< WeeklyLotBonus >; using WorldPtr = std::shared_ptr< World >; using WorldDCGroupTypePtr = std::shared_ptr< WorldDCGroupType >; + using YardCatalogCategoryPtr = std::shared_ptr< YardCatalogCategory >; + using YardCatalogItemListPtr = std::shared_ptr< YardCatalogItemList >; using YKWPtr = std::shared_ptr< YKW >; using ZoneSharedGroupPtr = std::shared_ptr< ZoneSharedGroup >; std::set< uint32_t > m_AchievementIdList; std::set< uint32_t > m_AchievementCategoryIdList; + std::set< uint32_t > m_AchievementHideConditionIdList; std::set< uint32_t > m_AchievementKindIdList; std::set< uint32_t > m_ActionIdList; std::set< uint32_t > m_ActionCastTimelineIdList; @@ -6609,7 +7037,6 @@ struct ZoneSharedGroup std::set< uint32_t > m_ActivityFeedGroupCaptionsIdList; std::set< uint32_t > m_ActivityFeedImagesIdList; std::set< uint32_t > m_AddonIdList; - std::set< uint32_t > m_AddonHudIdList; std::set< uint32_t > m_AdventureIdList; std::set< uint32_t > m_AdventureExPhaseIdList; std::set< uint32_t > m_AetherCurrentIdList; @@ -6650,6 +7077,7 @@ struct ZoneSharedGroup std::set< uint32_t > m_BeastReputationRankIdList; std::set< uint32_t > m_BeastTribeIdList; std::set< uint32_t > m_BehaviorIdList; + std::set< uint32_t > m_BenchmarkOverrideEquipmentIdList; std::set< uint32_t > m_BGMIdList; std::set< uint32_t > m_BGMFadeIdList; std::set< uint32_t > m_BGMSituationIdList; @@ -6708,6 +7136,7 @@ struct ZoneSharedGroup std::set< uint32_t > m_ContentGaugeColorIdList; std::set< uint32_t > m_ContentMemberTypeIdList; std::set< uint32_t > m_ContentNpcTalkIdList; + std::set< uint32_t > m_ContentRandomSelectIdList; std::set< uint32_t > m_ContentRouletteIdList; std::set< uint32_t > m_ContentRouletteOpenRuleIdList; std::set< uint32_t > m_ContentRouletteRoleBonusIdList; @@ -6717,6 +7146,7 @@ struct ZoneSharedGroup std::set< uint32_t > m_ContentTypeIdList; std::set< uint32_t > m_CraftActionIdList; std::set< uint32_t > m_CraftLeveIdList; + std::set< uint32_t > m_CraftLevelDifferenceIdList; std::set< uint32_t > m_CraftTypeIdList; std::set< uint32_t > m_CreditIdList; std::set< uint32_t > m_CreditBackImageIdList; @@ -6730,6 +7160,10 @@ struct ZoneSharedGroup std::set< uint32_t > m_CutsceneIdList; std::set< uint32_t > m_CutScreenImageIdList; std::set< uint32_t > m_DailySupplyItemIdList; + std::set< uint32_t > m_DawnContentIdList; + std::set< uint32_t > m_DawnGrowMemberIdList; + std::set< uint32_t > m_DawnMemberUIParamIdList; + std::set< uint32_t > m_DawnQuestMemberIdList; std::set< uint32_t > m_DeepDungeonIdList; std::set< uint32_t > m_DeepDungeonBanIdList; std::set< uint32_t > m_DeepDungeonDangerIdList; @@ -6782,6 +7216,7 @@ struct ZoneSharedGroup std::set< uint32_t > m_ExportedSGIdList; std::set< uint32_t > m_ExVersionIdList; std::set< uint32_t > m_FateIdList; + std::set< uint32_t > m_FateProgressUIIdList; std::set< uint32_t > m_FCActivityIdList; std::set< uint32_t > m_FCActivityCategoryIdList; std::set< uint32_t > m_FCAuthorityIdList; @@ -6800,6 +7235,8 @@ struct ZoneSharedGroup std::set< uint32_t > m_FishParameterIdList; std::set< uint32_t > m_Frontline03IdList; std::set< uint32_t > m_Frontline04IdList; + std::set< uint32_t > m_FurnitureCatalogCategoryIdList; + std::set< uint32_t > m_FurnitureCatalogItemListIdList; std::set< uint32_t > m_GardeningSeedIdList; std::set< uint32_t > m_GatheringConditionIdList; std::set< uint32_t > m_GatheringExpIdList; @@ -6847,6 +7284,10 @@ struct ZoneSharedGroup std::set< uint32_t > m_GrandCompanyIdList; std::set< uint32_t > m_GrandCompanyRankIdList; std::set< uint32_t > m_GuardianDeityIdList; + std::set< uint32_t > m_GuideIdList; + std::set< uint32_t > m_GuidePageIdList; + std::set< uint32_t > m_GuidePageStringIdList; + std::set< uint32_t > m_GuideTitleIdList; std::set< uint32_t > m_GuildleveAssignmentIdList; std::set< uint32_t > m_GuildleveAssignmentCategoryIdList; std::set< uint32_t > m_GuildOrderIdList; @@ -6870,6 +7311,9 @@ struct ZoneSharedGroup std::set< uint32_t > m_HowToIdList; std::set< uint32_t > m_HowToCategoryIdList; std::set< uint32_t > m_HowToPageIdList; + std::set< uint32_t > m_HugeCraftworksNpcIdList; + std::set< uint32_t > m_HugeCraftworksRankIdList; + std::set< uint32_t > m_IndividualWeatherIdList; std::set< uint32_t > m_InstanceContentIdList; std::set< uint32_t > m_InstanceContentBuffIdList; std::set< uint32_t > m_InstanceContentCSBonusIdList; @@ -6883,6 +7327,8 @@ struct ZoneSharedGroup std::set< uint32_t > m_ItemSeriesIdList; std::set< uint32_t > m_ItemSpecialBonusIdList; std::set< uint32_t > m_ItemUICategoryIdList; + std::set< uint32_t > m_JobHudManualIdList; + std::set< uint32_t > m_JobHudManualPriorityIdList; std::set< uint32_t > m_JournalCategoryIdList; std::set< uint32_t > m_JournalGenreIdList; std::set< uint32_t > m_JournalSectionIdList; @@ -6911,11 +7357,16 @@ struct ZoneSharedGroup std::set< uint32_t > m_MasterpieceSupplyDutyIdList; std::set< uint32_t > m_MasterpieceSupplyMultiplierIdList; std::set< uint32_t > m_MateriaIdList; + std::set< uint32_t > m_MateriaJoinRateIdList; + std::set< uint32_t > m_MateriaJoinRateGatherCraftIdList; std::set< uint32_t > m_MiniGameRAIdList; std::set< uint32_t > m_MinionRaceIdList; std::set< uint32_t > m_MinionRulesIdList; std::set< uint32_t > m_MinionSkillTypeIdList; + std::set< uint32_t > m_MobHuntOrderIdList; std::set< uint32_t > m_MobHuntOrderTypeIdList; + std::set< uint32_t > m_MobHuntRewardIdList; + std::set< uint32_t > m_MobHuntRewardCapIdList; std::set< uint32_t > m_MobHuntTargetIdList; std::set< uint32_t > m_ModelCharaIdList; std::set< uint32_t > m_ModelSkeletonIdList; @@ -6932,10 +7383,13 @@ struct ZoneSharedGroup std::set< uint32_t > m_MoveVfxIdList; std::set< uint32_t > m_NotebookDivisionIdList; std::set< uint32_t > m_NotebookDivisionCategoryIdList; + std::set< uint32_t > m_NotoriousMonsterIdList; std::set< uint32_t > m_NpcEquipIdList; std::set< uint32_t > m_NpcYellIdList; std::set< uint32_t > m_OmenIdList; std::set< uint32_t > m_OnlineStatusIdList; + std::set< uint32_t > m_OpenContentIdList; + std::set< uint32_t > m_OpenContentCandidateNameIdList; std::set< uint32_t > m_OpeningIdList; std::set< uint32_t > m_OrchestrionIdList; std::set< uint32_t > m_OrchestrionCategoryIdList; @@ -7007,6 +7461,8 @@ struct ZoneSharedGroup std::set< uint32_t > m_SkyIsland2MissionDetailIdList; std::set< uint32_t > m_SkyIsland2MissionTypeIdList; std::set< uint32_t > m_SkyIsland2RangeTypeIdList; + std::set< uint32_t > m_SnipeTalkIdList; + std::set< uint32_t > m_SnipeTalkNameIdList; std::set< uint32_t > m_SpearfishingItemIdList; std::set< uint32_t > m_SpearfishingNotebookIdList; std::set< uint32_t > m_SpearfishingRecordPageIdList; @@ -7019,6 +7475,7 @@ struct ZoneSharedGroup std::set< uint32_t > m_StatusLoopVFXIdList; std::set< uint32_t > m_StoryIdList; std::set< uint32_t > m_SubmarineExplorationIdList; + std::set< uint32_t > m_SubmarineMapIdList; std::set< uint32_t > m_SubmarinePartIdList; std::set< uint32_t > m_SubmarineRankIdList; std::set< uint32_t > m_SwitchTalkIdList; @@ -7065,6 +7522,8 @@ struct ZoneSharedGroup std::set< uint32_t > m_WeeklyLotBonusIdList; std::set< uint32_t > m_WorldIdList; std::set< uint32_t > m_WorldDCGroupTypeIdList; + std::set< uint32_t > m_YardCatalogCategoryIdList; + std::set< uint32_t > m_YardCatalogItemListIdList; std::set< uint32_t > m_YKWIdList; std::set< uint32_t > m_ZoneSharedGroupIdList; @@ -7081,6 +7540,12 @@ const std::set< uint32_t >& getAchievementCategoryIdList() loadIdList( m_AchievementCategoryDat, m_AchievementCategoryIdList ); return m_AchievementCategoryIdList; } +const std::set< uint32_t >& getAchievementHideConditionIdList() +{ + if( m_AchievementHideConditionIdList.size() == 0 ) + loadIdList( m_AchievementHideConditionDat, m_AchievementHideConditionIdList ); + return m_AchievementHideConditionIdList; +} const std::set< uint32_t >& getAchievementKindIdList() { if( m_AchievementKindIdList.size() == 0 ) @@ -7189,12 +7654,6 @@ const std::set< uint32_t >& getAddonIdList() loadIdList( m_AddonDat, m_AddonIdList ); return m_AddonIdList; } -const std::set< uint32_t >& getAddonHudIdList() -{ - if( m_AddonHudIdList.size() == 0 ) - loadIdList( m_AddonHudDat, m_AddonHudIdList ); - return m_AddonHudIdList; -} const std::set< uint32_t >& getAdventureIdList() { if( m_AdventureIdList.size() == 0 ) @@ -7435,6 +7894,12 @@ const std::set< uint32_t >& getBehaviorIdList() loadIdList( m_BehaviorDat, m_BehaviorIdList ); return m_BehaviorIdList; } +const std::set< uint32_t >& getBenchmarkOverrideEquipmentIdList() +{ + if( m_BenchmarkOverrideEquipmentIdList.size() == 0 ) + loadIdList( m_BenchmarkOverrideEquipmentDat, m_BenchmarkOverrideEquipmentIdList ); + return m_BenchmarkOverrideEquipmentIdList; +} const std::set< uint32_t >& getBGMIdList() { if( m_BGMIdList.size() == 0 ) @@ -7783,6 +8248,12 @@ const std::set< uint32_t >& getContentNpcTalkIdList() loadIdList( m_ContentNpcTalkDat, m_ContentNpcTalkIdList ); return m_ContentNpcTalkIdList; } +const std::set< uint32_t >& getContentRandomSelectIdList() +{ + if( m_ContentRandomSelectIdList.size() == 0 ) + loadIdList( m_ContentRandomSelectDat, m_ContentRandomSelectIdList ); + return m_ContentRandomSelectIdList; +} const std::set< uint32_t >& getContentRouletteIdList() { if( m_ContentRouletteIdList.size() == 0 ) @@ -7837,6 +8308,12 @@ const std::set< uint32_t >& getCraftLeveIdList() loadIdList( m_CraftLeveDat, m_CraftLeveIdList ); return m_CraftLeveIdList; } +const std::set< uint32_t >& getCraftLevelDifferenceIdList() +{ + if( m_CraftLevelDifferenceIdList.size() == 0 ) + loadIdList( m_CraftLevelDifferenceDat, m_CraftLevelDifferenceIdList ); + return m_CraftLevelDifferenceIdList; +} const std::set< uint32_t >& getCraftTypeIdList() { if( m_CraftTypeIdList.size() == 0 ) @@ -7915,6 +8392,30 @@ const std::set< uint32_t >& getDailySupplyItemIdList() loadIdList( m_DailySupplyItemDat, m_DailySupplyItemIdList ); return m_DailySupplyItemIdList; } +const std::set< uint32_t >& getDawnContentIdList() +{ + if( m_DawnContentIdList.size() == 0 ) + loadIdList( m_DawnContentDat, m_DawnContentIdList ); + return m_DawnContentIdList; +} +const std::set< uint32_t >& getDawnGrowMemberIdList() +{ + if( m_DawnGrowMemberIdList.size() == 0 ) + loadIdList( m_DawnGrowMemberDat, m_DawnGrowMemberIdList ); + return m_DawnGrowMemberIdList; +} +const std::set< uint32_t >& getDawnMemberUIParamIdList() +{ + if( m_DawnMemberUIParamIdList.size() == 0 ) + loadIdList( m_DawnMemberUIParamDat, m_DawnMemberUIParamIdList ); + return m_DawnMemberUIParamIdList; +} +const std::set< uint32_t >& getDawnQuestMemberIdList() +{ + if( m_DawnQuestMemberIdList.size() == 0 ) + loadIdList( m_DawnQuestMemberDat, m_DawnQuestMemberIdList ); + return m_DawnQuestMemberIdList; +} const std::set< uint32_t >& getDeepDungeonIdList() { if( m_DeepDungeonIdList.size() == 0 ) @@ -8227,6 +8728,12 @@ const std::set< uint32_t >& getFateIdList() loadIdList( m_FateDat, m_FateIdList ); return m_FateIdList; } +const std::set< uint32_t >& getFateProgressUIIdList() +{ + if( m_FateProgressUIIdList.size() == 0 ) + loadIdList( m_FateProgressUIDat, m_FateProgressUIIdList ); + return m_FateProgressUIIdList; +} const std::set< uint32_t >& getFCActivityIdList() { if( m_FCActivityIdList.size() == 0 ) @@ -8335,6 +8842,18 @@ const std::set< uint32_t >& getFrontline04IdList() loadIdList( m_Frontline04Dat, m_Frontline04IdList ); return m_Frontline04IdList; } +const std::set< uint32_t >& getFurnitureCatalogCategoryIdList() +{ + if( m_FurnitureCatalogCategoryIdList.size() == 0 ) + loadIdList( m_FurnitureCatalogCategoryDat, m_FurnitureCatalogCategoryIdList ); + return m_FurnitureCatalogCategoryIdList; +} +const std::set< uint32_t >& getFurnitureCatalogItemListIdList() +{ + if( m_FurnitureCatalogItemListIdList.size() == 0 ) + loadIdList( m_FurnitureCatalogItemListDat, m_FurnitureCatalogItemListIdList ); + return m_FurnitureCatalogItemListIdList; +} const std::set< uint32_t >& getGardeningSeedIdList() { if( m_GardeningSeedIdList.size() == 0 ) @@ -8617,6 +9136,30 @@ const std::set< uint32_t >& getGuardianDeityIdList() loadIdList( m_GuardianDeityDat, m_GuardianDeityIdList ); return m_GuardianDeityIdList; } +const std::set< uint32_t >& getGuideIdList() +{ + if( m_GuideIdList.size() == 0 ) + loadIdList( m_GuideDat, m_GuideIdList ); + return m_GuideIdList; +} +const std::set< uint32_t >& getGuidePageIdList() +{ + if( m_GuidePageIdList.size() == 0 ) + loadIdList( m_GuidePageDat, m_GuidePageIdList ); + return m_GuidePageIdList; +} +const std::set< uint32_t >& getGuidePageStringIdList() +{ + if( m_GuidePageStringIdList.size() == 0 ) + loadIdList( m_GuidePageStringDat, m_GuidePageStringIdList ); + return m_GuidePageStringIdList; +} +const std::set< uint32_t >& getGuideTitleIdList() +{ + if( m_GuideTitleIdList.size() == 0 ) + loadIdList( m_GuideTitleDat, m_GuideTitleIdList ); + return m_GuideTitleIdList; +} const std::set< uint32_t >& getGuildleveAssignmentIdList() { if( m_GuildleveAssignmentIdList.size() == 0 ) @@ -8755,6 +9298,24 @@ const std::set< uint32_t >& getHowToPageIdList() loadIdList( m_HowToPageDat, m_HowToPageIdList ); return m_HowToPageIdList; } +const std::set< uint32_t >& getHugeCraftworksNpcIdList() +{ + if( m_HugeCraftworksNpcIdList.size() == 0 ) + loadIdList( m_HugeCraftworksNpcDat, m_HugeCraftworksNpcIdList ); + return m_HugeCraftworksNpcIdList; +} +const std::set< uint32_t >& getHugeCraftworksRankIdList() +{ + if( m_HugeCraftworksRankIdList.size() == 0 ) + loadIdList( m_HugeCraftworksRankDat, m_HugeCraftworksRankIdList ); + return m_HugeCraftworksRankIdList; +} +const std::set< uint32_t >& getIndividualWeatherIdList() +{ + if( m_IndividualWeatherIdList.size() == 0 ) + loadIdList( m_IndividualWeatherDat, m_IndividualWeatherIdList ); + return m_IndividualWeatherIdList; +} const std::set< uint32_t >& getInstanceContentIdList() { if( m_InstanceContentIdList.size() == 0 ) @@ -8833,6 +9394,18 @@ const std::set< uint32_t >& getItemUICategoryIdList() loadIdList( m_ItemUICategoryDat, m_ItemUICategoryIdList ); return m_ItemUICategoryIdList; } +const std::set< uint32_t >& getJobHudManualIdList() +{ + if( m_JobHudManualIdList.size() == 0 ) + loadIdList( m_JobHudManualDat, m_JobHudManualIdList ); + return m_JobHudManualIdList; +} +const std::set< uint32_t >& getJobHudManualPriorityIdList() +{ + if( m_JobHudManualPriorityIdList.size() == 0 ) + loadIdList( m_JobHudManualPriorityDat, m_JobHudManualPriorityIdList ); + return m_JobHudManualPriorityIdList; +} const std::set< uint32_t >& getJournalCategoryIdList() { if( m_JournalCategoryIdList.size() == 0 ) @@ -9001,6 +9574,18 @@ const std::set< uint32_t >& getMateriaIdList() loadIdList( m_MateriaDat, m_MateriaIdList ); return m_MateriaIdList; } +const std::set< uint32_t >& getMateriaJoinRateIdList() +{ + if( m_MateriaJoinRateIdList.size() == 0 ) + loadIdList( m_MateriaJoinRateDat, m_MateriaJoinRateIdList ); + return m_MateriaJoinRateIdList; +} +const std::set< uint32_t >& getMateriaJoinRateGatherCraftIdList() +{ + if( m_MateriaJoinRateGatherCraftIdList.size() == 0 ) + loadIdList( m_MateriaJoinRateGatherCraftDat, m_MateriaJoinRateGatherCraftIdList ); + return m_MateriaJoinRateGatherCraftIdList; +} const std::set< uint32_t >& getMiniGameRAIdList() { if( m_MiniGameRAIdList.size() == 0 ) @@ -9025,12 +9610,30 @@ const std::set< uint32_t >& getMinionSkillTypeIdList() loadIdList( m_MinionSkillTypeDat, m_MinionSkillTypeIdList ); return m_MinionSkillTypeIdList; } +const std::set< uint32_t >& getMobHuntOrderIdList() +{ + if( m_MobHuntOrderIdList.size() == 0 ) + loadIdList( m_MobHuntOrderDat, m_MobHuntOrderIdList ); + return m_MobHuntOrderIdList; +} const std::set< uint32_t >& getMobHuntOrderTypeIdList() { if( m_MobHuntOrderTypeIdList.size() == 0 ) loadIdList( m_MobHuntOrderTypeDat, m_MobHuntOrderTypeIdList ); return m_MobHuntOrderTypeIdList; } +const std::set< uint32_t >& getMobHuntRewardIdList() +{ + if( m_MobHuntRewardIdList.size() == 0 ) + loadIdList( m_MobHuntRewardDat, m_MobHuntRewardIdList ); + return m_MobHuntRewardIdList; +} +const std::set< uint32_t >& getMobHuntRewardCapIdList() +{ + if( m_MobHuntRewardCapIdList.size() == 0 ) + loadIdList( m_MobHuntRewardCapDat, m_MobHuntRewardCapIdList ); + return m_MobHuntRewardCapIdList; +} const std::set< uint32_t >& getMobHuntTargetIdList() { if( m_MobHuntTargetIdList.size() == 0 ) @@ -9127,6 +9730,12 @@ const std::set< uint32_t >& getNotebookDivisionCategoryIdList() loadIdList( m_NotebookDivisionCategoryDat, m_NotebookDivisionCategoryIdList ); return m_NotebookDivisionCategoryIdList; } +const std::set< uint32_t >& getNotoriousMonsterIdList() +{ + if( m_NotoriousMonsterIdList.size() == 0 ) + loadIdList( m_NotoriousMonsterDat, m_NotoriousMonsterIdList ); + return m_NotoriousMonsterIdList; +} const std::set< uint32_t >& getNpcEquipIdList() { if( m_NpcEquipIdList.size() == 0 ) @@ -9151,6 +9760,18 @@ const std::set< uint32_t >& getOnlineStatusIdList() loadIdList( m_OnlineStatusDat, m_OnlineStatusIdList ); return m_OnlineStatusIdList; } +const std::set< uint32_t >& getOpenContentIdList() +{ + if( m_OpenContentIdList.size() == 0 ) + loadIdList( m_OpenContentDat, m_OpenContentIdList ); + return m_OpenContentIdList; +} +const std::set< uint32_t >& getOpenContentCandidateNameIdList() +{ + if( m_OpenContentCandidateNameIdList.size() == 0 ) + loadIdList( m_OpenContentCandidateNameDat, m_OpenContentCandidateNameIdList ); + return m_OpenContentCandidateNameIdList; +} const std::set< uint32_t >& getOpeningIdList() { if( m_OpeningIdList.size() == 0 ) @@ -9577,6 +10198,18 @@ const std::set< uint32_t >& getSkyIsland2RangeTypeIdList() loadIdList( m_SkyIsland2RangeTypeDat, m_SkyIsland2RangeTypeIdList ); return m_SkyIsland2RangeTypeIdList; } +const std::set< uint32_t >& getSnipeTalkIdList() +{ + if( m_SnipeTalkIdList.size() == 0 ) + loadIdList( m_SnipeTalkDat, m_SnipeTalkIdList ); + return m_SnipeTalkIdList; +} +const std::set< uint32_t >& getSnipeTalkNameIdList() +{ + if( m_SnipeTalkNameIdList.size() == 0 ) + loadIdList( m_SnipeTalkNameDat, m_SnipeTalkNameIdList ); + return m_SnipeTalkNameIdList; +} const std::set< uint32_t >& getSpearfishingItemIdList() { if( m_SpearfishingItemIdList.size() == 0 ) @@ -9649,6 +10282,12 @@ const std::set< uint32_t >& getSubmarineExplorationIdList() loadIdList( m_SubmarineExplorationDat, m_SubmarineExplorationIdList ); return m_SubmarineExplorationIdList; } +const std::set< uint32_t >& getSubmarineMapIdList() +{ + if( m_SubmarineMapIdList.size() == 0 ) + loadIdList( m_SubmarineMapDat, m_SubmarineMapIdList ); + return m_SubmarineMapIdList; +} const std::set< uint32_t >& getSubmarinePartIdList() { if( m_SubmarinePartIdList.size() == 0 ) @@ -9925,6 +10564,18 @@ const std::set< uint32_t >& getWorldDCGroupTypeIdList() loadIdList( m_WorldDCGroupTypeDat, m_WorldDCGroupTypeIdList ); return m_WorldDCGroupTypeIdList; } +const std::set< uint32_t >& getYardCatalogCategoryIdList() +{ + if( m_YardCatalogCategoryIdList.size() == 0 ) + loadIdList( m_YardCatalogCategoryDat, m_YardCatalogCategoryIdList ); + return m_YardCatalogCategoryIdList; +} +const std::set< uint32_t >& getYardCatalogItemListIdList() +{ + if( m_YardCatalogItemListIdList.size() == 0 ) + loadIdList( m_YardCatalogItemListDat, m_YardCatalogItemListIdList ); + return m_YardCatalogItemListIdList; +} const std::set< uint32_t >& getYKWIdList() { if( m_YKWIdList.size() == 0 ) diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index f620b381..c5a32413 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -24,6 +24,9 @@ namespace Sapphire::Network::ActorControl SetStatus = 0x02, CastStart = 0x03, ToggleAggro = 0x04, + /*! + * param1 = ClassJob ID + */ ClassJobChange = 0x05, DefeatMsg = 0x06, GainExpMsg = 0x07, @@ -142,6 +145,15 @@ namespace Sapphire::Network::ActorControl SetPose = 0x127, + /*! + * This is used for general crafting events, I found some of them but some are missing: + * + * param1 = event type, the rest of the struct depends on this param. + * - 18 & 19: Quicksynth result, 19 means HQ result item, item ID is param2 and is + 1 000 000 when HQ. + * Quantity is param3 (possible quicksynth that gives more than one item in the future?) + * + * All the other values have unkown behavior for now. + */ CraftingUnk = 0x12C, GatheringSenseMsg = 0x130, @@ -175,6 +187,14 @@ namespace Sapphire::Network::ActorControl RelicInfuseMsg = 0x179, + /*! + * Sent as result of an aetherial reduction. + * param1 = Reduced item ID + 500 000 (idk what this 500 000 is but it's always here no matter what) + * param2 = First result item id (+ 1 000 000 if HQ) + * param3 = First result item quantity + * param4 = (Optional) Second result item id (+ 1 000 000 if HQ) + * param5 = (Optional) Second result item quantity + */ AetherReductionDlg = 0x17D, /*! @@ -208,11 +228,19 @@ namespace Sapphire::Network::ActorControl /*! * Sent when a player desynths an item, one packet per result type (one for consumed item, one for each obtained items, and one for exp if the player received exp) - * param1 = result type (4921 => Item consumed, 4922 => Item obtained, 4925 => Exp obtained) - * param3 = item id (used for result types 4921 & 4922) + * param1 = result type + * 4921 => Desynth item consumed + * 4922 => Desynth item obtained + * 4925 => Desynth exp obtained) + * 3553 => Reduction item used + * 3555 => Reduction item obtained + * param3 = u32 item id (+100 000 if item is HQ) + * param4 = item amount (used only for reduction it seems) * param5 = exp amount (x 100) + * + * Idk exactly how reduce's param3 is formatted, it seems like it's item id + 500 000 but it seems too... shady. */ - DesynthResult = 0x20F, + DesynthOrReductionResult = 0x20F, GilTrailMsg = 0x211, @@ -230,10 +258,14 @@ namespace Sapphire::Network::ActorControl GearSetEquipMsg = 0x321, + SetBait = 0x325, // param1: bait ID + SetFestival = 0x386, // param1: festival.exd index ToggleOrchestrionUnlock = 0x396, + EventBattleDialog = 0x39C, + /*! * param1 = mountSpeed * Retail sends 12 for mount speed star 1 unlocked and 15 for mount speed star 2 unlocked @@ -347,6 +379,12 @@ namespace Sapphire::Network::ActorControl EmoteReq = 0x1F4, EmoteCancel = 0x1F6, PersistentEmoteCancel = 0x1F7, + /*! + * param2 = pose ID + * 0 = idle pose 0 (just standing) + * 1 = idle pose 1 + * 2-4 = idle poses 2-4 + */ PoseChange = 0x1F9, PoseReapply = 0x1FA, PoseCancel = 0x1FB, @@ -355,6 +393,8 @@ namespace Sapphire::Network::ActorControl AchievementComp = 0x203, AchievementCatChat = 0x206, + RequestEventBattle = 0x232C, + QuestJournalUpdateQuestVisibility = 0x2BE, QuestJournalClosed = 0x2BF, diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index e57dd020..e58ee0fc 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -45,27 +45,32 @@ namespace Sapphire::Network::Packets { // static opcode ( the ones that rarely, if ever, change ) - Ping = 0x0065, - Init = 0x0066, + Ping = 0x0200, // updated 5.18 + Init = 0x018E, - ActorFreeSpawn = 0x0191, - InitZone = 0x019A, + ActorFreeSpawn = 0x009B, // updated 5.18 + InitZone = 0x007C, // updated 5.18 - EffectResult = 0x0141, - ActorControl = 0x0142, - ActorControlSelf = 0x0143, - ActorControlTarget = 0x0144, - UpdateHpMpTp = 0x0145, // used when resting + EffectResult = 0x0267, // updated 5.18 + ActorControl = 0x03BE, // updated 5.18 + ActorControlSelf = 0x00E3, // updated 5.18 + ActorControlTarget = 0x24d, // updated 5.18 + + /*! + * @brief Used when resting + */ + UpdateHpMpTp = 0x0125, // updated 5.18 /////////////////////////////////////////////////// ChatBanned = 0x006B, - Playtime = 0x0100, // updated 5.0 - Logout = 0x0077, // updated 5.0 - CFNotify = 0x0078, + Playtime = 0x00E7, // updated 5.18 + Logout = 0x142, // updated 5.18 + CFNotify = 0x01F8, // updated 5.18 CFMemberStatus = 0x0079, CFDutyInfo = 0x007A, CFPlayerInNeed = 0x007F, + CFPreferredRole = 0x032A, // added 5.18 SocialRequestError = 0x00AD, @@ -75,29 +80,29 @@ namespace Sapphire::Network::Packets LogMessage = 0x00D0, - Chat = 0x0104, // updated 5.0 + Chat = 0x02A3, // updated 5.18 WorldVisitList = 0x00FE, // added 4.5 - SocialList = 0x010D, // updated 5.0 + SocialList = 0x01F1, // updated 5.18 - ExamineSearchInfo = 0x010F, // added 5.0 - UpdateSearchInfo = 0x0110, // updated 5.0 - InitSearchInfo = 0x0111, // updated 5.0 + ExamineSearchInfo = 0x012B, // updated 5.18 + UpdateSearchInfo = 0x01E5, // updated 5.18 + InitSearchInfo = 0x01D0, // updated 5.18 ExamineSearchComment = 0x0102, // updated 4.1 ServerNoticeShort = 0x0115, // updated 5.0 - ServerNotice = 0x0116, // updated 5.0 - SetOnlineStatus = 0x0117, // updated 5.0 + ServerNotice = 0x0088, // updated 5.18 + SetOnlineStatus = 0x015E, // updated 5.1 - CountdownInitiate = 0x011E, // updated 5.0 - CountdownCancel = 0x011F, // updated 5.0 + CountdownInitiate = 0x0309, // updated 5.11 + CountdownCancel = 0x00D9, // updated 5.18 - PlayerAddedToBlacklist = 0x0120, // updated 5.0 - PlayerRemovedFromBlacklist = 0x0121, // updated 5.0 - BlackList = 0x0123, // updated 5.0 + PlayerAddedToBlacklist = 0x033F, // updated 5.1 + PlayerRemovedFromBlacklist = 0x0385, // updated 5.1 + BlackList = 0x0253, // updated 5.18 - LinkshellList = 0x012A, // updated 5.0 + LinkshellList = 0x00AC, // updated 5.18 MailDeleteRequest = 0x012B, // updated 5.0 @@ -106,10 +111,12 @@ namespace Sapphire::Network::Packets ReqMoogleMailLetter = 0x0139, // updated 5.0 MailLetterNotification = 0x013A, // updated 5.0 - MarketBoardItemListingCount = 0x013B, // updated 5.0 - MarketBoardItemListing = 0x013C, // updated 5.0 - MarketBoardItemListingHistory = 0x012A, // updated 4.5 - MarketBoardSearchResult = 0x0139, // updated 4.5 + MarketTaxRates = 0x025E, // updated 5.18 + + MarketBoardItemListingCount = 0x0328, // updated 5.18 + MarketBoardItemListing = 0x015F, // updated 5.18 + MarketBoardItemListingHistory = 0x0113, // updated 5.18 + MarketBoardSearchResult = 0x01EA, // updated 5.18 CharaFreeCompanyTag = 0x013B, // updated 4.5 FreeCompanyBoardMsg = 0x013C, // updated 4.5 @@ -118,94 +125,109 @@ namespace Sapphire::Network::Packets FreeCompanyUpdateShortMessage = 0x0157, // added 5.0 - 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 + StatusEffectList = 0x0183, // updated 5.18 + EurekaStatusEffectList = 0x0167, // updated 5.18 + BossStatusEffectList = 0x0312, // added 5.1 + Effect = 0x026B, // updated 5.18 + AoeEffect8 = 0x033E, // updated 5.18 + AoeEffect16 = 0x0305, // updated 5.18 + AoeEffect24 = 0x023F, // updated 5.18 + AoeEffect32 = 0x0352, // updated 5.18 + PersistantEffect = 0x019C, // updated 5.18 GCAffiliation = 0x016F, // updated 5.0 - PlayerSpawn = 0x017F, // updated 5.0 - NpcSpawn = 0x0180, // updated 5.0 - NpcSpawn2 = 0x0181, // ( Bigger statuseffectlist? ) updated 5.0 - ActorMove = 0x0182, // updated 5.0 + PlayerSpawn = 0x0262, // updated 5.18 + NpcSpawn = 0x0186, // updated 5.18 + NpcSpawn2 = 0x010C, // ( Bigger statuseffectlist? ) updated 5.18 + ActorMove = 0x021B, // updated 5.18 - ActorSetPos = 0x0184, // updated 5.0 + ActorSetPos = 0x0068, // updated 5.18 - ActorCast = 0x0186, // updated 5.0 - SomeCustomiseChangePacketProbably = 0x0187, // added 5.0 - 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 + ActorCast = 0x03B1, // updated 5.18 + SomeCustomiseChangePacketProbably = 0x00CD, // added 5.18 + + PartyList = 0x0287, // updated 5.18 + HateRank = 0x0226, // updated 5.18 + HateList = 0x0361, // updated 5.18 + ObjectSpawn = 0x027F, // updated 5.18 + ObjectDespawn = 0x034B, // updated 5.18 + UpdateClassInfo = 0x0362, // updated 5.18 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 = 0x0192, // updated 5.0 - PlayerStateFlags = 0x0193, // updated 5.0 - PlayerClassInfo = 0x0194, // updated 5.0 + PlayerSetup = 0x0295, // updated 5.18 + PlayerStats = 0x017A, // updated 5.18 + ActorOwner = 0x0322, // updated 5.11 + PlayerStateFlags = 0x02C6, // updated 5.18 + PlayerClassInfo = 0x01B0, // updated 5.18 - ModelEquip = 0x0196, // updated 5.0 - Examine = 0x0197, // updated 5.0 - CharaNameReq = 0x0198, // updated 5.0 + ModelEquip = 0x0170, // updated 5.11 + Examine = 0x0366, // updated 5.18 + CharaNameReq = 0x0116, // updated 5.18 // nb: see #565 on github UpdateRetainerItemSalePrice = 0x019F, // updated 5.0 SetLevelSync = 0x1186, // not updated for 4.4, not sure what it is anymore - ItemInfo = 0x01A1, // updated 5.0 - ContainerInfo = 0x01A2, // updated 5.0 - InventoryTransactionFinish = 0x01A3, // updated 5.0 - InventoryTransaction = 0x01A4, // updated 5.0 - CurrencyCrystalInfo = 0x01A5, // updated 5.0 + ItemInfo = 0x00F2, // updated 5.18 + ContainerInfo = 0x01F2, // updated 5.18 + InventoryTransactionFinish = 0x00D2, // updated 5.18 + InventoryTransaction = 0x0233, // updated 5.18 + CurrencyCrystalInfo = 0x02BF, // updated 5.18 - InventoryActionAck = 0x01A7, // updated 5.0 - UpdateInventorySlot = 0x01A8, // updated 5.0 + InventoryActionAck = 0x02FA, // updated 5.18 + UpdateInventorySlot = 0x0370, // updated 5.18 HuntingLogEntry = 0x01B3, // updated 5.0 - EventPlay = 0x01B5, // updated 5.0 - DirectorPlayScene = 0x01B9, // updated 5.0 - EventOpenGilShop = 0x01BC, // updated 5.0 + EventPlay = 0x0279, // updated 5.18 + EventPlay4 = 0x02F7, // updated 5.18 + EventPlay8 = 0x0119, // updated 5.18 + EventPlay16 = 0x01FB, // updated 5.18 + EventPlay32 = 0x0364, // updated 5.18 + EventPlay64 = 0x00E5, // updated 5.18 + EventPlay128 = 0x02BE, // updated 5.18 + EventPlay255 = 0x01B1, // updated 5.18 - EventStart = 0x01BE, // updated 5.0 - EventFinish = 0x01BF, // updated 5.0 + EventStart = 0x0230, // updated 5.18 + EventFinish = 0x01E4, // updated 5.18 + UseMooch = 0x0233, // updated 5.18 EventLinkshell = 0x1169, - QuestActiveList = 0x01D2, // updated 5.0 - QuestUpdate = 0x01D3, // updated 5.0 - QuestCompleteList = 0x01D4, // updated 5.0 + QuestActiveList = 0x031E, // updated 5.18 + QuestUpdate = 0x0066, // updated 5.18 + QuestCompleteList = 0x025D, // updated 5.18 - QuestFinish = 0x01D5, // updated 5.0 + QuestFinish = 0x013A, // updated 5.18 MSQTrackerComplete = 0x01D6, // updated 5.0 MSQTrackerProgress = 0xF1CD, // updated 4.5 ? this actually looks like the two opcodes have been combined, see #474 - QuestMessage = 0x01DE, // updated 5.0 + QuestMessage = 0x00BF, // updated 5.18 - QuestTracker = 0x01E3, // updated 5.0 + QuestTracker = 0x0289, // updated 5.18 - Mount = 0x01F3, // updated 5.0 + Mount = 0x02F0, // updated 5.18 - DirectorVars = 0x01F5, // updated 5.0 - DirectorPopUp = 0x0200, // updated 5.0 - display dialogue pop-ups in duties and FATEs, for example, Teraflare's countdown + DirectorVars = 0x00E6, // updated 5.18 + SomeDirectorUnk1 = 0x0084, // updated 5.18 + SomeDirectorUnk2 = 0x00C1, // updated 5.18 + SomeDirectorUnk4 = 0x0100, // updated 5.18 + SomeDirectorUnk8 = 0x028A, // updated 5.18 + SomeDirectorUnk16 = 0x028C, // updated 5.18 + DirectorPopUp = 0x0162, // updated 5.18 - display dialogue pop-ups in duties and FATEs, for example, Teraflare's countdown + DirectorPopUp4 = 0x0214, // updated 5.18 + DirectorPopUp8 = 0x00F8, // updated 5.18 CFAvailableContents = 0xF1FD, // updated 4.2 - WeatherChange = 0x0210, // updated 5.0 - PlayerTitleList = 0x0211, // updated 5.0 - Discovery = 0x0212, // updated 5.0 + WeatherChange = 0x02FB, // updated 5.11 + PlayerTitleList = 0x037D, // updated 5.1 + Discovery = 0x02E7, // updated 5.18 - EorzeaTimeOffset = 0x0214, // updated 5.0 + EorzeaTimeOffset = 0x03B8, // updated 5.1 - EquipDisplayFlags = 0x0220, // updated 5.0 + EquipDisplayFlags = 0x00FF, // updated 5.18 /// Housing ////////////////////////////////////// @@ -218,7 +240,7 @@ namespace Sapphire::Network::Packets LandRename = 0x023A, // updated 5.0 HousingEstateGreeting = 0x023B, // updated 5.0 HousingUpdateLandFlagsSlot = 0x023C, // updated 5.0 - HousingLandFlags = 0x023D, // updated 5.0 + HousingLandFlags = 0x01F3, // updated 5.18 HousingShowEstateGuestAccess = 0x023E, // updated 5.0 HousingObjectInitialize = 0x0240, // updated 5.0 @@ -238,12 +260,12 @@ namespace Sapphire::Network::Packets DuelChallenge = 0x0277, // 4.2; this is responsible for opening the ui PerformNote = 0x0286, // updated 4.3 - PrepareZoning = 0x02A4, // updated 5.0 - ActorGauge = 0x0292, // updated 4.3 + PrepareZoning = 0x035C, // updated 5.18 + ActorGauge = 0x016D, // updated 5.18 // daily quest info -> without them sent, login will take longer... - DailyQuests = 0x025E, // updated 5.0 - DailyQuestRepeatFlags = 0x0260, // updated 5.0 + DailyQuests = 0x02D8, // updated 5.18 + DailyQuestRepeatFlags = 0x03A3, // updated 5.18 /// Doman Mahjong ////////////////////////////////////// MahjongOpenGui = 0x02A4, // only available in mahjong instance @@ -264,37 +286,37 @@ namespace Sapphire::Network::Packets enum ClientZoneIpcType : uint16_t { - PingHandler = 0x0065, // unchanged 5.0 - InitHandler = 0x0066, // unchanged 5.0 + PingHandler = 0x0200, // updated 5.18 + InitHandler = 0x018E, // updated 5.18 - FinishLoadingHandler = 0x0069, // unchanged 5.0 + FinishLoadingHandler = 0x01F5, // updated 5.18 CFCommenceHandler = 0x006F, CFRegisterDuty = 0x0071, CFRegisterRoulette = 0x0072, - PlayTimeHandler = 0x0073, // unchanged 5.0 - LogoutHandler = 0x0074, // unchanged 5.0 - CancelLogout = 0x0075, // updated 5.0 + PlayTimeHandler = 0x0276, // updated 5.1 + LogoutHandler = 0x015D, // updated 5.18 + CancelLogout = 0x008F, // updated 5.1 CFDutyInfoHandler = 0x0078, // updated 4.2 SocialReqSendHandler = 0x00AE, // updated 4.1 CreateCrossWorldLS = 0x00AF, // updated 4.3 - ChatHandler = 0x00D9, // updated 5.0 + ChatHandler = 0x0130, // updated 5.18 - SocialListHandler = 0x00E1, // updated 5.0 - SetSearchInfoHandler = 0x00E4, // updated 5.0 - ReqSearchInfoHandler = 0x00E6, // updated 5.0 + SocialListHandler = 0x0090, // updated 5.18 + SetSearchInfoHandler = 0x0320, // updated 5.18 + ReqSearchInfoHandler = 0x0374, // updated 5.18 ReqExamineSearchCommentHandler = 0x00E7, // updated 5.0 ReqRemovePlayerFromBlacklist = 0x00F1, // updated 5.0 - BlackListHandler = 0x00F2, // updated 5.0 + BlackListHandler = 0x01EB, // updated 5.18 PlayerSearchHandler = 0x00F4, // updated 5.0 - LinkshellListHandler = 0x00FA, // updated 5.0 + LinkshellListHandler = 0x014A, // updated 5.18 MarketBoardRequestItemListingInfo = 0x0102, // updated 4.5 MarketBoardRequestItemListings = 0x0103, // updated 4.5 @@ -313,41 +335,41 @@ namespace Sapphire::Network::Packets ReqCountdownInitiate = 0x0135, // updated 5.0 ReqCountdownCancel = 0x0136, // updated 5.0 - ZoneLineHandler = 0x0139, // updated 5.0 - ClientTrigger = 0x013A, // updated 5.0 - DiscoveryHandler = 0x013B, // updated 5.0 + ZoneLineHandler = 0x0174, // updated 5.18 + ClientTrigger = 0x03C0, // updated 5.18 + DiscoveryHandler = 0x017B, // updated 5.18 PlaceFieldMarker = 0x013C, // updated 5.0 - - SkillHandler = 0x013D, // updated 5.0 - GMCommand1 = 0x013E, // updated 5.0 + SkillHandler = 0x01BE, // updated 5.18 + GMCommand1 = 0x00A4, // updated 5.1 GMCommand2 = 0x013F, // updated 5.0 AoESkillHandler = 0x140, // updated 5.0 - UpdatePositionHandler = 0x0141, // updated 5.0 + UpdatePositionHandler = 0x0318, // updated 5.18 - InventoryModifyHandler = 0x0148, // updated 5.0 + InventoryModifyHandler = 0x03C5, // updated 5.18 + InventoryEquipRecommendedItems = 0x0149, // updated 5.0 ReqPlaceHousingItem = 0x014B, // updated 5.0 BuildPresetHandler = 0x0150, // updated 5.0 - 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 = 0x0157, // updated 5.0 + TalkEventHandler = 0x02FD, // updated 5.18 + EmoteEventHandler = 0x0183, // updated 5.18 + WithinRangeEventHandler = 0x0167, // updated 5.18 + OutOfRangeEventHandler = 0x02B5, // updated 5.18 + EnterTeriEventHandler = 0x0267, // updated 5.18 + ShopEventHandler = 0x0156, // updated 5.0 - ReturnEventHandler = 0x015A, // updated 5.0? - TradeReturnEventHandler = 0x015B, // updated 5.0? + ReturnEventHandler = 0x026B, // updated 5.18 + TradeReturnEventHandler = 0x02DD, // updated 5.18 LinkshellEventHandler = 0x016B, // updated 4.5 LinkshellEventHandler1 = 0x016C, // updated 4.5 - ReqEquipDisplayFlagsChange = 0x0175, // updated 5.0 + ReqEquipDisplayFlagsChange = 0x01FE, // updated 5.18 - LandRenameHandler = 0x0177, // updated 5.0 + LandRenameHandler = 0xF177, // updated 5.0 HousingUpdateHouseGreeting = 0x0178, // updated 5.0 HousingUpdateObjectPosition = 0x0179, // updated 5.0 @@ -357,8 +379,6 @@ namespace Sapphire::Network::Packets PerformNoteHandler = 0x029B, // updated 4.3 - - }; //////////////////////////////////////////////////////////////////////////////// diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 49a5eea1..64a21aaf 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -244,6 +244,7 @@ namespace Sapphire::Network::Packets::Server uint8_t rank; uint16_t padding; uint8_t lsName[20]; + uint8_t unk[16]; } entry[8]; }; @@ -283,6 +284,15 @@ namespace Sapphire::Network::Packets::Server char unk2[0x4]; // This has probs something to do with the support desk (inquiry id?) }; + struct FFFXIVIpcMarketTaxRates : FFXIVIpcBasePacket< MarketTaxRates > + { + uint32_t unknown1; + uint16_t padding1; + uint16_t unknown2; + uint32_t taxRate[Common::TOWN_COUNT]; // In the order of Common::Town + uint64_t unknown3; + }; + struct FFFXIVIpcMarketBoardItemListingCount : FFXIVIpcBasePacket< MarketBoardItemListingCount > { uint32_t itemCatalogId; @@ -322,15 +332,7 @@ namespace Sapphire::Network::Packets::Server bool hq; uint8_t materiaCount; uint8_t onMannequin; - /** - * 0x01 Limsa Lominsa - * 0x02 Gridania - * 0x03 Ul'dah - * 0x04 Ishgard - * 0x07 Kugane - * 0x0A Crystarium - */ - uint8_t retainerCity; + Common::Town marketCity; uint16_t dyeId; uint16_t padding3; uint32_t padding4; @@ -439,15 +441,25 @@ namespace Sapphire::Network::Packets::Server { uint32_t unknown; uint32_t actor_id; - uint8_t unknown1; - uint8_t unknown2; - uint16_t padding1; + //uint8_t unknown1; + //uint8_t unknown2; + //uint16_t padding1; + //uint32_t current_hp; + //uint16_t current_mp; + //uint16_t current_tp; + //uint32_t max_hp; + //uint16_t max_mp; + //uint16_t max_something; uint32_t current_hp; - uint16_t current_mp; - uint16_t current_tp; uint32_t max_hp; + uint16_t current_mp; + uint16_t unknown1; uint16_t max_mp; - uint16_t max_something; + uint8_t unknown2; + uint8_t classId; + uint8_t unknown4; + uint8_t unkFlag; + uint16_t unknown6; struct StatusEntry { @@ -460,7 +472,7 @@ namespace Sapphire::Network::Packets::Server uint32_t sourceActorId; } statusEntries[4]; - uint32_t unknown4; + uint32_t unknown7; }; /** @@ -693,8 +705,8 @@ namespace Sapphire::Network::Packets::Server uint8_t mountFeet; uint8_t mountColor; uint8_t scale; - uint32_t u29b; - uint32_t u30b; + uint32_t elementalLevel; + uint32_t element; Common::StatusEffect effect[30]; Common::FFXIVARR_POSITION3 pos; uint32_t models[10]; @@ -929,8 +941,10 @@ namespace Sapphire::Network::Packets::Server uint32_t unknown10; uint32_t unknown11; uint32_t unknown12[4]; + uint32_t unknown13[3]; Common::FFXIVARR_POSITION3 pos; - uint32_t unknown13; + uint32_t unknown14[3]; + uint32_t unknown15; }; @@ -1027,6 +1041,7 @@ namespace Sapphire::Network::Packets::Server unsigned char companionHealRank; unsigned char u19[2]; unsigned char mountGuideMask[19]; + uint8_t unk1[9]; char name[32]; unsigned char unknownOword[16]; unsigned char unknownOw; @@ -1406,11 +1421,24 @@ namespace Sapphire::Network::Packets::Server uint8_t unknown[8]; }; + template< int ArgCount > + struct FFXIVIpcEventPlayN + { + uint64_t actorId; + uint32_t eventId; + uint16_t scene; + uint16_t padding; + uint32_t sceneFlags; + uint8_t paramCount; + uint8_t padding2[3]; + uint32_t params[ArgCount]; + }; + /** * Structural representation of the packet sent by the server * to play an event */ - struct FFXIVIpcDirectorPlayScene : FFXIVIpcBasePacket< DirectorPlayScene > + struct FFXIVIpcDirectorPlayScene : FFXIVIpcBasePacket< EventPlay32 > { uint64_t actorId; uint32_t eventId; @@ -1439,15 +1467,10 @@ namespace Sapphire::Network::Packets::Server /* 000C */ uint32_t padding1; }; - struct FFXIVIpcEventOpenGilShop : FFXIVIpcBasePacket< EventOpenGilShop > + struct FFXIVIpcEventPlay255 : + FFXIVIpcBasePacket< EventPlay255 >, + FFXIVIpcEventPlayN< 255 > { - uint64_t actorId; - uint32_t eventId; - uint16_t scene; - uint16_t padding; - uint32_t sceneFlags; - - uint32_t unknown_wtf[0x101]; }; @@ -1495,7 +1518,7 @@ namespace Sapphire::Network::Packets::Server struct FFXIVIpcQuestCompleteList : FFXIVIpcBasePacket< QuestCompleteList > { uint8_t questCompleteMask[480]; - uint8_t unknownCompleteMask[32]; + uint8_t unknownCompleteMask[80]; }; /** diff --git a/src/scripts/common/aethernet/Aetheryte.cpp b/src/scripts/common/aethernet/Aetheryte.cpp index 2ba4f14a..cc5afb92 100644 --- a/src/scripts/common/aethernet/Aetheryte.cpp +++ b/src/scripts/common/aethernet/Aetheryte.cpp @@ -59,7 +59,8 @@ public: { if( player.isAetheryteRegistered( eventId & 0xFFFF ) ) { - player.playScene( eventId, 0, 1, [this]( Entity::Player& player, const Event::SceneResult& result ) + // eventParam4 (or params[1] if using EventPlay8, which is actually used on retail) anything bigger than 1 will show select instance menu item + player.playScene( eventId, 0, 1, 0, 1, 2, [this]( Entity::Player& player, const Event::SceneResult& result ) { if( result.param1 == 256 ) // set homepoint { diff --git a/src/tools/event_object_parser/instance.tmpl b/src/tools/event_object_parser/instance.tmpl index 18073304..c8188474 100644 --- a/src/tools/event_object_parser/instance.tmpl +++ b/src/tools/event_object_parser/instance.tmpl @@ -14,7 +14,7 @@ public: EOBJ_INIT } - void onUpdate( InstanceContent& instance, uint32_t currTime ) override + void onUpdate( InstanceContent& instance, uint64_t tickCount ) override { } diff --git a/src/tools/event_object_parser/main.cpp b/src/tools/event_object_parser/main.cpp index 89d7aaad..3e726a44 100644 --- a/src/tools/event_object_parser/main.cpp +++ b/src/tools/event_object_parser/main.cpp @@ -137,7 +137,7 @@ void loadAllInstanceContentEntries() if( !ic ) continue; type = ic->instanceContentType; - name = ic->name; + name = cfc->name; } else if( cfc->contentLinkType == 5 ) { diff --git a/src/tools/event_object_parser/questbattle.tmpl b/src/tools/event_object_parser/questbattle.tmpl index cc161d97..9e7d968c 100644 --- a/src/tools/event_object_parser/questbattle.tmpl +++ b/src/tools/event_object_parser/questbattle.tmpl @@ -16,7 +16,7 @@ public: EOBJ_INIT } - void onUpdate( QuestBattle& instance, uint32_t currTime ) override + void onUpdate( QuestBattle& instance, uint64_t tickCount ) override { } diff --git a/src/tools/exd_struct_gen/main.cpp b/src/tools/exd_struct_gen/main.cpp index c418dd61..1fbcb042 100644 --- a/src/tools/exd_struct_gen/main.cpp +++ b/src/tools/exd_struct_gen/main.cpp @@ -127,8 +127,17 @@ std::string generateStruct( const std::string& exd ) } auto sheet = nlohmann::json(); - std::ifstream defJson( path ); - defJson >> sheet; + + try + { + std::ifstream defJson( path ); + defJson >> sheet; + } + catch( const std::exception& ex ) + { + Logger::error( "Failed parsing json definition, err: {} file: {}", ex.what(), path ); + return ""; + } for( auto& definition : sheet[ "definitions" ] ) { diff --git a/src/world/Action/Action.cpp b/src/world/Action/Action.cpp index 2fb1fb4c..871473e6 100644 --- a/src/world/Action/Action.cpp +++ b/src/world/Action/Action.cpp @@ -206,7 +206,7 @@ bool Action::Action::update() uint64_t tickCount = Common::Util::getTimeMs(); - if( !hasCastTime() || std::difftime( tickCount, m_startTime ) > m_castTimeMs ) + if( !hasCastTime() || std::difftime( static_cast< time_t >( tickCount ), static_cast< time_t >( m_startTime ) ) > m_castTimeMs ) { execute(); return true; @@ -257,7 +257,7 @@ void Action::Action::start() auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >(); // check the lut too and see if we have something usable, otherwise cancel the cast - if( !pScriptMgr->onStart( *this ) && !ActionLut::validEntryExists( getId() ) ) + if( !pScriptMgr->onStart( *this ) && !ActionLut::validEntryExists( static_cast< uint16_t >( getId() ) ) ) { // script not implemented and insufficient lut data (no potencies) interrupt(); @@ -391,8 +391,9 @@ void Action::Action::buildEffects() snapshotAffectedActors( m_hitActors ); auto pScriptMgr = m_pFw->get< Scripting::ScriptMgr >(); + auto hasLutEntry = ActionLut::validEntryExists( static_cast< uint16_t >( getId() ) ); - if( !pScriptMgr->onExecute( *this ) && !ActionLut::validEntryExists( getId() ) ) + if( !pScriptMgr->onExecute( *this ) && !hasLutEntry ) { if( auto player = m_pSource->getAsPlayer() ) { @@ -402,10 +403,10 @@ void Action::Action::buildEffects() return; } - if( m_hitActors.empty() ) + if( !hasLutEntry || m_hitActors.empty() ) return; - auto lutEntry = ActionLut::getEntry( getId() ); + auto lutEntry = ActionLut::getEntry( static_cast< uint16_t >( getId() ) ); // no script exists but we have a valid lut entry if( auto player = getSourceChara()->getAsPlayer() ) @@ -545,11 +546,11 @@ bool Action::Action::primaryCostCheck( bool subtractCosts ) auto cost = m_primaryCost * 100; - if( curMp < cost ) + if( curMp < static_cast< uint32_t >( cost ) ) return false; if( subtractCosts ) - m_pSource->setMp( curMp - cost ); + m_pSource->setMp( curMp - static_cast< uint32_t >( cost ) ); return true; } diff --git a/src/world/Actor/BNpc.cpp b/src/world/Actor/BNpc.cpp index d133766e..38d9a15c 100644 --- a/src/world/Actor/BNpc.cpp +++ b/src/world/Actor/BNpc.cpp @@ -301,7 +301,7 @@ Sapphire::Entity::CharaPtr Sapphire::Entity::BNpc::hateListGetHighest() void Sapphire::Entity::BNpc::hateListAdd( Sapphire::Entity::CharaPtr pChara, int32_t hateAmount ) { auto hateEntry = std::make_shared< HateListEntry >(); - hateEntry->m_hateAmount = hateAmount; + hateEntry->m_hateAmount = static_cast< uint32_t >( hateAmount ); hateEntry->m_pChara = pChara; m_hateList.insert( hateEntry ); @@ -318,13 +318,13 @@ void Sapphire::Entity::BNpc::hateListUpdate( Sapphire::Entity::CharaPtr pChara, { if( listEntry->m_pChara == pChara ) { - listEntry->m_hateAmount += hateAmount; + listEntry->m_hateAmount += static_cast< uint32_t >( hateAmount ); return; } } auto hateEntry = std::make_shared< HateListEntry >(); - hateEntry->m_hateAmount = hateAmount; + hateEntry->m_hateAmount = static_cast< uint32_t >( hateAmount ); hateEntry->m_pChara = pChara; m_hateList.insert( hateEntry ); } @@ -590,7 +590,7 @@ void Sapphire::Entity::BNpc::onDeath() // TODO: handle drops auto pPlayer = pHateEntry->m_pChara->getAsPlayer(); if( pPlayer ) - pPlayer->onMobKill( m_bNpcNameId ); + pPlayer->onMobKill( static_cast< uint16_t >( m_bNpcNameId ) ); } hateListClear(); } @@ -654,7 +654,7 @@ void Sapphire::Entity::BNpc::setOwner( Sapphire::Entity::CharaPtr m_pChara ) { auto setOwnerPacket = makeZonePacket< FFXIVIpcActorOwner >( getId() ); setOwnerPacket->data().type = 0x01; - setOwnerPacket->data().actorId = INVALID_GAME_OBJECT_ID; + setOwnerPacket->data().actorId = static_cast< uint32_t >( INVALID_GAME_OBJECT_ID ); sendToInRangeSet( setOwnerPacket ); } } @@ -697,7 +697,7 @@ void Sapphire::Entity::BNpc::autoAttack( CharaPtr pTarget ) auto effectPacket = std::make_shared< Server::EffectPacket >( getId(), pTarget->getId(), 7 ); effectPacket->setRotation( Util::floatToUInt16Rot( getRot() ) ); Common::EffectEntry effectEntry{}; - effectEntry.value = damage; + effectEntry.value = static_cast< int16_t >( damage ); effectEntry.effectType = ActionEffectType::Damage; effectEntry.hitSeverity = ActionHitSeverityType::NormalDamage; effectEntry.param = 0x71; @@ -705,7 +705,7 @@ void Sapphire::Entity::BNpc::autoAttack( CharaPtr pTarget ) sendToInRangeSet( effectPacket ); - pTarget->takeDamage( damage ); + pTarget->takeDamage( static_cast< uint16_t >( damage ) ); } } @@ -727,17 +727,17 @@ void Sapphire::Entity::BNpc::calculateStats() m_baseStats.vit = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierVitality ) / 100 ) ); m_baseStats.inte = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierIntelligence ) / 100 ) ); m_baseStats.mnd = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierMind ) / 100 ) ); - m_baseStats.pie = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierPiety ) / 100 ) ); + //m_baseStats.pie = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierPiety ) / 100 ) ); m_baseStats.determination = static_cast< uint32_t >( base ); m_baseStats.pie = static_cast< uint32_t >( base ); - m_baseStats.skillSpeed = paramGrowthInfo->baseSpeed; - m_baseStats.spellSpeed = paramGrowthInfo->baseSpeed; - m_baseStats.accuracy = paramGrowthInfo->baseSpeed; - m_baseStats.critHitRate = paramGrowthInfo->baseSpeed; - m_baseStats.attackPotMagic = paramGrowthInfo->baseSpeed; - m_baseStats.healingPotMagic = paramGrowthInfo->baseSpeed; - m_baseStats.tenacity = paramGrowthInfo->baseSpeed; + m_baseStats.skillSpeed = static_cast< uint32_t >( paramGrowthInfo->baseSpeed ); + m_baseStats.spellSpeed = static_cast< uint32_t >( paramGrowthInfo->baseSpeed ); + m_baseStats.accuracy = static_cast< uint32_t >( paramGrowthInfo->baseSpeed ); + m_baseStats.critHitRate = static_cast< uint32_t >( paramGrowthInfo->baseSpeed ); + m_baseStats.attackPotMagic = static_cast< uint32_t >( paramGrowthInfo->baseSpeed ); + m_baseStats.healingPotMagic = static_cast< uint32_t >( paramGrowthInfo->baseSpeed ); + m_baseStats.tenacity = static_cast< uint32_t >( paramGrowthInfo->baseSpeed ); m_baseStats.attack = m_baseStats.str; m_baseStats.attackPotMagic = m_baseStats.inte; diff --git a/src/world/Actor/Chara.cpp b/src/world/Actor/Chara.cpp index 70656675..cd187840 100644 --- a/src/world/Actor/Chara.cpp +++ b/src/world/Actor/Chara.cpp @@ -245,14 +245,14 @@ void Sapphire::Entity::Chara::setMp( uint32_t mp ) /*! \param gp amount to set*/ void Sapphire::Entity::Chara::setGp( uint32_t gp ) { - m_gp = gp; + m_gp = static_cast< uint16_t >( gp ); sendStatusUpdate(); } /*! \param tp amount to set*/ void Sapphire::Entity::Chara::setTp( uint32_t tp ) { - m_tp = tp; + m_tp = static_cast< uint16_t >( tp ); sendStatusUpdate(); } @@ -316,7 +316,7 @@ bool Sapphire::Entity::Chara::face( const Common::FFXIVARR_POSITION3& p ) setRot( newRot ); - return oldRot != newRot; + return ( fabs( oldRot - newRot ) <= std::numeric_limits< float >::epsilon() * fmax( fabs( oldRot ), fabs( newRot ) ) ); } /*! @@ -354,14 +354,14 @@ bool Sapphire::Entity::Chara::checkAction() void Sapphire::Entity::Chara::update( uint64_t tickCount ) { - if( std::difftime( tickCount, m_lastTickTime ) > 3000 ) + if( std::difftime( static_cast< time_t >( tickCount ), m_lastTickTime ) > 3000 ) { onTick(); - m_lastTickTime = tickCount; + m_lastTickTime = static_cast< time_t >( tickCount ); } - m_lastUpdate = tickCount; + m_lastUpdate = static_cast< time_t >( tickCount ); } /*! @@ -494,7 +494,7 @@ void Sapphire::Entity::Chara::autoAttack( CharaPtr pTarget ) auto effectPacket = std::make_shared< Server::EffectPacket >( getId(), pTarget->getId(), 7 ); effectPacket->setRotation( Util::floatToUInt16Rot( getRot() ) ); Common::EffectEntry effectEntry{}; - effectEntry.value = damage; + effectEntry.value = static_cast< int16_t >( damage ); effectEntry.effectType = ActionEffectType::Damage; effectEntry.hitSeverity = ActionHitSeverityType::NormalDamage; effectEntry.param = 0x71; @@ -522,19 +522,21 @@ void Sapphire::Entity::Chara::addStatusEffect( StatusEffect::StatusEffectPtr pEf statusEffectAdd->data().actor_id = pEffect->getTargetActorId(); statusEffectAdd->data().current_hp = getHp(); - statusEffectAdd->data().current_mp = getMp(); - statusEffectAdd->data().current_tp = getTp(); + statusEffectAdd->data().current_mp = static_cast< uint16_t >( getMp() ); + //statusEffectAdd->data().current_tp = getTp(); statusEffectAdd->data().max_hp = getMaxHp(); - statusEffectAdd->data().max_mp = getMaxMp(); - statusEffectAdd->data().max_something = 1; + statusEffectAdd->data().max_mp = static_cast< uint16_t >( getMaxMp() ); + //statusEffectAdd->data().max_something = 1; //statusEffectAdd->data().unknown2 = 28; + statusEffectAdd->data().classId = static_cast< uint8_t >(getClass()); + statusEffectAdd->data().unkFlag = 1; auto& status = statusEffectAdd->data().statusEntries[0]; status.sourceActorId = pEffect->getSrcActorId(); status.duration = static_cast< float >( pEffect->getDuration() ) / 1000; - status.id = pEffect->getId(); - status.index = nextSlot; + status.id = static_cast< uint16_t >( pEffect->getId() ); + status.index = static_cast< uint8_t >( nextSlot ); status.param = pEffect->getParam(); sendToInRangeSet( statusEffectAdd, isPlayer() ); @@ -568,7 +570,7 @@ int8_t Sapphire::Entity::Chara::getStatusEffectFreeSlot() if( m_statusEffectFreeSlotQueue.empty() ) return freeEffectSlot; - freeEffectSlot = m_statusEffectFreeSlotQueue.front(); + freeEffectSlot = static_cast< int8_t >( m_statusEffectFreeSlotQueue.front() ); m_statusEffectFreeSlotQueue.pop(); return freeEffectSlot; @@ -929,4 +931,4 @@ uint32_t Sapphire::Entity::Chara::getStatValue( Sapphire::Common::BaseParam base } return value + getBonusStat( baseParam ); -} \ No newline at end of file +} diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index be04212b..c2be386f 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -272,8 +272,8 @@ void Sapphire::Entity::Player::calculateStats() tribeInfo->iNT ); m_baseStats.mnd = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierMind ) / 100 ) + tribeInfo->mND ); - m_baseStats.pie = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierPiety ) / 100 ) + - tribeInfo->pIE ); + /*m_baseStats.pie = static_cast< uint32_t >( base * ( static_cast< float >( classInfo->modifierPiety ) / 100 ) + + tribeInfo->pIE );*/ m_baseStats.determination = static_cast< uint32_t >( base ); m_baseStats.pie = static_cast< uint32_t >( base ); @@ -384,7 +384,7 @@ void Sapphire::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type ) // TODO: this should be simplified and a type created in server_common/common.h. if( type == 1 ) // teleport { - prepareZoning( data->territory, true, 1, 112 ); // TODO: Really? + prepareZoning( data->territory, true, 1, 0 ); // TODO: Really? sendToInRangeSet( makeActorControl( getId(), ActorDespawnEffect, 0x04 ) ); setZoningType( Common::ZoneingType::Teleport ); } diff --git a/src/world/Actor/PlayerEvent.cpp b/src/world/Actor/PlayerEvent.cpp index b4fb05a1..15c84470 100644 --- a/src/world/Actor/PlayerEvent.cpp +++ b/src/world/Actor/PlayerEvent.cpp @@ -141,7 +141,7 @@ void Sapphire::Entity::Player::playGilShop( uint32_t eventId, uint32_t flags, pEvent->setEventReturnCallback( eventCallback ); pEvent->setSceneChainCallback( nullptr ); - auto openGilShopPacket = makeZonePacket< Server::FFXIVIpcEventOpenGilShop >( getId() ); + auto openGilShopPacket = makeZonePacket< Server::FFXIVIpcEventPlay255 >( getId() ); openGilShopPacket->data().eventId = eventId; openGilShopPacket->data().sceneFlags = flags; openGilShopPacket->data().actorId = getId(); diff --git a/src/world/Actor/PlayerInventory.cpp b/src/world/Actor/PlayerInventory.cpp index 211d2f40..fe89ca81 100644 --- a/src/world/Actor/PlayerInventory.cpp +++ b/src/world/Actor/PlayerInventory.cpp @@ -593,6 +593,8 @@ Sapphire::ItemPtr Sapphire::Entity::Player::addItem( uint32_t catalogId, uint32_ quantity = newStackSize - maxStack; newStackSize = maxStack; } + else + quantity = 0; item->setStackSize( newStackSize ); writeItem( item ); @@ -605,6 +607,11 @@ Sapphire::ItemPtr Sapphire::Entity::Player::addItem( uint32_t catalogId, uint32_ { queuePacket( makeActorControlSelf( getId(), ItemObtainIcon, catalogId, originalQuantity ) ); + auto soundEffectPacket = makeZonePacket< FFXIVIpcInventoryActionAck >( getId() ); + soundEffectPacket->data().sequence = 0xFFFFFFFF; + soundEffectPacket->data().type = 6; + queuePacket( soundEffectPacket ); + return item; } @@ -636,6 +643,11 @@ Sapphire::ItemPtr Sapphire::Entity::Player::addItem( uint32_t catalogId, uint32_ queuePacket( invUpdate ); queuePacket( makeActorControlSelf( getId(), ItemObtainIcon, catalogId, originalQuantity ) ); + + auto soundEffectPacket = makeZonePacket< FFXIVIpcInventoryActionAck >( getId() ); + soundEffectPacket->data().sequence = 0xFFFFFFFF; + soundEffectPacket->data().type = 6; + queuePacket( soundEffectPacket ); } return item; @@ -666,7 +678,9 @@ Sapphire::Entity::Player::moveItem( uint16_t fromInventoryId, uint8_t fromSlotId if( static_cast< InventoryType >( fromInventoryId ) == GearSet0 ) unequipItem( static_cast< GearSetSlot >( fromSlotId ), tmpItem, true ); - + if( static_cast< InventoryType >( toInventoryId ) == GearSet0 || + static_cast< InventoryType >( fromInventoryId ) == GearSet0 ) + sendStatusEffectUpdate(); // send if any equip is changed } bool Sapphire::Entity::Player::updateContainer( uint16_t storageId, uint8_t slotId, ItemPtr pItem ) @@ -801,6 +815,10 @@ void Sapphire::Entity::Player::swapItem( uint16_t fromInventoryId, uint8_t fromS updateContainer( toInventoryId, toSlot, fromItem ); updateContainer( fromInventoryId, fromSlotId, toItem ); + + if( static_cast< InventoryType >( toInventoryId ) == GearSet0 || + static_cast< InventoryType >( fromInventoryId ) == GearSet0 ) + sendStatusEffectUpdate(); // send if any equip is changed } void Sapphire::Entity::Player::discardItem( uint16_t fromInventoryId, uint8_t fromSlotId ) diff --git a/src/world/Actor/PlayerQuest.cpp b/src/world/Actor/PlayerQuest.cpp index e503a273..444569b0 100644 --- a/src/world/Actor/PlayerQuest.cpp +++ b/src/world/Actor/PlayerQuest.cpp @@ -15,14 +15,19 @@ using namespace Sapphire::Network::Packets::Server; void Sapphire::Entity::Player::finishQuest( uint16_t questId ) { - int8_t idx = getQuestIndex( questId ); removeQuest( questId ); + + auto questFinishPacket = makeZonePacket< FFXIVIpcQuestFinish >( getId() ); + questFinishPacket->data().questId = questId; + questFinishPacket->data().flag1 = 1; + questFinishPacket->data().flag2 = 1; + queuePacket( questFinishPacket ); + updateQuestsCompleted( questId ); - sendQuestTracker(); - + //sendQuestTracker(); already sent in removeQuest() } void Sapphire::Entity::Player::unfinishQuest( uint16_t questId ) @@ -33,24 +38,16 @@ void Sapphire::Entity::Player::unfinishQuest( uint16_t questId ) void Sapphire::Entity::Player::removeQuest( uint16_t questId ) { - int8_t idx = getQuestIndex( questId ); if( ( idx != -1 ) && ( m_activeQuests[ idx ] != nullptr ) ) { - auto questUpdatePacket = makeZonePacket< FFXIVIpcQuestUpdate >( getId() ); questUpdatePacket->data().slot = static_cast< uint8_t >( idx ); questUpdatePacket->data().questInfo.c.questId = 0; questUpdatePacket->data().questInfo.c.sequence = 0xFF; queuePacket( questUpdatePacket ); - auto questFinishPacket = makeZonePacket< FFXIVIpcQuestFinish >( getId() ); - questFinishPacket->data().questId = questId; - questFinishPacket->data().flag1 = 1; - questFinishPacket->data().flag2 = 1; - queuePacket( questFinishPacket ); - for( int32_t ii = 0; ii < 5; ii++ ) { if( m_questTracking[ ii ] == idx ) @@ -67,7 +64,6 @@ void Sapphire::Entity::Player::removeQuest( uint16_t questId ) } sendQuestTracker(); - } bool Sapphire::Entity::Player::hasQuest( uint32_t questId ) @@ -1067,7 +1063,7 @@ bool Sapphire::Entity::Player::giveQuestRewards( uint32_t questId, uint32_t opti if( rewardItemCount > 0 ) { - for( uint32_t i = 0; i < questInfo->itemReward0.size(); i++ ) + for( uint32_t i = 0; i < rewardItemCount; i++ ) { addItem( questInfo->itemReward0.at( i ), questInfo->itemCountReward0.at( i ) ); } @@ -1075,8 +1071,15 @@ bool Sapphire::Entity::Player::giveQuestRewards( uint32_t questId, uint32_t opti if( optionalItemCount > 0 ) { - auto itemId = questInfo->itemReward1.at( optionalChoice ); - addItem( itemId, questInfo->itemCountReward1.at( optionalChoice ) ); + for( uint32_t i = 0; i < optionalItemCount; i++ ) + { + auto itemId = questInfo->itemReward1.at( i ); + if( itemId == optionalChoice ) + { + addItem( itemId, questInfo->itemCountReward1.at( i ) ); + break; + } + } } if( gilReward > 0 ) diff --git a/src/world/Actor/PlayerSql.cpp b/src/world/Actor/PlayerSql.cpp index 61bac0a7..5a8edafb 100644 --- a/src/world/Actor/PlayerSql.cpp +++ b/src/world/Actor/PlayerSql.cpp @@ -217,6 +217,10 @@ bool Sapphire::Entity::Player::load( uint32_t charId, World::SessionPtr pSession m_modelSubWeapon = 0; m_lastTickTime = 0; + //m_pInventory->load(); + + initInventory(); // moved up so we don't lose hp every login + calculateStats(); // first login, run the script event @@ -242,10 +246,6 @@ bool Sapphire::Entity::Player::load( uint32_t charId, World::SessionPtr pSession setStateFlag( PlayerStateFlag::BetweenAreas ); - //m_pInventory->load(); - - initInventory(); - initHateSlotQueue(); initSpawnIdQueue(); diff --git a/src/world/Linkshell/Linkshell.h b/src/world/Linkshell/Linkshell.h index 31d32717..7fe91864 100644 --- a/src/world/Linkshell/Linkshell.h +++ b/src/world/Linkshell/Linkshell.h @@ -3,6 +3,7 @@ #include #include +#include namespace Sapphire { diff --git a/src/world/Manager/DebugCommandMgr.cpp b/src/world/Manager/DebugCommandMgr.cpp index 1fb97d66..af8fe6c7 100644 --- a/src/world/Manager/DebugCommandMgr.cpp +++ b/src/world/Manager/DebugCommandMgr.cpp @@ -200,7 +200,7 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player& int32_t aetheryteId; sscanf( params.c_str(), "%i", &aetheryteId ); - player.teleport( aetheryteId ); + player.teleport( static_cast< uint16_t >( aetheryteId ) ); } else if( ( subCommand == "discovery" ) && ( params != "" ) ) { @@ -209,8 +209,8 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player& sscanf( params.c_str(), "%i %i", &map_id, &discover_id ); auto discoveryPacket = makeZonePacket< FFXIVIpcDiscovery >( player.getId() ); - discoveryPacket->data().mapId = map_id; - discoveryPacket->data().mapPartId = discover_id; + discoveryPacket->data().mapId = static_cast< uint32_t >( map_id ); + discoveryPacket->data().mapPartId = static_cast< uint32_t >( discover_id ); player.queuePacket( discoveryPacket ); } else if( subCommand == "discovery_reset" ) @@ -237,7 +237,7 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player& int32_t minutes; sscanf( params.c_str(), "%d", &minutes ); - player.setCFPenaltyMinutes( minutes ); + player.setCFPenaltyMinutes( static_cast< uint32_t >( minutes ) ); } else if( subCommand == "eorzeatime" ) { @@ -253,7 +253,7 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player& sscanf( params.c_str(), "%d", &id ); player.dismount(); - player.mount( id ); + player.mount( static_cast< uint32_t >( id ) ); } else if( subCommand == "msqguide" ) { @@ -261,7 +261,7 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player& sscanf( params.c_str(), "%d", &id ); auto msqPacket = makeZonePacket< FFXIVIpcMSQTrackerProgress >( player.getId() ); - msqPacket->data().id = id; + msqPacket->data().id = static_cast< uint32_t >( id ); player.queuePacket( msqPacket ); player.sendDebug( "MSQ Guide updated " ); @@ -272,7 +272,7 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player& sscanf( params.c_str(), "%d", &id ); auto msqPacket = makeZonePacket< FFXIVIpcMSQTrackerComplete >( player.getId() ); - msqPacket->data().id = id; + msqPacket->data().id = static_cast< uint32_t >( id ); player.queuePacket( msqPacket ); player.sendDebug( "MSQ Guide updated " ); @@ -413,7 +413,7 @@ void Sapphire::World::Manager::DebugCommandMgr::add( char* data, Entity::Player& uint32_t titleId; sscanf( params.c_str(), "%u", &titleId ); - player.addTitle( titleId ); + player.addTitle( static_cast< uint16_t >( titleId ) ); player.sendNotice( "Added title (id#{0})", titleId ); } else if( subCommand == "bnpc" ) @@ -474,13 +474,13 @@ void Sapphire::World::Manager::DebugCommandMgr::add( char* data, Entity::Player& player.sendNotice( "Injecting ACTOR_CONTROL {0}", opcode ); auto actorControl = makeZonePacket< FFXIVIpcActorControlSelf >( playerId, player.getId() ); - actorControl->data().category = opcode; - actorControl->data().param1 = param1; - actorControl->data().param2 = param2; - actorControl->data().param3 = param3; - actorControl->data().param4 = param4; - actorControl->data().param5 = param5; - actorControl->data().param6 = param6; + actorControl->data().category = static_cast< uint16_t >( opcode ); + actorControl->data().param1 = static_cast< uint16_t >( param1 ); + actorControl->data().param2 = static_cast< uint16_t >( param2 ); + actorControl->data().param3 = static_cast< uint16_t >( param3 ); + actorControl->data().param4 = static_cast< uint16_t >( param4 ); + actorControl->data().param5 = static_cast< uint16_t >( param5 ); + actorControl->data().param6 = static_cast< uint16_t >( param6 ); player.queuePacket( actorControl ); @@ -500,7 +500,7 @@ void Sapphire::World::Manager::DebugCommandMgr::add( char* data, Entity::Player& uint32_t id; sscanf( params.c_str(), "%d", &id ); - player.learnAction( id ); + player.learnAction( static_cast< uint16_t >( id ) ); } else if ( subCommand == "effect") { @@ -511,7 +511,7 @@ void Sapphire::World::Manager::DebugCommandMgr::add( char* data, Entity::Player& effectPacket->setRotation( Common::Util::floatToUInt16Rot( player.getRot() ) ); Common::EffectEntry entry{}; - entry.value = param1; + entry.value = static_cast< int16_t >( param1 ); entry.effectType = Common::ActionEffectType::Damage; entry.hitSeverity = Common::ActionHitSeverityType::NormalDamage; diff --git a/src/world/Manager/HousingMgr.cpp b/src/world/Manager/HousingMgr.cpp index 028d25cc..43d697ee 100644 --- a/src/world/Manager/HousingMgr.cpp +++ b/src/world/Manager/HousingMgr.cpp @@ -159,7 +159,7 @@ bool Sapphire::World::Manager::HousingMgr::loadEstateInventories() continue; } - container->second->setItem( slot, item ); + container->second->setItem( static_cast< uint8_t >( slot ), item ); itemCount++; } @@ -182,7 +182,7 @@ void Sapphire::World::Manager::HousingMgr::initLandCache() // land stuff entry.m_landSetId = res->getUInt64( "LandSetId" ); - entry.m_landId = res->getUInt( "LandId" ); + entry.m_landId = static_cast< uint16_t >( res->getUInt( "LandId" ) ); entry.m_type = static_cast< Common::LandType >( res->getUInt( "Type" ) ); entry.m_size = static_cast< Common::HouseSize >( res->getUInt8( "Size" ) ); @@ -233,9 +233,9 @@ void Sapphire::World::Manager::HousingMgr::initLandCache() // setup containers // todo: this is pretty garbage Common::LandIdent ident; - ident.territoryTypeId = entry.m_landSetId >> 16; - ident.wardNum = entry.m_landSetId & 0xFFFF; - ident.landId = entry.m_landId; + ident.territoryTypeId = static_cast< int16_t >( entry.m_landSetId >> 16 ); + ident.wardNum = static_cast< int16_t >( entry.m_landSetId & 0xFFFF ); + ident.landId = static_cast< int16_t >( entry.m_landId ); ident.worldId = 67; auto& containers = getEstateInventory( ident ); @@ -305,20 +305,20 @@ Sapphire::LandPtr Sapphire::World::Manager::HousingMgr::getLandByOwnerId( uint32 if( !hZone ) return nullptr; - return hZone->getLand( res->getUInt( 2 ) ); + return hZone->getLand( static_cast< uint8_t >( res->getUInt( 2 ) ) ); } void Sapphire::World::Manager::HousingMgr::sendLandSignOwned( Entity::Player& player, const Common::LandIdent ident ) { - player.setActiveLand( ident.landId, ident.wardNum ); + player.setActiveLand( static_cast< uint8_t >( ident.landId ), static_cast< uint8_t >( ident.wardNum ) ); - auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum ); + auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); auto hZone = getHousingZoneByLandSetId( landSetId ); if( !hZone ) return; - auto land = hZone->getLand( ident.landId ); + auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) ); if( !land ) return; @@ -335,7 +335,7 @@ void Sapphire::World::Manager::HousingMgr::sendLandSignOwned( Entity::Player& pl std::strcpy( landInfoSignPacket->data().estateGreeting, house->getHouseGreeting().c_str() ); } - uint32_t playerId = land->getOwnerId(); + uint32_t playerId = static_cast< uint32_t >( land->getOwnerId() ); std::string playerName = framework()->get< World::ServerMgr >()->getPlayerNameFromDb( playerId ); memcpy( &landInfoSignPacket->data().ownerName, playerName.c_str(), playerName.size() ); @@ -345,15 +345,15 @@ void Sapphire::World::Manager::HousingMgr::sendLandSignOwned( Entity::Player& pl void Sapphire::World::Manager::HousingMgr::sendLandSignFree( Entity::Player& player, const Common::LandIdent ident ) { - player.setActiveLand( ident.landId, ident.wardNum ); + player.setActiveLand( static_cast< uint8_t >( ident.landId ), static_cast< uint8_t >( ident.wardNum ) ); - auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum ); + auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); auto hZone = getHousingZoneByLandSetId( landSetId ); if( !hZone ) return; - auto land = hZone->getLand( ident.landId ); + auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) ); auto plotPricePacket = makeZonePacket< Server::FFXIVIpcLandPriceUpdate >( player.getId() ); plotPricePacket->data().price = land->getCurrentPrice(); plotPricePacket->data().timeLeft = land->getDevaluationTime(); @@ -471,7 +471,7 @@ void Sapphire::World::Manager::HousingMgr::sendWardLandInfo( Entity::Player& pla auto wardInfoPacket = makeZonePacket< Server::FFXIVIpcHousingWardInfo >( player.getId() ); wardInfoPacket->data().landIdent.wardNum = wardId; - wardInfoPacket->data().landIdent.territoryTypeId = territoryTypeId; + wardInfoPacket->data().landIdent.territoryTypeId = static_cast< int16_t >( territoryTypeId ); // todo: properly get worldId wardInfoPacket->data().landIdent.worldId = 67; @@ -509,7 +509,7 @@ void Sapphire::World::Manager::HousingMgr::sendWardLandInfo( Entity::Player& pla entry.infoFlags |= Common::WardlandFlags::IsEstateOwned; auto owner = land->getOwnerId(); - auto playerName = framework()->get< World::ServerMgr >()->getPlayerNameFromDb( owner ); + auto playerName = framework()->get< World::ServerMgr >()->getPlayerNameFromDb( static_cast< uint32_t >( owner ) ); memcpy( &entry.estateOwnerName, playerName.c_str(), playerName.size() ); break; @@ -524,13 +524,13 @@ void Sapphire::World::Manager::HousingMgr::sendWardLandInfo( Entity::Player& pla void Sapphire::World::Manager::HousingMgr::sendEstateGreeting( Entity::Player& player, const Common::LandIdent ident ) { - auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum ); + auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); auto hZone = getHousingZoneByLandSetId( landSetId ); if( !hZone ) return; - auto land = hZone->getLand( ident.landId ); + auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) ); if( !land ) return; @@ -630,9 +630,9 @@ bool Sapphire::World::Manager::HousingMgr::initHouseModels( Entity::Player& play if( item.second == 0 ) continue; - auto pItem = invMgr->createItem( player, item.second ); + auto pItem = invMgr->createItem( player, static_cast< uint32_t >( item.second ) ); - container->setItem( item.first, pItem ); + container->setItem( static_cast< uint8_t >( item.first ), pItem ); } invMgr->saveHousingContainer( land->getLandIdent(), container ); @@ -701,7 +701,7 @@ void Sapphire::World::Manager::HousingMgr::buildPresetEstate( Entity::Player& pl // start house built event // CmnDefHousingBuildHouse_00149 player.eventStart( player.getId(), 0x000B0095, Event::EventHandler::EventType::Housing, 1, 1 ); - player.playScene( 0x000B0095, 0, SET_BASE | HIDE_HOTBAR , 0, 1, plotNum, nullptr ); + player.playScene( 0x000B0095, 0, static_cast< uint32_t >( SET_BASE | HIDE_HOTBAR ) , 0, 1, plotNum, nullptr ); player.setLandFlags( LandFlagsSlot::Private, EstateBuilt, ident ); player.sendLandFlagsSlot( LandFlagsSlot::Private ); @@ -711,13 +711,13 @@ void Sapphire::World::Manager::HousingMgr::buildPresetEstate( Entity::Player& pl void Sapphire::World::Manager::HousingMgr::requestEstateRename( Entity::Player& player, const Common::LandIdent ident ) { - auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum ); + auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); auto hZone = getHousingZoneByLandSetId( landSetId ); if( !hZone ) return; - auto land = hZone->getLand( ident.landId ); + auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) ); auto house = land->getHouse(); if( !house ) @@ -733,13 +733,13 @@ void Sapphire::World::Manager::HousingMgr::requestEstateRename( Entity::Player& void Sapphire::World::Manager::HousingMgr::requestEstateEditGreeting( Entity::Player& player, const Common::LandIdent ident ) { - auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum ); + auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); auto hZone = getHousingZoneByLandSetId( landSetId ); if( !hZone ) return; - auto land = hZone->getLand( ident.landId ); + auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) ); if( !land ) return; @@ -757,13 +757,13 @@ void Sapphire::World::Manager::HousingMgr::requestEstateEditGreeting( Entity::Pl void Sapphire::World::Manager::HousingMgr::updateEstateGreeting( Entity::Player& player, const Common::LandIdent ident, const std::string& greeting ) { - auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum ); + auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); auto zone = getHousingZoneByLandSetId( landSetId ); if( !zone ) return; - auto land = zone->getLand( ident.landId ); + auto land = zone->getLand( static_cast< uint8_t >( ident.landId ) ); if( !land ) return; @@ -782,7 +782,7 @@ void Sapphire::World::Manager::HousingMgr::updateEstateGreeting( Entity::Player& void Sapphire::World::Manager::HousingMgr::requestEstateEditGuestAccess( Entity::Player& player, const Common::LandIdent ident ) { - auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum ); + auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); auto hZone = getHousingZoneByLandSetId( landSetId ); if( !hZone ) @@ -804,13 +804,13 @@ void Sapphire::World::Manager::HousingMgr::requestEstateEditGuestAccess( Entity: Sapphire::Common::LandIdent Sapphire::World::Manager::HousingMgr::clientTriggerParamsToLandIdent( uint32_t param11, uint32_t param12, bool use16bits ) const { Common::LandIdent ident; - ident.worldId = param11 >> 16; - ident.territoryTypeId = param11 & 0xFFFF; + ident.worldId = static_cast< int16_t >( param11 >> 16 ); + ident.territoryTypeId = static_cast< int16_t >( param11 & 0xFFFF ); if( use16bits ) { - ident.wardNum = param12 >> 16; - ident.landId = param12 & 0xFFFF; + ident.wardNum = static_cast< int16_t >( param12 >> 16 ); + ident.landId = static_cast< int16_t >( param12 & 0xFFFF ); } else { @@ -837,13 +837,13 @@ void Sapphire::World::Manager::HousingMgr::sendEstateInventory( Entity::Player& auto ident = internalZone->getLandIdent(); - auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum ); + auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); auto exteriorZone = getHousingZoneByLandSetId( landSetId ); if( !exteriorZone ) return; - targetLand = exteriorZone->getLand( ident.landId ); + targetLand = exteriorZone->getLand( static_cast< uint8_t >( ident.landId ) ); } else { @@ -974,7 +974,7 @@ void Sapphire::World::Manager::HousingMgr::reqPlaceHousingItem( Sapphire::Entity // inside housing territory if( auto zone = std::dynamic_pointer_cast< HousingZone >( player.getCurrentTerritory() ) ) { - land = zone->getLand( landId ); + land = zone->getLand( static_cast< uint8_t >( landId ) ); isOutside = true; } @@ -985,9 +985,9 @@ void Sapphire::World::Manager::HousingMgr::reqPlaceHousingItem( Sapphire::Entity // todo: this whole process is retarded and needs to be fixed // perhaps maintain a list of estates by ident inside housingmgr? auto ident = zone->getLandIdent(); - auto landSet = toLandSetId( ident.territoryTypeId, ident.wardNum ); + auto landSet = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); - land = getHousingZoneByLandSetId( landSet )->getLand( ident.landId ); + land = getHousingZoneByLandSetId( landSet )->getLand( static_cast< uint8_t >( ident.landId ) ); } // wtf? else @@ -1047,7 +1047,7 @@ void Sapphire::World::Manager::HousingMgr::reqPlaceItemInStore( Sapphire::Entity if( auto zone = std::dynamic_pointer_cast< HousingZone >( player.getCurrentTerritory() ) ) { - land = zone->getLand( landId ); + land = zone->getLand( static_cast< uint8_t >( landId ) ); isOutside = true; } else if( auto zone = std::dynamic_pointer_cast< Territory::Housing::HousingInteriorTerritory >( @@ -1056,9 +1056,9 @@ void Sapphire::World::Manager::HousingMgr::reqPlaceItemInStore( Sapphire::Entity // todo: this whole process is retarded and needs to be fixed // perhaps maintain a list of estates by ident inside housingmgr? auto ident = zone->getLandIdent(); - auto landSet = toLandSetId( ident.territoryTypeId, ident.wardNum ); + auto landSet = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); - land = getHousingZoneByLandSetId( landSet )->getLand( ident.landId ); + land = getHousingZoneByLandSetId( landSet )->getLand( static_cast< uint8_t >( ident.landId ) ); } if( !hasPermission( player, *land, 0 ) ) @@ -1080,7 +1080,7 @@ void Sapphire::World::Manager::HousingMgr::reqPlaceItemInStore( Sapphire::Entity if( !item ) return; - container->setItem( freeSlot, item ); + container->setItem( static_cast< uint8_t >( freeSlot ), item ); invMgr->sendInventoryContainer( player, container ); invMgr->saveHousingContainer( ident, container ); } @@ -1103,7 +1103,7 @@ void Sapphire::World::Manager::HousingMgr::reqPlaceItemInStore( Sapphire::Entity if( !item ) return; - container->setItem( freeSlot, item ); + container->setItem( static_cast< uint8_t >( freeSlot ), item ); invMgr->sendInventoryContainer( player, container ); invMgr->saveHousingContainer( ident, container ); } @@ -1125,7 +1125,7 @@ bool Sapphire::World::Manager::HousingMgr::placeExternalItem( Entity::Player& pl return false; // add item to inv - container->setItem( freeSlot, item ); + container->setItem( static_cast< uint8_t >( freeSlot ), item ); // we need to save the item again as removing it from the container on the player will remove it from charaglobalitem // todo: this needs to be handled a bit better as it might be possible to overwrite another item that is created in the meantime @@ -1139,7 +1139,7 @@ bool Sapphire::World::Manager::HousingMgr::placeExternalItem( Entity::Player& pl auto zone = std::dynamic_pointer_cast< HousingZone >( player.getCurrentTerritory() ); assert( zone ); - zone->spawnYardObject( ident.landId, freeSlot, *item ); + zone->spawnYardObject( static_cast< uint8_t >( ident.landId ), static_cast< uint16_t >( freeSlot ), *item ); return true; } @@ -1173,7 +1173,7 @@ bool Sapphire::World::Manager::HousingMgr::placeInteriorItem( Entity::Player& pl } // have a free slot - container->setItem( freeSlot, item ); + container->setItem( static_cast< uint8_t >( freeSlot ), item ); // resend container invMgr->sendInventoryContainer( player, container ); @@ -1183,7 +1183,7 @@ bool Sapphire::World::Manager::HousingMgr::placeInteriorItem( Entity::Player& pl auto zone = std::dynamic_pointer_cast< Territory::Housing::HousingInteriorTerritory >( player.getCurrentTerritory() ); assert( zone ); - zone->spawnHousingObject( containerIdx, freeSlot, containerId, item ); + zone->spawnHousingObject( containerIdx, static_cast< uint16_t >( freeSlot ), containerId, item ); return true; } @@ -1235,8 +1235,8 @@ void Sapphire::World::Manager::HousingMgr::reqMoveHousingItem( Entity::Player& p Common::LandIdent ident, uint8_t slot, Common::FFXIVARR_POSITION3 pos, float rot ) { - auto landSet = toLandSetId( ident.territoryTypeId, ident.wardNum ); - auto land = getHousingZoneByLandSetId( landSet )->getLand( ident.landId ); + auto landSet = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); + auto land = getHousingZoneByLandSetId( landSet )->getLand( static_cast< uint8_t >( ident.landId ) ); if( !land ) return; @@ -1282,7 +1282,7 @@ bool Sapphire::World::Manager::HousingMgr::moveInternalItem( Entity::Player& pla auto container = it->second; - auto item = std::dynamic_pointer_cast< Inventory::HousingItem >( container->getItem( slotIdx ) ); + auto item = std::dynamic_pointer_cast< Inventory::HousingItem >( container->getItem( static_cast< uint8_t >( slotIdx ) ) ); if( !item ) return false; @@ -1293,10 +1293,10 @@ bool Sapphire::World::Manager::HousingMgr::moveInternalItem( Entity::Player& pla auto invMgr = framework()->get< InventoryMgr >(); invMgr->updateHousingItemPosition( item ); - terri.updateHousingObjectPosition( player, slot, item->getPos(), item->getRot() ); + terri.updateHousingObjectPosition( player, slot, item->getPos(), static_cast< uint16_t >( item->getRot() ) ); // send confirmation to player - uint32_t param1 = ( ident.landId << 16 ) | containerId; + uint32_t param1 = static_cast< uint32_t >( ( ident.landId << 16 ) | containerId ); player.queuePacket( Server::makeActorControlSelf( player.getId(), ActorControl::HousingItemMoveConfirm, param1, slotIdx ) ); @@ -1309,7 +1309,7 @@ bool Sapphire::World::Manager::HousingMgr::moveExternalItem( Entity::Player& pla Sapphire::HousingZone& terri, Common::FFXIVARR_POSITION3 pos, float rot ) { - auto land = terri.getLand( ident.landId ); + auto land = terri.getLand( static_cast< uint8_t >( ident.landId ) ); if( !hasPermission( player, *land, 0 ) ) return false; @@ -1331,9 +1331,9 @@ bool Sapphire::World::Manager::HousingMgr::moveExternalItem( Entity::Player& pla auto invMgr = framework()->get< InventoryMgr >(); invMgr->updateHousingItemPosition( item ); - terri.updateYardObjectPos( player, slot, ident.landId, *item ); + terri.updateYardObjectPos( player, slot, static_cast< uint16_t >( ident.landId ), *item ); - uint32_t param1 = ( ident.landId << 16 ) | InventoryType::HousingExteriorPlacedItems; + uint32_t param1 = static_cast< uint32_t >( ( ident.landId << 16 ) | InventoryType::HousingExteriorPlacedItems ); player.queuePacket( Server::makeActorControlSelf( player.getId(), ActorControl::HousingItemMoveConfirm, param1, slot ) ); @@ -1348,8 +1348,8 @@ void Sapphire::World::Manager::HousingMgr::reqRemoveHousingItem( Sapphire::Entit player.getCurrentTerritory() ) ) { auto ident = terri->getLandIdent(); - auto landSet = toLandSetId( ident.territoryTypeId, ident.wardNum ); - auto land = getHousingZoneByLandSetId( landSet )->getLand( ident.landId ); + auto landSet = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); + auto land = getHousingZoneByLandSetId( landSet )->getLand( static_cast< uint8_t >( ident.landId ) ); if( !land ) return; @@ -1361,7 +1361,7 @@ void Sapphire::World::Manager::HousingMgr::reqRemoveHousingItem( Sapphire::Entit } else if( auto terri = std::dynamic_pointer_cast< HousingZone >( player.getCurrentTerritory() ) ) { - auto land = terri->getLand( plot ); + auto land = terri->getLand( static_cast< uint8_t >( plot ) ); if( !land ) return; @@ -1406,7 +1406,7 @@ bool Sapphire::World::Manager::HousingMgr::removeInternalItem( Entity::Player& p auto container = it->second; - auto item = std::dynamic_pointer_cast< Inventory::HousingItem >( container->getItem( slotId ) ); + auto item = std::dynamic_pointer_cast< Inventory::HousingItem >( container->getItem( static_cast< uint8_t >( slotId ) ) ); if( !item ) return false; @@ -1420,7 +1420,7 @@ bool Sapphire::World::Manager::HousingMgr::removeInternalItem( Entity::Player& p auto invMgr = framework()->get< InventoryMgr >(); // remove it from housing inventory - container->removeItem( slotId ); + container->removeItem( static_cast< uint8_t >( slotId ) ); invMgr->sendInventoryContainer( player, container ); invMgr->removeHousingItemPosition( *item ); invMgr->removeItemFromHousingContainer( terri.getLandIdent(), containerId, slotId ); @@ -1441,12 +1441,12 @@ bool Sapphire::World::Manager::HousingMgr::removeInternalItem( Entity::Player& p auto invMgr = framework()->get< InventoryMgr >(); - container->removeItem( slotId ); + container->removeItem( static_cast< uint8_t >( slotId ) ); invMgr->sendInventoryContainer( player, container ); invMgr->removeHousingItemPosition( *item ); invMgr->removeItemFromHousingContainer( terri.getLandIdent(), containerId, slotId ); - freeContainer->setItem( slotId, item ); + freeContainer->setItem( static_cast< uint8_t >( slotId ), item ); invMgr->sendInventoryContainer( player, freeContainer ); invMgr->saveHousingContainer( terri.getLandIdent(), freeContainer ); } @@ -1455,7 +1455,7 @@ bool Sapphire::World::Manager::HousingMgr::removeInternalItem( Entity::Player& p if( containerIdx != -1 ) { auto arraySlot = ( containerIdx * 50 ) + slotId; - terri.removeHousingObject( arraySlot ); + terri.removeHousingObject( static_cast< uint16_t >( arraySlot ) ); } return true; @@ -1494,7 +1494,7 @@ bool Sapphire::World::Manager::HousingMgr::removeExternalItem( Entity::Player& p invMgr->removeItemFromHousingContainer( land.getLandIdent(), sourceContainer->getId(), slotId ); invMgr->removeHousingItemPosition( *item ); - storeroomContainer->setItem( freeSlot, item ); + storeroomContainer->setItem( static_cast< uint8_t >( freeSlot ), item ); invMgr->sendInventoryContainer( player, storeroomContainer ); invMgr->saveHousingContainer( land.getLandIdent(), storeroomContainer ); } @@ -1515,7 +1515,7 @@ bool Sapphire::World::Manager::HousingMgr::removeExternalItem( Entity::Player& p } if( shouldDespawnItem ) - terri.despawnYardObject( land.getLandIdent().landId, slotId ); + terri.despawnYardObject( static_cast< uint16_t >( land.getLandIdent().landId ), slotId ); return true; } @@ -1552,7 +1552,7 @@ void Sapphire::World::Manager::HousingMgr::reqEstateExteriorRemodel( Sapphire::E if( !terri ) return; - auto land = terri->getLand( plot ); + auto land = terri->getLand( static_cast< uint8_t >( plot ) ); if( !land ) return; @@ -1580,8 +1580,8 @@ void Sapphire::World::Manager::HousingMgr::reqEstateInteriorRemodel( Sapphire::E return; auto ident = terri->getLandIdent(); - auto landSet = toLandSetId( ident.territoryTypeId, ident.wardNum ); - auto land = getHousingZoneByLandSetId( landSet )->getLand( ident.landId ); + auto landSet = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) ); + auto land = getHousingZoneByLandSetId( landSet )->getLand( static_cast< uint8_t >( ident.landId ) ); if( !land ) return; @@ -1622,4 +1622,4 @@ Sapphire::Inventory::HousingItemPtr Sapphire::World::Manager::HousingMgr::getHou return nullptr; return Inventory::make_HousingItem( tmpItem->getUId(), tmpItem->getId(), framework() ); -} \ No newline at end of file +} diff --git a/src/world/Manager/TerritoryMgr.cpp b/src/world/Manager/TerritoryMgr.cpp index 83b833e8..c649964e 100644 --- a/src/world/Manager/TerritoryMgr.cpp +++ b/src/world/Manager/TerritoryMgr.cpp @@ -345,13 +345,13 @@ Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::createInstanceCon auto pTeri = getTerritoryDetail( pContentFinderCondition->territoryType ); - if( !pTeri || pInstanceContent->name.empty() ) + if( !pTeri || pContentFinderCondition->name.empty() ) return nullptr; Logger::debug( "Starting instance for InstanceContent id: {0} ({1})", instanceContentId, pInstanceContent->name ); auto pZone = make_InstanceContent( pInstanceContent, pContentFinderCondition->territoryType, getNextInstanceId(), - pTeri->name, pInstanceContent->name, instanceContentId, framework() ); + pTeri->name, pContentFinderCondition->name, instanceContentId, framework() ); pZone->init(); m_instanceContentIdToInstanceMap[ instanceContentId ][ pZone->getGuId() ] = pZone; diff --git a/src/world/Math/CalcStats.cpp b/src/world/Math/CalcStats.cpp index d9c6d143..06834e1d 100644 --- a/src/world/Math/CalcStats.cpp +++ b/src/world/Math/CalcStats.cpp @@ -19,55 +19,55 @@ const int levelTable[81][6] = { // MAIN,SUB,DIV,HP,ELMT,THREAT { 1, 1, 1, 1, 1, 1 }, - { 20, 56, 56, 0, 52, 2 }, - { 21, 57, 57, 0, 54, 2 }, - { 22, 60, 60, 0, 56, 3 }, - { 24, 62, 62, 0, 58, 3 }, - { 26, 65, 65, 0, 60, 3 }, - { 27, 68, 68, 0, 62, 3 }, - { 29, 70, 70, 0, 64, 4 }, - { 31, 73, 73, 0, 66, 4 }, - { 33, 76, 76, 0, 68, 4 }, - { 35, 78, 78, 0, 70, 5 }, - { 36, 82, 82, 0, 73, 5 }, - { 38, 85, 85, 0, 75, 5 }, - { 41, 89, 89, 0, 78, 6 }, - { 44, 93, 93, 0, 81, 6 }, - { 46, 96, 96, 0, 84, 7 }, - { 49, 100, 100, 0, 86, 7 }, - { 52, 104, 104, 0, 89, 8 }, - { 54, 109, 109, 0, 93, 9 }, - { 57, 113, 113, 0, 95, 9 }, - { 60, 116, 116, 0, 98, 10 }, - { 63, 122, 122, 0, 102, 10 }, - { 67, 127, 127, 0, 105, 11 }, - { 71, 133, 133, 0, 109, 12 }, - { 74, 138, 138, 0, 113, 13 }, - { 78, 144, 144, 0, 117, 14 }, - { 81, 150, 150, 0, 121, 15 }, - { 85, 155, 155, 0, 125, 16 }, - { 89, 162, 162, 0, 129, 17 }, - { 92, 168, 168, 0, 133, 18 }, - { 97, 173, 173, 0, 137, 19 }, - { 101, 181, 181, 0, 143, 20 }, - { 106, 188, 188, 0, 148, 22 }, - { 110, 194, 194, 0, 153, 23 }, - { 115, 202, 202, 0, 159, 25 }, - { 119, 209, 209, 0, 165, 27 }, - { 124, 215, 215, 0, 170, 29 }, - { 128, 223, 223, 0, 176, 31 }, - { 134, 229, 229, 0, 181, 33 }, - { 139, 236, 236, 0, 186, 35 }, - { 144, 244, 244, 0, 192, 38 }, - { 150, 253, 253, 0, 200, 40 }, - { 155, 263, 263, 0, 207, 43 }, - { 161, 272, 272, 0, 215, 46 }, - { 166, 283, 283, 0, 223, 49 }, - { 171, 292, 292, 0, 231, 52 }, - { 177, 302, 302, 0, 238, 55 }, - { 183, 311, 311, 0, 246, 58 }, - { 189, 322, 322, 0, 254, 62 }, - { 196, 331, 331, 0, 261, 66 }, + { 20, 56, 56, 86, 52, 2 }, + { 21, 57, 57, 101, 54, 2 }, + { 22, 60, 60, 109, 56, 3 }, + { 24, 62, 62, 116, 58, 3 }, + { 26, 65, 65, 123, 60, 3 }, + { 27, 68, 68, 131, 62, 3 }, + { 29, 70, 70, 138, 64, 4 }, + { 31, 73, 73, 145, 66, 4 }, + { 33, 76, 76, 153, 68, 4 }, + { 35, 78, 78, 160, 70, 5 }, + { 36, 82, 82, 174, 73, 5 }, + { 38, 85, 85, 188, 75, 5 }, + { 41, 89, 89, 202, 78, 6 }, + { 44, 93, 93, 216, 81, 6 }, + { 46, 96, 96, 230, 84, 7 }, + { 49, 100, 100, 244, 86, 7 }, + { 52, 104, 104, 258, 89, 8 }, + { 54, 109, 109, 272, 93, 9 }, + { 57, 113, 113, 286, 95, 9 }, + { 60, 116, 116, 300, 98, 10 }, + { 63, 122, 122, 333, 102, 10 }, + { 67, 127, 127, 366, 105, 11 }, + { 71, 133, 133, 399, 109, 12 }, + { 74, 138, 138, 432, 113, 13 }, + { 78, 144, 144, 465, 117, 14 }, + { 81, 150, 150, 498, 121, 15 }, + { 85, 155, 155, 531, 125, 16 }, + { 89, 162, 162, 564, 129, 17 }, + { 92, 168, 168, 597, 133, 18 }, + { 97, 173, 173, 630, 137, 19 }, + { 101, 181, 181, 669, 143, 20 }, + { 106, 188, 188, 708, 148, 22 }, + { 110, 194, 194, 747, 153, 23 }, + { 115, 202, 202, 786, 159, 25 }, + { 119, 209, 209, 825, 165, 27 }, + { 124, 215, 215, 864, 170, 29 }, + { 128, 223, 223, 903, 176, 31 }, + { 134, 229, 229, 942, 181, 33 }, + { 139, 236, 236, 981, 186, 35 }, + { 144, 244, 244, 1020, 192, 38 }, + { 150, 253, 253, 1088, 200, 40 }, + { 155, 263, 263, 1156, 207, 43 }, + { 161, 272, 272, 1224, 215, 46 }, + { 166, 283, 283, 1292, 223, 49 }, + { 171, 292, 292, 1360, 231, 52 }, + { 177, 302, 302, 1428, 238, 55 }, + { 183, 311, 311, 1496, 246, 58 }, + { 189, 322, 322, 1564, 254, 62 }, + { 196, 331, 331, 1632, 261, 66 }, { 202, 341, 341, 1700, 269, 70 }, { 204, 342, 393, 1774, 270, 84 }, { 205, 344, 444, 1851, 271, 99 }, @@ -92,7 +92,7 @@ const int levelTable[81][6] = // todo: add proper shbr values - hp/elmt/threat // sub/div added from http://theoryjerks.akhmorning.com/resources/levelmods/ - { 296, 365, 2263, 3600, 466, 466 }, + { 296, 365, 2263, 3600, 295, 466 }, { 300, 366, 2360, 3600, 295, 466 }, { 305, 367, 2461, 3600, 295, 466 }, { 310, 368, 2566, 3600, 295, 466 }, @@ -131,7 +131,7 @@ float CalcStats::calculateBaseStat( const Chara& chara ) if( level > Common::MAX_PLAYER_LEVEL ) level = Common::MAX_PLAYER_LEVEL; - return static_cast< float >( levelTable[level][2] ); + return static_cast< float >( levelTable[ level ][ Common::LevelTableEntry::MAIN ] ); } // Leggerless' HP Formula @@ -154,19 +154,22 @@ uint32_t CalcStats::calculateMaxHp( PlayerPtr pPlayer, Sapphire::FrameworkPtr pF auto vitMod = pPlayer->getBonusStat( Common::BaseParam::Vitality ); float baseStat = calculateBaseStat( *pPlayer ); - uint16_t vitStat = pPlayer->getStats().vit + static_cast< uint16_t >( vitMod ); + uint16_t vitStat = static_cast< uint16_t >( pPlayer->getStats().vit ) + static_cast< uint16_t >( vitMod ); uint16_t hpMod = paramGrowthInfo->hpModifier; uint16_t jobModHp = classInfo->modifierHitPoints; float approxBaseHp = 0.0f; // Read above // These values are not precise. - + /* if( level >= 60 ) approxBaseHp = static_cast< float >( 2600 + ( level - 60 ) * 100 ); else if( level >= 50 ) approxBaseHp = 1700 + ( ( level - 50 ) * ( 1700 * 1.04325f ) ); else approxBaseHp = paramGrowthInfo->mpModifier * 0.7667f; + */ + // just use the table at least better than what it was + approxBaseHp = static_cast< float >( levelTable[ level ][ Common::LevelTableEntry::HP ] ); uint16_t result = static_cast< uint16_t >( floor( jobModHp * ( approxBaseHp / 100.0f ) ) + floor( hpMod / 100.0f * ( vitStat - baseStat ) ) ); @@ -483,7 +486,7 @@ float CalcStats::calcActionDamage( const Sapphire::Entity::Chara& chara, uint32_ // D = ⌊ f(pot) × f(wd) × f(ap) × f(det) × f(tnc) × traits ⌋ // × f(chr) ⌋ × f(dhr) ⌋ × rand[ 0.95, 1.05 ] ⌋ buff_1 ⌋ × buff_1 ⌋ × buff... ⌋ - auto pot = potency( ptc ); + auto pot = potency( static_cast< uint16_t >( ptc ) ); auto wd = weaponDamage( chara, wepDmg ); auto ap = getPrimaryAttackPower( chara ); auto det = determination( chara ); diff --git a/src/world/Network/GameConnection.cpp b/src/world/Network/GameConnection.cpp index 12489297..fd8fa095 100644 --- a/src/world/Network/GameConnection.cpp +++ b/src/world/Network/GameConnection.cpp @@ -224,7 +224,7 @@ void Sapphire::Network::GameConnection::handleZonePacket( Sapphire::Network::Pac Logger::debug( "[{0}] Undefined World IPC : Unknown ( {1:04X} )", m_pSession->getId(), opcode ); Logger::debug( "Dump:\n{0}", Util::binaryToHexDump( const_cast< uint8_t* >( &pPacket.data[ 0 ] ), - pPacket.segHdr.size ) ); + static_cast< uint16_t >( pPacket.segHdr.size) ) ); } } @@ -392,7 +392,7 @@ void Sapphire::Network::GameConnection::handlePackets( const Sapphire::Network:: { case SEGMENTTYPE_SESSIONINIT: { - char* id = ( char* ) &( inPacket.data[ 4 ] ); + char* id = reinterpret_cast< char* >( &( inPacket.data[ 4 ] ) ); uint32_t playerId = std::stoul( id ); auto pCon = std::static_pointer_cast< GameConnection, Connection >( shared_from_this() ); @@ -423,15 +423,15 @@ void Sapphire::Network::GameConnection::handlePackets( const Sapphire::Network:: m_pSession = session; auto pe = std::make_shared< FFXIVRawPacket >( 0x07, 0x18, 0, 0 ); - *( unsigned int* ) ( &pe->data()[ 0 ] ) = 0xE0037603; - *( unsigned int* ) ( &pe->data()[ 4 ] ) = Common::Util::getTimeSeconds(); + *reinterpret_cast< unsigned int* >( &pe->data()[ 0 ] ) = 0xE0037603; + *reinterpret_cast< unsigned int* >( &pe->data()[ 4 ] ) = Common::Util::getTimeSeconds(); sendSinglePacket( pe ); // main connection, assinging it to the session if( ipcHeader.connectionType == ConnectionType::Zone ) { auto pe1 = std::make_shared< FFXIVRawPacket >( 0x02, 0x38, 0, 0 ); - *( unsigned int* ) ( &pe1->data()[ 0 ] ) = playerId; + *reinterpret_cast< unsigned int* >( &pe1->data()[ 0 ] ) = playerId; sendSinglePacket( pe1 ); Logger::info( "[{0}] Setting session for world connection", id ); session->setZoneConnection( pCon ); @@ -440,11 +440,11 @@ void Sapphire::Network::GameConnection::handlePackets( const Sapphire::Network:: else if( ipcHeader.connectionType == ConnectionType::Chat ) { auto pe2 = std::make_shared< FFXIVRawPacket >( 0x02, 0x38, 0, 0 ); - *( unsigned int* ) ( &pe2->data()[ 0 ] ) = playerId; + *reinterpret_cast< unsigned int* >( &pe2->data()[ 0 ] ) = playerId; sendSinglePacket( pe2 ); auto pe3 = std::make_shared< FFXIVRawPacket >( 0x03, 0x28, playerId, playerId ); - *( unsigned short* ) ( &pe3->data()[ 2 ] ) = 0x02; + *reinterpret_cast< unsigned short* >( &pe3->data()[ 2 ] ) = 0x02; sendSinglePacket( pe3 ); Logger::info( "[{0}] Setting session for chat connection", id ); @@ -461,12 +461,12 @@ void Sapphire::Network::GameConnection::handlePackets( const Sapphire::Network:: } case SEGMENTTYPE_KEEPALIVE: // keep alive { - uint32_t id = *( uint32_t* ) &inPacket.data[ 0 ]; - uint32_t timeStamp = *( uint32_t* ) &inPacket.data[ 4 ]; + uint32_t id = *reinterpret_cast< uint32_t* >( &inPacket.data[ 0 ] ); + uint32_t timeStamp = *reinterpret_cast< uint32_t* >( &inPacket.data[ 4 ] ); auto pe4 = std::make_shared< FFXIVRawPacket >( 0x08, 0x18, 0, 0 ); - *( unsigned int* ) ( &pe4->data()[ 0 ] ) = id; - *( unsigned int* ) ( &pe4->data()[ 4 ] ) = timeStamp; + *reinterpret_cast< unsigned int* >( &pe4->data()[ 0 ] ) = id; + *reinterpret_cast< unsigned int* >( &pe4->data()[ 4 ] ) = timeStamp; sendSinglePacket( pe4 ); break; diff --git a/src/world/Network/Handlers/CFHandlers.cpp b/src/world/Network/Handlers/CFHandlers.cpp index d51b6327..9f3660fb 100644 --- a/src/world/Network/Handlers/CFHandlers.cpp +++ b/src/world/Network/Handlers/CFHandlers.cpp @@ -32,7 +32,7 @@ void Sapphire::Network::GameConnection::cfDutyInfoRequest( FrameworkPtr pFw, // cap it since it's uint8_t in packets penaltyMinutes = 255; } - dutyInfoPacket->data().penaltyTime = penaltyMinutes; + dutyInfoPacket->data().penaltyTime = static_cast< uint8_t >( penaltyMinutes ); queueOutPacket( dutyInfoPacket ); auto inNeedsPacket = makeZonePacket< FFXIVIpcCFPlayerInNeed >( player.getId() ); @@ -62,7 +62,7 @@ void Sapphire::Network::GameConnection::cfRegisterDuty( FrameworkPtr pFw, } // todo: rand bias problem, will do for now tho - auto index = std::rand() % selectedContent.size(); + auto index = static_cast< uint32_t >( std::rand() ) % selectedContent.size(); auto contentId = selectedContent.at( index ); player.sendDebug( "Duty register request for contentid#{0}", contentId ); diff --git a/src/world/Network/Handlers/ClientTriggerHandler.cpp b/src/world/Network/Handlers/ClientTriggerHandler.cpp index 08d44118..b6decf1b 100644 --- a/src/world/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/world/Network/Handlers/ClientTriggerHandler.cpp @@ -21,6 +21,7 @@ #include "Network/PacketWrappers/ChatPacket.h" #include "Network/PacketWrappers/ServerNoticePacket.h" #include "Network/PacketWrappers/ActorControlPacket.h" +#include "Network/PacketWrappers/ActorControlSelfPacket.h" #include "Manager/DebugCommandMgr.h" #include "Manager/EventMgr.h" @@ -127,7 +128,7 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw, } case ClientTriggerType::SpawnCompanionReq: { - player.spawnCompanion( param1 ); + player.spawnCompanion( static_cast< uint16_t >( param1 ) ); break; } case ClientTriggerType::RemoveStatusEffect: // Remove status (clicking it off) @@ -236,14 +237,14 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw, case ClientTriggerType::PoseChange: // change pose case ClientTriggerType::PoseReapply: // reapply pose { - player.setPose( param12 ); + player.setPose( static_cast< uint8_t >( param12 ) ); auto pSetStatusPacket = makeActorControl( player.getId(), SetPose, param11, param12 ); player.sendToInRangeSet( pSetStatusPacket, true ); break; } case ClientTriggerType::PoseCancel: // cancel pose { - player.setPose( param12 ); + player.setPose( static_cast< uint8_t >( param12 ) ); auto pSetStatusPacket = makeActorControl( player.getId(), SetPose, param11, param12 ); player.sendToInRangeSet( pSetStatusPacket, true ); break; @@ -273,7 +274,7 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw, case ClientTriggerType::Teleport: // Teleport { - player.teleportQuery( param11 ); + player.teleportQuery( static_cast< uint16_t >( param11 ) ); break; } case ClientTriggerType::DyeItem: // Dye item @@ -317,7 +318,7 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw, if (!hZone) return; - player.setActiveLand( param11, hZone->getWardNum() ); + player.setActiveLand( static_cast< uint8_t >( param11 ), hZone->getWardNum() ); auto pShowBuildPresetUIPacket = makeActorControl( player.getId(), ShowBuildPresetUI, param11 ); player.queuePacket( pShowBuildPresetUIPacket ); @@ -348,7 +349,7 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw, if( !pHousingMgr ) break; - pHousingMgr->sendWardLandInfo( player, param12, param11 ); + pHousingMgr->sendWardLandInfo( player, static_cast< uint8_t >( param12 ), static_cast< uint8_t >( param11 ) ); break; } @@ -462,7 +463,7 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw, auto sendToStoreroom = ( param4 >> 16 ) != 0; //player, plot, containerId, slot, sendToStoreroom - housingMgr->reqRemoveHousingItem( player, param12, param2, slot, sendToStoreroom ); + housingMgr->reqRemoveHousingItem( player, static_cast< uint16_t >( param12 ), static_cast< uint16_t >( param2 ), static_cast< uint8_t >( slot ), sendToStoreroom ); break; } @@ -470,7 +471,7 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw, { auto housingMgr = m_pFw->get< HousingMgr >(); - housingMgr->reqEstateExteriorRemodel( player, param11 ); + housingMgr->reqEstateExteriorRemodel( player, static_cast< uint16_t >( param11 ) ); break; } @@ -493,6 +494,14 @@ void Sapphire::Network::GameConnection::clientTriggerHandler( FrameworkPtr pFw, canTeleport, unk1, privateEstateAccess, unk ); break; } + case ClientTriggerType::RequestEventBattle: + { + auto packet = makeActorControlSelf( player.getId(), ActorControl::EventBattleDialog, 0, param12, param2 ); + player.queuePacket( packet ); + + player.sendDebug( "event battle level sync: {0}, ilevel sync?: {1}", param12, param2 ); + break; + } default: { diff --git a/src/world/Network/Handlers/GMCommandHandlers.cpp b/src/world/Network/Handlers/GMCommandHandlers.cpp index 252bb313..77bd4380 100644 --- a/src/world/Network/Handlers/GMCommandHandlers.cpp +++ b/src/world/Network/Handlers/GMCommandHandlers.cpp @@ -130,13 +130,13 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, { case GmCommand::Lv: { - targetPlayer->setLevel( param1 ); + targetPlayer->setLevel( static_cast< uint8_t >( param1 ) ); player.sendNotice( "Level for {0} was set to {1}", targetPlayer->getName(), param1 ); break; } case GmCommand::Race: { - targetPlayer->setLookAt( CharaLook::Race, param1 ); + targetPlayer->setLookAt( CharaLook::Race, static_cast< uint8_t >( param1 ) ); player.sendNotice( "Race for {0} was set to {1}", targetPlayer->getName(), param1 ); targetPlayer->spawn( targetPlayer ); auto inRange = targetPlayer->getInRangeActors(); @@ -152,7 +152,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, } case GmCommand::Tribe: { - targetPlayer->setLookAt( CharaLook::Tribe, param1 ); + targetPlayer->setLookAt( CharaLook::Tribe, static_cast< uint8_t >( param1 ) ); player.sendNotice( "Tribe for {0} was set to ", targetPlayer->getName(), param1 ); targetPlayer->spawn( targetPlayer ); auto inRange = targetPlayer->getInRangeActors(); @@ -168,7 +168,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, } case GmCommand::Sex: { - targetPlayer->setLookAt( CharaLook::Gender, param1 ); + targetPlayer->setLookAt( CharaLook::Gender, static_cast< uint8_t >( param1 ) ); player.sendNotice( "Sex for {0} was set to ", targetPlayer->getName(), param1 ); targetPlayer->spawn( targetPlayer ); auto inRange = targetActor->getInRangeActors(); @@ -325,7 +325,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, } else { - targetActor->getAsPlayer()->learnSong( param2, 0 ); + targetActor->getAsPlayer()->learnSong( static_cast< uint8_t >( param2 ), 0 ); player.sendNotice( "Song {0} for {1} was turned on.", param2, targetPlayer->getName() ); } } @@ -374,27 +374,27 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, } case GmCommand::QuestAccept: { - targetPlayer->updateQuest( param1, 1 ); + targetPlayer->updateQuest( static_cast< uint16_t >( param1 ), 1 ); break; } case GmCommand::QuestCancel: { - targetPlayer->removeQuest( param1 ); + targetPlayer->removeQuest( static_cast< uint16_t >( param1 ) ); break; } case GmCommand::QuestComplete: { - targetPlayer->finishQuest( param1 ); + targetPlayer->finishQuest( static_cast< uint16_t >( param1 ) ); break; } case GmCommand::QuestIncomplete: { - targetPlayer->unfinishQuest( param1 ); + targetPlayer->unfinishQuest( static_cast< uint16_t >( param1 ) ); break; } case GmCommand::QuestSequence: { - targetPlayer->updateQuest( param1, param2 ); + targetPlayer->updateQuest( static_cast< uint16_t >( param1 ), static_cast< uint8_t >( param2 ) ); break; } case GmCommand::GC: @@ -405,7 +405,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, return; } - targetPlayer->setGc( param1 ); + targetPlayer->setGc( static_cast< uint8_t >( param1 ) ); // if we're changing them to a GC, check if they have a rank and if not, set it to the lowest rank if( param1 > 0 ) @@ -413,7 +413,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, auto gcRankIdx = static_cast< uint8_t >( param1 ) - 1; if( targetPlayer->getGcRankArray()[ gcRankIdx ] == 0 ) { - player.setGcRankAt( gcRankIdx, 1 ); + player.setGcRankAt( static_cast< uint8_t >( gcRankIdx ), 1 ); } } @@ -430,7 +430,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, return; } - targetPlayer->setGcRankAt( gcId, param1 ); + targetPlayer->setGcRankAt( static_cast< uint8_t >( gcId ), static_cast< uint8_t >( param1 ) ); player.sendNotice( "GC Rank for {0} for GC {1} was set to {2}", targetPlayer->getName(), targetPlayer->getGc(), targetPlayer->getGcRankArray()[ targetPlayer->getGc() - 1 ] ); break; @@ -448,7 +448,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, } else { - targetActor->getAsPlayer()->registerAetheryte( param2 ); + targetActor->getAsPlayer()->registerAetheryte( static_cast< uint8_t >( param2 ) ); player.sendNotice( "Aetheryte {0} for {1} was turned on.", param2, targetPlayer->getName() ); } } @@ -521,7 +521,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, if( data->isAetheryte ) { doTeleport = true; - teleport = i; + teleport = static_cast< uint16_t >( i ); break; } } @@ -533,7 +533,7 @@ void Sapphire::Network::GameConnection::gm1Handler( FrameworkPtr pFw, else { targetPlayer->setPos( targetPlayer->getPos() ); - targetPlayer->performZoning( param1, targetPlayer->getPos(), 0 ); + targetPlayer->performZoning( static_cast< uint16_t >( param1 ), targetPlayer->getPos(), 0 ); } player.sendNotice( "{0} was warped to zone {1}", targetPlayer->getName(), param1, pZone->getName() ); diff --git a/src/world/Network/Handlers/PacketHandlers.cpp b/src/world/Network/Handlers/PacketHandlers.cpp index f8ae1042..d6682408 100644 --- a/src/world/Network/Handlers/PacketHandlers.cpp +++ b/src/world/Network/Handlers/PacketHandlers.cpp @@ -436,12 +436,12 @@ void Sapphire::Network::GameConnection::socialListHandler( FrameworkPtr pFw, uint8_t type = inPacket.data[ 0x1A ]; uint8_t count = inPacket.data[ 0x1B ]; - if( type == 0x02 ) + if( type == 1 ) { // party list auto listPacket = makeZonePacket< FFXIVIpcSocialList >( player.getId() ); - listPacket->data().type = 2; + listPacket->data().type = 1; listPacket->data().sequence = count; int32_t entrysizes = sizeof( listPacket->data().entries ); @@ -462,19 +462,21 @@ void Sapphire::Network::GameConnection::socialListHandler( FrameworkPtr pFw, memcpy( listPacket->data().entries[ 0 ].name, player.getName().c_str(), strlen( player.getName().c_str() ) ); - // TODO: actually store and read language from somewhere - listPacket->data().entries[ 0 ].bytes1[ 0 ] = 0x01;//flags (lang) - // TODO: these flags need to be figured out - //listPacket.data().entries[0].bytes1[1] = 0x00;//flags + // GC icon + listPacket->data().entries[ 0 ].bytes1[ 0 ] = 2; + // client language J = 0, E = 1, D = 2, F = 3 + listPacket->data().entries[ 0 ].bytes1[ 1 ] = 1; + // user language settings flag J = 1, E = 2, D = 4, F = 8 + listPacket->data().entries[ 0 ].bytes1[ 2 ] = 1 + 2; listPacket->data().entries[ 0 ].onlineStatusMask = player.getOnlineStatusMask(); queueOutPacket( listPacket ); } - else if( type == 0x0b ) + else if( type == 2 ) { // friend list auto listPacket = makeZonePacket< FFXIVIpcSocialList >( player.getId() ); - listPacket->data().type = 0x0B; + listPacket->data().type = 2; listPacket->data().sequence = count; memset( listPacket->data().entries, 0, sizeof( listPacket->data().entries ) ); diff --git a/src/world/Territory/Cell.cpp b/src/world/Territory/Cell.cpp index ff495c90..bbcfdd79 100644 --- a/src/world/Territory/Cell.cpp +++ b/src/world/Territory/Cell.cpp @@ -25,8 +25,8 @@ Sapphire::Cell::~Cell() void Sapphire::Cell::init( uint32_t x, uint32_t y, TerritoryPtr pZone ) { m_pZone = pZone; - m_posX = x; - m_posY = y; + m_posX = static_cast< uint16_t >( x ); + m_posY = static_cast< uint16_t >( y ); m_actors.clear(); } diff --git a/src/world/Territory/House.cpp b/src/world/Territory/House.cpp index def91bc6..4d4544ff 100644 --- a/src/world/Territory/House.cpp +++ b/src/world/Territory/House.cpp @@ -34,7 +34,7 @@ void Sapphire::House::updateHouseDb() auto stmt = pDB->getPreparedStatement( Db::HOUSING_HOUSE_UP ); stmt->setUInt( 6, m_houseId ); - stmt->setInt64( 1, m_buildTime ); + stmt->setInt64( 1, static_cast< int64_t >( m_buildTime ) ); stmt->setBool( 2, m_hasAetheryte ); stmt->setString( 3, m_estateComment ); @@ -117,4 +117,4 @@ bool Sapphire::House::getHasAetheryte() const void Sapphire::House::setHasAetheryte( bool hasAetheryte ) { m_hasAetheryte = hasAetheryte; -} \ No newline at end of file +} diff --git a/src/world/Territory/Housing/HousingInteriorTerritory.cpp b/src/world/Territory/Housing/HousingInteriorTerritory.cpp index a3ccf34e..ade7acfc 100644 --- a/src/world/Territory/Housing/HousingInteriorTerritory.cpp +++ b/src/world/Territory/Housing/HousingInteriorTerritory.cpp @@ -63,8 +63,8 @@ void Sapphire::World::Territory::Housing::HousingInteriorTerritory::onPlayerZone indoorInitPacket->data().u3 = 0; indoorInitPacket->data().u4 = 0; - auto landSetId = pHousingMgr->toLandSetId( m_landIdent.territoryTypeId, m_landIdent.wardNum ); - auto pLand = pHousingMgr->getHousingZoneByLandSetId( landSetId )->getLand( m_landIdent.landId ); + auto landSetId = pHousingMgr->toLandSetId( static_cast< uint16_t >( m_landIdent.territoryTypeId ), static_cast< uint8_t >( m_landIdent.wardNum ) ); + auto pLand = pHousingMgr->getHousingZoneByLandSetId( landSetId )->getLand( static_cast< uint8_t >( m_landIdent.landId ) ); auto pHouse = pLand->getHouse(); for( auto i = 0; i < 10; i++ ) @@ -154,7 +154,7 @@ void Sapphire::World::Territory::Housing::HousingInteriorTerritory::updateHousin auto obj = housingMgr->getYardObjectForItem( housingItem ); - m_housingObjects[ offset ] = obj; + m_housingObjects[static_cast< size_t >( offset ) ] = obj; } containerIdx++; @@ -171,14 +171,14 @@ void Sapphire::World::Territory::Housing::HousingInteriorTerritory::spawnHousing auto offset = ( containerIdx * 50 ) + slot; auto obj = housingMgr->getYardObjectForItem( item ); - m_housingObjects[ offset ] = obj; + m_housingObjects[ static_cast< size_t >( offset ) ] = obj; for( const auto& player : m_playerMap ) { auto objectSpawnPkt = makeZonePacket< Server::FFXIVIpcHousingInternalObjectSpawn >( player.second->getId() ); objectSpawnPkt->data().containerId = containerType; - objectSpawnPkt->data().containerOffset = slot; + objectSpawnPkt->data().containerOffset = static_cast< uint8_t >( slot ); objectSpawnPkt->data().object.itemId = item->getAdditionalData() & 0xFFFF; objectSpawnPkt->data().object.rotation = item->getRot(); @@ -207,7 +207,7 @@ void Sapphire::World::Territory::Housing::HousingInteriorTerritory::updateHousin auto moveObjPkt = makeZonePacket< Server::FFXIVIpcHousingObjectMove >( player.second->getId() ); - moveObjPkt->data().itemRotation = obj.rotation; + moveObjPkt->data().itemRotation = static_cast< uint16_t >( obj.rotation ); moveObjPkt->data().pos = obj.pos; // todo: how does this work when an item is in a slot >50 or u8 max? my guess is landid is the container index, but not sure...