diff --git a/README.md b/README.md index 0b3dc99a..27928167 100644 --- a/README.md +++ b/README.md @@ -17,25 +17,7 @@ Sapphire requires the following software: | Boost 1.63.0 | [Win32 precompiled binaries](https://sourceforge.net/projects/boost/files/boost-binaries/1.63.0/boost_1_63_0-msvc-14.0-32.exe/download) | Boost libraries from your distribution's package manager | | MySQL Server 5.7 | [Official Site](https://dev.mysql.com/downloads/mysql/) | MySQL server from your distribution's package manager | -**Windows** -Set the environment variables ``BOOST_ROOT_DIR`` and ``BOOST_LIB_DIR`` to ``[boost main folder]`` and ``[boost main folder]/lib32-msvc-14.0`` respectively **or** copy your boost installation into the project's ``src/lib`` folder. - -Visual Studio 2017 users: open `Visual Studio Installer` and ensure `Individual Components > SDKs, libraries, and frameworks > Windows Universal C Runtime` is installed. You may also need to install `Individual Components > Compilers, build tools, and runtimes > VC++ 2015.3 v140 toolset for desktop (x86, 64)`. - -To enable [Edit and Continue](https://msdn.microsoft.com/en-us/library/esaeyddf.aspx) ensure you define `-DCMAKE_BUILD_TYPE="Debug"` when generating with CMake. - -If you installed CMake outside of Visual Studio and have it in your `PATH` environment variable, navigate to Sapphire folder and `cmake -DCMAKE_BUILD_TYPE="Debug" && cmake --build .`. - -Otherwise: -* In *Visual Studio 2017*: Open the project via ``File`` > ``Open`` > ``Folder`` and wait, till CMake automatically finishes cache generation. Right click any CMakeLists.txt and select build to build a application. -To configure debug startup parameters, select ``Debug and Launch settings``, the application you want to set up parameters for, and add a ``args`` json array containing your launch parameters in ``configurations``. -If Visual Studio fails to generate a CMake Cache or does not show options to build, make sure that the newest version of it is installed and all environment variables are set correctly. Keep in mind that generating a cache can take a while on some machines. - -The solution `Sapphire.sln` is also generated in the main Sapphire folder. - -**Linux** -`cmake . -DSAPPHIRE_BOOST_VER="your.boost.ver" && make -j JOBS` where `JOBS` is number of cores on your system. -`-j JOBS` can be omitted if your system lacks resources (spoiler: your system probably lacks resources if running on 1GB RAM or lower, or if the build fails due to being out of memory) +Please check the [wiki](https://github.com/SapphireMordred/Sapphire/wiki) for detailed installation/build instructions for your OS. ## Links diff --git a/src/common/Common.h b/src/common/Common.h index a1214d01..18f2cce8 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -553,6 +553,7 @@ namespace Common { AetherReductionDlg = 0x17D, Unk6 = 0x19C, + EObjAnimation = 0x19D, SetTitle = 0x1F4, @@ -562,6 +563,7 @@ namespace Common { SetFavorite = 0x1FC, LearnTeleport = 0x1FD, + OpenRecommendationGuide = 0x200, ArmoryErrorMsg = 0x201, AchievementPopup = 0x203, diff --git a/src/common/Exd/ExdDataGenerated.cpp b/src/common/Exd/ExdDataGenerated.cpp index eda4a919..1f2c8315 100644 --- a/src/common/Exd/ExdDataGenerated.cpp +++ b/src/common/Exd/ExdDataGenerated.cpp @@ -1,6 +1,6 @@ #include "ExdDataGenerated.h" #include -#include + #include @@ -47,7 +47,9 @@ Core::Data::Action::Action( uint32_t row_id, Core::Data::ExdDataGenerated* exdDa name = exdData->getField< std::string >( row, 0 ); icon = exdData->getField< uint16_t >( row, 2 ); actionCategory = exdData->getField< uint8_t >( row, 3 ); - actionTimelineUse = exdData->getField< int16_t >( row, 7 ); + animationStart = exdData->getField< uint8_t >( row, 5 ); + vFX = exdData->getField< uint8_t >( row, 6 ); + animationEnd = exdData->getField< int16_t >( row, 7 ); actionTimelineHit = exdData->getField< uint16_t >( row, 8 ); classJob = exdData->getField< int8_t >( row, 10 ); classJobLevel = exdData->getField< uint8_t >( row, 12 ); @@ -80,6 +82,19 @@ Core::Data::Action::Action( uint32_t row_id, Core::Data::ExdDataGenerated* exdDa isPvP = exdData->getField< bool >( row, 50 ); } +Core::Data::ActionCastTimeline::ActionCastTimeline( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ActionCastTimelineDat.get_row( row_id ); + name = exdData->getField< uint16_t >( row, 0 ); + vFX = exdData->getField< uint16_t >( row, 1 ); +} + +Core::Data::ActionCastVFX::ActionCastVFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ActionCastVFXDat.get_row( row_id ); + vFX = exdData->getField< uint16_t >( row, 0 ); +} + Core::Data::ActionCategory::ActionCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_ActionCategoryDat.get_row( row_id ); @@ -102,6 +117,12 @@ Core::Data::ActionIndirection::ActionIndirection( uint32_t row_id, Core::Data::E name = exdData->getField< int32_t >( row, 0 ); } +Core::Data::ActionParam::ActionParam( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ActionParamDat.get_row( row_id ); + name = exdData->getField< int16_t >( row, 0 ); +} + Core::Data::ActionProcStatus::ActionProcStatus( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_ActionProcStatusDat.get_row( row_id ); @@ -114,6 +135,13 @@ Core::Data::ActionTimeline::ActionTimeline( uint32_t row_id, Core::Data::ExdData key = exdData->getField< std::string >( row, 6 ); } +Core::Data::ActionTimelineReplace::ActionTimelineReplace( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ActionTimelineReplaceDat.get_row( row_id ); + old = exdData->getField< uint16_t >( row, 0 ); + new1 = exdData->getField< uint16_t >( row, 1 ); +} + Core::Data::ActionTransient::ActionTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_ActionTransientDat.get_row( row_id ); @@ -157,6 +185,27 @@ Core::Data::AetherCurrent::AetherCurrent( uint32_t row_id, Core::Data::ExdDataGe quest = exdData->getField< uint32_t >( row, 0 ); } +Core::Data::AetherCurrentCompFlgSet::AetherCurrentCompFlgSet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_AetherCurrentCompFlgSetDat.get_row( row_id ); + territory = exdData->getField< int32_t >( row, 0 ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 2 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 3 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 4 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 5 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 6 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 7 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 8 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 9 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 10 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 11 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 12 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 13 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 14 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 15 ) ); + aetherCurrent.push_back( exdData->getField< int32_t >( row, 16 ) ); +} + Core::Data::AetherialWheel::AetherialWheel( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_AetherialWheelDat.get_row( row_id ); @@ -172,7 +221,10 @@ Core::Data::Aetheryte::Aetheryte( uint32_t row_id, Core::Data::ExdDataGenerated* placeName = exdData->getField< uint16_t >( row, 8 ); aethernetName = exdData->getField< uint16_t >( row, 9 ); territory = exdData->getField< uint16_t >( row, 10 ); - levelId = exdData->getField< uint32_t >( row, 11 ); + level.push_back( exdData->getField< uint32_t >( row, 11 ) ); + level.push_back( exdData->getField< uint32_t >( row, 12 ) ); + 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 ); map = exdData->getField< uint16_t >( row, 19 ); @@ -342,6 +394,25 @@ Core::Data::BaseParam::BaseParam( uint32_t row_id, Core::Data::ExdDataGenerated* auto row = exdData->m_BaseParamDat.get_row( row_id ); name = exdData->getField< std::string >( row, 1 ); description = exdData->getField< std::string >( row, 2 ); + oneHWpn = exdData->getField< uint8_t >( row, 4 ); + oH = exdData->getField< uint8_t >( row, 5 ); + head = exdData->getField< uint8_t >( row, 6 ); + chest = exdData->getField< uint8_t >( row, 7 ); + hands = exdData->getField< uint8_t >( row, 8 ); + waist = exdData->getField< uint8_t >( row, 9 ); + legs = exdData->getField< uint8_t >( row, 10 ); + feet = exdData->getField< uint8_t >( row, 11 ); + earring = exdData->getField< uint8_t >( row, 12 ); + necklace = exdData->getField< uint8_t >( row, 13 ); + bracelet = exdData->getField< uint8_t >( row, 14 ); + ring = exdData->getField< uint8_t >( row, 15 ); + twoHWpn = exdData->getField< uint8_t >( row, 16 ); + chestHead = exdData->getField< uint8_t >( row, 18 ); + chestHeadLegsFeet = exdData->getField< uint8_t >( row, 19 ); + legsFeet = exdData->getField< uint8_t >( row, 21 ); + headChestHandsLegsFeet = exdData->getField< uint8_t >( row, 22 ); + chestLegsGloves = exdData->getField< uint8_t >( row, 23 ); + chestLegsFeet = exdData->getField< uint8_t >( row, 24 ); } Core::Data::BattleLeve::BattleLeve( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -493,6 +564,17 @@ Core::Data::BNpcName::BNpcName( uint32_t row_id, Core::Data::ExdDataGenerated* e plural = exdData->getField< std::string >( row, 2 ); } +Core::Data::Buddy::Buddy( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_BuddyDat.get_row( row_id ); + questRequirement2 = exdData->getField< int32_t >( row, 1 ); + questRequirement1 = exdData->getField< int32_t >( row, 2 ); + soundEffect4 = exdData->getField< std::string >( row, 4 ); + soundEffect3 = exdData->getField< std::string >( row, 5 ); + soundEffect2 = exdData->getField< std::string >( row, 6 ); + soundEffect1 = exdData->getField< std::string >( row, 7 ); +} + Core::Data::BuddyAction::BuddyAction( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_BuddyActionDat.get_row( row_id ); @@ -533,6 +615,10 @@ Core::Data::BuddySkill::BuddySkill( uint32_t row_id, Core::Data::ExdDataGenerate { auto row = exdData->m_BuddySkillDat.get_row( row_id ); buddyLevel = exdData->getField< uint8_t >( row, 0 ); + isActive = exdData->getField< bool >( row, 1 ); + defender = exdData->getField< uint16_t >( row, 2 ); + attacker = exdData->getField< uint16_t >( row, 3 ); + healer = exdData->getField< uint16_t >( row, 4 ); } Core::Data::Cabinet::Cabinet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -625,6 +711,7 @@ Core::Data::CharaMakeCustomize::CharaMakeCustomize( uint32_t row_id, Core::Data: auto row = exdData->m_CharaMakeCustomizeDat.get_row( row_id ); icon = exdData->getField< uint32_t >( row, 1 ); data = exdData->getField< uint16_t >( row, 2 ); + isPurchasable = exdData->getField< bool >( row, 3 ); } Core::Data::CharaMakeType::CharaMakeType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -633,48 +720,48 @@ Core::Data::CharaMakeType::CharaMakeType( uint32_t row_id, Core::Data::ExdDataGe 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, 2283 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2284 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2285 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2286 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2287 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2288 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2289 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2290 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2291 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2292 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2293 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2294 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2295 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2296 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2297 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2298 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2299 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2300 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2301 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2302 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2303 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2304 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2305 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2306 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2307 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2308 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2309 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2310 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2311 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2312 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2313 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2314 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2315 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2316 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2317 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2318 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2319 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2320 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2321 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2322 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2323 ) ); - facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 2324 ) ); + 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 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3296 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3297 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3298 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3299 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3300 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3301 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3302 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3303 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3304 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3305 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3306 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3307 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3308 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3309 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3310 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3311 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3312 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3313 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3314 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3315 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3316 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3317 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3318 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3319 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3320 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3321 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3322 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3323 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3324 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3325 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3326 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3327 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3328 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3329 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3330 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3331 ) ); + facialFeatureIcon.push_back( exdData->getField< int32_t >( row, 3332 ) ); } Core::Data::ChocoboRace::ChocoboRace( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -731,6 +818,12 @@ Core::Data::ChocoboRaceTerritory::ChocoboRaceTerritory( uint32_t row_id, Core::D icon = exdData->getField< int32_t >( row, 1 ); } +Core::Data::ChocoboTaxi::ChocoboTaxi( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ChocoboTaxiDat.get_row( row_id ); + location = exdData->getField< uint32_t >( row, 0 ); +} + Core::Data::ChocoboTaxiStand::ChocoboTaxiStand( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_ChocoboTaxiStandDat.get_row( row_id ); @@ -759,6 +852,9 @@ Core::Data::ClassJob::ClassJob( uint32_t row_id, Core::Data::ExdDataGenerated* e limitBreak2 = exdData->getField< uint16_t >( row, 34 ); limitBreak3 = exdData->getField< uint16_t >( row, 35 ); itemSoulCrystal = exdData->getField< uint32_t >( row, 37 ); + unlockQuest = exdData->getField< uint32_t >( row, 38 ); + relicQuest = exdData->getField< uint32_t >( row, 39 ); + prerequisite = exdData->getField< uint32_t >( row, 40 ); startingLevel = exdData->getField< uint8_t >( row, 41 ); } @@ -800,6 +896,8 @@ Core::Data::ClassJobCategory::ClassJobCategory( uint32_t row_id, Core::Data::Exd mCH = exdData->getField< bool >( row, 32 ); dRK = exdData->getField< bool >( row, 33 ); aST = exdData->getField< bool >( row, 34 ); + sAM = exdData->getField< bool >( row, 35 ); + rDM = exdData->getField< bool >( row, 36 ); } Core::Data::Companion::Companion( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -963,14 +1061,15 @@ Core::Data::ContentExAction::ContentExAction( uint32_t row_id, Core::Data::ExdDa Core::Data::ContentFinderCondition::ContentFinderCondition( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_ContentFinderConditionDat.get_row( row_id ); - contentIndicator = exdData->getField< uint8_t >( row, 1 ); - instanceContent = exdData->getField< uint16_t >( row, 2 ); - contentMemberType = exdData->getField< uint8_t >( row, 7 ); - classJobLevelRequired = exdData->getField< uint8_t >( row, 13 ); - classJobLevelSync = exdData->getField< uint8_t >( row, 14 ); - itemLevelRequired = exdData->getField< uint16_t >( row, 15 ); - itemLevelSync = exdData->getField< uint16_t >( row, 16 ); - icon = exdData->getField< uint32_t >( row, 36 ); + instanceContent = exdData->getField< uint16_t >( row, 3 ); + contentMemberType = exdData->getField< uint8_t >( row, 9 ); + classJobLevelRequired = exdData->getField< uint8_t >( row, 15 ); + classJobLevelSync = exdData->getField< uint8_t >( row, 16 ); + itemLevelRequired = exdData->getField< uint16_t >( row, 17 ); + itemLevelSync = exdData->getField< uint16_t >( row, 18 ); + contentIndicator = exdData->getField< uint8_t >( row, 24 ); + contentType = exdData->getField< uint8_t >( row, 33 ); + icon = exdData->getField< uint32_t >( row, 37 ); } Core::Data::ContentFinderConditionTransient::ContentFinderConditionTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -988,6 +1087,19 @@ Core::Data::ContentMemberType::ContentMemberType( uint32_t row_id, Core::Data::E rangedPerParty = exdData->getField< uint8_t >( row, 12 ); } +Core::Data::ContentNpcTalk::ContentNpcTalk( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ContentNpcTalkDat.get_row( row_id ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 1 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 2 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 3 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 4 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 5 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 6 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 7 ) ); + contentTalk.push_back( exdData->getField< uint32_t >( row, 8 ) ); +} + Core::Data::ContentRoulette::ContentRoulette( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_ContentRouletteDat.get_row( row_id ); @@ -995,14 +1107,41 @@ Core::Data::ContentRoulette::ContentRoulette( uint32_t row_id, Core::Data::ExdDa description = exdData->getField< std::string >( row, 2 ); dutyType = exdData->getField< std::string >( row, 3 ); isInDutyFinder = exdData->getField< bool >( row, 6 ); - itemLevelRequired = exdData->getField< uint16_t >( row, 10 ); - icon = exdData->getField< uint32_t >( row, 12 ); - rewardTomeA = exdData->getField< uint16_t >( row, 14 ); - rewardTomeB = exdData->getField< uint16_t >( row, 15 ); - rewardTomeC = exdData->getField< uint16_t >( row, 16 ); - sortKey = exdData->getField< uint8_t >( row, 19 ); - contentMemberType = exdData->getField< uint8_t >( row, 21 ); - requireAllDuties = exdData->getField< bool >( row, 31 ); + itemLevelRequired = exdData->getField< uint16_t >( row, 11 ); + icon = exdData->getField< uint32_t >( row, 13 ); + rewardTomeA = exdData->getField< uint16_t >( row, 15 ); + rewardTomeB = exdData->getField< uint16_t >( row, 16 ); + rewardTomeC = exdData->getField< uint16_t >( row, 17 ); + sortKey = exdData->getField< uint8_t >( row, 20 ); + contentMemberType = exdData->getField< uint8_t >( row, 22 ); + requireAllDuties = exdData->getField< bool >( row, 32 ); +} + +Core::Data::ContentsNote::ContentsNote( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ContentsNoteDat.get_row( row_id ); + contentType = exdData->getField< uint8_t >( row, 0 ); + requiredAmount = exdData->getField< int32_t >( row, 2 ); +} + +Core::Data::ContentsNoteCategory::ContentsNoteCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ContentsNoteCategoryDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 1 ); +} + +Core::Data::ContentTalk::ContentTalk( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ContentTalkDat.get_row( row_id ); + contentTalkParam = exdData->getField< uint8_t >( row, 0 ); + text = exdData->getField< std::string >( row, 1 ); +} + +Core::Data::ContentTalkParam::ContentTalkParam( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ContentTalkParamDat.get_row( row_id ); + param = exdData->getField< bool >( row, 0 ); + testAction = exdData->getField< uint32_t >( row, 2 ); } Core::Data::ContentType::ContentType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -1018,6 +1157,8 @@ Core::Data::CraftAction::CraftAction( uint32_t row_id, Core::Data::ExdDataGenera auto row = exdData->m_CraftActionDat.get_row( row_id ); name = exdData->getField< std::string >( row, 0 ); description = exdData->getField< std::string >( row, 1 ); + animationStart = exdData->getField< uint16_t >( row, 2 ); + animationEnd = exdData->getField< uint16_t >( row, 3 ); icon = exdData->getField< uint16_t >( row, 4 ); classJob = exdData->getField< int8_t >( row, 5 ); classJobCategory = exdData->getField< uint8_t >( row, 6 ); @@ -1402,6 +1543,12 @@ Core::Data::EObj::EObj( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) data = exdData->getField< uint32_t >( row, 9 ); } +Core::Data::EObjName::EObjName( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_EObjNameDat.get_row( row_id ); + singular = exdData->getField< std::string >( row, 0 ); +} + Core::Data::EquipRaceCategory::EquipRaceCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_EquipRaceCategoryDat.get_row( row_id ); @@ -1434,6 +1581,24 @@ Core::Data::EquipSlotCategory::EquipSlotCategory( uint32_t row_id, Core::Data::E soulCrystal = exdData->getField< int8_t >( row, 13 ); } +Core::Data::EurekaAethernet::EurekaAethernet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_EurekaAethernetDat.get_row( row_id ); + location = exdData->getField< uint16_t >( row, 0 ); +} + +Core::Data::EurekaGrowData::EurekaGrowData( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_EurekaGrowDataDat.get_row( row_id ); + baseResistance = exdData->getField< uint16_t >( row, 0 ); +} + +Core::Data::EurekaSphereElementAdjust::EurekaSphereElementAdjust( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_EurekaSphereElementAdjustDat.get_row( row_id ); + powerModifier = exdData->getField< uint16_t >( row, 0 ); +} + Core::Data::EventAction::EventAction( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_EventActionDat.get_row( row_id ); @@ -1501,17 +1666,21 @@ Core::Data::ExVersion::ExVersion( uint32_t row_id, Core::Data::ExdDataGenerated* Core::Data::Fate::Fate( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_FateDat.get_row( row_id ); + eurekaFate = exdData->getField< uint8_t >( row, 0 ); + location = exdData->getField< uint32_t >( row, 2 ); classJobLevel = exdData->getField< uint8_t >( row, 3 ); classJobLevelMax = exdData->getField< uint8_t >( row, 4 ); eventItem = exdData->getField< uint32_t >( row, 5 ); iconObjective = exdData->getField< uint32_t >( row, 10 ); iconMap = exdData->getField< uint32_t >( row, 11 ); + music = exdData->getField< int32_t >( row, 13 ); name = exdData->getField< std::string >( row, 27 ); description = exdData->getField< std::string >( row, 28 ); objective = exdData->getField< std::string >( row, 29 ); statusText.push_back( exdData->getField< std::string >( row, 30 ) ); statusText.push_back( exdData->getField< std::string >( row, 31 ) ); statusText.push_back( exdData->getField< std::string >( row, 32 ) ); + arrayIndex = exdData->getField< uint32_t >( row, 33 ); } Core::Data::FCActivity::FCActivity( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -1581,6 +1750,13 @@ Core::Data::FCRights::FCRights( uint32_t row_id, Core::Data::ExdDataGenerated* e fCRank = exdData->getField< uint8_t >( row, 3 ); } +Core::Data::FieldMarker::FieldMarker( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_FieldMarkerDat.get_row( row_id ); + vFX = exdData->getField< int32_t >( row, 0 ); + icon = exdData->getField< uint16_t >( row, 1 ); +} + Core::Data::FishingSpot::FishingSpot( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_FishingSpotDat.get_row( row_id ); @@ -1967,6 +2143,7 @@ Core::Data::GeneralAction::GeneralAction( uint32_t row_id, Core::Data::ExdDataGe auto row = exdData->m_GeneralActionDat.get_row( row_id ); name = exdData->getField< std::string >( row, 0 ); description = exdData->getField< std::string >( row, 1 ); + action = exdData->getField< uint16_t >( row, 3 ); icon = exdData->getField< int32_t >( row, 7 ); } @@ -2053,9 +2230,9 @@ Core::Data::HousingFurniture::HousingFurniture( uint32_t row_id, Core::Data::Exd usageType = exdData->getField< uint8_t >( row, 2 ); usageParameter = exdData->getField< uint32_t >( row, 3 ); housingLayoutLimit = exdData->getField< uint8_t >( row, 4 ); - event = exdData->getField< uint32_t >( row, 5 ); - item = exdData->getField< uint32_t >( row, 6 ); - destroyOnRemoval = exdData->getField< bool >( row, 7 ); + event = exdData->getField< uint32_t >( row, 6 ); + item = exdData->getField< uint32_t >( row, 7 ); + destroyOnRemoval = exdData->getField< bool >( row, 8 ); } Core::Data::HousingYardObject::HousingYardObject( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -2108,13 +2285,6 @@ Core::Data::InstanceContentTextData::InstanceContentTextData( uint32_t row_id, C text = exdData->getField< std::string >( row, 0 ); } -Core::Data::InstanceContentType::InstanceContentType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) -{ - auto row = exdData->m_InstanceContentTypeDat.get_row( row_id ); - sortKey = exdData->getField< uint8_t >( row, 2 ); - contentType = exdData->getField< uint8_t >( row, 4 ); -} - Core::Data::Item::Item( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_ItemDat.get_row( row_id ); @@ -2409,11 +2579,18 @@ Core::Data::MapMarker::MapMarker( uint32_t row_id, Core::Data::ExdDataGenerated* icon = exdData->getField< uint16_t >( row, 2 ); placeNameSubtext = exdData->getField< uint16_t >( row, 3 ); subtextOrientation = exdData->getField< uint8_t >( row, 4 ); + mapMarkerRegion = exdData->getField< uint8_t >( row, 5 ); type = exdData->getField< uint8_t >( row, 6 ); dataType = exdData->getField< uint8_t >( row, 7 ); dataKey = exdData->getField< uint16_t >( row, 8 ); } +Core::Data::MapMarkerRegion::MapMarkerRegion( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MapMarkerRegionDat.get_row( row_id ); + x = exdData->getField< int16_t >( row, 0 ); +} + Core::Data::MapSymbol::MapSymbol( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_MapSymbolDat.get_row( row_id ); @@ -2421,6 +2598,13 @@ Core::Data::MapSymbol::MapSymbol( uint32_t row_id, Core::Data::ExdDataGenerated* placeName = exdData->getField< int32_t >( row, 1 ); } +Core::Data::Marker::Marker( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MarkerDat.get_row( row_id ); + icon = exdData->getField< int32_t >( row, 0 ); + name = exdData->getField< std::string >( row, 1 ); +} + Core::Data::MasterpieceSupplyDuty::MasterpieceSupplyDuty( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_MasterpieceSupplyDutyDat.get_row( row_id ); @@ -2532,7 +2716,7 @@ Core::Data::Mount::Mount( uint32_t row_id, Core::Data::ExdDataGenerated* exdData flyingCondition = exdData->getField< uint8_t >( row, 10 ); isFlying = exdData->getField< uint8_t >( row, 14 ); rideBGM = exdData->getField< uint16_t >( row, 17 ); - order = exdData->getField< int8_t >( row, 29 ); + order = exdData->getField< int16_t >( row, 29 ); icon = exdData->getField< uint16_t >( row, 30 ); } @@ -2547,6 +2731,28 @@ Core::Data::MountAction::MountAction( uint32_t row_id, Core::Data::ExdDataGenera action.push_back( exdData->getField< uint16_t >( row, 5 ) ); } +Core::Data::MoveTimeline::MoveTimeline( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MoveTimelineDat.get_row( row_id ); + idle = exdData->getField< uint16_t >( row, 0 ); + moveForward = exdData->getField< uint16_t >( row, 1 ); + moveBack = exdData->getField< uint16_t >( row, 2 ); + moveLeft = exdData->getField< uint16_t >( row, 3 ); + moveRight = exdData->getField< uint16_t >( row, 4 ); + moveUp = exdData->getField< uint16_t >( row, 5 ); + moveDown = exdData->getField< uint16_t >( row, 6 ); + moveTurnLeft = exdData->getField< uint16_t >( row, 7 ); + moveTurnRight = exdData->getField< uint16_t >( row, 8 ); + extra = exdData->getField< uint16_t >( row, 9 ); +} + +Core::Data::MoveVfx::MoveVfx( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_MoveVfxDat.get_row( row_id ); + zero = exdData->getField< uint16_t >( row, 0 ); + one = exdData->getField< uint16_t >( row, 1 ); +} + Core::Data::NpcEquip::NpcEquip( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_NpcEquipDat.get_row( row_id ); @@ -2636,6 +2842,27 @@ Core::Data::ParamGrow::ParamGrow( uint32_t row_id, Core::Data::ExdDataGenerated* huntingLogExpReward = exdData->getField< int32_t >( row, 9 ); } +Core::Data::Perform::Perform( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_PerformDat.get_row( row_id ); + name = exdData->getField< std::string >( row, 0 ); + modelKey = exdData->getField< uint64_t >( row, 2 ); + animationStart = exdData->getField< uint16_t >( row, 3 ); + animationEnd = exdData->getField< uint16_t >( row, 4 ); + animationIdle = exdData->getField< uint16_t >( row, 5 ); + animationPlay01 = exdData->getField< uint16_t >( row, 6 ); + animationPlay02 = exdData->getField< uint16_t >( row, 7 ); + stopAnimation = exdData->getField< int32_t >( row, 8 ); + instrument = exdData->getField< std::string >( row, 9 ); + transient = exdData->getField< uint8_t >( row, 11 ); +} + +Core::Data::PerformTransient::PerformTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_PerformTransientDat.get_row( row_id ); + text = exdData->getField< std::string >( row, 0 ); +} + Core::Data::Pet::Pet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_PetDat.get_row( row_id ); @@ -2666,6 +2893,22 @@ Core::Data::PlaceName::PlaceName( uint32_t row_id, Core::Data::ExdDataGenerated* nameNoArticle = exdData->getField< std::string >( row, 2 ); } +Core::Data::PublicContent::PublicContent( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_PublicContentDat.get_row( row_id ); + timeLimit = exdData->getField< uint16_t >( row, 1 ); + mapIcon = exdData->getField< uint32_t >( row, 2 ); + name = exdData->getField< std::string >( row, 3 ); + territoryType = exdData->getField< uint16_t >( row, 7 ); +} + +Core::Data::PvPActionSort::PvPActionSort( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_PvPActionSortDat.get_row( row_id ); + name = exdData->getField< uint8_t >( row, 0 ); + action = exdData->getField< uint16_t >( row, 1 ); +} + Core::Data::Quest::Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_QuestDat.get_row( row_id ); @@ -2701,7 +2944,6 @@ Core::Data::Quest::Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData eNpcResidentEnd = exdData->getField< uint32_t >( row, 42 ); isRepeatable = exdData->getField< bool >( row, 43 ); repeatIntervalType = exdData->getField< uint8_t >( row, 44 ); - scriptInstruction.push_back( exdData->getField< std::string >( row, 49 ) ); scriptInstruction.push_back( exdData->getField< std::string >( row, 50 ) ); scriptInstruction.push_back( exdData->getField< std::string >( row, 51 ) ); scriptInstruction.push_back( exdData->getField< std::string >( row, 52 ) ); @@ -2751,7 +2993,7 @@ Core::Data::Quest::Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData 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 ) ); @@ -2801,7 +3043,7 @@ Core::Data::Quest::Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData 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 ) ); - level.push_back( exdData->getField< uint32_t >( row, 1221 ) ); + scriptArg.push_back( exdData->getField< uint32_t >( row, 149 ) ); level.push_back( exdData->getField< uint32_t >( row, 1222 ) ); level.push_back( exdData->getField< uint32_t >( row, 1223 ) ); level.push_back( exdData->getField< uint32_t >( row, 1224 ) ); @@ -2972,70 +3214,99 @@ Core::Data::Quest::Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData level.push_back( exdData->getField< uint32_t >( row, 1389 ) ); level.push_back( exdData->getField< uint32_t >( row, 1390 ) ); level.push_back( exdData->getField< uint32_t >( row, 1391 ) ); - classJobRequired = exdData->getField< uint8_t >( row, 1437 ); - expFactor = exdData->getField< uint16_t >( row, 1439 ); - gilReward = exdData->getField< uint32_t >( row, 1440 ); - gCSeals = exdData->getField< uint16_t >( row, 1442 ); - itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1443 ) ); + level.push_back( exdData->getField< uint32_t >( row, 1392 ) ); + 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 ) ); itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1445 ) ); - itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1446 ) ); + itemCatalyst.push_back( exdData->getField< uint8_t >( row, 1446 ) ); itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1447 ) ); itemCountCatalyst.push_back( exdData->getField< uint8_t >( row, 1448 ) ); - itemRewardType = exdData->getField< uint8_t >( row, 1449 ); - itemReward0.push_back( exdData->getField< uint32_t >( row, 1450 ) ); + 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 ) ); 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 ) ); - itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1457 ) ); + itemReward0.push_back( exdData->getField< uint32_t >( row, 1456 ) ); itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1458 ) ); 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 ) ); - stainReward0.push_back( exdData->getField< uint8_t >( row, 1464 ) ); + itemCountReward0.push_back( exdData->getField< uint8_t >( row, 1463 ) ); stainReward0.push_back( exdData->getField< uint8_t >( row, 1465 ) ); 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 ) ); - itemReward1.push_back( exdData->getField< uint32_t >( row, 1471 ) ); + stainReward0.push_back( exdData->getField< uint8_t >( row, 1470 ) ); itemReward1.push_back( exdData->getField< uint32_t >( row, 1472 ) ); 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 ) ); - itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1476 ) ); + itemReward1.push_back( exdData->getField< uint32_t >( row, 1476 ) ); itemCountReward1.push_back( exdData->getField< uint8_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 ) ); - isHQReward1.push_back( exdData->getField< bool >( row, 1481 ) ); + itemCountReward1.push_back( exdData->getField< uint8_t >( row, 1481 ) ); isHQReward1.push_back( exdData->getField< bool >( 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 ) ); - stainReward1.push_back( exdData->getField< uint8_t >( row, 1486 ) ); + isHQReward1.push_back( exdData->getField< bool >( row, 1486 ) ); stainReward1.push_back( exdData->getField< uint8_t >( 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 ) ); - emoteReward = exdData->getField< uint8_t >( row, 1491 ); - actionReward = exdData->getField< uint16_t >( row, 1492 ); - generalActionReward.push_back( exdData->getField< uint8_t >( row, 1493 ) ); + 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 ) ); - otherReward = exdData->getField< uint8_t >( row, 1496 ); - instanceContentUnlock = exdData->getField< uint32_t >( row, 1499 ); - tomestoneReward = exdData->getField< uint8_t >( row, 1501 ); - tomestoneCountReward = exdData->getField< uint8_t >( row, 1502 ); - reputationReward = exdData->getField< uint8_t >( row, 1503 ); - placeName = exdData->getField< uint16_t >( row, 1504 ); - journalGenre = exdData->getField< uint8_t >( row, 1505 ); - icon = exdData->getField< uint32_t >( row, 1507 ); - iconSpecial = exdData->getField< uint32_t >( row, 1508 ); - eventIconType = exdData->getField< uint8_t >( row, 1511 ); - sortKey = exdData->getField< uint16_t >( row, 1513 ); + 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 ); +} + +Core::Data::QuestClassJobReward::QuestClassJobReward( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_QuestClassJobRewardDat.get_row( row_id ); + classJobCategory = exdData->getField< uint8_t >( row, 0 ); + rewardItem.push_back( exdData->getField< uint32_t >( row, 1 ) ); + rewardItem.push_back( exdData->getField< uint32_t >( row, 2 ) ); + rewardItem.push_back( exdData->getField< uint32_t >( row, 3 ) ); + rewardItem.push_back( exdData->getField< uint32_t >( row, 4 ) ); + rewardAmount.push_back( exdData->getField< uint8_t >( row, 5 ) ); + rewardAmount.push_back( exdData->getField< uint8_t >( row, 6 ) ); + rewardAmount.push_back( exdData->getField< uint8_t >( row, 7 ) ); + rewardAmount.push_back( exdData->getField< uint8_t >( row, 8 ) ); + requiredItem.push_back( exdData->getField< uint32_t >( row, 9 ) ); + requiredItem.push_back( exdData->getField< uint32_t >( row, 10 ) ); + requiredItem.push_back( exdData->getField< uint32_t >( row, 11 ) ); + requiredItem.push_back( exdData->getField< uint32_t >( row, 12 ) ); + requiredAmount.push_back( exdData->getField< uint8_t >( row, 13 ) ); + requiredAmount.push_back( exdData->getField< uint8_t >( row, 14 ) ); + requiredAmount.push_back( exdData->getField< uint8_t >( row, 15 ) ); + requiredAmount.push_back( exdData->getField< uint8_t >( row, 16 ) ); +} + +Core::Data::QuestRepeatFlag::QuestRepeatFlag( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_QuestRepeatFlagDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); } Core::Data::QuestRewardOther::QuestRewardOther( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -3048,7 +3319,8 @@ Core::Data::QuickChat::QuickChat( uint32_t row_id, Core::Data::ExdDataGenerated* { auto row = exdData->m_QuickChatDat.get_row( row_id ); nameAction = exdData->getField< std::string >( row, 0 ); - icon1 = exdData->getField< int32_t >( row, 1 ); + icon = exdData->getField< int32_t >( row, 1 ); + addon = exdData->getField< int32_t >( row, 2 ); quickChatTransient = exdData->getField< int8_t >( row, 3 ); } @@ -3126,6 +3398,7 @@ Core::Data::Recipe::Recipe( uint32_t row_id, Core::Data::ExdDataGenerated* exdDa secretRecipeBook = exdData->getField< uint16_t >( row, 36 ); canQuickSynth = exdData->getField< bool >( row, 37 ); canHq = exdData->getField< bool >( row, 38 ); + expRewarded = exdData->getField< bool >( row, 39 ); statusRequired = exdData->getField< int32_t >( row, 40 ); itemRequired = exdData->getField< int32_t >( row, 41 ); isSpecializationRequired = exdData->getField< bool >( row, 42 ); @@ -3142,9 +3415,9 @@ Core::Data::RecipeLevelTable::RecipeLevelTable( uint32_t row_id, Core::Data::Exd auto row = exdData->m_RecipeLevelTableDat.get_row( row_id ); classJobLevel = exdData->getField< uint8_t >( row, 0 ); stars = exdData->getField< uint8_t >( row, 1 ); - difficulty = exdData->getField< uint16_t >( row, 2 ); - quality = exdData->getField< int16_t >( row, 3 ); - durability = exdData->getField< uint16_t >( row, 4 ); + difficulty = exdData->getField< uint16_t >( row, 3 ); + quality = exdData->getField< int16_t >( row, 4 ); + durability = exdData->getField< uint16_t >( row, 5 ); } Core::Data::RecipeNotebookList::RecipeNotebookList( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -3312,6 +3585,12 @@ Core::Data::RecipeNotebookList::RecipeNotebookList( uint32_t row_id, Core::Data: recipe.push_back( exdData->getField< int32_t >( row, 160 ) ); } +Core::Data::RecommendContents::RecommendContents( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_RecommendContentsDat.get_row( row_id ); + level = exdData->getField< int32_t >( row, 0 ); +} + Core::Data::Relic::Relic( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_RelicDat.get_row( row_id ); @@ -3379,6 +3658,13 @@ Core::Data::RetainerTask::RetainerTask( uint32_t row_id, Core::Data::ExdDataGene task = exdData->getField< uint16_t >( row, 13 ); } +Core::Data::RetainerTaskLvRange::RetainerTaskLvRange( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_RetainerTaskLvRangeDat.get_row( row_id ); + min = exdData->getField< uint8_t >( row, 0 ); + max = exdData->getField< uint8_t >( row, 1 ); +} + Core::Data::RetainerTaskNormal::RetainerTaskNormal( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_RetainerTaskNormalDat.get_row( row_id ); @@ -3386,6 +3672,8 @@ Core::Data::RetainerTaskNormal::RetainerTaskNormal( uint32_t row_id, Core::Data: quantity0 = exdData->getField< uint8_t >( row, 1 ); quantity1 = exdData->getField< uint8_t >( row, 2 ); quantity2 = exdData->getField< uint8_t >( row, 3 ); + gatheringLog = exdData->getField< int16_t >( row, 4 ); + fishingLog = exdData->getField< int16_t >( row, 5 ); } Core::Data::RetainerTaskParameter::RetainerTaskParameter( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -3456,6 +3744,41 @@ Core::Data::SatisfactionSupplyReward::SatisfactionSupplyReward( uint32_t row_id, gilHigh = exdData->getField< uint16_t >( row, 15 ); } +Core::Data::ScenarioTree::ScenarioTree( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ScenarioTreeDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); + image = exdData->getField< uint16_t >( row, 1 ); +} + +Core::Data::ScenarioTreeTips::ScenarioTreeTips( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ScenarioTreeTipsDat.get_row( row_id ); + tips1 = exdData->getField< uint32_t >( row, 1 ); + tips2 = exdData->getField< uint32_t >( row, 3 ); +} + +Core::Data::ScenarioTreeTipsClassQuest::ScenarioTreeTipsClassQuest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ScenarioTreeTipsClassQuestDat.get_row( row_id ); + quest = exdData->getField< uint32_t >( row, 0 ); + requiredLevel = exdData->getField< uint16_t >( row, 1 ); + requiredExpansion = exdData->getField< uint8_t >( row, 2 ); + requiredQuest = exdData->getField< uint32_t >( row, 3 ); +} + +Core::Data::ScenarioTreeTipsQuest::ScenarioTreeTipsQuest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ScenarioTreeTipsQuestDat.get_row( row_id ); + level = exdData->getField< uint32_t >( row, 0 ); +} + +Core::Data::ScenarioType::ScenarioType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ScenarioTypeDat.get_row( row_id ); + type = exdData->getField< std::string >( row, 0 ); +} + Core::Data::ScreenImage::ScreenImage( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_ScreenImageDat.get_row( row_id ); @@ -3469,6 +3792,40 @@ Core::Data::SecretRecipeBook::SecretRecipeBook( uint32_t row_id, Core::Data::Exd name = exdData->getField< std::string >( row, 1 ); } +Core::Data::SkyIsland2Mission::SkyIsland2Mission( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_SkyIsland2MissionDat.get_row( row_id ); + item1 = exdData->getField< uint32_t >( row, 0 ); + item2 = exdData->getField< uint32_t >( row, 1 ); + objective1 = exdData->getField< uint16_t >( row, 4 ); + requiredAmount1 = exdData->getField< uint8_t >( row, 6 ); + objective2 = exdData->getField< uint16_t >( row, 9 ); + requiredAmount2 = exdData->getField< uint8_t >( row, 11 ); + objective3 = exdData->getField< uint16_t >( row, 14 ); + image = exdData->getField< uint32_t >( row, 20 ); +} + +Core::Data::SkyIsland2MissionDetail::SkyIsland2MissionDetail( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_SkyIsland2MissionDetailDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); + range = exdData->getField< uint8_t >( row, 2 ); + eObj = exdData->getField< uint32_t >( row, 4 ); + objective = exdData->getField< std::string >( row, 7 ); +} + +Core::Data::SkyIsland2MissionType::SkyIsland2MissionType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_SkyIsland2MissionTypeDat.get_row( row_id ); + type = exdData->getField< bool >( row, 0 ); +} + +Core::Data::SkyIsland2RangeType::SkyIsland2RangeType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_SkyIsland2RangeTypeDat.get_row( row_id ); + type = exdData->getField< uint8_t >( row, 0 ); +} + Core::Data::SpearfishingItem::SpearfishingItem( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_SpearfishingItemDat.get_row( row_id ); @@ -3572,6 +3929,13 @@ Core::Data::Stain::Stain( uint32_t row_id, Core::Data::ExdDataGenerated* exdData name = exdData->getField< std::string >( row, 2 ); } +Core::Data::StainTransient::StainTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_StainTransientDat.get_row( row_id ); + item1 = exdData->getField< uint32_t >( row, 0 ); + item2 = exdData->getField< uint32_t >( row, 1 ); +} + Core::Data::Status::Status( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_StatusDat.get_row( row_id ); @@ -3579,17 +3943,32 @@ Core::Data::Status::Status( uint32_t row_id, Core::Data::ExdDataGenerated* exdDa description = exdData->getField< std::string >( row, 1 ); icon = exdData->getField< uint16_t >( row, 2 ); maxStacks = exdData->getField< uint8_t >( row, 3 ); + category = exdData->getField< uint8_t >( row, 4 ); + hitEffect = exdData->getField< uint8_t >( row, 5 ); + vFX = exdData->getField< uint8_t >( row, 6 ); lockMovement = exdData->getField< bool >( row, 7 ); lockActions = exdData->getField< bool >( row, 9 ); lockControl = exdData->getField< bool >( row, 10 ); transfiguration = exdData->getField< bool >( row, 11 ); canDispel = exdData->getField< bool >( row, 13 ); + inflictedByActor = exdData->getField< bool >( row, 14 ); isPermanent = exdData->getField< bool >( row, 15 ); - inflictedByActor = exdData->getField< bool >( row, 17 ); isFcBuff = exdData->getField< bool >( row, 21 ); invisibility = exdData->getField< bool >( row, 22 ); } +Core::Data::StatusHitEffect::StatusHitEffect( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_StatusHitEffectDat.get_row( row_id ); + location = exdData->getField< uint16_t >( row, 0 ); +} + +Core::Data::StatusLoopVFX::StatusLoopVFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_StatusLoopVFXDat.get_row( row_id ); + location = exdData->getField< uint16_t >( row, 0 ); +} + Core::Data::Story::Story( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_StoryDat.get_row( row_id ); @@ -3624,6 +4003,7 @@ Core::Data::SubmarinePart::SubmarinePart( uint32_t row_id, Core::Data::ExdDataGe Core::Data::SubmarineRank::SubmarineRank( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_SubmarineRankDat.get_row( row_id ); + rank = exdData->getField< uint16_t >( row, 0 ); expToNext = exdData->getField< uint32_t >( row, 1 ); } @@ -3674,7 +4054,8 @@ Core::Data::TerritoryType::TerritoryType( uint32_t row_id, Core::Data::ExdDataGe map = exdData->getField< uint16_t >( row, 6 ); territoryIntendedUse = exdData->getField< uint8_t >( row, 9 ); weatherRate = exdData->getField< uint8_t >( row, 12 ); - aetheryte = exdData->getField< int32_t >( row, 23 ); + arrayEventHandler = exdData->getField< uint32_t >( row, 22 ); + aetheryte = exdData->getField< int32_t >( row, 24 ); } Core::Data::TextCommand::TextCommand( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) @@ -3746,6 +4127,31 @@ Core::Data::TraitTransient::TraitTransient( uint32_t row_id, Core::Data::ExdData description = exdData->getField< std::string >( row, 0 ); } +Core::Data::Transformation::Transformation( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_TransformationDat.get_row( row_id ); + model = exdData->getField< int16_t >( row, 1 ); + bNpcCustomize = exdData->getField< int32_t >( row, 2 ); + bNpcEquip = exdData->getField< int32_t >( row, 3 ); + action.push_back( exdData->getField< uint16_t >( row, 4 ) ); + action.push_back( exdData->getField< uint16_t >( row, 5 ) ); + action.push_back( exdData->getField< uint16_t >( row, 6 ) ); + action.push_back( exdData->getField< uint16_t >( row, 7 ) ); + action.push_back( exdData->getField< uint16_t >( row, 8 ) ); + action.push_back( exdData->getField< uint16_t >( row, 9 ) ); + speed = exdData->getField< float >( row, 12 ); + scale = exdData->getField< float >( row, 13 ); + isPvP = exdData->getField< bool >( row, 14 ); + isEvent = exdData->getField< bool >( row, 15 ); + playerCamera = exdData->getField< bool >( row, 16 ); +} + +Core::Data::Treasure::Treasure( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_TreasureDat.get_row( row_id ); + item = exdData->getField< uint32_t >( row, 8 ); +} + Core::Data::TreasureHuntRank::TreasureHuntRank( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_TreasureHuntRankDat.get_row( row_id ); @@ -3878,6 +4284,18 @@ Core::Data::TutorialTank::TutorialTank( uint32_t row_id, Core::Data::ExdDataGene objective = exdData->getField< uint8_t >( row, 0 ); } +Core::Data::VaseFlower::VaseFlower( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_VaseFlowerDat.get_row( row_id ); + item = exdData->getField< uint32_t >( row, 3 ); +} + +Core::Data::VFX::VFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_VFXDat.get_row( row_id ); + location = exdData->getField< std::string >( row, 0 ); +} + Core::Data::Warp::Warp( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_WarpDat.get_row( row_id ); @@ -3890,6 +4308,15 @@ Core::Data::Warp::Warp( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) warpLogic = exdData->getField< uint16_t >( row, 6 ); } +Core::Data::WarpCondition::WarpCondition( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_WarpConditionDat.get_row( row_id ); + requiredQuest1 = exdData->getField< uint32_t >( row, 2 ); + requiredQuest2 = exdData->getField< uint32_t >( row, 3 ); + dRequiredQuest3 = exdData->getField< uint32_t >( row, 4 ); + requiredQuest4 = exdData->getField< uint32_t >( row, 5 ); +} + Core::Data::Weather::Weather( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_WeatherDat.get_row( row_id ); @@ -3909,6 +4336,13 @@ Core::Data::WeatherRate::WeatherRate( uint32_t row_id, Core::Data::ExdDataGenera auto row = exdData->m_WeatherRateDat.get_row( row_id ); } +Core::Data::WeddingBGM::WeddingBGM( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_WeddingBGMDat.get_row( row_id ); + song = exdData->getField< uint16_t >( row, 0 ); + songName = exdData->getField< std::string >( row, 1 ); +} + Core::Data::WeeklyBingoOrderData::WeeklyBingoOrderData( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_WeeklyBingoOrderDataDat.get_row( row_id ); @@ -3931,12 +4365,38 @@ Core::Data::WeeklyBingoText::WeeklyBingoText( uint32_t row_id, Core::Data::ExdDa description = exdData->getField< std::string >( row, 0 ); } +Core::Data::World::World( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_WorldDat.get_row( row_id ); + dataCenter = exdData->getField< uint8_t >( row, 1 ); +} + Core::Data::WorldDCGroupType::WorldDCGroupType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) { auto row = exdData->m_WorldDCGroupTypeDat.get_row( row_id ); name = exdData->getField< std::string >( row, 0 ); } +Core::Data::YKW::YKW( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_YKWDat.get_row( row_id ); + item = exdData->getField< uint32_t >( row, 1 ); + location.push_back( exdData->getField< uint16_t >( row, 2 ) ); + location.push_back( exdData->getField< uint16_t >( row, 3 ) ); + location.push_back( exdData->getField< uint16_t >( row, 4 ) ); +} + +Core::Data::ZoneSharedGroup::ZoneSharedGroup( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) +{ + auto row = exdData->m_ZoneSharedGroupDat.get_row( row_id ); + quest1 = exdData->getField< uint32_t >( row, 2 ); + quest2 = exdData->getField< uint32_t >( row, 6 ); + quest3 = exdData->getField< uint32_t >( row, 10 ); + quest4 = exdData->getField< uint32_t >( row, 14 ); + quest5 = exdData->getField< uint32_t >( row, 18 ); + quest6 = exdData->getField< uint32_t >( row, 22 ); +} + Core::Data::ExdDataGenerated::ExdDataGenerated() { @@ -3975,16 +4435,21 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_AchievementCategoryDat = setupDatAccess( "AchievementCategory", xiv::exd::Language::en ); m_AchievementKindDat = setupDatAccess( "AchievementKind", xiv::exd::Language::en ); m_ActionDat = setupDatAccess( "Action", xiv::exd::Language::en ); + m_ActionCastTimelineDat = setupDatAccess( "ActionCastTimeline", xiv::exd::Language::none ); + m_ActionCastVFXDat = setupDatAccess( "ActionCastVFX", xiv::exd::Language::none ); m_ActionCategoryDat = setupDatAccess( "ActionCategory", xiv::exd::Language::en ); m_ActionComboRouteDat = setupDatAccess( "ActionComboRoute", xiv::exd::Language::en ); m_ActionIndirectionDat = setupDatAccess( "ActionIndirection", xiv::exd::Language::none ); + m_ActionParamDat = setupDatAccess( "ActionParam", xiv::exd::Language::none ); m_ActionProcStatusDat = setupDatAccess( "ActionProcStatus", xiv::exd::Language::none ); m_ActionTimelineDat = setupDatAccess( "ActionTimeline", xiv::exd::Language::none ); + m_ActionTimelineReplaceDat = setupDatAccess( "ActionTimelineReplace", xiv::exd::Language::none ); m_ActionTransientDat = setupDatAccess( "ActionTransient", xiv::exd::Language::en ); m_AddonDat = setupDatAccess( "Addon", 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 ); + m_AetherCurrentCompFlgSetDat = setupDatAccess( "AetherCurrentCompFlgSet", xiv::exd::Language::none ); m_AetherialWheelDat = setupDatAccess( "AetherialWheel", xiv::exd::Language::none ); m_AetheryteDat = setupDatAccess( "Aetheryte", xiv::exd::Language::en ); m_AirshipExplorationLevelDat = setupDatAccess( "AirshipExplorationLevel", xiv::exd::Language::none ); @@ -4017,6 +4482,7 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_BNpcBaseDat = setupDatAccess( "BNpcBase", xiv::exd::Language::none ); m_BNpcCustomizeDat = setupDatAccess( "BNpcCustomize", xiv::exd::Language::none ); m_BNpcNameDat = setupDatAccess( "BNpcName", xiv::exd::Language::en ); + m_BuddyDat = setupDatAccess( "Buddy", xiv::exd::Language::none ); m_BuddyActionDat = setupDatAccess( "BuddyAction", xiv::exd::Language::en ); m_BuddyEquipDat = setupDatAccess( "BuddyEquip", xiv::exd::Language::en ); m_BuddyItemDat = setupDatAccess( "BuddyItem", xiv::exd::Language::none ); @@ -4034,6 +4500,7 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_ChocoboRaceRankDat = setupDatAccess( "ChocoboRaceRank", xiv::exd::Language::none ); m_ChocoboRaceStatusDat = setupDatAccess( "ChocoboRaceStatus", xiv::exd::Language::none ); m_ChocoboRaceTerritoryDat = setupDatAccess( "ChocoboRaceTerritory", xiv::exd::Language::none ); + m_ChocoboTaxiDat = setupDatAccess( "ChocoboTaxi", xiv::exd::Language::none ); m_ChocoboTaxiStandDat = setupDatAccess( "ChocoboTaxiStand", xiv::exd::Language::en ); m_ClassJobDat = setupDatAccess( "ClassJob", xiv::exd::Language::en ); m_ClassJobCategoryDat = setupDatAccess( "ClassJobCategory", xiv::exd::Language::en ); @@ -4055,7 +4522,12 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_ContentFinderConditionDat = setupDatAccess( "ContentFinderCondition", xiv::exd::Language::en ); m_ContentFinderConditionTransientDat = setupDatAccess( "ContentFinderConditionTransient", xiv::exd::Language::en ); m_ContentMemberTypeDat = setupDatAccess( "ContentMemberType", xiv::exd::Language::none ); + m_ContentNpcTalkDat = setupDatAccess( "ContentNpcTalk", xiv::exd::Language::none ); m_ContentRouletteDat = setupDatAccess( "ContentRoulette", xiv::exd::Language::en ); + m_ContentsNoteDat = setupDatAccess( "ContentsNote", xiv::exd::Language::en ); + m_ContentsNoteCategoryDat = setupDatAccess( "ContentsNoteCategory", xiv::exd::Language::none ); + m_ContentTalkDat = setupDatAccess( "ContentTalk", xiv::exd::Language::en ); + m_ContentTalkParamDat = setupDatAccess( "ContentTalkParam", xiv::exd::Language::none ); m_ContentTypeDat = setupDatAccess( "ContentType", xiv::exd::Language::en ); m_CraftActionDat = setupDatAccess( "CraftAction", xiv::exd::Language::en ); m_CraftLeveDat = setupDatAccess( "CraftLeve", xiv::exd::Language::none ); @@ -4084,8 +4556,12 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_ENpcBaseDat = setupDatAccess( "ENpcBase", xiv::exd::Language::none ); m_ENpcResidentDat = setupDatAccess( "ENpcResident", xiv::exd::Language::en ); m_EObjDat = setupDatAccess( "EObj", xiv::exd::Language::none ); + m_EObjNameDat = setupDatAccess( "EObjName", xiv::exd::Language::en ); m_EquipRaceCategoryDat = setupDatAccess( "EquipRaceCategory", xiv::exd::Language::none ); m_EquipSlotCategoryDat = setupDatAccess( "EquipSlotCategory", xiv::exd::Language::none ); + m_EurekaAethernetDat = setupDatAccess( "EurekaAethernet", xiv::exd::Language::none ); + m_EurekaGrowDataDat = setupDatAccess( "EurekaGrowData", xiv::exd::Language::none ); + m_EurekaSphereElementAdjustDat = setupDatAccess( "EurekaSphereElementAdjust", xiv::exd::Language::none ); m_EventActionDat = setupDatAccess( "EventAction", xiv::exd::Language::en ); m_EventIconPriorityDat = setupDatAccess( "EventIconPriority", xiv::exd::Language::none ); m_EventIconTypeDat = setupDatAccess( "EventIconType", xiv::exd::Language::none ); @@ -4103,6 +4579,7 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_FCProfileDat = setupDatAccess( "FCProfile", xiv::exd::Language::en ); m_FCReputationDat = setupDatAccess( "FCReputation", xiv::exd::Language::en ); m_FCRightsDat = setupDatAccess( "FCRights", xiv::exd::Language::en ); + m_FieldMarkerDat = setupDatAccess( "FieldMarker", xiv::exd::Language::en ); m_FishingSpotDat = setupDatAccess( "FishingSpot", xiv::exd::Language::en ); m_FishParameterDat = setupDatAccess( "FishParameter", xiv::exd::Language::en ); m_GardeningSeedDat = setupDatAccess( "GardeningSeed", xiv::exd::Language::none ); @@ -4152,7 +4629,6 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_InstanceContentDat = setupDatAccess( "InstanceContent", xiv::exd::Language::en ); m_InstanceContentBuffDat = setupDatAccess( "InstanceContentBuff", xiv::exd::Language::none ); m_InstanceContentTextDataDat = setupDatAccess( "InstanceContentTextData", xiv::exd::Language::en ); - m_InstanceContentTypeDat = setupDatAccess( "InstanceContentType", xiv::exd::Language::none ); m_ItemDat = setupDatAccess( "Item", xiv::exd::Language::en ); m_ItemActionDat = setupDatAccess( "ItemAction", xiv::exd::Language::none ); m_ItemFoodDat = setupDatAccess( "ItemFood", xiv::exd::Language::none ); @@ -4180,7 +4656,9 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_MainCommandCategoryDat = setupDatAccess( "MainCommandCategory", xiv::exd::Language::en ); m_MapDat = setupDatAccess( "Map", xiv::exd::Language::none ); m_MapMarkerDat = setupDatAccess( "MapMarker", xiv::exd::Language::none ); + m_MapMarkerRegionDat = setupDatAccess( "MapMarkerRegion", xiv::exd::Language::none ); m_MapSymbolDat = setupDatAccess( "MapSymbol", xiv::exd::Language::none ); + m_MarkerDat = setupDatAccess( "Marker", xiv::exd::Language::en ); m_MasterpieceSupplyDutyDat = setupDatAccess( "MasterpieceSupplyDuty", xiv::exd::Language::none ); m_MasterpieceSupplyMultiplierDat = setupDatAccess( "MasterpieceSupplyMultiplier", xiv::exd::Language::none ); m_MateriaDat = setupDatAccess( "Materia", xiv::exd::Language::none ); @@ -4193,6 +4671,8 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_MonsterNoteTargetDat = setupDatAccess( "MonsterNoteTarget", xiv::exd::Language::none ); m_MountDat = setupDatAccess( "Mount", xiv::exd::Language::en ); m_MountActionDat = setupDatAccess( "MountAction", xiv::exd::Language::none ); + m_MoveTimelineDat = setupDatAccess( "MoveTimeline", xiv::exd::Language::none ); + m_MoveVfxDat = setupDatAccess( "MoveVfx", xiv::exd::Language::none ); m_NpcEquipDat = setupDatAccess( "NpcEquip", xiv::exd::Language::none ); m_OmenDat = setupDatAccess( "Omen", xiv::exd::Language::none ); m_OnlineStatusDat = setupDatAccess( "OnlineStatus", xiv::exd::Language::en ); @@ -4202,11 +4682,17 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_OrchestrionPathDat = setupDatAccess( "OrchestrionPath", xiv::exd::Language::none ); m_OrchestrionUiparamDat = setupDatAccess( "OrchestrionUiparam", xiv::exd::Language::none ); m_ParamGrowDat = setupDatAccess( "ParamGrow", xiv::exd::Language::none ); + m_PerformDat = setupDatAccess( "Perform", xiv::exd::Language::en ); + m_PerformTransientDat = setupDatAccess( "PerformTransient", xiv::exd::Language::en ); m_PetDat = setupDatAccess( "Pet", xiv::exd::Language::en ); m_PetActionDat = setupDatAccess( "PetAction", xiv::exd::Language::en ); m_PictureDat = setupDatAccess( "Picture", xiv::exd::Language::none ); m_PlaceNameDat = setupDatAccess( "PlaceName", xiv::exd::Language::en ); + m_PublicContentDat = setupDatAccess( "PublicContent", xiv::exd::Language::en ); + m_PvPActionSortDat = setupDatAccess( "PvPActionSort", xiv::exd::Language::none ); m_QuestDat = setupDatAccess( "Quest", xiv::exd::Language::en ); + m_QuestClassJobRewardDat = setupDatAccess( "QuestClassJobReward", xiv::exd::Language::none ); + m_QuestRepeatFlagDat = setupDatAccess( "QuestRepeatFlag", xiv::exd::Language::none ); m_QuestRewardOtherDat = setupDatAccess( "QuestRewardOther", xiv::exd::Language::en ); m_QuickChatDat = setupDatAccess( "QuickChat", xiv::exd::Language::en ); m_QuickChatTransientDat = setupDatAccess( "QuickChatTransient", xiv::exd::Language::en ); @@ -4220,12 +4706,14 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_RecipeElementDat = setupDatAccess( "RecipeElement", xiv::exd::Language::en ); m_RecipeLevelTableDat = setupDatAccess( "RecipeLevelTable", xiv::exd::Language::none ); m_RecipeNotebookListDat = setupDatAccess( "RecipeNotebookList", xiv::exd::Language::none ); + m_RecommendContentsDat = setupDatAccess( "RecommendContents", xiv::exd::Language::none ); m_RelicDat = setupDatAccess( "Relic", xiv::exd::Language::none ); m_Relic3Dat = setupDatAccess( "Relic3", xiv::exd::Language::none ); m_RelicItemDat = setupDatAccess( "RelicItem", xiv::exd::Language::none ); m_RelicNoteDat = setupDatAccess( "RelicNote", xiv::exd::Language::none ); m_RelicNoteCategoryDat = setupDatAccess( "RelicNoteCategory", xiv::exd::Language::en ); m_RetainerTaskDat = setupDatAccess( "RetainerTask", xiv::exd::Language::none ); + m_RetainerTaskLvRangeDat = setupDatAccess( "RetainerTaskLvRange", xiv::exd::Language::none ); m_RetainerTaskNormalDat = setupDatAccess( "RetainerTaskNormal", xiv::exd::Language::none ); m_RetainerTaskParameterDat = setupDatAccess( "RetainerTaskParameter", xiv::exd::Language::none ); m_RetainerTaskRandomDat = setupDatAccess( "RetainerTaskRandom", xiv::exd::Language::en ); @@ -4233,14 +4721,26 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_SatisfactionNpcDat = setupDatAccess( "SatisfactionNpc", xiv::exd::Language::none ); m_SatisfactionSupplyDat = setupDatAccess( "SatisfactionSupply", xiv::exd::Language::none ); m_SatisfactionSupplyRewardDat = setupDatAccess( "SatisfactionSupplyReward", xiv::exd::Language::none ); + m_ScenarioTreeDat = setupDatAccess( "ScenarioTree", xiv::exd::Language::none ); + m_ScenarioTreeTipsDat = setupDatAccess( "ScenarioTreeTips", xiv::exd::Language::none ); + m_ScenarioTreeTipsClassQuestDat = setupDatAccess( "ScenarioTreeTipsClassQuest", xiv::exd::Language::none ); + m_ScenarioTreeTipsQuestDat = setupDatAccess( "ScenarioTreeTipsQuest", xiv::exd::Language::none ); + m_ScenarioTypeDat = setupDatAccess( "ScenarioType", xiv::exd::Language::en ); m_ScreenImageDat = setupDatAccess( "ScreenImage", xiv::exd::Language::none ); m_SecretRecipeBookDat = setupDatAccess( "SecretRecipeBook", xiv::exd::Language::en ); + m_SkyIsland2MissionDat = setupDatAccess( "SkyIsland2Mission", xiv::exd::Language::en ); + 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_SpearfishingItemDat = setupDatAccess( "SpearfishingItem", xiv::exd::Language::en ); m_SpearfishingNotebookDat = setupDatAccess( "SpearfishingNotebook", xiv::exd::Language::none ); m_SpecialShopDat = setupDatAccess( "SpecialShop", xiv::exd::Language::en ); m_SpecialShopItemCategoryDat = setupDatAccess( "SpecialShopItemCategory", xiv::exd::Language::en ); m_StainDat = setupDatAccess( "Stain", xiv::exd::Language::en ); + m_StainTransientDat = setupDatAccess( "StainTransient", xiv::exd::Language::none ); m_StatusDat = setupDatAccess( "Status", xiv::exd::Language::en ); + m_StatusHitEffectDat = setupDatAccess( "StatusHitEffect", xiv::exd::Language::none ); + 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_SubmarinePartDat = setupDatAccess( "SubmarinePart", xiv::exd::Language::none ); @@ -4256,6 +4756,8 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_TraitDat = setupDatAccess( "Trait", xiv::exd::Language::en ); m_TraitRecastDat = setupDatAccess( "TraitRecast", xiv::exd::Language::none ); m_TraitTransientDat = setupDatAccess( "TraitTransient", xiv::exd::Language::en ); + m_TransformationDat = setupDatAccess( "Transformation", xiv::exd::Language::none ); + m_TreasureDat = setupDatAccess( "Treasure", xiv::exd::Language::en ); m_TreasureHuntRankDat = setupDatAccess( "TreasureHuntRank", xiv::exd::Language::none ); m_TribeDat = setupDatAccess( "Tribe", xiv::exd::Language::en ); m_TripleTriadDat = setupDatAccess( "TripleTriad", xiv::exd::Language::none ); @@ -4269,14 +4771,21 @@ bool Core::Data::ExdDataGenerated::init( const std::string& path ) m_TutorialDPSDat = setupDatAccess( "TutorialDPS", xiv::exd::Language::none ); m_TutorialHealerDat = setupDatAccess( "TutorialHealer", xiv::exd::Language::none ); m_TutorialTankDat = setupDatAccess( "TutorialTank", xiv::exd::Language::none ); + m_VaseFlowerDat = setupDatAccess( "VaseFlower", xiv::exd::Language::none ); + m_VFXDat = setupDatAccess( "VFX", xiv::exd::Language::none ); m_WarpDat = setupDatAccess( "Warp", xiv::exd::Language::en ); + m_WarpConditionDat = setupDatAccess( "WarpCondition", xiv::exd::Language::none ); m_WeatherDat = setupDatAccess( "Weather", xiv::exd::Language::en ); m_WeatherGroupDat = setupDatAccess( "WeatherGroup", xiv::exd::Language::none ); m_WeatherRateDat = setupDatAccess( "WeatherRate", xiv::exd::Language::none ); + m_WeddingBGMDat = setupDatAccess( "WeddingBGM", xiv::exd::Language::en ); m_WeeklyBingoOrderDataDat = setupDatAccess( "WeeklyBingoOrderData", xiv::exd::Language::none ); m_WeeklyBingoRewardDataDat = setupDatAccess( "WeeklyBingoRewardData", xiv::exd::Language::none ); m_WeeklyBingoTextDat = setupDatAccess( "WeeklyBingoText", xiv::exd::Language::en ); + m_WorldDat = setupDatAccess( "World", xiv::exd::Language::none ); m_WorldDCGroupTypeDat = setupDatAccess( "WorldDCGroupType", xiv::exd::Language::none ); + m_YKWDat = setupDatAccess( "YKW", xiv::exd::Language::en ); + m_ZoneSharedGroupDat = setupDatAccess( "ZoneSharedGroup", xiv::exd::Language::none ); } catch( std::runtime_error ) diff --git a/src/common/Exd/ExdDataGenerated.h b/src/common/Exd/ExdDataGenerated.h index d17edf4a..c2a5ccb2 100644 --- a/src/common/Exd/ExdDataGenerated.h +++ b/src/common/Exd/ExdDataGenerated.h @@ -22,16 +22,21 @@ struct Achievement; struct AchievementCategory; struct AchievementKind; struct Action; +struct ActionCastTimeline; +struct ActionCastVFX; struct ActionCategory; struct ActionComboRoute; struct ActionIndirection; +struct ActionParam; struct ActionProcStatus; struct ActionTimeline; +struct ActionTimelineReplace; struct ActionTransient; struct Addon; struct Adventure; struct AdventureExPhase; struct AetherCurrent; +struct AetherCurrentCompFlgSet; struct AetherialWheel; struct Aetheryte; struct AirshipExplorationLevel; @@ -64,6 +69,7 @@ struct BNpcAnnounceIcon; struct BNpcBase; struct BNpcCustomize; struct BNpcName; +struct Buddy; struct BuddyAction; struct BuddyEquip; struct BuddyItem; @@ -81,6 +87,7 @@ struct ChocoboRaceItem; struct ChocoboRaceRank; struct ChocoboRaceStatus; struct ChocoboRaceTerritory; +struct ChocoboTaxi; struct ChocoboTaxiStand; struct ClassJob; struct ClassJobCategory; @@ -102,7 +109,12 @@ struct ContentExAction; struct ContentFinderCondition; struct ContentFinderConditionTransient; struct ContentMemberType; +struct ContentNpcTalk; struct ContentRoulette; +struct ContentsNote; +struct ContentsNoteCategory; +struct ContentTalk; +struct ContentTalkParam; struct ContentType; struct CraftAction; struct CraftLeve; @@ -131,8 +143,12 @@ struct EmoteCategory; struct ENpcBase; struct ENpcResident; struct EObj; +struct EObjName; struct EquipRaceCategory; struct EquipSlotCategory; +struct EurekaAethernet; +struct EurekaGrowData; +struct EurekaSphereElementAdjust; struct EventAction; struct EventIconPriority; struct EventIconType; @@ -150,6 +166,7 @@ struct FCHierarchy; struct FCProfile; struct FCReputation; struct FCRights; +struct FieldMarker; struct FishingSpot; struct FishParameter; struct GardeningSeed; @@ -199,7 +216,6 @@ struct HousingYardObject; struct InstanceContent; struct InstanceContentBuff; struct InstanceContentTextData; -struct InstanceContentType; struct Item; struct ItemAction; struct ItemFood; @@ -227,7 +243,9 @@ struct MainCommand; struct MainCommandCategory; struct Map; struct MapMarker; +struct MapMarkerRegion; struct MapSymbol; +struct Marker; struct MasterpieceSupplyDuty; struct MasterpieceSupplyMultiplier; struct Materia; @@ -240,6 +258,8 @@ struct MonsterNote; struct MonsterNoteTarget; struct Mount; struct MountAction; +struct MoveTimeline; +struct MoveVfx; struct NpcEquip; struct Omen; struct OnlineStatus; @@ -249,11 +269,17 @@ struct OrchestrionCategory; struct OrchestrionPath; struct OrchestrionUiparam; struct ParamGrow; +struct Perform; +struct PerformTransient; struct Pet; struct PetAction; struct Picture; struct PlaceName; +struct PublicContent; +struct PvPActionSort; struct Quest; +struct QuestClassJobReward; +struct QuestRepeatFlag; struct QuestRewardOther; struct QuickChat; struct QuickChatTransient; @@ -267,12 +293,14 @@ struct Recipe; struct RecipeElement; struct RecipeLevelTable; struct RecipeNotebookList; +struct RecommendContents; struct Relic; struct Relic3; struct RelicItem; struct RelicNote; struct RelicNoteCategory; struct RetainerTask; +struct RetainerTaskLvRange; struct RetainerTaskNormal; struct RetainerTaskParameter; struct RetainerTaskRandom; @@ -280,14 +308,26 @@ struct Salvage; struct SatisfactionNpc; struct SatisfactionSupply; struct SatisfactionSupplyReward; +struct ScenarioTree; +struct ScenarioTreeTips; +struct ScenarioTreeTipsClassQuest; +struct ScenarioTreeTipsQuest; +struct ScenarioType; struct ScreenImage; struct SecretRecipeBook; +struct SkyIsland2Mission; +struct SkyIsland2MissionDetail; +struct SkyIsland2MissionType; +struct SkyIsland2RangeType; struct SpearfishingItem; struct SpearfishingNotebook; struct SpecialShop; struct SpecialShopItemCategory; struct Stain; +struct StainTransient; struct Status; +struct StatusHitEffect; +struct StatusLoopVFX; struct Story; struct SubmarineExploration; struct SubmarinePart; @@ -303,6 +343,8 @@ struct Town; struct Trait; struct TraitRecast; struct TraitTransient; +struct Transformation; +struct Treasure; struct TreasureHuntRank; struct Tribe; struct TripleTriad; @@ -316,14 +358,21 @@ struct Tutorial; struct TutorialDPS; struct TutorialHealer; struct TutorialTank; +struct VaseFlower; +struct VFX; struct Warp; +struct WarpCondition; struct Weather; struct WeatherGroup; struct WeatherRate; +struct WeddingBGM; struct WeeklyBingoOrderData; struct WeeklyBingoRewardData; struct WeeklyBingoText; +struct World; struct WorldDCGroupType; +struct YKW; +struct ZoneSharedGroup; struct Achievement @@ -362,7 +411,9 @@ struct Action std::string name; uint16_t icon; uint8_t actionCategory; - int16_t actionTimelineUse; + uint8_t animationStart; + uint8_t vFX; + int16_t animationEnd; uint16_t actionTimelineHit; int8_t classJob; uint8_t classJobLevel; @@ -397,6 +448,21 @@ struct Action Action( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct ActionCastTimeline +{ + uint16_t name; + uint16_t vFX; + + ActionCastTimeline( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct ActionCastVFX +{ + uint16_t vFX; + + ActionCastVFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct ActionCategory { std::string name; @@ -419,6 +485,13 @@ struct ActionIndirection ActionIndirection( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct ActionParam +{ + int16_t name; + + ActionParam( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct ActionProcStatus { uint16_t status; @@ -433,6 +506,14 @@ struct ActionTimeline ActionTimeline( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct ActionTimelineReplace +{ + uint16_t old; + uint16_t new1; + + ActionTimelineReplace( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct ActionTransient { std::string description; @@ -481,6 +562,14 @@ struct AetherCurrent AetherCurrent( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct AetherCurrentCompFlgSet +{ + int32_t territory; + std::vector< int32_t > aetherCurrent; + + AetherCurrentCompFlgSet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct AetherialWheel { int32_t itemUnprimed; @@ -496,7 +585,7 @@ struct Aetheryte uint16_t placeName; uint16_t aethernetName; uint16_t territory; - uint32_t levelId; + std::vector< uint32_t > level; bool isAetheryte; uint8_t aethernetGroup; uint16_t map; @@ -669,6 +758,25 @@ struct BaseParam { std::string name; std::string description; + uint8_t oneHWpn; + uint8_t oH; + uint8_t head; + uint8_t chest; + uint8_t hands; + uint8_t waist; + uint8_t legs; + uint8_t feet; + uint8_t earring; + uint8_t necklace; + uint8_t bracelet; + uint8_t ring; + uint8_t twoHWpn; + uint8_t chestHead; + uint8_t chestHeadLegsFeet; + uint8_t legsFeet; + uint8_t headChestHandsLegsFeet; + uint8_t chestLegsGloves; + uint8_t chestLegsFeet; BaseParam( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; @@ -790,6 +898,18 @@ struct BNpcName BNpcName( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct Buddy +{ + int32_t questRequirement2; + int32_t questRequirement1; + std::string soundEffect4; + std::string soundEffect3; + std::string soundEffect2; + std::string soundEffect1; + + Buddy( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct BuddyAction { std::string name; @@ -833,6 +953,10 @@ struct BuddyRank struct BuddySkill { uint8_t buddyLevel; + bool isActive; + uint16_t defender; + uint16_t attacker; + uint16_t healer; BuddySkill( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; @@ -867,6 +991,7 @@ struct CharaMakeCustomize { uint32_t icon; uint16_t data; + bool isPurchasable; CharaMakeCustomize( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; @@ -942,6 +1067,13 @@ struct ChocoboRaceTerritory ChocoboRaceTerritory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct ChocoboTaxi +{ + uint32_t location; + + ChocoboTaxi( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct ChocoboTaxiStand { std::string placeName; @@ -970,6 +1102,9 @@ struct ClassJob uint16_t limitBreak2; uint16_t limitBreak3; uint32_t itemSoulCrystal; + uint32_t unlockQuest; + uint32_t relicQuest; + uint32_t prerequisite; uint8_t startingLevel; ClassJob( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); @@ -1012,6 +1147,8 @@ struct ClassJobCategory bool mCH; bool dRK; bool aST; + bool sAM; + bool rDM; ClassJobCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; @@ -1159,13 +1296,14 @@ struct ContentExAction struct ContentFinderCondition { - uint8_t contentIndicator; uint16_t instanceContent; uint8_t contentMemberType; uint8_t classJobLevelRequired; uint8_t classJobLevelSync; uint16_t itemLevelRequired; uint16_t itemLevelSync; + uint8_t contentIndicator; + uint8_t contentType; uint32_t icon; ContentFinderCondition( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); @@ -1188,6 +1326,13 @@ struct ContentMemberType ContentMemberType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct ContentNpcTalk +{ + std::vector< uint32_t > contentTalk; + + ContentNpcTalk( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct ContentRoulette { std::string name; @@ -1206,6 +1351,37 @@ struct ContentRoulette ContentRoulette( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct ContentsNote +{ + uint8_t contentType; + int32_t requiredAmount; + + ContentsNote( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct ContentsNoteCategory +{ + uint8_t type; + + ContentsNoteCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct ContentTalk +{ + uint8_t contentTalkParam; + std::string text; + + ContentTalk( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct ContentTalkParam +{ + bool param; + uint32_t testAction; + + ContentTalkParam( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct ContentType { std::string name; @@ -1219,6 +1395,8 @@ struct CraftAction { std::string name; std::string description; + uint16_t animationStart; + uint16_t animationEnd; uint16_t icon; int8_t classJob; uint8_t classJobCategory; @@ -1514,6 +1692,13 @@ struct EObj EObj( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct EObjName +{ + std::string singular; + + EObjName( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct EquipRaceCategory { bool hyur; @@ -1548,6 +1733,27 @@ struct EquipSlotCategory EquipSlotCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct EurekaAethernet +{ + uint16_t location; + + EurekaAethernet( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct EurekaGrowData +{ + uint16_t baseResistance; + + EurekaGrowData( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct EurekaSphereElementAdjust +{ + uint16_t powerModifier; + + EurekaSphereElementAdjust( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct EventAction { std::string name; @@ -1605,15 +1811,19 @@ struct ExVersion struct Fate { + uint8_t eurekaFate; + uint32_t location; uint8_t classJobLevel; uint8_t classJobLevelMax; uint32_t eventItem; uint32_t iconObjective; uint32_t iconMap; + int32_t music; std::string name; std::string description; std::string objective; std::vector< std::string > statusText; + uint32_t arrayIndex; Fate( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; @@ -1695,6 +1905,14 @@ struct FCRights FCRights( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct FieldMarker +{ + int32_t vFX; + uint16_t icon; + + FieldMarker( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct FishingSpot { uint8_t gatheringLevel; @@ -1997,6 +2215,7 @@ struct GeneralAction { std::string name; std::string description; + uint16_t action; int32_t icon; GeneralAction( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); @@ -2152,14 +2371,6 @@ struct InstanceContentTextData InstanceContentTextData( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; -struct InstanceContentType -{ - uint8_t sortKey; - uint8_t contentType; - - InstanceContentType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); -}; - struct Item { std::string singular; @@ -2463,6 +2674,7 @@ struct MapMarker uint16_t icon; uint16_t placeNameSubtext; uint8_t subtextOrientation; + uint8_t mapMarkerRegion; uint8_t type; uint8_t dataType; uint16_t dataKey; @@ -2470,6 +2682,13 @@ struct MapMarker MapMarker( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct MapMarkerRegion +{ + int16_t x; + + MapMarkerRegion( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct MapSymbol { int32_t icon; @@ -2478,6 +2697,14 @@ struct MapSymbol MapSymbol( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct Marker +{ + int32_t icon; + std::string name; + + Marker( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct MasterpieceSupplyDuty { uint8_t classJob; @@ -2572,7 +2799,7 @@ struct Mount uint8_t flyingCondition; uint8_t isFlying; uint16_t rideBGM; - int8_t order; + int16_t order; uint16_t icon; Mount( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); @@ -2585,6 +2812,30 @@ struct MountAction MountAction( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct MoveTimeline +{ + uint16_t idle; + uint16_t moveForward; + uint16_t moveBack; + uint16_t moveLeft; + uint16_t moveRight; + uint16_t moveUp; + uint16_t moveDown; + uint16_t moveTurnLeft; + uint16_t moveTurnRight; + uint16_t extra; + + MoveTimeline( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct MoveVfx +{ + uint16_t zero; + uint16_t one; + + MoveVfx( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct NpcEquip { uint64_t modelMainHand; @@ -2683,6 +2934,29 @@ struct ParamGrow ParamGrow( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct Perform +{ + std::string name; + uint64_t modelKey; + uint16_t animationStart; + uint16_t animationEnd; + uint16_t animationIdle; + uint16_t animationPlay01; + uint16_t animationPlay02; + int32_t stopAnimation; + std::string instrument; + uint8_t transient; + + Perform( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct PerformTransient +{ + std::string text; + + PerformTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct Pet { std::string name; @@ -2717,6 +2991,24 @@ struct PlaceName PlaceName( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct PublicContent +{ + uint16_t timeLimit; + uint32_t mapIcon; + std::string name; + uint16_t territoryType; + + PublicContent( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct PvPActionSort +{ + uint8_t name; + uint16_t action; + + PvPActionSort( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct Quest { std::string name; @@ -2783,6 +3075,24 @@ struct Quest Quest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct QuestClassJobReward +{ + uint8_t classJobCategory; + std::vector< uint32_t > rewardItem; + std::vector< uint8_t > rewardAmount; + std::vector< uint32_t > requiredItem; + std::vector< uint8_t > requiredAmount; + + QuestClassJobReward( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct QuestRepeatFlag +{ + uint32_t quest; + + QuestRepeatFlag( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct QuestRewardOther { std::string name; @@ -2793,7 +3103,8 @@ struct QuestRewardOther struct QuickChat { std::string nameAction; - int32_t icon1; + int32_t icon; + int32_t addon; int8_t quickChatTransient; QuickChat( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); @@ -2878,6 +3189,7 @@ struct Recipe uint16_t secretRecipeBook; bool canQuickSynth; bool canHq; + bool expRewarded; int32_t statusRequired; int32_t itemRequired; bool isSpecializationRequired; @@ -2910,6 +3222,13 @@ struct RecipeNotebookList RecipeNotebookList( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct RecommendContents +{ + int32_t level; + + RecommendContents( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct Relic { uint32_t itemAtma; @@ -2979,12 +3298,22 @@ struct RetainerTask RetainerTask( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct RetainerTaskLvRange +{ + uint8_t min; + uint8_t max; + + RetainerTaskLvRange( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct RetainerTaskNormal { int32_t item; uint8_t quantity0; uint8_t quantity1; uint8_t quantity2; + int16_t gatheringLog; + int16_t fishingLog; RetainerTaskNormal( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; @@ -3050,6 +3379,46 @@ struct SatisfactionSupplyReward SatisfactionSupplyReward( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct ScenarioTree +{ + uint8_t type; + uint16_t image; + + ScenarioTree( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct ScenarioTreeTips +{ + uint32_t tips1; + uint32_t tips2; + + ScenarioTreeTips( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct ScenarioTreeTipsClassQuest +{ + uint32_t quest; + uint16_t requiredLevel; + uint8_t requiredExpansion; + uint32_t requiredQuest; + + ScenarioTreeTipsClassQuest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct ScenarioTreeTipsQuest +{ + uint32_t level; + + ScenarioTreeTipsQuest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct ScenarioType +{ + std::string type; + + ScenarioType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct ScreenImage { uint32_t image; @@ -3065,6 +3434,44 @@ struct SecretRecipeBook SecretRecipeBook( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct SkyIsland2Mission +{ + uint32_t item1; + uint32_t item2; + uint16_t objective1; + uint8_t requiredAmount1; + uint16_t objective2; + uint8_t requiredAmount2; + uint16_t objective3; + uint32_t image; + + SkyIsland2Mission( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct SkyIsland2MissionDetail +{ + uint8_t type; + uint8_t range; + uint32_t eObj; + std::string objective; + + SkyIsland2MissionDetail( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct SkyIsland2MissionType +{ + bool type; + + SkyIsland2MissionType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct SkyIsland2RangeType +{ + uint8_t type; + + SkyIsland2RangeType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct SpearfishingItem { std::string description; @@ -3114,25 +3521,50 @@ struct Stain Stain( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct StainTransient +{ + uint32_t item1; + uint32_t item2; + + StainTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct Status { std::string name; std::string description; uint16_t icon; uint8_t maxStacks; + uint8_t category; + uint8_t hitEffect; + uint8_t vFX; bool lockMovement; bool lockActions; bool lockControl; bool transfiguration; bool canDispel; - bool isPermanent; bool inflictedByActor; + bool isPermanent; bool isFcBuff; bool invisibility; Status( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct StatusHitEffect +{ + uint16_t location; + + StatusHitEffect( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct StatusLoopVFX +{ + uint16_t location; + + StatusLoopVFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct Story { @@ -3169,6 +3601,7 @@ struct SubmarinePart struct SubmarineRank { + uint16_t rank; uint32_t expToNext; SubmarineRank( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); @@ -3192,6 +3625,7 @@ struct TerritoryType uint16_t map; uint8_t territoryIntendedUse; uint8_t weatherRate; + uint32_t arrayEventHandler; int32_t aetheryte; TerritoryType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); @@ -3275,6 +3709,28 @@ struct TraitTransient TraitTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct Transformation +{ + int16_t model; + int32_t bNpcCustomize; + int32_t bNpcEquip; + std::vector< uint16_t > action; + float speed; + float scale; + bool isPvP; + bool isEvent; + bool playerCamera; + + Transformation( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct Treasure +{ + uint32_t item; + + Treasure( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct TreasureHuntRank { uint32_t icon; @@ -3406,6 +3862,20 @@ struct TutorialTank TutorialTank( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct VaseFlower +{ + uint32_t item; + + VaseFlower( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct VFX +{ + std::string location; + + VFX( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct Warp { uint32_t level; @@ -3419,6 +3889,16 @@ struct Warp Warp( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct WarpCondition +{ + uint32_t requiredQuest1; + uint32_t requiredQuest2; + uint32_t dRequiredQuest3; + uint32_t requiredQuest4; + + WarpCondition( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct Weather { int32_t icon; @@ -3441,6 +3921,14 @@ struct WeatherRate WeatherRate( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct WeddingBGM +{ + uint16_t song; + std::string songName; + + WeddingBGM( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct WeeklyBingoOrderData { uint32_t data; @@ -3466,6 +3954,13 @@ struct WeeklyBingoText WeeklyBingoText( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct World +{ + uint8_t dataCenter; + + World( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + struct WorldDCGroupType { std::string name; @@ -3473,6 +3968,26 @@ struct WorldDCGroupType WorldDCGroupType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); }; +struct YKW +{ + uint32_t item; + std::vector< uint16_t > location; + + YKW( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + +struct ZoneSharedGroup +{ + uint32_t quest1; + uint32_t quest2; + uint32_t quest3; + uint32_t quest4; + uint32_t quest5; + uint32_t quest6; + + ZoneSharedGroup( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ); +}; + class ExdDataGenerated @@ -3500,16 +4015,21 @@ struct WorldDCGroupType xiv::exd::Exd m_AchievementCategoryDat; xiv::exd::Exd m_AchievementKindDat; xiv::exd::Exd m_ActionDat; + xiv::exd::Exd m_ActionCastTimelineDat; + xiv::exd::Exd m_ActionCastVFXDat; xiv::exd::Exd m_ActionCategoryDat; xiv::exd::Exd m_ActionComboRouteDat; xiv::exd::Exd m_ActionIndirectionDat; + xiv::exd::Exd m_ActionParamDat; xiv::exd::Exd m_ActionProcStatusDat; xiv::exd::Exd m_ActionTimelineDat; + xiv::exd::Exd m_ActionTimelineReplaceDat; xiv::exd::Exd m_ActionTransientDat; xiv::exd::Exd m_AddonDat; xiv::exd::Exd m_AdventureDat; xiv::exd::Exd m_AdventureExPhaseDat; xiv::exd::Exd m_AetherCurrentDat; + xiv::exd::Exd m_AetherCurrentCompFlgSetDat; xiv::exd::Exd m_AetherialWheelDat; xiv::exd::Exd m_AetheryteDat; xiv::exd::Exd m_AirshipExplorationLevelDat; @@ -3542,6 +4062,7 @@ struct WorldDCGroupType xiv::exd::Exd m_BNpcBaseDat; xiv::exd::Exd m_BNpcCustomizeDat; xiv::exd::Exd m_BNpcNameDat; + xiv::exd::Exd m_BuddyDat; xiv::exd::Exd m_BuddyActionDat; xiv::exd::Exd m_BuddyEquipDat; xiv::exd::Exd m_BuddyItemDat; @@ -3559,6 +4080,7 @@ struct WorldDCGroupType xiv::exd::Exd m_ChocoboRaceRankDat; xiv::exd::Exd m_ChocoboRaceStatusDat; xiv::exd::Exd m_ChocoboRaceTerritoryDat; + xiv::exd::Exd m_ChocoboTaxiDat; xiv::exd::Exd m_ChocoboTaxiStandDat; xiv::exd::Exd m_ClassJobDat; xiv::exd::Exd m_ClassJobCategoryDat; @@ -3580,7 +4102,12 @@ struct WorldDCGroupType xiv::exd::Exd m_ContentFinderConditionDat; xiv::exd::Exd m_ContentFinderConditionTransientDat; xiv::exd::Exd m_ContentMemberTypeDat; + xiv::exd::Exd m_ContentNpcTalkDat; xiv::exd::Exd m_ContentRouletteDat; + xiv::exd::Exd m_ContentsNoteDat; + xiv::exd::Exd m_ContentsNoteCategoryDat; + xiv::exd::Exd m_ContentTalkDat; + xiv::exd::Exd m_ContentTalkParamDat; xiv::exd::Exd m_ContentTypeDat; xiv::exd::Exd m_CraftActionDat; xiv::exd::Exd m_CraftLeveDat; @@ -3609,8 +4136,12 @@ struct WorldDCGroupType xiv::exd::Exd m_ENpcBaseDat; xiv::exd::Exd m_ENpcResidentDat; xiv::exd::Exd m_EObjDat; + xiv::exd::Exd m_EObjNameDat; xiv::exd::Exd m_EquipRaceCategoryDat; xiv::exd::Exd m_EquipSlotCategoryDat; + xiv::exd::Exd m_EurekaAethernetDat; + xiv::exd::Exd m_EurekaGrowDataDat; + xiv::exd::Exd m_EurekaSphereElementAdjustDat; xiv::exd::Exd m_EventActionDat; xiv::exd::Exd m_EventIconPriorityDat; xiv::exd::Exd m_EventIconTypeDat; @@ -3628,6 +4159,7 @@ struct WorldDCGroupType xiv::exd::Exd m_FCProfileDat; xiv::exd::Exd m_FCReputationDat; xiv::exd::Exd m_FCRightsDat; + xiv::exd::Exd m_FieldMarkerDat; xiv::exd::Exd m_FishingSpotDat; xiv::exd::Exd m_FishParameterDat; xiv::exd::Exd m_GardeningSeedDat; @@ -3677,7 +4209,6 @@ struct WorldDCGroupType xiv::exd::Exd m_InstanceContentDat; xiv::exd::Exd m_InstanceContentBuffDat; xiv::exd::Exd m_InstanceContentTextDataDat; - xiv::exd::Exd m_InstanceContentTypeDat; xiv::exd::Exd m_ItemDat; xiv::exd::Exd m_ItemActionDat; xiv::exd::Exd m_ItemFoodDat; @@ -3705,7 +4236,9 @@ struct WorldDCGroupType xiv::exd::Exd m_MainCommandCategoryDat; xiv::exd::Exd m_MapDat; xiv::exd::Exd m_MapMarkerDat; + xiv::exd::Exd m_MapMarkerRegionDat; xiv::exd::Exd m_MapSymbolDat; + xiv::exd::Exd m_MarkerDat; xiv::exd::Exd m_MasterpieceSupplyDutyDat; xiv::exd::Exd m_MasterpieceSupplyMultiplierDat; xiv::exd::Exd m_MateriaDat; @@ -3718,6 +4251,8 @@ struct WorldDCGroupType xiv::exd::Exd m_MonsterNoteTargetDat; xiv::exd::Exd m_MountDat; xiv::exd::Exd m_MountActionDat; + xiv::exd::Exd m_MoveTimelineDat; + xiv::exd::Exd m_MoveVfxDat; xiv::exd::Exd m_NpcEquipDat; xiv::exd::Exd m_OmenDat; xiv::exd::Exd m_OnlineStatusDat; @@ -3727,11 +4262,17 @@ struct WorldDCGroupType xiv::exd::Exd m_OrchestrionPathDat; xiv::exd::Exd m_OrchestrionUiparamDat; xiv::exd::Exd m_ParamGrowDat; + xiv::exd::Exd m_PerformDat; + xiv::exd::Exd m_PerformTransientDat; xiv::exd::Exd m_PetDat; xiv::exd::Exd m_PetActionDat; xiv::exd::Exd m_PictureDat; xiv::exd::Exd m_PlaceNameDat; + xiv::exd::Exd m_PublicContentDat; + xiv::exd::Exd m_PvPActionSortDat; xiv::exd::Exd m_QuestDat; + xiv::exd::Exd m_QuestClassJobRewardDat; + xiv::exd::Exd m_QuestRepeatFlagDat; xiv::exd::Exd m_QuestRewardOtherDat; xiv::exd::Exd m_QuickChatDat; xiv::exd::Exd m_QuickChatTransientDat; @@ -3745,12 +4286,14 @@ struct WorldDCGroupType xiv::exd::Exd m_RecipeElementDat; xiv::exd::Exd m_RecipeLevelTableDat; xiv::exd::Exd m_RecipeNotebookListDat; + xiv::exd::Exd m_RecommendContentsDat; xiv::exd::Exd m_RelicDat; xiv::exd::Exd m_Relic3Dat; xiv::exd::Exd m_RelicItemDat; xiv::exd::Exd m_RelicNoteDat; xiv::exd::Exd m_RelicNoteCategoryDat; xiv::exd::Exd m_RetainerTaskDat; + xiv::exd::Exd m_RetainerTaskLvRangeDat; xiv::exd::Exd m_RetainerTaskNormalDat; xiv::exd::Exd m_RetainerTaskParameterDat; xiv::exd::Exd m_RetainerTaskRandomDat; @@ -3758,14 +4301,26 @@ struct WorldDCGroupType xiv::exd::Exd m_SatisfactionNpcDat; xiv::exd::Exd m_SatisfactionSupplyDat; xiv::exd::Exd m_SatisfactionSupplyRewardDat; + xiv::exd::Exd m_ScenarioTreeDat; + xiv::exd::Exd m_ScenarioTreeTipsDat; + xiv::exd::Exd m_ScenarioTreeTipsClassQuestDat; + xiv::exd::Exd m_ScenarioTreeTipsQuestDat; + xiv::exd::Exd m_ScenarioTypeDat; xiv::exd::Exd m_ScreenImageDat; xiv::exd::Exd m_SecretRecipeBookDat; + xiv::exd::Exd m_SkyIsland2MissionDat; + xiv::exd::Exd m_SkyIsland2MissionDetailDat; + xiv::exd::Exd m_SkyIsland2MissionTypeDat; + xiv::exd::Exd m_SkyIsland2RangeTypeDat; xiv::exd::Exd m_SpearfishingItemDat; xiv::exd::Exd m_SpearfishingNotebookDat; xiv::exd::Exd m_SpecialShopDat; xiv::exd::Exd m_SpecialShopItemCategoryDat; xiv::exd::Exd m_StainDat; + xiv::exd::Exd m_StainTransientDat; xiv::exd::Exd m_StatusDat; + xiv::exd::Exd m_StatusHitEffectDat; + xiv::exd::Exd m_StatusLoopVFXDat; xiv::exd::Exd m_StoryDat; xiv::exd::Exd m_SubmarineExplorationDat; xiv::exd::Exd m_SubmarinePartDat; @@ -3781,6 +4336,8 @@ struct WorldDCGroupType xiv::exd::Exd m_TraitDat; xiv::exd::Exd m_TraitRecastDat; xiv::exd::Exd m_TraitTransientDat; + xiv::exd::Exd m_TransformationDat; + xiv::exd::Exd m_TreasureDat; xiv::exd::Exd m_TreasureHuntRankDat; xiv::exd::Exd m_TribeDat; xiv::exd::Exd m_TripleTriadDat; @@ -3794,30 +4351,42 @@ struct WorldDCGroupType xiv::exd::Exd m_TutorialDPSDat; xiv::exd::Exd m_TutorialHealerDat; xiv::exd::Exd m_TutorialTankDat; + xiv::exd::Exd m_VaseFlowerDat; + xiv::exd::Exd m_VFXDat; xiv::exd::Exd m_WarpDat; + xiv::exd::Exd m_WarpConditionDat; xiv::exd::Exd m_WeatherDat; xiv::exd::Exd m_WeatherGroupDat; xiv::exd::Exd m_WeatherRateDat; + xiv::exd::Exd m_WeddingBGMDat; xiv::exd::Exd m_WeeklyBingoOrderDataDat; xiv::exd::Exd m_WeeklyBingoRewardDataDat; xiv::exd::Exd m_WeeklyBingoTextDat; + xiv::exd::Exd m_WorldDat; xiv::exd::Exd m_WorldDCGroupTypeDat; + xiv::exd::Exd m_YKWDat; + xiv::exd::Exd m_ZoneSharedGroupDat; using AchievementPtr = boost::shared_ptr< Achievement >; using AchievementCategoryPtr = boost::shared_ptr< AchievementCategory >; using AchievementKindPtr = boost::shared_ptr< AchievementKind >; using ActionPtr = boost::shared_ptr< Action >; + using ActionCastTimelinePtr = boost::shared_ptr< ActionCastTimeline >; + using ActionCastVFXPtr = boost::shared_ptr< ActionCastVFX >; using ActionCategoryPtr = boost::shared_ptr< ActionCategory >; using ActionComboRoutePtr = boost::shared_ptr< ActionComboRoute >; using ActionIndirectionPtr = boost::shared_ptr< ActionIndirection >; + using ActionParamPtr = boost::shared_ptr< ActionParam >; using ActionProcStatusPtr = boost::shared_ptr< ActionProcStatus >; using ActionTimelinePtr = boost::shared_ptr< ActionTimeline >; + using ActionTimelineReplacePtr = boost::shared_ptr< ActionTimelineReplace >; using ActionTransientPtr = boost::shared_ptr< ActionTransient >; using AddonPtr = boost::shared_ptr< Addon >; using AdventurePtr = boost::shared_ptr< Adventure >; using AdventureExPhasePtr = boost::shared_ptr< AdventureExPhase >; using AetherCurrentPtr = boost::shared_ptr< AetherCurrent >; + using AetherCurrentCompFlgSetPtr = boost::shared_ptr< AetherCurrentCompFlgSet >; using AetherialWheelPtr = boost::shared_ptr< AetherialWheel >; using AetherytePtr = boost::shared_ptr< Aetheryte >; using AirshipExplorationLevelPtr = boost::shared_ptr< AirshipExplorationLevel >; @@ -3850,6 +4419,7 @@ struct WorldDCGroupType using BNpcBasePtr = boost::shared_ptr< BNpcBase >; using BNpcCustomizePtr = boost::shared_ptr< BNpcCustomize >; using BNpcNamePtr = boost::shared_ptr< BNpcName >; + using BuddyPtr = boost::shared_ptr< Buddy >; using BuddyActionPtr = boost::shared_ptr< BuddyAction >; using BuddyEquipPtr = boost::shared_ptr< BuddyEquip >; using BuddyItemPtr = boost::shared_ptr< BuddyItem >; @@ -3867,6 +4437,7 @@ struct WorldDCGroupType using ChocoboRaceRankPtr = boost::shared_ptr< ChocoboRaceRank >; using ChocoboRaceStatusPtr = boost::shared_ptr< ChocoboRaceStatus >; using ChocoboRaceTerritoryPtr = boost::shared_ptr< ChocoboRaceTerritory >; + using ChocoboTaxiPtr = boost::shared_ptr< ChocoboTaxi >; using ChocoboTaxiStandPtr = boost::shared_ptr< ChocoboTaxiStand >; using ClassJobPtr = boost::shared_ptr< ClassJob >; using ClassJobCategoryPtr = boost::shared_ptr< ClassJobCategory >; @@ -3888,7 +4459,12 @@ struct WorldDCGroupType using ContentFinderConditionPtr = boost::shared_ptr< ContentFinderCondition >; using ContentFinderConditionTransientPtr = boost::shared_ptr< ContentFinderConditionTransient >; using ContentMemberTypePtr = boost::shared_ptr< ContentMemberType >; + using ContentNpcTalkPtr = boost::shared_ptr< ContentNpcTalk >; using ContentRoulettePtr = boost::shared_ptr< ContentRoulette >; + using ContentsNotePtr = boost::shared_ptr< ContentsNote >; + using ContentsNoteCategoryPtr = boost::shared_ptr< ContentsNoteCategory >; + using ContentTalkPtr = boost::shared_ptr< ContentTalk >; + using ContentTalkParamPtr = boost::shared_ptr< ContentTalkParam >; using ContentTypePtr = boost::shared_ptr< ContentType >; using CraftActionPtr = boost::shared_ptr< CraftAction >; using CraftLevePtr = boost::shared_ptr< CraftLeve >; @@ -3917,8 +4493,12 @@ struct WorldDCGroupType using ENpcBasePtr = boost::shared_ptr< ENpcBase >; using ENpcResidentPtr = boost::shared_ptr< ENpcResident >; using EObjPtr = boost::shared_ptr< EObj >; + using EObjNamePtr = boost::shared_ptr< EObjName >; using EquipRaceCategoryPtr = boost::shared_ptr< EquipRaceCategory >; using EquipSlotCategoryPtr = boost::shared_ptr< EquipSlotCategory >; + using EurekaAethernetPtr = boost::shared_ptr< EurekaAethernet >; + using EurekaGrowDataPtr = boost::shared_ptr< EurekaGrowData >; + using EurekaSphereElementAdjustPtr = boost::shared_ptr< EurekaSphereElementAdjust >; using EventActionPtr = boost::shared_ptr< EventAction >; using EventIconPriorityPtr = boost::shared_ptr< EventIconPriority >; using EventIconTypePtr = boost::shared_ptr< EventIconType >; @@ -3936,6 +4516,7 @@ struct WorldDCGroupType using FCProfilePtr = boost::shared_ptr< FCProfile >; using FCReputationPtr = boost::shared_ptr< FCReputation >; using FCRightsPtr = boost::shared_ptr< FCRights >; + using FieldMarkerPtr = boost::shared_ptr< FieldMarker >; using FishingSpotPtr = boost::shared_ptr< FishingSpot >; using FishParameterPtr = boost::shared_ptr< FishParameter >; using GardeningSeedPtr = boost::shared_ptr< GardeningSeed >; @@ -3985,7 +4566,6 @@ struct WorldDCGroupType using InstanceContentPtr = boost::shared_ptr< InstanceContent >; using InstanceContentBuffPtr = boost::shared_ptr< InstanceContentBuff >; using InstanceContentTextDataPtr = boost::shared_ptr< InstanceContentTextData >; - using InstanceContentTypePtr = boost::shared_ptr< InstanceContentType >; using ItemPtr = boost::shared_ptr< Item >; using ItemActionPtr = boost::shared_ptr< ItemAction >; using ItemFoodPtr = boost::shared_ptr< ItemFood >; @@ -4013,7 +4593,9 @@ struct WorldDCGroupType using MainCommandCategoryPtr = boost::shared_ptr< MainCommandCategory >; using MapPtr = boost::shared_ptr< Map >; using MapMarkerPtr = boost::shared_ptr< MapMarker >; + using MapMarkerRegionPtr = boost::shared_ptr< MapMarkerRegion >; using MapSymbolPtr = boost::shared_ptr< MapSymbol >; + using MarkerPtr = boost::shared_ptr< Marker >; using MasterpieceSupplyDutyPtr = boost::shared_ptr< MasterpieceSupplyDuty >; using MasterpieceSupplyMultiplierPtr = boost::shared_ptr< MasterpieceSupplyMultiplier >; using MateriaPtr = boost::shared_ptr< Materia >; @@ -4026,6 +4608,8 @@ struct WorldDCGroupType using MonsterNoteTargetPtr = boost::shared_ptr< MonsterNoteTarget >; using MountPtr = boost::shared_ptr< Mount >; using MountActionPtr = boost::shared_ptr< MountAction >; + using MoveTimelinePtr = boost::shared_ptr< MoveTimeline >; + using MoveVfxPtr = boost::shared_ptr< MoveVfx >; using NpcEquipPtr = boost::shared_ptr< NpcEquip >; using OmenPtr = boost::shared_ptr< Omen >; using OnlineStatusPtr = boost::shared_ptr< OnlineStatus >; @@ -4035,11 +4619,17 @@ struct WorldDCGroupType using OrchestrionPathPtr = boost::shared_ptr< OrchestrionPath >; using OrchestrionUiparamPtr = boost::shared_ptr< OrchestrionUiparam >; using ParamGrowPtr = boost::shared_ptr< ParamGrow >; + using PerformPtr = boost::shared_ptr< Perform >; + using PerformTransientPtr = boost::shared_ptr< PerformTransient >; using PetPtr = boost::shared_ptr< Pet >; using PetActionPtr = boost::shared_ptr< PetAction >; using PicturePtr = boost::shared_ptr< Picture >; using PlaceNamePtr = boost::shared_ptr< PlaceName >; + using PublicContentPtr = boost::shared_ptr< PublicContent >; + using PvPActionSortPtr = boost::shared_ptr< PvPActionSort >; using QuestPtr = boost::shared_ptr< Quest >; + using QuestClassJobRewardPtr = boost::shared_ptr< QuestClassJobReward >; + using QuestRepeatFlagPtr = boost::shared_ptr< QuestRepeatFlag >; using QuestRewardOtherPtr = boost::shared_ptr< QuestRewardOther >; using QuickChatPtr = boost::shared_ptr< QuickChat >; using QuickChatTransientPtr = boost::shared_ptr< QuickChatTransient >; @@ -4053,12 +4643,14 @@ struct WorldDCGroupType using RecipeElementPtr = boost::shared_ptr< RecipeElement >; using RecipeLevelTablePtr = boost::shared_ptr< RecipeLevelTable >; using RecipeNotebookListPtr = boost::shared_ptr< RecipeNotebookList >; + using RecommendContentsPtr = boost::shared_ptr< RecommendContents >; using RelicPtr = boost::shared_ptr< Relic >; using Relic3Ptr = boost::shared_ptr< Relic3 >; using RelicItemPtr = boost::shared_ptr< RelicItem >; using RelicNotePtr = boost::shared_ptr< RelicNote >; using RelicNoteCategoryPtr = boost::shared_ptr< RelicNoteCategory >; using RetainerTaskPtr = boost::shared_ptr< RetainerTask >; + using RetainerTaskLvRangePtr = boost::shared_ptr< RetainerTaskLvRange >; using RetainerTaskNormalPtr = boost::shared_ptr< RetainerTaskNormal >; using RetainerTaskParameterPtr = boost::shared_ptr< RetainerTaskParameter >; using RetainerTaskRandomPtr = boost::shared_ptr< RetainerTaskRandom >; @@ -4066,14 +4658,26 @@ struct WorldDCGroupType using SatisfactionNpcPtr = boost::shared_ptr< SatisfactionNpc >; using SatisfactionSupplyPtr = boost::shared_ptr< SatisfactionSupply >; using SatisfactionSupplyRewardPtr = boost::shared_ptr< SatisfactionSupplyReward >; + using ScenarioTreePtr = boost::shared_ptr< ScenarioTree >; + using ScenarioTreeTipsPtr = boost::shared_ptr< ScenarioTreeTips >; + using ScenarioTreeTipsClassQuestPtr = boost::shared_ptr< ScenarioTreeTipsClassQuest >; + using ScenarioTreeTipsQuestPtr = boost::shared_ptr< ScenarioTreeTipsQuest >; + using ScenarioTypePtr = boost::shared_ptr< ScenarioType >; using ScreenImagePtr = boost::shared_ptr< ScreenImage >; using SecretRecipeBookPtr = boost::shared_ptr< SecretRecipeBook >; + using SkyIsland2MissionPtr = boost::shared_ptr< SkyIsland2Mission >; + using SkyIsland2MissionDetailPtr = boost::shared_ptr< SkyIsland2MissionDetail >; + using SkyIsland2MissionTypePtr = boost::shared_ptr< SkyIsland2MissionType >; + using SkyIsland2RangeTypePtr = boost::shared_ptr< SkyIsland2RangeType >; using SpearfishingItemPtr = boost::shared_ptr< SpearfishingItem >; using SpearfishingNotebookPtr = boost::shared_ptr< SpearfishingNotebook >; using SpecialShopPtr = boost::shared_ptr< SpecialShop >; using SpecialShopItemCategoryPtr = boost::shared_ptr< SpecialShopItemCategory >; using StainPtr = boost::shared_ptr< Stain >; + using StainTransientPtr = boost::shared_ptr< StainTransient >; using StatusPtr = boost::shared_ptr< Status >; + using StatusHitEffectPtr = boost::shared_ptr< StatusHitEffect >; + using StatusLoopVFXPtr = boost::shared_ptr< StatusLoopVFX >; using StoryPtr = boost::shared_ptr< Story >; using SubmarineExplorationPtr = boost::shared_ptr< SubmarineExploration >; using SubmarinePartPtr = boost::shared_ptr< SubmarinePart >; @@ -4089,6 +4693,8 @@ struct WorldDCGroupType using TraitPtr = boost::shared_ptr< Trait >; using TraitRecastPtr = boost::shared_ptr< TraitRecast >; using TraitTransientPtr = boost::shared_ptr< TraitTransient >; + using TransformationPtr = boost::shared_ptr< Transformation >; + using TreasurePtr = boost::shared_ptr< Treasure >; using TreasureHuntRankPtr = boost::shared_ptr< TreasureHuntRank >; using TribePtr = boost::shared_ptr< Tribe >; using TripleTriadPtr = boost::shared_ptr< TripleTriad >; @@ -4102,14 +4708,21 @@ struct WorldDCGroupType using TutorialDPSPtr = boost::shared_ptr< TutorialDPS >; using TutorialHealerPtr = boost::shared_ptr< TutorialHealer >; using TutorialTankPtr = boost::shared_ptr< TutorialTank >; + using VaseFlowerPtr = boost::shared_ptr< VaseFlower >; + using VFXPtr = boost::shared_ptr< VFX >; using WarpPtr = boost::shared_ptr< Warp >; + using WarpConditionPtr = boost::shared_ptr< WarpCondition >; using WeatherPtr = boost::shared_ptr< Weather >; using WeatherGroupPtr = boost::shared_ptr< WeatherGroup >; using WeatherRatePtr = boost::shared_ptr< WeatherRate >; + using WeddingBGMPtr = boost::shared_ptr< WeddingBGM >; using WeeklyBingoOrderDataPtr = boost::shared_ptr< WeeklyBingoOrderData >; using WeeklyBingoRewardDataPtr = boost::shared_ptr< WeeklyBingoRewardData >; using WeeklyBingoTextPtr = boost::shared_ptr< WeeklyBingoText >; + using WorldPtr = boost::shared_ptr< World >; using WorldDCGroupTypePtr = boost::shared_ptr< WorldDCGroupType >; + using YKWPtr = boost::shared_ptr< YKW >; + using ZoneSharedGroupPtr = boost::shared_ptr< ZoneSharedGroup >; template< class T > boost::shared_ptr< T > get( uint32_t id ) @@ -4131,16 +4744,21 @@ struct WorldDCGroupType std::set< uint32_t > m_AchievementCategoryIdList; std::set< uint32_t > m_AchievementKindIdList; std::set< uint32_t > m_ActionIdList; + std::set< uint32_t > m_ActionCastTimelineIdList; + std::set< uint32_t > m_ActionCastVFXIdList; std::set< uint32_t > m_ActionCategoryIdList; std::set< uint32_t > m_ActionComboRouteIdList; std::set< uint32_t > m_ActionIndirectionIdList; + std::set< uint32_t > m_ActionParamIdList; std::set< uint32_t > m_ActionProcStatusIdList; std::set< uint32_t > m_ActionTimelineIdList; + std::set< uint32_t > m_ActionTimelineReplaceIdList; std::set< uint32_t > m_ActionTransientIdList; std::set< uint32_t > m_AddonIdList; std::set< uint32_t > m_AdventureIdList; std::set< uint32_t > m_AdventureExPhaseIdList; std::set< uint32_t > m_AetherCurrentIdList; + std::set< uint32_t > m_AetherCurrentCompFlgSetIdList; std::set< uint32_t > m_AetherialWheelIdList; std::set< uint32_t > m_AetheryteIdList; std::set< uint32_t > m_AirshipExplorationLevelIdList; @@ -4173,6 +4791,7 @@ struct WorldDCGroupType std::set< uint32_t > m_BNpcBaseIdList; std::set< uint32_t > m_BNpcCustomizeIdList; std::set< uint32_t > m_BNpcNameIdList; + std::set< uint32_t > m_BuddyIdList; std::set< uint32_t > m_BuddyActionIdList; std::set< uint32_t > m_BuddyEquipIdList; std::set< uint32_t > m_BuddyItemIdList; @@ -4190,6 +4809,7 @@ struct WorldDCGroupType std::set< uint32_t > m_ChocoboRaceRankIdList; std::set< uint32_t > m_ChocoboRaceStatusIdList; std::set< uint32_t > m_ChocoboRaceTerritoryIdList; + std::set< uint32_t > m_ChocoboTaxiIdList; std::set< uint32_t > m_ChocoboTaxiStandIdList; std::set< uint32_t > m_ClassJobIdList; std::set< uint32_t > m_ClassJobCategoryIdList; @@ -4211,7 +4831,12 @@ struct WorldDCGroupType std::set< uint32_t > m_ContentFinderConditionIdList; std::set< uint32_t > m_ContentFinderConditionTransientIdList; std::set< uint32_t > m_ContentMemberTypeIdList; + std::set< uint32_t > m_ContentNpcTalkIdList; std::set< uint32_t > m_ContentRouletteIdList; + std::set< uint32_t > m_ContentsNoteIdList; + std::set< uint32_t > m_ContentsNoteCategoryIdList; + std::set< uint32_t > m_ContentTalkIdList; + std::set< uint32_t > m_ContentTalkParamIdList; std::set< uint32_t > m_ContentTypeIdList; std::set< uint32_t > m_CraftActionIdList; std::set< uint32_t > m_CraftLeveIdList; @@ -4240,8 +4865,12 @@ struct WorldDCGroupType std::set< uint32_t > m_ENpcBaseIdList; std::set< uint32_t > m_ENpcResidentIdList; std::set< uint32_t > m_EObjIdList; + std::set< uint32_t > m_EObjNameIdList; std::set< uint32_t > m_EquipRaceCategoryIdList; std::set< uint32_t > m_EquipSlotCategoryIdList; + std::set< uint32_t > m_EurekaAethernetIdList; + std::set< uint32_t > m_EurekaGrowDataIdList; + std::set< uint32_t > m_EurekaSphereElementAdjustIdList; std::set< uint32_t > m_EventActionIdList; std::set< uint32_t > m_EventIconPriorityIdList; std::set< uint32_t > m_EventIconTypeIdList; @@ -4259,6 +4888,7 @@ struct WorldDCGroupType std::set< uint32_t > m_FCProfileIdList; std::set< uint32_t > m_FCReputationIdList; std::set< uint32_t > m_FCRightsIdList; + std::set< uint32_t > m_FieldMarkerIdList; std::set< uint32_t > m_FishingSpotIdList; std::set< uint32_t > m_FishParameterIdList; std::set< uint32_t > m_GardeningSeedIdList; @@ -4308,7 +4938,6 @@ struct WorldDCGroupType std::set< uint32_t > m_InstanceContentIdList; std::set< uint32_t > m_InstanceContentBuffIdList; std::set< uint32_t > m_InstanceContentTextDataIdList; - std::set< uint32_t > m_InstanceContentTypeIdList; std::set< uint32_t > m_ItemIdList; std::set< uint32_t > m_ItemActionIdList; std::set< uint32_t > m_ItemFoodIdList; @@ -4336,7 +4965,9 @@ struct WorldDCGroupType std::set< uint32_t > m_MainCommandCategoryIdList; std::set< uint32_t > m_MapIdList; std::set< uint32_t > m_MapMarkerIdList; + std::set< uint32_t > m_MapMarkerRegionIdList; std::set< uint32_t > m_MapSymbolIdList; + std::set< uint32_t > m_MarkerIdList; std::set< uint32_t > m_MasterpieceSupplyDutyIdList; std::set< uint32_t > m_MasterpieceSupplyMultiplierIdList; std::set< uint32_t > m_MateriaIdList; @@ -4349,6 +4980,8 @@ struct WorldDCGroupType std::set< uint32_t > m_MonsterNoteTargetIdList; std::set< uint32_t > m_MountIdList; std::set< uint32_t > m_MountActionIdList; + std::set< uint32_t > m_MoveTimelineIdList; + std::set< uint32_t > m_MoveVfxIdList; std::set< uint32_t > m_NpcEquipIdList; std::set< uint32_t > m_OmenIdList; std::set< uint32_t > m_OnlineStatusIdList; @@ -4358,11 +4991,17 @@ struct WorldDCGroupType std::set< uint32_t > m_OrchestrionPathIdList; std::set< uint32_t > m_OrchestrionUiparamIdList; std::set< uint32_t > m_ParamGrowIdList; + std::set< uint32_t > m_PerformIdList; + std::set< uint32_t > m_PerformTransientIdList; std::set< uint32_t > m_PetIdList; std::set< uint32_t > m_PetActionIdList; std::set< uint32_t > m_PictureIdList; std::set< uint32_t > m_PlaceNameIdList; + std::set< uint32_t > m_PublicContentIdList; + std::set< uint32_t > m_PvPActionSortIdList; std::set< uint32_t > m_QuestIdList; + std::set< uint32_t > m_QuestClassJobRewardIdList; + std::set< uint32_t > m_QuestRepeatFlagIdList; std::set< uint32_t > m_QuestRewardOtherIdList; std::set< uint32_t > m_QuickChatIdList; std::set< uint32_t > m_QuickChatTransientIdList; @@ -4376,12 +5015,14 @@ struct WorldDCGroupType std::set< uint32_t > m_RecipeElementIdList; std::set< uint32_t > m_RecipeLevelTableIdList; std::set< uint32_t > m_RecipeNotebookListIdList; + std::set< uint32_t > m_RecommendContentsIdList; std::set< uint32_t > m_RelicIdList; std::set< uint32_t > m_Relic3IdList; std::set< uint32_t > m_RelicItemIdList; std::set< uint32_t > m_RelicNoteIdList; std::set< uint32_t > m_RelicNoteCategoryIdList; std::set< uint32_t > m_RetainerTaskIdList; + std::set< uint32_t > m_RetainerTaskLvRangeIdList; std::set< uint32_t > m_RetainerTaskNormalIdList; std::set< uint32_t > m_RetainerTaskParameterIdList; std::set< uint32_t > m_RetainerTaskRandomIdList; @@ -4389,14 +5030,26 @@ struct WorldDCGroupType std::set< uint32_t > m_SatisfactionNpcIdList; std::set< uint32_t > m_SatisfactionSupplyIdList; std::set< uint32_t > m_SatisfactionSupplyRewardIdList; + std::set< uint32_t > m_ScenarioTreeIdList; + std::set< uint32_t > m_ScenarioTreeTipsIdList; + std::set< uint32_t > m_ScenarioTreeTipsClassQuestIdList; + std::set< uint32_t > m_ScenarioTreeTipsQuestIdList; + std::set< uint32_t > m_ScenarioTypeIdList; std::set< uint32_t > m_ScreenImageIdList; std::set< uint32_t > m_SecretRecipeBookIdList; + std::set< uint32_t > m_SkyIsland2MissionIdList; + std::set< uint32_t > m_SkyIsland2MissionDetailIdList; + std::set< uint32_t > m_SkyIsland2MissionTypeIdList; + std::set< uint32_t > m_SkyIsland2RangeTypeIdList; std::set< uint32_t > m_SpearfishingItemIdList; std::set< uint32_t > m_SpearfishingNotebookIdList; std::set< uint32_t > m_SpecialShopIdList; std::set< uint32_t > m_SpecialShopItemCategoryIdList; std::set< uint32_t > m_StainIdList; + std::set< uint32_t > m_StainTransientIdList; std::set< uint32_t > m_StatusIdList; + std::set< uint32_t > m_StatusHitEffectIdList; + std::set< uint32_t > m_StatusLoopVFXIdList; std::set< uint32_t > m_StoryIdList; std::set< uint32_t > m_SubmarineExplorationIdList; std::set< uint32_t > m_SubmarinePartIdList; @@ -4412,6 +5065,8 @@ struct WorldDCGroupType std::set< uint32_t > m_TraitIdList; std::set< uint32_t > m_TraitRecastIdList; std::set< uint32_t > m_TraitTransientIdList; + std::set< uint32_t > m_TransformationIdList; + std::set< uint32_t > m_TreasureIdList; std::set< uint32_t > m_TreasureHuntRankIdList; std::set< uint32_t > m_TribeIdList; std::set< uint32_t > m_TripleTriadIdList; @@ -4425,14 +5080,21 @@ struct WorldDCGroupType std::set< uint32_t > m_TutorialDPSIdList; std::set< uint32_t > m_TutorialHealerIdList; std::set< uint32_t > m_TutorialTankIdList; + std::set< uint32_t > m_VaseFlowerIdList; + std::set< uint32_t > m_VFXIdList; std::set< uint32_t > m_WarpIdList; + std::set< uint32_t > m_WarpConditionIdList; std::set< uint32_t > m_WeatherIdList; std::set< uint32_t > m_WeatherGroupIdList; std::set< uint32_t > m_WeatherRateIdList; + std::set< uint32_t > m_WeddingBGMIdList; std::set< uint32_t > m_WeeklyBingoOrderDataIdList; std::set< uint32_t > m_WeeklyBingoRewardDataIdList; std::set< uint32_t > m_WeeklyBingoTextIdList; + std::set< uint32_t > m_WorldIdList; std::set< uint32_t > m_WorldDCGroupTypeIdList; + std::set< uint32_t > m_YKWIdList; + std::set< uint32_t > m_ZoneSharedGroupIdList; const std::set< uint32_t >& getAchievementIdList() @@ -4459,6 +5121,18 @@ const std::set< uint32_t >& getActionIdList() loadIdList( m_ActionDat, m_ActionIdList ); return m_ActionIdList; } +const std::set< uint32_t >& getActionCastTimelineIdList() +{ + if( m_ActionCastTimelineIdList.size() == 0 ) + loadIdList( m_ActionCastTimelineDat, m_ActionCastTimelineIdList ); + return m_ActionCastTimelineIdList; +} +const std::set< uint32_t >& getActionCastVFXIdList() +{ + if( m_ActionCastVFXIdList.size() == 0 ) + loadIdList( m_ActionCastVFXDat, m_ActionCastVFXIdList ); + return m_ActionCastVFXIdList; +} const std::set< uint32_t >& getActionCategoryIdList() { if( m_ActionCategoryIdList.size() == 0 ) @@ -4477,6 +5151,12 @@ const std::set< uint32_t >& getActionIndirectionIdList() loadIdList( m_ActionIndirectionDat, m_ActionIndirectionIdList ); return m_ActionIndirectionIdList; } +const std::set< uint32_t >& getActionParamIdList() +{ + if( m_ActionParamIdList.size() == 0 ) + loadIdList( m_ActionParamDat, m_ActionParamIdList ); + return m_ActionParamIdList; +} const std::set< uint32_t >& getActionProcStatusIdList() { if( m_ActionProcStatusIdList.size() == 0 ) @@ -4489,6 +5169,12 @@ const std::set< uint32_t >& getActionTimelineIdList() loadIdList( m_ActionTimelineDat, m_ActionTimelineIdList ); return m_ActionTimelineIdList; } +const std::set< uint32_t >& getActionTimelineReplaceIdList() +{ + if( m_ActionTimelineReplaceIdList.size() == 0 ) + loadIdList( m_ActionTimelineReplaceDat, m_ActionTimelineReplaceIdList ); + return m_ActionTimelineReplaceIdList; +} const std::set< uint32_t >& getActionTransientIdList() { if( m_ActionTransientIdList.size() == 0 ) @@ -4519,6 +5205,12 @@ const std::set< uint32_t >& getAetherCurrentIdList() loadIdList( m_AetherCurrentDat, m_AetherCurrentIdList ); return m_AetherCurrentIdList; } +const std::set< uint32_t >& getAetherCurrentCompFlgSetIdList() +{ + if( m_AetherCurrentCompFlgSetIdList.size() == 0 ) + loadIdList( m_AetherCurrentCompFlgSetDat, m_AetherCurrentCompFlgSetIdList ); + return m_AetherCurrentCompFlgSetIdList; +} const std::set< uint32_t >& getAetherialWheelIdList() { if( m_AetherialWheelIdList.size() == 0 ) @@ -4711,6 +5403,12 @@ const std::set< uint32_t >& getBNpcNameIdList() loadIdList( m_BNpcNameDat, m_BNpcNameIdList ); return m_BNpcNameIdList; } +const std::set< uint32_t >& getBuddyIdList() +{ + if( m_BuddyIdList.size() == 0 ) + loadIdList( m_BuddyDat, m_BuddyIdList ); + return m_BuddyIdList; +} const std::set< uint32_t >& getBuddyActionIdList() { if( m_BuddyActionIdList.size() == 0 ) @@ -4813,6 +5511,12 @@ const std::set< uint32_t >& getChocoboRaceTerritoryIdList() loadIdList( m_ChocoboRaceTerritoryDat, m_ChocoboRaceTerritoryIdList ); return m_ChocoboRaceTerritoryIdList; } +const std::set< uint32_t >& getChocoboTaxiIdList() +{ + if( m_ChocoboTaxiIdList.size() == 0 ) + loadIdList( m_ChocoboTaxiDat, m_ChocoboTaxiIdList ); + return m_ChocoboTaxiIdList; +} const std::set< uint32_t >& getChocoboTaxiStandIdList() { if( m_ChocoboTaxiStandIdList.size() == 0 ) @@ -4939,12 +5643,42 @@ const std::set< uint32_t >& getContentMemberTypeIdList() loadIdList( m_ContentMemberTypeDat, m_ContentMemberTypeIdList ); return m_ContentMemberTypeIdList; } +const std::set< uint32_t >& getContentNpcTalkIdList() +{ + if( m_ContentNpcTalkIdList.size() == 0 ) + loadIdList( m_ContentNpcTalkDat, m_ContentNpcTalkIdList ); + return m_ContentNpcTalkIdList; +} const std::set< uint32_t >& getContentRouletteIdList() { if( m_ContentRouletteIdList.size() == 0 ) loadIdList( m_ContentRouletteDat, m_ContentRouletteIdList ); return m_ContentRouletteIdList; } +const std::set< uint32_t >& getContentsNoteIdList() +{ + if( m_ContentsNoteIdList.size() == 0 ) + loadIdList( m_ContentsNoteDat, m_ContentsNoteIdList ); + return m_ContentsNoteIdList; +} +const std::set< uint32_t >& getContentsNoteCategoryIdList() +{ + if( m_ContentsNoteCategoryIdList.size() == 0 ) + loadIdList( m_ContentsNoteCategoryDat, m_ContentsNoteCategoryIdList ); + return m_ContentsNoteCategoryIdList; +} +const std::set< uint32_t >& getContentTalkIdList() +{ + if( m_ContentTalkIdList.size() == 0 ) + loadIdList( m_ContentTalkDat, m_ContentTalkIdList ); + return m_ContentTalkIdList; +} +const std::set< uint32_t >& getContentTalkParamIdList() +{ + if( m_ContentTalkParamIdList.size() == 0 ) + loadIdList( m_ContentTalkParamDat, m_ContentTalkParamIdList ); + return m_ContentTalkParamIdList; +} const std::set< uint32_t >& getContentTypeIdList() { if( m_ContentTypeIdList.size() == 0 ) @@ -5113,6 +5847,12 @@ const std::set< uint32_t >& getEObjIdList() loadIdList( m_EObjDat, m_EObjIdList ); return m_EObjIdList; } +const std::set< uint32_t >& getEObjNameIdList() +{ + if( m_EObjNameIdList.size() == 0 ) + loadIdList( m_EObjNameDat, m_EObjNameIdList ); + return m_EObjNameIdList; +} const std::set< uint32_t >& getEquipRaceCategoryIdList() { if( m_EquipRaceCategoryIdList.size() == 0 ) @@ -5125,6 +5865,24 @@ const std::set< uint32_t >& getEquipSlotCategoryIdList() loadIdList( m_EquipSlotCategoryDat, m_EquipSlotCategoryIdList ); return m_EquipSlotCategoryIdList; } +const std::set< uint32_t >& getEurekaAethernetIdList() +{ + if( m_EurekaAethernetIdList.size() == 0 ) + loadIdList( m_EurekaAethernetDat, m_EurekaAethernetIdList ); + return m_EurekaAethernetIdList; +} +const std::set< uint32_t >& getEurekaGrowDataIdList() +{ + if( m_EurekaGrowDataIdList.size() == 0 ) + loadIdList( m_EurekaGrowDataDat, m_EurekaGrowDataIdList ); + return m_EurekaGrowDataIdList; +} +const std::set< uint32_t >& getEurekaSphereElementAdjustIdList() +{ + if( m_EurekaSphereElementAdjustIdList.size() == 0 ) + loadIdList( m_EurekaSphereElementAdjustDat, m_EurekaSphereElementAdjustIdList ); + return m_EurekaSphereElementAdjustIdList; +} const std::set< uint32_t >& getEventActionIdList() { if( m_EventActionIdList.size() == 0 ) @@ -5227,6 +5985,12 @@ const std::set< uint32_t >& getFCRightsIdList() loadIdList( m_FCRightsDat, m_FCRightsIdList ); return m_FCRightsIdList; } +const std::set< uint32_t >& getFieldMarkerIdList() +{ + if( m_FieldMarkerIdList.size() == 0 ) + loadIdList( m_FieldMarkerDat, m_FieldMarkerIdList ); + return m_FieldMarkerIdList; +} const std::set< uint32_t >& getFishingSpotIdList() { if( m_FishingSpotIdList.size() == 0 ) @@ -5521,12 +6285,6 @@ const std::set< uint32_t >& getInstanceContentTextDataIdList() loadIdList( m_InstanceContentTextDataDat, m_InstanceContentTextDataIdList ); return m_InstanceContentTextDataIdList; } -const std::set< uint32_t >& getInstanceContentTypeIdList() -{ - if( m_InstanceContentTypeIdList.size() == 0 ) - loadIdList( m_InstanceContentTypeDat, m_InstanceContentTypeIdList ); - return m_InstanceContentTypeIdList; -} const std::set< uint32_t >& getItemIdList() { if( m_ItemIdList.size() == 0 ) @@ -5689,12 +6447,24 @@ const std::set< uint32_t >& getMapMarkerIdList() loadIdList( m_MapMarkerDat, m_MapMarkerIdList ); return m_MapMarkerIdList; } +const std::set< uint32_t >& getMapMarkerRegionIdList() +{ + if( m_MapMarkerRegionIdList.size() == 0 ) + loadIdList( m_MapMarkerRegionDat, m_MapMarkerRegionIdList ); + return m_MapMarkerRegionIdList; +} const std::set< uint32_t >& getMapSymbolIdList() { if( m_MapSymbolIdList.size() == 0 ) loadIdList( m_MapSymbolDat, m_MapSymbolIdList ); return m_MapSymbolIdList; } +const std::set< uint32_t >& getMarkerIdList() +{ + if( m_MarkerIdList.size() == 0 ) + loadIdList( m_MarkerDat, m_MarkerIdList ); + return m_MarkerIdList; +} const std::set< uint32_t >& getMasterpieceSupplyDutyIdList() { if( m_MasterpieceSupplyDutyIdList.size() == 0 ) @@ -5767,6 +6537,18 @@ const std::set< uint32_t >& getMountActionIdList() loadIdList( m_MountActionDat, m_MountActionIdList ); return m_MountActionIdList; } +const std::set< uint32_t >& getMoveTimelineIdList() +{ + if( m_MoveTimelineIdList.size() == 0 ) + loadIdList( m_MoveTimelineDat, m_MoveTimelineIdList ); + return m_MoveTimelineIdList; +} +const std::set< uint32_t >& getMoveVfxIdList() +{ + if( m_MoveVfxIdList.size() == 0 ) + loadIdList( m_MoveVfxDat, m_MoveVfxIdList ); + return m_MoveVfxIdList; +} const std::set< uint32_t >& getNpcEquipIdList() { if( m_NpcEquipIdList.size() == 0 ) @@ -5821,6 +6603,18 @@ const std::set< uint32_t >& getParamGrowIdList() loadIdList( m_ParamGrowDat, m_ParamGrowIdList ); return m_ParamGrowIdList; } +const std::set< uint32_t >& getPerformIdList() +{ + if( m_PerformIdList.size() == 0 ) + loadIdList( m_PerformDat, m_PerformIdList ); + return m_PerformIdList; +} +const std::set< uint32_t >& getPerformTransientIdList() +{ + if( m_PerformTransientIdList.size() == 0 ) + loadIdList( m_PerformTransientDat, m_PerformTransientIdList ); + return m_PerformTransientIdList; +} const std::set< uint32_t >& getPetIdList() { if( m_PetIdList.size() == 0 ) @@ -5845,12 +6639,36 @@ const std::set< uint32_t >& getPlaceNameIdList() loadIdList( m_PlaceNameDat, m_PlaceNameIdList ); return m_PlaceNameIdList; } +const std::set< uint32_t >& getPublicContentIdList() +{ + if( m_PublicContentIdList.size() == 0 ) + loadIdList( m_PublicContentDat, m_PublicContentIdList ); + return m_PublicContentIdList; +} +const std::set< uint32_t >& getPvPActionSortIdList() +{ + if( m_PvPActionSortIdList.size() == 0 ) + loadIdList( m_PvPActionSortDat, m_PvPActionSortIdList ); + return m_PvPActionSortIdList; +} const std::set< uint32_t >& getQuestIdList() { if( m_QuestIdList.size() == 0 ) loadIdList( m_QuestDat, m_QuestIdList ); return m_QuestIdList; } +const std::set< uint32_t >& getQuestClassJobRewardIdList() +{ + if( m_QuestClassJobRewardIdList.size() == 0 ) + loadIdList( m_QuestClassJobRewardDat, m_QuestClassJobRewardIdList ); + return m_QuestClassJobRewardIdList; +} +const std::set< uint32_t >& getQuestRepeatFlagIdList() +{ + if( m_QuestRepeatFlagIdList.size() == 0 ) + loadIdList( m_QuestRepeatFlagDat, m_QuestRepeatFlagIdList ); + return m_QuestRepeatFlagIdList; +} const std::set< uint32_t >& getQuestRewardOtherIdList() { if( m_QuestRewardOtherIdList.size() == 0 ) @@ -5929,6 +6747,12 @@ const std::set< uint32_t >& getRecipeNotebookListIdList() loadIdList( m_RecipeNotebookListDat, m_RecipeNotebookListIdList ); return m_RecipeNotebookListIdList; } +const std::set< uint32_t >& getRecommendContentsIdList() +{ + if( m_RecommendContentsIdList.size() == 0 ) + loadIdList( m_RecommendContentsDat, m_RecommendContentsIdList ); + return m_RecommendContentsIdList; +} const std::set< uint32_t >& getRelicIdList() { if( m_RelicIdList.size() == 0 ) @@ -5965,6 +6789,12 @@ const std::set< uint32_t >& getRetainerTaskIdList() loadIdList( m_RetainerTaskDat, m_RetainerTaskIdList ); return m_RetainerTaskIdList; } +const std::set< uint32_t >& getRetainerTaskLvRangeIdList() +{ + if( m_RetainerTaskLvRangeIdList.size() == 0 ) + loadIdList( m_RetainerTaskLvRangeDat, m_RetainerTaskLvRangeIdList ); + return m_RetainerTaskLvRangeIdList; +} const std::set< uint32_t >& getRetainerTaskNormalIdList() { if( m_RetainerTaskNormalIdList.size() == 0 ) @@ -6007,6 +6837,36 @@ const std::set< uint32_t >& getSatisfactionSupplyRewardIdList() loadIdList( m_SatisfactionSupplyRewardDat, m_SatisfactionSupplyRewardIdList ); return m_SatisfactionSupplyRewardIdList; } +const std::set< uint32_t >& getScenarioTreeIdList() +{ + if( m_ScenarioTreeIdList.size() == 0 ) + loadIdList( m_ScenarioTreeDat, m_ScenarioTreeIdList ); + return m_ScenarioTreeIdList; +} +const std::set< uint32_t >& getScenarioTreeTipsIdList() +{ + if( m_ScenarioTreeTipsIdList.size() == 0 ) + loadIdList( m_ScenarioTreeTipsDat, m_ScenarioTreeTipsIdList ); + return m_ScenarioTreeTipsIdList; +} +const std::set< uint32_t >& getScenarioTreeTipsClassQuestIdList() +{ + if( m_ScenarioTreeTipsClassQuestIdList.size() == 0 ) + loadIdList( m_ScenarioTreeTipsClassQuestDat, m_ScenarioTreeTipsClassQuestIdList ); + return m_ScenarioTreeTipsClassQuestIdList; +} +const std::set< uint32_t >& getScenarioTreeTipsQuestIdList() +{ + if( m_ScenarioTreeTipsQuestIdList.size() == 0 ) + loadIdList( m_ScenarioTreeTipsQuestDat, m_ScenarioTreeTipsQuestIdList ); + return m_ScenarioTreeTipsQuestIdList; +} +const std::set< uint32_t >& getScenarioTypeIdList() +{ + if( m_ScenarioTypeIdList.size() == 0 ) + loadIdList( m_ScenarioTypeDat, m_ScenarioTypeIdList ); + return m_ScenarioTypeIdList; +} const std::set< uint32_t >& getScreenImageIdList() { if( m_ScreenImageIdList.size() == 0 ) @@ -6019,6 +6879,30 @@ const std::set< uint32_t >& getSecretRecipeBookIdList() loadIdList( m_SecretRecipeBookDat, m_SecretRecipeBookIdList ); return m_SecretRecipeBookIdList; } +const std::set< uint32_t >& getSkyIsland2MissionIdList() +{ + if( m_SkyIsland2MissionIdList.size() == 0 ) + loadIdList( m_SkyIsland2MissionDat, m_SkyIsland2MissionIdList ); + return m_SkyIsland2MissionIdList; +} +const std::set< uint32_t >& getSkyIsland2MissionDetailIdList() +{ + if( m_SkyIsland2MissionDetailIdList.size() == 0 ) + loadIdList( m_SkyIsland2MissionDetailDat, m_SkyIsland2MissionDetailIdList ); + return m_SkyIsland2MissionDetailIdList; +} +const std::set< uint32_t >& getSkyIsland2MissionTypeIdList() +{ + if( m_SkyIsland2MissionTypeIdList.size() == 0 ) + loadIdList( m_SkyIsland2MissionTypeDat, m_SkyIsland2MissionTypeIdList ); + return m_SkyIsland2MissionTypeIdList; +} +const std::set< uint32_t >& getSkyIsland2RangeTypeIdList() +{ + if( m_SkyIsland2RangeTypeIdList.size() == 0 ) + loadIdList( m_SkyIsland2RangeTypeDat, m_SkyIsland2RangeTypeIdList ); + return m_SkyIsland2RangeTypeIdList; +} const std::set< uint32_t >& getSpearfishingItemIdList() { if( m_SpearfishingItemIdList.size() == 0 ) @@ -6049,12 +6933,30 @@ const std::set< uint32_t >& getStainIdList() loadIdList( m_StainDat, m_StainIdList ); return m_StainIdList; } +const std::set< uint32_t >& getStainTransientIdList() +{ + if( m_StainTransientIdList.size() == 0 ) + loadIdList( m_StainTransientDat, m_StainTransientIdList ); + return m_StainTransientIdList; +} const std::set< uint32_t >& getStatusIdList() { if( m_StatusIdList.size() == 0 ) loadIdList( m_StatusDat, m_StatusIdList ); return m_StatusIdList; } +const std::set< uint32_t >& getStatusHitEffectIdList() +{ + if( m_StatusHitEffectIdList.size() == 0 ) + loadIdList( m_StatusHitEffectDat, m_StatusHitEffectIdList ); + return m_StatusHitEffectIdList; +} +const std::set< uint32_t >& getStatusLoopVFXIdList() +{ + if( m_StatusLoopVFXIdList.size() == 0 ) + loadIdList( m_StatusLoopVFXDat, m_StatusLoopVFXIdList ); + return m_StatusLoopVFXIdList; +} const std::set< uint32_t >& getStoryIdList() { if( m_StoryIdList.size() == 0 ) @@ -6145,6 +7047,18 @@ const std::set< uint32_t >& getTraitTransientIdList() loadIdList( m_TraitTransientDat, m_TraitTransientIdList ); return m_TraitTransientIdList; } +const std::set< uint32_t >& getTransformationIdList() +{ + if( m_TransformationIdList.size() == 0 ) + loadIdList( m_TransformationDat, m_TransformationIdList ); + return m_TransformationIdList; +} +const std::set< uint32_t >& getTreasureIdList() +{ + if( m_TreasureIdList.size() == 0 ) + loadIdList( m_TreasureDat, m_TreasureIdList ); + return m_TreasureIdList; +} const std::set< uint32_t >& getTreasureHuntRankIdList() { if( m_TreasureHuntRankIdList.size() == 0 ) @@ -6223,12 +7137,30 @@ const std::set< uint32_t >& getTutorialTankIdList() loadIdList( m_TutorialTankDat, m_TutorialTankIdList ); return m_TutorialTankIdList; } +const std::set< uint32_t >& getVaseFlowerIdList() +{ + if( m_VaseFlowerIdList.size() == 0 ) + loadIdList( m_VaseFlowerDat, m_VaseFlowerIdList ); + return m_VaseFlowerIdList; +} +const std::set< uint32_t >& getVFXIdList() +{ + if( m_VFXIdList.size() == 0 ) + loadIdList( m_VFXDat, m_VFXIdList ); + return m_VFXIdList; +} const std::set< uint32_t >& getWarpIdList() { if( m_WarpIdList.size() == 0 ) loadIdList( m_WarpDat, m_WarpIdList ); return m_WarpIdList; } +const std::set< uint32_t >& getWarpConditionIdList() +{ + if( m_WarpConditionIdList.size() == 0 ) + loadIdList( m_WarpConditionDat, m_WarpConditionIdList ); + return m_WarpConditionIdList; +} const std::set< uint32_t >& getWeatherIdList() { if( m_WeatherIdList.size() == 0 ) @@ -6247,6 +7179,12 @@ const std::set< uint32_t >& getWeatherRateIdList() loadIdList( m_WeatherRateDat, m_WeatherRateIdList ); return m_WeatherRateIdList; } +const std::set< uint32_t >& getWeddingBGMIdList() +{ + if( m_WeddingBGMIdList.size() == 0 ) + loadIdList( m_WeddingBGMDat, m_WeddingBGMIdList ); + return m_WeddingBGMIdList; +} const std::set< uint32_t >& getWeeklyBingoOrderDataIdList() { if( m_WeeklyBingoOrderDataIdList.size() == 0 ) @@ -6265,12 +7203,30 @@ const std::set< uint32_t >& getWeeklyBingoTextIdList() loadIdList( m_WeeklyBingoTextDat, m_WeeklyBingoTextIdList ); return m_WeeklyBingoTextIdList; } +const std::set< uint32_t >& getWorldIdList() +{ + if( m_WorldIdList.size() == 0 ) + loadIdList( m_WorldDat, m_WorldIdList ); + return m_WorldIdList; +} const std::set< uint32_t >& getWorldDCGroupTypeIdList() { if( m_WorldDCGroupTypeIdList.size() == 0 ) loadIdList( m_WorldDCGroupTypeDat, m_WorldDCGroupTypeIdList ); return m_WorldDCGroupTypeIdList; } +const std::set< uint32_t >& getYKWIdList() +{ + if( m_YKWIdList.size() == 0 ) + loadIdList( m_YKWDat, m_YKWIdList ); + return m_YKWIdList; +} +const std::set< uint32_t >& getZoneSharedGroupIdList() +{ + if( m_ZoneSharedGroupIdList.size() == 0 ) + loadIdList( m_ZoneSharedGroupDat, m_ZoneSharedGroupIdList ); + return m_ZoneSharedGroupIdList; +} }; diff --git a/src/common/Network/CommonNetwork.h b/src/common/Network/CommonNetwork.h index b52c7d5b..c5d4dc90 100644 --- a/src/common/Network/CommonNetwork.h +++ b/src/common/Network/CommonNetwork.h @@ -1,6 +1,3 @@ -/** -* Structural definitions common to all FFXIV:ARR packets. -*/ #ifndef _CORE_NETWORK_PACKETS_COMMON_H #define _CORE_NETWORK_PACKETS_COMMON_H @@ -25,7 +22,7 @@ namespace Packets { * * std::stringstream buf; * buf << pkt_hdr; -* for (int i = 0; i < n; i++) +* for( int i = 0; i < n; i++ ) * { * buf << pkt_seg_hdr[i]; * buf << {pkt_seg_data[i]}; @@ -46,6 +43,8 @@ namespace Packets { * * 0 4 8 12 14 16 * +-------------------------------+---------------+-------+-------+ +* | unknown_0 | unknown_8 | +* +-------------------------------+---------------+-------+-------+ * | timestamp | size | cType | count | * +---+---+-------+---------------+---------------+-------+-------+ * | ? |CMP| ? | ? | @@ -54,13 +53,10 @@ namespace Packets { */ struct FFXIVARR_PACKET_HEADER { - + /** Unknown data, no actual use has been determined */ uint64_t unknown_0; uint64_t unknown_8; - /** - * Represents the number of milliseconds since epoch that the packet was - * sent. - */ + /** Represents the number of milliseconds since epoch that the packet was sent. */ uint64_t timestamp; /** The size of the packet header and its payload */ uint32_t size; @@ -74,14 +70,14 @@ struct FFXIVARR_PACKET_HEADER uint32_t unknown_24; }; -inline ostream& operator<<(ostream& os, const FFXIVARR_PACKET_HEADER& hdr) +inline ostream& operator << ( ostream& os, const FFXIVARR_PACKET_HEADER& hdr ) { - return os.write(reinterpret_cast(&hdr), sizeof hdr); + return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr ); } -inline istream& operator>>(istream& is, FFXIVARR_PACKET_HEADER& hdr) +inline istream& operator >> ( istream& is, FFXIVARR_PACKET_HEADER& hdr ) { - return is.read(reinterpret_cast(&hdr), sizeof hdr); + return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr ); } /** @@ -92,7 +88,7 @@ inline istream& operator>>(istream& is, FFXIVARR_PACKET_HEADER& hdr) * * 0 4 8 12 16 * +---------------+---------------+---------------+-------+-------+ -* | size | source_actor | target_actor | type | ? | +* | size | source_actor | target_actor | type | pad | * +---------------+---------------+---------------+-------+-------+ * | | * : type-specific data of length, size, follows : @@ -109,22 +105,20 @@ struct FFXIVARR_PACKET_SEGMENT_HEADER uint32_t target_actor; /** The segment type. (1, 2, 3, 7, 8, 9, 10) */ uint16_t type; - uint16_t _reserved_E; + uint16_t padding; }; -inline ostream& operator<<(ostream& os, const FFXIVARR_PACKET_SEGMENT_HEADER& hdr) +inline ostream& operator << ( ostream& os, const FFXIVARR_PACKET_SEGMENT_HEADER& hdr ) { - return os.write(reinterpret_cast(&hdr), sizeof hdr); + return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr ); } -inline istream& operator>>(istream& is, FFXIVARR_PACKET_SEGMENT_HEADER& hdr) +inline istream& operator >> ( istream& is, FFXIVARR_PACKET_SEGMENT_HEADER& hdr ) { - return is.read(reinterpret_cast(&hdr), sizeof hdr); + return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr ); } -// TODO: Include structures for the individual packet segment types - -template struct FFXIVIpcBasePacket +template < int T > struct FFXIVIpcBasePacket { /** Creates a constant representing the IPC type */ enum { _ServerIpcType = T }; @@ -133,7 +127,7 @@ template struct FFXIVIpcBasePacket struct FFXIVARR_PACKET_RAW { FFXIVARR_PACKET_SEGMENT_HEADER segHdr; - std::vector data; + std::vector< uint8_t > data; }; /** @@ -142,7 +136,7 @@ struct FFXIVARR_PACKET_RAW * * 0 4 6 8 12 16 * +-------+-------+------+----------+---------------+---------------+ -* | 14 00 | type | ?? | serverId | timestamp | ??? | +* | 14 00 | type | pad | serverId | timestamp | pad1 | * +-------+-------+------+----------+---------------+---------------+ * | | * : data : @@ -153,24 +147,22 @@ struct FFXIVARR_IPC_HEADER { uint16_t reserved; uint16_t type; - uint16_t unknown_2; + uint16_t padding; uint16_t serverId; uint32_t timestamp; - uint32_t unknown_C; + uint32_t padding1; }; -inline ostream& operator<<(ostream& os, const FFXIVARR_IPC_HEADER& hdr) +inline ostream& operator << ( ostream& os, const FFXIVARR_IPC_HEADER& hdr ) { - return os.write(reinterpret_cast(&hdr), sizeof hdr); + return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr ); } -inline istream& operator>>(istream& is, FFXIVARR_IPC_HEADER& hdr) +inline istream& operator >> ( istream& is, FFXIVARR_IPC_HEADER& hdr ) { - return is.read(reinterpret_cast(&hdr), sizeof hdr); + return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr ); } - - } /* Packets */ } /* Network */ } /* Core */ diff --git a/src/common/Network/GamePacket.cpp b/src/common/Network/GamePacket.cpp index 15e9d0f9..bc142ab5 100644 --- a/src/common/Network/GamePacket.cpp +++ b/src/common/Network/GamePacket.cpp @@ -7,23 +7,24 @@ #include #include "Util/Util.h" -Core::Network::Packets::GamePacket::GamePacket( uint16_t subType, uint16_t size, uint32_t id1, uint32_t id2, uint16_t type ) +Core::Network::Packets::GamePacket::GamePacket( uint16_t subType, uint16_t size, + uint32_t id1, uint32_t id2, uint16_t type ) { - m_dataBuf = std::vector( size ); + m_dataBuf = std::vector< uint8_t >( size ); memset( &m_segHdr, 0, sizeof( m_segHdr ) ); setHeader( size, type, id1, id2, subType, 0x00 ); - } -void Core::Network::Packets::GamePacket::setHeader( uint16_t size, uint16_t type, uint32_t id1, uint32_t id2, uint16_t subType, uint32_t unknown ) +void Core::Network::Packets::GamePacket::setHeader( uint16_t size, uint16_t type, uint32_t id1, + uint32_t id2, uint16_t subType, uint32_t unknown ) { m_segHdr.size = size; m_segHdr.type = type; m_segHdr.source_actor = id1; m_segHdr.target_actor = id2; - m_segHdr._reserved_E = 0x00; + //m_segHdr._reserved_E = 0x00; m_subType = subType; m_timeStamp = static_cast< uint32_t >( time( nullptr ) ); @@ -40,7 +41,7 @@ void Core::Network::Packets::GamePacket::setHeader( uint16_t size, uint16_t type Core::Network::Packets::GamePacket::GamePacket( char * pData, uint16_t size, bool bWriteStamp ) { - m_dataBuf = std::vector( size ); + m_dataBuf = std::vector< uint8_t >( size ); memcpy( &m_dataBuf[0], pData, size ); m_unknown2 = 0; @@ -65,9 +66,12 @@ Core::Network::Packets::GamePacket::GamePacket( const Packets::FFXIVARR_PACKET_R { m_segHdr = packetData.segHdr; - m_dataBuf = std::vector( m_segHdr.size ); + m_dataBuf = std::vector< uint8_t >( m_segHdr.size ); + + memcpy( &m_dataBuf[0] + sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ), + &packetData.data[0], + m_segHdr.size - sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ) ); - memcpy( &m_dataBuf[0] + sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ), &packetData.data[0], m_segHdr.size - sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ) ); memcpy( &m_dataBuf[0], &m_segHdr, sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ) ); m_subType = *reinterpret_cast< uint16_t* >( &m_dataBuf[0] + 0x12 ); @@ -88,7 +92,7 @@ Core::Network::Packets::GamePacket::~GamePacket() void Core::Network::Packets::GamePacket::savePacket() { char filename[20]; - sprintf( filename, "dump_0x%x.dat", m_subType ); + sprintf( filename, "dump_0x%x_%i.dat", m_subType, Util::getTimeMs() ); FILE * fp = nullptr; fp = fopen( filename, "wb" ); fwrite( &m_dataBuf[0], 1, m_segHdr.size, fp ); @@ -98,5 +102,5 @@ void Core::Network::Packets::GamePacket::savePacket() std::string Core::Network::Packets::GamePacket::toString() const { - return Core::Util::binaryToHexDump( const_cast( &m_dataBuf[0] ), getSize() ); + return Core::Util::binaryToHexDump( const_cast< uint8_t* >( &m_dataBuf[0] ), getSize() ); } diff --git a/src/common/Network/GamePacketNew.h b/src/common/Network/GamePacketNew.h index b59a0cdf..595b8222 100644 --- a/src/common/Network/GamePacketNew.h +++ b/src/common/Network/GamePacketNew.h @@ -16,11 +16,11 @@ namespace Packets { // Must forward define these in order to enable the compiler to produce the // correct template functions. -template +template < typename T, typename T1 > class GamePacketNew; -template -std::ostream& operator<< ( std::ostream& os, const GamePacketNew& packet ); +template < typename T, typename T1 > +std::ostream& operator << ( std::ostream& os, const GamePacketNew< T, T1 >& packet ); template< class T > using ZoneChannelPacket = GamePacketNew< T, ServerZoneIpcType >; @@ -31,16 +31,16 @@ using ChatChannelPacket = GamePacketNew< T, ServerChatIpcType >; /** * The base implementation of a game packet. Needed for parsing packets. */ -template -class GamePacketNewBase +template < typename T1 > +class FFXIVIpcPacketBase { public: - virtual ~GamePacketNewBase() = default; + virtual ~FFXIVIpcPacketBase() = default; /** * @brief Gets the IPC type of this packet. (Useful for determining the * type of a parsed packet.) */ - virtual T1 ipcType( void ) = 0; + virtual T1 ipcType() = 0; }; /** @@ -49,8 +49,8 @@ public: * type that represents just the IPC data portion (the bytes after the initial * 32 byte header information.) */ -template -class GamePacketNew : public GamePacketNewBase +template < typename T, typename T1 > +class GamePacketNew : public FFXIVIpcPacketBase< T1 > { public: /** @@ -58,7 +58,7 @@ public: * @param sourceActorId The source actor id. * @param targetActorId The target actor id. */ - GamePacketNew( uint32_t sourceActorId, uint32_t targetActorId ) + GamePacketNew< T, T1 >( uint32_t sourceActorId, uint32_t targetActorId ) { initialize(); m_segHdr.source_actor = sourceActorId; @@ -69,7 +69,7 @@ public: * @brief Constructs a new game packet with the specified actors. * @param sourceActorId The source and target actor id. */ - GamePacketNew( uint32_t bothActorId ) + GamePacketNew< T, T1 >( uint32_t bothActorId ) { initialize(); m_segHdr.source_actor = bothActorId; @@ -96,7 +96,7 @@ protected: }; public: - virtual T1 ipcType( void ) + virtual T1 ipcType() { return static_cast< T1 >( m_data._ServerIpcType ); }; @@ -109,7 +109,7 @@ public: * @param actorId The source actor id. * @return This IPC packet object (can be used for chaining). */ - GamePacketNew sourceActor( uint32_t actorId ) + GamePacketNew< T, T1 > sourceActor( uint32_t actorId ) { m_segHdr.source_actor = actorId; return this; @@ -129,7 +129,7 @@ public: * @param actorId The target actor id. * @return This IPC packet object (can be used for chaining). */ - GamePacketNew targetActor( uint32_t actorId ) + GamePacketNew< T, T1 > targetActor( uint32_t actorId ) { m_segHdr.target_actor = actorId; return this; @@ -144,7 +144,7 @@ public: return m_segHdr.target_actor; }; - friend std::ostream& operator<< <> ( std::ostream& os, const GamePacketNew& packet ); + friend std::ostream& operator<< <> ( std::ostream& os, const GamePacketNew< T, T1 >& packet ); friend class GamePacketFactory; @@ -205,7 +205,7 @@ private: }; }; -template +template < typename T, typename T1 > std::ostream& operator<<( std::ostream& os, const GamePacketNew& packet ) { #if 0 diff --git a/src/common/Network/GamePacketParser.cpp b/src/common/Network/GamePacketParser.cpp index d80da93b..52cfe1a3 100644 --- a/src/common/Network/GamePacketParser.cpp +++ b/src/common/Network/GamePacketParser.cpp @@ -5,159 +5,122 @@ using namespace Core::Network::Packets; -namespace Core +PacketParseResult Core::Network::Packets::getHeader( const std::vector< uint8_t > &buffer, + const uint32_t offset, + FFXIVARR_PACKET_HEADER &header ) { - namespace Network - { - namespace Packets - { - PacketParseResult getHeader( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - FFXIVARR_PACKET_HEADER &header) - { - const auto headerSize = sizeof( FFXIVARR_PACKET_HEADER ); + const auto headerSize = sizeof( FFXIVARR_PACKET_HEADER ); - // Check if we have enough bytes in the buffer. - auto remainingBytes = buffer.size() - offset; - if ( remainingBytes < headerSize ) - { - return Incomplete; - } + // Check if we have enough bytes in the buffer. + auto remainingBytes = buffer.size() - offset; + if( remainingBytes < headerSize ) + return Incomplete; - // Copy packet header. - memcpy( &header, buffer.data() + offset, headerSize ); + // Copy packet header. + memcpy( &header, buffer.data() + offset, headerSize ); - if ( !checkHeader(header) ) - { - return Malformed; - } + if( !checkHeader(header) ) + return Malformed; - return Success; - } - - PacketParseResult getSegmentHeader( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - FFXIVARR_PACKET_SEGMENT_HEADER &header) - { - const auto headerSize = sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ); - - // Check if we have enough bytes in the buffer. - auto remainingBytes = buffer.size() - offset; - if (remainingBytes < headerSize) - { - return Incomplete; - } - - // Copy segment header - memcpy(&header, buffer.data() + offset, headerSize); - - return Success; - } - - PacketParseResult getPackets( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - const FFXIVARR_PACKET_HEADER &packetHeader, - std::vector< FFXIVARR_PACKET_RAW > &packets) - { - // sanity check: check there's enough bytes in the buffer - const auto bytesExpected = packetHeader.size - sizeof(struct FFXIVARR_PACKET_HEADER); - if ( buffer.size() - offset < bytesExpected ) - { - return Incomplete; - } - - // Loop each message - uint32_t count = 0; - uint32_t bytesProcessed = 0; - while ( count < packetHeader.count ) - { - FFXIVARR_PACKET_RAW rawPacket; - - // Copy ipc packet message - const auto packetResult = getPacket(buffer, offset + bytesProcessed, rawPacket); - if ( packetResult != Success ) - { - return packetResult; - } - - // NOTE: isn't rawPacket is allocated on stack? - // why is okay to do this? - packets.push_back( rawPacket ); - - // Add message size and count - bytesProcessed += rawPacket.segHdr.size; - count += 1; - } - - // sanity check: check if we processed all bytes. - // this check can fail if size of messages don't add up to size reported from packet header. - if ( bytesExpected != bytesProcessed ) - { - return Malformed; - } - - return Success; - } - - PacketParseResult getPacket( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - FFXIVARR_PACKET_RAW &packet - ) - { - // Copy segment header - const auto headerResult = getSegmentHeader(buffer, offset, packet.segHdr); - if ( headerResult != Success ) - { - return headerResult; - } - - // Check header sanity and it's size - if ( !checkSegmentHeader( packet.segHdr ) ) - { - return Malformed; - } - - const auto dataOffset = offset + sizeof(struct FFXIVARR_PACKET_SEGMENT_HEADER); - const auto dataSize = packet.segHdr.size; - - // Allocate data buffer and copy - packet.data.resize( dataSize ); - memcpy( packet.data.data(), buffer.data() + dataOffset, dataSize ); - - return Success; - } - - bool checkHeader(const FFXIVARR_PACKET_HEADER &header) - { - // Max size of the packet is capped at 1MB for now. - if ( header.size > 1 * 1024 * 1024 ) - { - return false; - } - - // Max number of message is capped at 255 for now. - if ( header.count > 255 ) - { - return false; - } - - return true; - } - - bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header) - { - // Max size of individual message is capped at 256KB for now. - if ( header.size > 256 * 1024 ) - { - return false; - } - - return true; - } - } - } + return Success; +} + +PacketParseResult Core::Network::Packets::getSegmentHeader( const std::vector< uint8_t > &buffer, + const uint32_t offset, + FFXIVARR_PACKET_SEGMENT_HEADER &header ) +{ + const auto headerSize = sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ); + + // Check if we have enough bytes in the buffer. + auto remainingBytes = buffer.size() - offset; + if( remainingBytes < headerSize ) + return Incomplete; + + // Copy segment header + memcpy( &header, buffer.data() + offset, headerSize ); + + return Success; +} + +PacketParseResult Core::Network::Packets::getPackets( const std::vector< uint8_t > &buffer, + const uint32_t offset, + const FFXIVARR_PACKET_HEADER &packetHeader, + std::vector< FFXIVARR_PACKET_RAW > &packets ) +{ + // sanity check: check there's enough bytes in the buffer + const auto bytesExpected = packetHeader.size - sizeof( struct FFXIVARR_PACKET_HEADER ); + if( buffer.size() - offset < bytesExpected ) + return Incomplete; + + // Loop each message + uint32_t count = 0; + uint32_t bytesProcessed = 0; + while( count < packetHeader.count ) + { + FFXIVARR_PACKET_RAW rawPacket; + + // Copy ipc packet message + const auto packetResult = getPacket( buffer, offset + bytesProcessed, rawPacket ); + if( packetResult != Success ) + return packetResult; + + // NOTE: isn't rawPacket is allocated on stack? + // why is okay to do this? + packets.push_back( rawPacket ); + + // Add message size and count + bytesProcessed += rawPacket.segHdr.size; + count += 1; + } + + // sanity check: check if we processed all bytes. + // this check can fail if size of messages don't add up to size reported from packet header. + if( bytesExpected != bytesProcessed ) + return Malformed; + + return Success; +} + +PacketParseResult Core::Network::Packets::getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset, + FFXIVARR_PACKET_RAW &packet ) +{ + // Copy segment header + const auto headerResult = getSegmentHeader( buffer, offset, packet.segHdr ); + if( headerResult != Success ) + return headerResult; + + // Check header sanity and it's size + if( !checkSegmentHeader( packet.segHdr ) ) + return Malformed; + + const auto dataOffset = offset + sizeof( struct FFXIVARR_PACKET_SEGMENT_HEADER ); + const auto dataSize = packet.segHdr.size; + + // Allocate data buffer and copy + packet.data.resize( dataSize ); + memcpy( packet.data.data(), buffer.data() + dataOffset, dataSize ); + + return Success; +} + +bool Core::Network::Packets::checkHeader( const FFXIVARR_PACKET_HEADER &header ) +{ + // Max size of the packet is capped at 1MB for now. + if( header.size > 1 * 1024 * 1024 ) + return false; + + // Max number of message is capped at 255 for now. + if( header.count > 255 ) + return false; + + return true; +} + +bool Core::Network::Packets::checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER &header ) +{ + // Max size of individual message is capped at 256KB for now. + if( header.size > 256 * 1024 ) + return false; + + return true; } diff --git a/src/common/Network/GamePacketParser.h b/src/common/Network/GamePacketParser.h index 1ffda893..6f870bd2 100644 --- a/src/common/Network/GamePacketParser.h +++ b/src/common/Network/GamePacketParser.h @@ -2,62 +2,49 @@ #define _GAMEPACKETPARSER_H #include "CommonNetwork.h" -namespace Core -{ - namespace Network +namespace Core { +namespace Network { +namespace Packets { + + enum PacketParseResult { - namespace Packets - { - enum PacketParseResult - { - /// Dissected game packet successfully - Success, + /// Dissected game packet successfully + Success, - /// Buffer is too short to dissect a message. - Incomplete, - - /// Invalid data detected. - Malformed - }; + /// Buffer is too short to dissect a message. + Incomplete, - /// Read packet header from buffer with given offset. - /// Buffer with given offset must be pointing to start of the new FFXIV packet. - PacketParseResult getHeader( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - FFXIVARR_PACKET_HEADER &header - ); + /// Invalid data detected. + Malformed + }; - /// Read packet header from buffer with given offset. - /// Buffer with given offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data. - /// Keep in mind that this function does check for data validity. Call checkSegmentHeader() if that's needed. - PacketParseResult getSegmentHeader( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - FFXIVARR_PACKET_SEGMENT_HEADER &header - ); + /// Read packet header from buffer with given offset. + /// Buffer with given offset must be pointing to start of the new FFXIV packet. + PacketParseResult getHeader( const std::vector< uint8_t > &buffer, const uint32_t offset, + FFXIVARR_PACKET_HEADER &header ); - /// Read packets from the buffer with given offset. - /// Buffer with given offset must be pointing to end of FFXIVARR_PACKET_HEADER data. - PacketParseResult getPackets( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - const FFXIVARR_PACKET_HEADER &header, - std::vector< Packets::FFXIVARR_PACKET_RAW > &packets); - - /// Read single packet from the buffer with given offset. - /// Buffer with an offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data. - PacketParseResult getPacket( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - FFXIVARR_PACKET_RAW &packet - ); + /// Read packet header from buffer with given offset. + /// Buffer with given offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data. + /// Keep in mind that this function does check for data validity. Call checkSegmentHeader() if that's needed. + PacketParseResult getSegmentHeader( const std::vector< uint8_t > &buffer, const uint32_t offset, + FFXIVARR_PACKET_SEGMENT_HEADER &header ); - bool checkHeader(const FFXIVARR_PACKET_HEADER &header); - bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header); + /// Read packets from the buffer with given offset. + /// Buffer with given offset must be pointing to end of FFXIVARR_PACKET_HEADER data. + PacketParseResult getPackets( const std::vector< uint8_t > &buffer, const uint32_t offset, + const FFXIVARR_PACKET_HEADER &header, + std::vector< Packets::FFXIVARR_PACKET_RAW > &packets ); - } - } + /// Read single packet from the buffer with given offset. + /// Buffer with an offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data. + PacketParseResult getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset, + FFXIVARR_PACKET_RAW &packet ); + + bool checkHeader(const FFXIVARR_PACKET_HEADER &header); + bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header); + +} +} } diff --git a/src/common/Network/PacketContainer.cpp b/src/common/Network/PacketContainer.cpp index a0b6037f..d0074938 100644 --- a/src/common/Network/PacketContainer.cpp +++ b/src/common/Network/PacketContainer.cpp @@ -7,14 +7,14 @@ #include -Core::Network::Packets::PacketContainer::PacketContainer( void ) +Core::Network::Packets::PacketContainer::PacketContainer() { memset( &m_ipcHdr, 0, sizeof( FFXIVARR_PACKET_HEADER ) ); m_ipcHdr.size = sizeof( FFXIVARR_PACKET_HEADER ); m_ipcHdr.count = 0; } -Core::Network::Packets::PacketContainer::~PacketContainer( void ) +Core::Network::Packets::PacketContainer::~PacketContainer() { m_entryList.clear(); } diff --git a/src/common/Network/PacketContainer.h b/src/common/Network/PacketContainer.h index a00e0b88..494fe64b 100644 --- a/src/common/Network/PacketContainer.h +++ b/src/common/Network/PacketContainer.h @@ -16,14 +16,14 @@ class GamePacket; class PacketContainer { public: - PacketContainer( void ); - ~PacketContainer( void ); + PacketContainer(); + ~PacketContainer(); void addPacket( GamePacket pEntry ); FFXIVARR_PACKET_HEADER m_ipcHdr; - std::vector m_entryList; + std::vector< GamePacket > m_entryList; std::string toString(); diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index e8174617..56f8e6a0 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -1,7 +1,7 @@ #ifndef _CORE_NETWORK_PACKETS_IPCS_H #define _CORE_NETWORK_PACKETS_IPCS_H -#include +#include namespace Core { namespace Network { @@ -45,11 +45,10 @@ namespace Packets { enum ServerZoneIpcType : uint16_t { - // static opcode ( the ones that rarely if ever change ) + // static opcode ( the ones that rarely, if ever, change ) Ping = 0x0065, Init = 0x0066, - ActorSpawn = 0x0190, // DEPRECATED ActorFreeSpawn = 0x0191, InitZone = 0x019A, @@ -62,7 +61,7 @@ namespace Packets { /////////////////////////////////////////////////// ChatBanned = 0x006B, - Logout = 0x0077, + Logout = 0x0077, // updated 4.3 CFNotify = 0x0078, CFMemberStatus = 0x0079, CFDutyInfo = 0x007A, @@ -74,118 +73,126 @@ namespace Packets { CFRegistered = 0x00B8, // updated 4.1 SocialRequestResponse = 0x00BB, // updated 4.1 CancelAllianceForming = 0x00C6, // updated 4.2 - Chat = 0x00E1, // updated 4.2 - SocialList = 0x00E7, // updated 4.2 - UpdateSearchInfo = 0x00EA, // updated 4.2 - InitSearchInfo = 0x00EB, // updated 4.2 + Chat = 0x00F7, // updated 4.3 + SocialList = 0x00FD, // updated 4.3 - ServerNotice = 0x00F0, // updated 4.2 - SetOnlineStatus = 0x00F1, // updated 4.2 + UpdateSearchInfo = 0x0100, // updated 4.3 + InitSearchInfo = 0x0101, // updated 4.3 - CountdownInitiate = 0x00FB, // updated 4.2 - CountdownCancel = 0x00FC, // updated 4.2 + ServerNotice = 0x0106, // updated 4.3 + SetOnlineStatus = 0x0107, // updated 4.3 - BlackList = 0x00FF, // updated 4.2 + CountdownInitiate = 0x0111, // updated 4.3 + CountdownCancel = 0x0112, // updated 4.3 + + BlackList = 0x0115, // updated 4.3 LogMessage = 0x00D0, - LinkshellList = 0x0106, // updated 4.2 - SetCharacterFCInfo = 0x0114, // updated 4.2 - StatusEffectList = 0x0125, // updated 4.2 - Effect = 0x0128, // updated 4.2 - PersistantEffect = 0x013B, // updated 4.2 + LinkshellList = 0x011C, // updated 4.3 + SetCharaFCTag = 0x013B, // updated 4.3 + SetFreeCompanyInfo = 0x013D, // updated 4.3 + + StatusEffectList = 0x014E, // updated 4.3 + Effect = 0x0151, // updated 4.3 + PersistantEffect = 0x0158, // updated 4.3 GCAffiliation = 0xCCFC, // OUTDATED - PlayerSpawn = 0x015C, // updated 4.2 - NpcSpawn = 0x015D, // updated 4.2 - ActorMove = 0x015E, // updated 4.2 - ActorSetPos = 0x0160, // updated 4.2 + PlayerSpawn = 0x0172, // updated 4.3 + NpcSpawn = 0x0173, // updated 4.3 + ActorMove = 0x0174, // updated 4.3 + ActorSetPos = 0x0176, // updated 4.3 - ActorCast = 0x0162, // updated 4.2 + ActorCast = 0x0178, // updated 4.3 - HateList = 0x0165, // updated 4.2 + PartyList = 0x017A, // updated 4.3 + HateList = 0x017B, // updated 4.3 - ObjectSpawn = 0x0167, // updated 4.2 - ObjectDespawn = 0x0168, // updated 4.2 - UpdateClassInfo = 0x0169, // updated 4.2 + ObjectSpawn = 0x017D, // updated 4.3 + ObjectDespawn = 0x017E, // updated 4.3 - InitUI = 0x016B, // updated 4.2 - PlayerStats = 0x016C, // updated 4.2 - ActorOwner = 0x016D, // updated 4.2 ? - PlayerStateFlags = 0x016E, // updated 4.2 - PlayerClassInfo = 0x016F, // updated 4.2 - ModelEquip = 0x0170, // updated 4.2 - - ItemInfo = 0x017A, // updated 4.2 - ContainerInfo = 0x017B, // updated 4.2 - InventoryTransactionFinish = 0x017C, // updated 4.2 - InventoryTransaction = 0x017D, // updated 4.2 - CurrencyCrystalInfo = 0x017E, // updated 4.2 + SetLevelSync = 0x017F, // updated 4.3 InventoryActionAck = 0x0180, // updated 4.2 ? - UpdateInventorySlot = 0x0181, // updated 4.2 - EventPlay = 0x018E, // updated 4.2 - DirectorPlayScene = 0x0192, // updated 4.2 + InitUI = 0x0181, // updated 4.3 + PlayerStats = 0x0182, // updated 4.3 + ActorOwner = 0x0183, // updated 4.3 ? + PlayerStateFlags = 0x0184, // updated 4.3 + PlayerClassInfo = 0x0185, // updated 4.3 + ModelEquip = 0x0186, // updated 4.3 - EventStart = 0x0198, // updated 4.2 - EventFinish = 0x0199, // updated 4.2 + UpdateClassInfo = 0x018A, // updated 4.3 + + ItemInfo = 0x0190, // updated 4.3 + ContainerInfo = 0x0192, // updated 4.3 + InventoryTransactionFinish = 0x0193, // updated 4.3 + InventoryTransaction = 0x0194, // updated 4.3 + CurrencyCrystalInfo = 0x0197, // updated 4.3 + + UpdateInventorySlot = 0x0198, // updated 4.3 + + EventPlay = 0x01A6, // updated 4.3 + DirectorPlayScene = 0x01AA, // updated 4.3 + + EventStart = 0x01AF, // updated 4.3 + EventFinish = 0x01B0, // updated 4.3 EventLinkshell = 0x1169, - QuestMessage = 0x01B8, // updated 4.2 - QuestTracker = 0x01BD, // updated 4.2 + QuestActiveList = 0x01C3, // updated 4.3 + QuestUpdate = 0x01C4, // updated 4.3 + QuestCompleteList = 0x01C5, // updated 4.3 - QuestFinish = 0x01B0, // updated 4.2 - MSQTrackerComplete = 0x01B1, // updated 4.2 - MSQTrackerProgress = 0x01B2, // updated 4.2 + QuestFinish = 0x01C6, // updated 4.3 + MSQTrackerComplete = 0x01C7, // updated 4.3 + MSQTrackerProgress = 0x01C8, // updated 4.3 - QuestActiveList = 0x01AD, // updated 4.2 + QuestMessage = 0x01CE, // updated 4.3 - QuestUpdate = 0x01AE, // updated 4.2 - QuestCompleteList = 0x01AF, // updated 4.2 + QuestTracker = 0x01D3, // updated 4.3 - Mount = 0x01CD, // updated 4.2 + Mount = 0x01E3, // updated 4.3 - DirectorVars = 0x01CF, // updated 4.2 - - WeatherChange = 0x01EA, // updated 4.2 - PlayerTitleList = 0x01EB, // updated 4.2 - Discovery = 0x01EC, // updated 4.2 - - EorzeaTimeOffset = 0x01EE, // updated 4.2 - - EquipDisplayFlags = 0x01FA, // updated 4.2 + DirectorVars = 0x01E5, // updated 4.3 CFAvailableContents = 0x01FD, // updated 4.2 - PrepareZoning = 0x027C, // updated 4.2 - ActorGauge = 0x027D, // updated 4.2 + WeatherChange = 0x0200, // updated 4.3 + PlayerTitleList = 0x0201, // updated 4.3 + Discovery = 0x0202, // updated 4.3 + + EorzeaTimeOffset = 0x0204, // updated 4.3 + + EquipDisplayFlags = 0x0210, // updated 4.3 + + DuelChallenge = 0x0277, // 4.2; this is responsible for opening the ui + PerformNote = 0x0286, // updated 4.3 + + PrepareZoning = 0x0291, // updated 4.3 + ActorGauge = 0x0292, // updated 4.3 + - DuelChallenge = 0x0277, // 4.2; this is the responsible for opening an ui - PerformNote = 0x0286, // updated 4.2 // Unknown IPC types that still need to be sent // TODO: figure all these out properly - IPCTYPE_UNK_320 = 0x0235, // updated 4.2 - IPCTYPE_UNK_322 = 0x0237, // updated 4.2 + IPCTYPE_UNK_320 = 0x024C, // updated 4.3 + IPCTYPE_UNK_322 = 0x024E, // updated 4.3 }; - // TODO: Include structures for the individual packet segment types - /** * Client IPC Zone Type Codes. */ enum ClientZoneIpcType : uint16_t { - PingHandler = 0x0065, // unchanged 4.2 - InitHandler = 0x0066, // unchanged 4.2 + PingHandler = 0x0065, // unchanged 4.3 + InitHandler = 0x0066, // unchanged 4.3 - FinishLoadingHandler = 0x0069, // unchanged 4.2 + FinishLoadingHandler = 0x0069, // unchanged 4.3 CFCommenceHandler = 0x006F, @@ -193,23 +200,24 @@ namespace Packets { CFRegisterDuty = 0x0071, CFRegisterRoulette = 0x0072, - PlayTimeHandler = 0x0073, // unchanged 4.2 - LogoutHandler = 0x0074, // unchanged 4.2 + PlayTimeHandler = 0x0073, // unchanged 4.3 + LogoutHandler = 0x0074, // unchanged 4.3 CFDutyInfoHandler = 0x0078, // updated 4.2 SocialReqSendHandler = 0x00AE, // updated 4.1 + CreateCrossWorldLS = 0x00AF, // updated 4.3 - ChatHandler = 0x00C7, // updated 4.2 + ChatHandler = 0x00D3, // updated 4.3 - SocialListHandler = 0x00CF, // updated 4.2 - ReqSearchInfoHandler = 0x00D4, // updated 4.2 - SetSearchInfoHandler = 0x00D2, // updated 4.2 + SocialListHandler = 0x00DB, // updated 4.3 + ReqSearchInfoHandler = 0x00E0, // updated 4.3 + SetSearchInfoHandler = 0x00DE, // updated 4.3 - BlackListHandler = 0x00E0, // updated 4.2 + BlackListHandler = 0x00EC, // updated 4.3 PlayerSearchHandler = 0x00E2, // updated 4.2 - LinkshellListHandler = 0x00E8, // updated 4.2 + LinkshellListHandler = 0x00F4, // updated 4.3 FcInfoReqHandler = 0x011A, // updated 4.2 @@ -218,34 +226,34 @@ namespace Packets { ReqCountdownInitiate = 0x012C, // updated 4.2 ReqCountdownCancel = 0x012D, // updated 4.2 - ZoneLineHandler = 0x0130, // updated 4.2 - ActionHandler = 0x0131, // updated 4.2 - DiscoveryHandler = 0x0132, // updated 4.2 + ZoneLineHandler = 0x013C, // updated 4.3 + ActionHandler = 0x013D, // updated 4.3 + DiscoveryHandler = 0x013E, // updated 4.3 - SkillHandler = 0x0134, // updated 4.2 - GMCommand1 = 0x0135, // updated 4.2 - GMCommand2 = 0x0136, // updated 4.2 - UpdatePositionHandler = 0x0138, // updated 4.2 - UpdatePositionInstance = 0x0177, // updated 4.2 + SkillHandler = 0x0140, // updated 4.3 + GMCommand1 = 0x0141, // updated 4.3 + GMCommand2 = 0x0142, // updated 4.3 - InventoryModifyHandler = 0x013F, // updated 4.2 + UpdatePositionHandler = 0x0144, // updated 4.3 + UpdatePositionInstance = 0x0183, // updated 4.3 - TalkEventHandler = 0x0148, // updated 4.2 - EmoteEventHandler = 0x0149, // updated 4.2 - WithinRangeEventHandler = 0x014A, // updated 4.2 - OutOfRangeEventHandler = 0x014B, // updated 4.2 - EnterTeriEventHandler = 0x014C, // updated 4.2 + InventoryModifyHandler = 0x014B, // updated 4.3 - ReturnEventHandler = 0x0151, // updated 4.2 - TradeReturnEventHandler = 0x0152, // updated 4.2 + TalkEventHandler = 0x0154, // updated 4.3 + EmoteEventHandler = 0x0155, // updated 4.3 + WithinRangeEventHandler = 0x0156, // updated 4.3 + OutOfRangeEventHandler = 0x0157, // updated 4.3 + EnterTeriEventHandler = 0x0158, // updated 4.3 + ReturnEventHandler = 0x015D, // updated 4.3 + TradeReturnEventHandler = 0x015E, // updated 4.3 - LinkshellEventHandler = 0x0144, // updated 4.1 ?? - LinkshellEventHandler1 = 0x0145, // updated 4.1 ?? + LinkshellEventHandler = 0x0150, // updated 4.1 ?? + LinkshellEventHandler1 = 0x0151, // updated 4.1 ?? - PerformNoteHandler = 0x0160, + PerformNoteHandler = 0x029B, // updated 4.3 - ReqEquipDisplayFlagsChange = 0x016C, // updated 4.2 + ReqEquipDisplayFlagsChange = 0x0178, // updated 4.3 }; diff --git a/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h b/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h index 0e915ce9..a414fb3b 100644 --- a/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h +++ b/src/common/Network/PacketDef/Lobby/ServerLobbyDef.h @@ -87,8 +87,10 @@ struct FFXIVIpcCharList : FFXIVIpcBasePacket uint32_t index; uint32_t padding2; uint16_t serverId; + uint16_t serverId1; char nameChara[32]; char nameServer[32]; + char nameServer1[32]; char charDetailJson[1030]; } charaDetails[2]; diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 0a5fcd26..d8a628a8 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -609,146 +609,156 @@ struct FFXIVIpcInitZone : FFXIVIpcBasePacket */ struct FFXIVIpcInitUI : FFXIVIpcBasePacket { + // plain C types for a bit until the packet is actually fixed. + // makes conversion between different editors easier. uint64_t contentId; - uint32_t unknown8; - uint32_t unknownC; - uint32_t charId; - uint32_t restedExp; - uint16_t currentLevel; - uint8_t maxLevel; - uint8_t expansion; - uint8_t unknown1A; - uint8_t race; - uint8_t tribe; - uint8_t gender; - uint8_t currentJob; - uint8_t currentClass; - uint8_t deity; - uint8_t namedayMonth; - uint8_t namedayDay; - uint8_t cityState; - uint8_t homepoint; - uint8_t unknown26; // 2 if "warrior of light" - uint8_t petHotBar; - uint8_t companionRank; - uint8_t companionStars; - uint8_t companionSp; - uint8_t companionUnk2B; - uint8_t companionColor; - uint8_t companionFavoFeed; - uint8_t companionUnk2E; - float companionTimePassed; - uint32_t companionCurrentExp; - uint32_t unknown38; - uint32_t unknown3C; - uint32_t fishCaught; - uint32_t useBaitCatalogId; - uint32_t pvpWolfFoldMatches; - uint16_t pvpWolfFoldWeeklyMatches; - uint16_t pvpWolfFoldWeeklyVictories; - uint16_t pvpStats[6]; - uint16_t playerCommendations; - uint16_t pvpStats1; - uint8_t frontlineCampaigns[4]; - uint16_t frontlineCampaignsWeekly; - uint8_t currentRelic; - uint8_t currentBook; - uint8_t masterCrafterMask; - uint8_t unknown69; - uint8_t unknown6A; - uint8_t unknown6B; - uint8_t unknown6C[4]; - uint8_t unknown70[61]; - uint8_t preNamePadding; + unsigned int unknown8; + unsigned int unknownC; + unsigned int charId; + unsigned int restedExp; + unsigned int companionCurrentExp; + unsigned int unknown3C; + unsigned int fishCaught; + unsigned int useBaitCatalogId; + unsigned int pvpWolfFoldMatches; + unsigned short pvpWolfFoldWeeklyMatches; + unsigned short pvpWolfFoldWeeklyVictories; + unsigned short pvpStats[6]; + unsigned short playerCommendations; + unsigned short pvpStats1; + unsigned char frontlineCampaigns[4]; + unsigned short frontlineCampaignsWeekly; + unsigned char currentRelic; + unsigned char currentBook; + unsigned char masterCrafterMask; + unsigned char unknown69; + unsigned char unknown6A; + unsigned char unknown6B; + unsigned char unknown6C[4]; + unsigned char unknown70[34]; + unsigned short unknown18; + unsigned char maxLevel; + unsigned char expansion; + unsigned char unknown; + unsigned char race; + unsigned char tribe; + unsigned char gender; + unsigned char currentJob; + unsigned char currentClass; + unsigned char deity; + unsigned char namedayMonth; + unsigned char namedayDay; + unsigned char cityState; + unsigned char homepoint; + unsigned char unknown26; + unsigned char petHotBar; + unsigned char companionRank; + unsigned char companionStars; + unsigned char companionSp; + unsigned char companionUnk2B; + unsigned char companionColor; + unsigned char companionFavoFeed; + unsigned char companionUnk2E; + unsigned char companionTimePassed[4]; + unsigned short unknown38[11]; + + unsigned int exp[25]; + unsigned char unknown564[16]; + unsigned int pvpFrontlineOverall1st; + unsigned int pvpFrontlineOverall2nd; + unsigned int pvpFrontlineOverall3rd; + unsigned char relicBookCompletion1[4]; + unsigned short levels[25]; + unsigned short levelsPadding; + unsigned char unknown__[16]; + unsigned short fishingRecordsFish[26]; + unsigned short fishingRecordsFishWeight[26]; + unsigned char unknownMask554[44]; + + unsigned char companion_name[21]; + unsigned char companionDefRank; + unsigned char companionAttRank; + unsigned char companionHealRank; + unsigned char mountGuideMask[16]; char name[32]; - uint8_t unknownOword[16]; - uint8_t unknownDE[2]; - uint16_t levels[25]; - uint16_t levelsPadding; - uint32_t exp[25]; - uint8_t unlockBitmask[64]; - uint8_t aetheryte[16]; - uint8_t discovery[421]; - uint8_t howto[33]; - uint8_t minions[37]; - uint8_t chocoboTaxiMask[8]; - uint8_t contentClearMask[108]; - uint8_t contentClearPadding; - uint16_t unknown428[8]; - uint8_t companionBardingMask[8]; - uint8_t companionEquippedHead; - uint8_t companionEquippedBody; - uint8_t companionEquippedFeet; - uint8_t companionUnk4[4]; - uint8_t companion_fields[11]; - uint8_t companion_name[21]; - uint8_t companionDefRank; - uint8_t companionAttRank; - uint8_t companionHealRank; - uint8_t mountGuideMask[15]; - uint8_t fishingGuideMask[89]; - uint8_t fishingSpotVisited[25]; - uint16_t fishingRecordsFish[26]; - uint16_t fishingRecordsFishWeight[26]; - uint8_t unknownMask554[15]; - uint8_t unknownMask4Padding; - uint8_t unknown564[19]; - uint8_t rankAmalJaa; - uint8_t rankSylph; - uint8_t rankKobold; - uint8_t rankSahagin; - uint8_t rankIxal; - uint8_t rankVanu; - uint8_t rankVath; - uint8_t rankMoogle; - uint8_t rankKojin; - uint8_t rankAnata; - uint16_t expAmalJaa; - uint16_t expSylph; - uint16_t expKobold; - uint16_t expSahagin; - uint16_t expIxal; - uint16_t expVanu; - uint16_t expVath; - uint16_t expMoogle; - uint16_t expKojin; - uint16_t expAnata; - uint8_t unknown596[10]; - uint16_t unknown5A0[5]; - uint8_t unknownMask59E[5]; - uint8_t unknown5A3[18]; - uint8_t unknownMask5C1[28]; - uint8_t unknown_03411; - uint32_t unknownDword5E0; - uint8_t relicBookCompletion[12]; - uint8_t sightseeingMask[26]; - uint16_t unknown_XXX; - uint32_t pvpFrontlineOverall1st; - uint32_t pvpFrontlineOverall2nd; - uint32_t pvpFrontlineOverall3rd; - uint16_t pvpFrontlineWeekly1st; - uint16_t pvpFrontlineWeekly2nd; - uint16_t pvpFrontlineWeekly3rd; - uint8_t unknown61E; - uint8_t centurioSealHunts[32]; - uint8_t alliedSealHunts[22]; - uint8_t tripleTriadCards[28]; - uint8_t unknown671[11]; - uint8_t unknownMask67C[22]; - uint8_t unknown692[3]; - uint8_t orchestrionMask[40]; - uint8_t hallOfNoviceCompleteMask[3]; - uint8_t unknownMask6C0[11]; - uint8_t animaRelicMask[16]; // [2] = anima glass key item, [1] = ulan's note key item - uint8_t unknown6DB[14]; - uint8_t unlockedRaids[28]; - uint8_t unlockedDungeons[18]; - uint8_t unlockedGuildhests[10]; - uint8_t unlockedTrials[7]; - uint8_t unlockedPvp[5]; - uint8_t unknownMask72D[28]; - uint8_t unknownMask749[18]; - uint8_t unknown749[23]; + unsigned char unknownOword[16]; + unsigned char unlockBitmask[64]; + unsigned char aetheryte[17]; + unsigned char discovery[421]; + unsigned char howto[33]; + unsigned char minions[38]; + unsigned char chocoboTaxiMask[8]; + unsigned char contentClearMask[111]; + unsigned char contentClearPadding; + unsigned short unknown428[8]; + unsigned char companionBardingMask[8]; + unsigned char companionEquippedHead; + unsigned char companionEquippedBody; + unsigned char companionEquippedFeet; + unsigned char companionUnk4[4]; + unsigned char companion_fields[11]; + + unsigned char fishingGuideMask[89]; + unsigned char fishingSpotVisited[25]; + + + unsigned char unknownMask4Padding; + + unsigned char rankAmalJaa; + unsigned char rankSylph; + unsigned char rankKobold; + unsigned char rankSahagin; + unsigned char rankIxal; + unsigned char rankVanu; + unsigned char rankVath; + unsigned char rankMoogle; + unsigned char rankKojin; + unsigned char rankAnata; + unsigned short expAmalJaa; + unsigned short expSylph; + unsigned short expKobold; + unsigned short expSahagin; + unsigned short expIxal; + unsigned short expVanu; + unsigned short expVath; + unsigned short expMoogle; + unsigned short expKojin; + unsigned short expAnata; + unsigned char unknown596[10]; + unsigned short unknown5A0[5]; + unsigned char unknownMask59E[5]; + unsigned char unknown5A3[18]; + unsigned char unknownMask5C1[28]; + unsigned char unknown_03411; + unsigned int unknownDword5E0; + unsigned short pvpFrontlineWeekly1st; + unsigned short pvpFrontlineWeekly2nd; + unsigned short pvpFrontlineWeekly3rd; + unsigned char relicBookCompletion2[8]; + unsigned char sightseeingMask[26]; + unsigned short unknown_XXX; + + unsigned char unknown61E; + unsigned char unknown61F[32]; + unsigned char unknown63F[22]; + unsigned char tripleTriadCards[28]; + unsigned char unknown671[11]; + unsigned char unknownMask67C[22]; + unsigned char unknown692[3]; + unsigned char orchestrionMask[40]; + unsigned char hallOfNoviceCompleteMask[3]; + unsigned char unknownMask6C0[11]; + unsigned char unknownMask6CB[16]; + unsigned char unknown6DB[14]; + unsigned char unlockedRaids[28]; + unsigned char unlockedDungeons[18]; + unsigned char unlockedGuildhests[10]; + unsigned char unlockedTrials[7]; + unsigned char unlockedPvp[5]; + unsigned char unknownMask72D[28]; + // unsigned char unknownMask749[18]; + //unsigned char unknown749[13]; + }; /** diff --git a/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp new file mode 100644 index 00000000..96204fbf --- /dev/null +++ b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp @@ -0,0 +1,36 @@ +#include +#include + +class TheWeaponsRefrainUltimate : public InstanceContentScript +{ +public: + TheWeaponsRefrainUltimate() : InstanceContentScript( 30067 ) + { } + + void onInit( InstanceContentPtr instance ) override + { + instance->registerEObj( "unknown_0", 2009480, 0, 4, { 94.011192f, 0.000000f, 107.700996f }, 1.000000f, 0.000000f ); + instance->registerEObj( "sgvf_w1fz_b1432", 2007457, 7372735, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_1", 2007457, 7373056, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_2", 2009481, 0, 4, { 101.695602f, 0.000000f, 101.959396f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_3", 2007457, 7237754, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_4", 2007457, 7237753, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_5", 2007457, 7237756, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_6", 2007457, 7237755, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "Entrance", 2007457, 7343478, 5, { 100.000000f, 0.000000f, 116.000000f }, 1.000000f, 0.000000f ); + // States -> vf_lock_on vf_lock_of + instance->registerEObj( "Exit", 2000139, 0, 4, { 100.000000f, 0.000000f, 85.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_7", 2007457, 7538258, 4, { 100.160004f, 0.000000f, 101.443398f }, 1.000000f, 0.000000f ); + } + + void onUpdate( InstanceContentPtr instance, uint32_t currTime ) override + { + + } + + void onEnterTerritory( InstanceContentPtr instance, Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override + { + + } + +}; \ No newline at end of file diff --git a/src/servers/sapphire_api/PlayerMinimal.cpp b/src/servers/sapphire_api/PlayerMinimal.cpp index d3a1c6b9..62be6eb7 100644 --- a/src/servers/sapphire_api/PlayerMinimal.cpp +++ b/src/servers/sapphire_api/PlayerMinimal.cpp @@ -110,12 +110,20 @@ namespace Core { std::string PlayerMinimal::getInfoJson() { std::string charDetails = "{\"content\":[\"" + std::string( getName() ) + "\"," + - "[" + getClassString() + "]," + - "\"0\",\"0\",\"0\",\"" + std::to_string( getBirthMonth() ) + "\",\"" + std::to_string( getBirthDay() ) + "\",\"" + std::to_string( getGuardianDeity() ) + "\",\"" + std::to_string( m_class ) + "\",\"0\",\"" + std::to_string( getZoneId() ) + "\"," + + //"[" + getClassString() + "]," + + "[\"0\",\"0\",\"0\",\"0\",\"0\",\"1\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"]," + "\"0\",\"0\",\"0\",\"" + + std::to_string( getBirthMonth() ) + + "\",\"" + std::to_string( getBirthDay() ) + + "\",\"" + std::to_string( getGuardianDeity() ) + + "\",\"" + std::to_string( m_class ) + + "\",\"0\",\"" + std::to_string( getZoneId() ) + + "\",\"0\"," + + "[" + getLookString() + "]," + "\"0\",\"0\"," + "[" + getModelString() + "]," + - "\"1\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"0\"]," + + "\"1\",\"0\",\"0\",\"0\",\"0\",\"0\",\"\",\"0\",\"0\"]," + "\"classname\":\"ClientSelectData\",\"classid\":116}"; return charDetails; } diff --git a/src/servers/sapphire_lobby/GameConnection.cpp b/src/servers/sapphire_lobby/GameConnection.cpp index c0ce4895..12c40d78 100644 --- a/src/servers/sapphire_lobby/GameConnection.cpp +++ b/src/servers/sapphire_lobby/GameConnection.cpp @@ -475,8 +475,8 @@ void Core::Network::GameConnection::generateEncryptionKey( uint32_t key, const s m_baseKey[2] = 0x34; m_baseKey[3] = 0x12; memcpy( m_baseKey + 0x04, &key, 4 ); - m_baseKey[8] = 0xA0; - m_baseKey[9] = 0x0F; + m_baseKey[8] = 0xCC; + m_baseKey[9] = 0x10; memcpy( ( char* )m_baseKey + 0x0C, keyPhrase.c_str(), keyPhrase.size() ); Core::Util::md5( m_baseKey, m_encKey, 0x2C ); } diff --git a/src/servers/sapphire_zone/Action/ActionCollision.cpp b/src/servers/sapphire_zone/Action/ActionCollision.cpp index c81ceb36..90a18e43 100644 --- a/src/servers/sapphire_zone/Action/ActionCollision.cpp +++ b/src/servers/sapphire_zone/Action/ActionCollision.cpp @@ -9,7 +9,6 @@ #include "Actor/Player.h" #include -#include using namespace Core::Entity; using namespace Core::Common; diff --git a/src/servers/sapphire_zone/Action/ActionCollision.h b/src/servers/sapphire_zone/Action/ActionCollision.h index 7b845b51..89a3a99c 100644 --- a/src/servers/sapphire_zone/Action/ActionCollision.h +++ b/src/servers/sapphire_zone/Action/ActionCollision.h @@ -2,14 +2,14 @@ #define _ACTIONCOLLISION_H #include -#include "Action.h" - +#include "Forwards.h" namespace Core { namespace Data { struct Action; } + namespace Entity { enum class TargetFilter diff --git a/src/servers/sapphire_zone/Action/ActionMount.h b/src/servers/sapphire_zone/Action/ActionMount.h index 3450a2b2..23533c90 100644 --- a/src/servers/sapphire_zone/Action/ActionMount.h +++ b/src/servers/sapphire_zone/Action/ActionMount.h @@ -1,7 +1,7 @@ #ifndef _ACTIONMOUNT_H_ #define _ACTIONMOUNT_H_ -#include "../Forwards.h" +#include "Forwards.h" #include "Action.h" namespace Core { diff --git a/src/servers/sapphire_zone/Action/ActionTeleport.h b/src/servers/sapphire_zone/Action/ActionTeleport.h index fab98d06..4c42fc65 100644 --- a/src/servers/sapphire_zone/Action/ActionTeleport.h +++ b/src/servers/sapphire_zone/Action/ActionTeleport.h @@ -1,7 +1,7 @@ #ifndef _ACTIONTELEPORT_H_ #define _ACTIONTELEPORT_H_ -#include "../Forwards.h" +#include "Forwards.h" #include "Action.h" namespace Core { diff --git a/src/servers/sapphire_zone/Action/EventAction.cpp b/src/servers/sapphire_zone/Action/EventAction.cpp index e0578dce..a21400f0 100644 --- a/src/servers/sapphire_zone/Action/EventAction.cpp +++ b/src/servers/sapphire_zone/Action/EventAction.cpp @@ -6,7 +6,6 @@ #include "Network/PacketWrappers/ActorControlPacket143.h" #include "Actor/Player.h" -#include "Event/EventHandler.h" #include "EventAction.h" #include "Framework.h" diff --git a/src/servers/sapphire_zone/Action/EventAction.h b/src/servers/sapphire_zone/Action/EventAction.h index 642513a2..346f0256 100644 --- a/src/servers/sapphire_zone/Action/EventAction.h +++ b/src/servers/sapphire_zone/Action/EventAction.h @@ -3,7 +3,7 @@ #include -#include "../Forwards.h" +#include "Forwards.h" #include "Action.h" namespace Core { diff --git a/src/servers/sapphire_zone/Action/EventItemAction.h b/src/servers/sapphire_zone/Action/EventItemAction.h index 6c69e1aa..69832263 100644 --- a/src/servers/sapphire_zone/Action/EventItemAction.h +++ b/src/servers/sapphire_zone/Action/EventItemAction.h @@ -1,7 +1,7 @@ #ifndef _EVENTITEMACTION_H_ #define _EVENTITEMACTION_H_ -#include "../Forwards.h" +#include "Forwards.h" #include "Action.h" namespace Core { diff --git a/src/servers/sapphire_zone/Actor/Actor.cpp b/src/servers/sapphire_zone/Actor/Actor.cpp index 0de580e6..dcbb812f 100644 --- a/src/servers/sapphire_zone/Actor/Actor.cpp +++ b/src/servers/sapphire_zone/Actor/Actor.cpp @@ -1,11 +1,10 @@ #include "Actor.h" #include -#include + #include #include -#include "Forwards.h" #include "Action/Action.h" #include "Action/ActionCollision.h" @@ -19,8 +18,6 @@ #include "ServerZone.h" #include "Session.h" -#include "Zone/Zone.h" - #include "Zone/TerritoryMgr.h" @@ -28,11 +25,6 @@ #include "Math/CalcBattle.h" -#include "ServerZone.h" -#include "Session.h" -#include "Actor.h" -#include "Player.h" - #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Actor/Chara.cpp b/src/servers/sapphire_zone/Actor/Chara.cpp index d905c341..841e75fa 100644 --- a/src/servers/sapphire_zone/Actor/Chara.cpp +++ b/src/servers/sapphire_zone/Actor/Chara.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "Forwards.h" #include "Action/Action.h" diff --git a/src/servers/sapphire_zone/Actor/EventObject.cpp b/src/servers/sapphire_zone/Actor/EventObject.cpp index 64e59688..79244193 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.cpp +++ b/src/servers/sapphire_zone/Actor/EventObject.cpp @@ -6,9 +6,7 @@ #include #include #include -#include #include -#include #include using namespace Core::Common; diff --git a/src/servers/sapphire_zone/Actor/EventObject.h b/src/servers/sapphire_zone/Actor/EventObject.h index 363d5077..937ac0f3 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.h +++ b/src/servers/sapphire_zone/Actor/EventObject.h @@ -10,10 +10,11 @@ namespace Entity class EventObject : public Actor { public: - EventObject( uint32_t actorId, uint32_t objectId, uint32_t gimmickId, uint8_t initialState, Common::FFXIVARR_POSITION3 pos, - float rotation, const std::string& givenName = "none" ); + EventObject( uint32_t actorId, uint32_t objectId, uint32_t gimmickId, uint8_t initialState, + Common::FFXIVARR_POSITION3 pos, float rotation, const std::string& givenName = "none" ); - using OnTalkEventHandler = std::function< void( Entity::Player&, Entity::EventObjectPtr, InstanceContentPtr, uint64_t ) >; + using OnTalkEventHandler = std::function< void( Entity::Player&, Entity::EventObjectPtr, + InstanceContentPtr, uint64_t ) >; uint32_t getGimmickId() const; void setGimmickId( uint32_t gimmickId ); diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index b9d62560..dbc28283 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -30,11 +30,6 @@ #include "Script/ScriptMgr.h" -#include "Inventory/Item.h" -#include "Inventory/Inventory.h" - -#include "Event/EventHandler.h" - #include "Action/Action.h" #include "Action/ActionTeleport.h" #include "Action/EventAction.h" @@ -317,7 +312,7 @@ void Core::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type ) } setStateFlag( PlayerStateFlag::BetweenAreas ); - auto targetPos = pTeriMgr->getTerritoryPosition( data->levelId ); + auto targetPos = pTeriMgr->getTerritoryPosition( data->level.at( 0 ) ); Common::FFXIVARR_POSITION3 pos; pos.x = 0; diff --git a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp index 80e3dbda..ec05b996 100644 --- a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp @@ -16,12 +16,7 @@ #include "Action/EventAction.h" #include "Action/EventItemAction.h" -#include "Event/EventHandler.h" - #include "Zone/Zone.h" - -#include "Player.h" -#include "Forwards.h" #include "ServerZone.h" #include "Framework.h" diff --git a/src/servers/sapphire_zone/Actor/PlayerQuest.cpp b/src/servers/sapphire_zone/Actor/PlayerQuest.cpp index ebd89a1e..952d0bf8 100644 --- a/src/servers/sapphire_zone/Actor/PlayerQuest.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerQuest.cpp @@ -8,8 +8,6 @@ #include "Network/PacketWrappers/QuestMessagePacket.h" #include "Session.h" -#include "Inventory/Inventory.h" -#include "Player.h" #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Actor/PlayerSql.cpp b/src/servers/sapphire_zone/Actor/PlayerSql.cpp index 2cb73926..7ced3f9a 100644 --- a/src/servers/sapphire_zone/Actor/PlayerSql.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerSql.cpp @@ -1,6 +1,4 @@ #include -#include -#include #include #include @@ -19,11 +17,7 @@ #include "Zone/TerritoryMgr.h" #include "Zone/Zone.h" -#include "Inventory/Inventory.h" - -#include "Player.h" #include "ServerZone.h" -#include "Forwards.h" #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp index 71d8d8fe..10a83b85 100644 --- a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -25,7 +24,6 @@ #include "Script/ScriptMgr.h" #include "Script/NativeScriptMgr.h" -#include "Actor/Player.h" #include "Actor/EventObject.h" #include "Zone/Zone.h" @@ -34,7 +32,6 @@ #include "ServerZone.h" -#include "StatusEffect/StatusEffect.h" #include "Session.h" #include "Framework.h" diff --git a/src/servers/sapphire_zone/Event/EventDefs.h b/src/servers/sapphire_zone/Event/EventDefs.h index b7c4afba..7f1a008f 100644 --- a/src/servers/sapphire_zone/Event/EventDefs.h +++ b/src/servers/sapphire_zone/Event/EventDefs.h @@ -69,12 +69,6 @@ namespace Core EVENT_TABLE_GAME = 24 }; - enum EventFinishState - { - UNLOCK = 1, - KEEPLOCK = 0 - }; - enum DamageType { STD_DAMAGE = 0X03, diff --git a/src/servers/sapphire_zone/Event/EventHandler.h b/src/servers/sapphire_zone/Event/EventHandler.h index acdaf592..87a29c8d 100644 --- a/src/servers/sapphire_zone/Event/EventHandler.h +++ b/src/servers/sapphire_zone/Event/EventHandler.h @@ -1,7 +1,7 @@ #ifndef _EVENT_H #define _EVENT_H -#include "../Forwards.h" +#include "Forwards.h" namespace Core { namespace Event { diff --git a/src/servers/sapphire_zone/Event/EventHelper.cpp b/src/servers/sapphire_zone/Event/EventHelper.cpp index 4a389965..1b4c34b6 100644 --- a/src/servers/sapphire_zone/Event/EventHelper.cpp +++ b/src/servers/sapphire_zone/Event/EventHelper.cpp @@ -1,10 +1,12 @@ #include #include +#include +#include + #include "Framework.h" #include "EventHelper.h" #include "EventHandler.h" -#include -#include + extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Inventory/Inventory.cpp b/src/servers/sapphire_zone/Inventory/Inventory.cpp index b601dd81..2d475021 100644 --- a/src/servers/sapphire_zone/Inventory/Inventory.cpp +++ b/src/servers/sapphire_zone/Inventory/Inventory.cpp @@ -2,7 +2,7 @@ #include #include -#include + #include #include #include @@ -12,8 +12,6 @@ #include "Network/PacketWrappers/ServerNoticePacket.h" #include "Network/PacketWrappers/ActorControlPacket143.h" -#include "Forwards.h" -#include "Inventory.h" #include "ItemContainer.h" #include "Item.h" #include "Framework.h" diff --git a/src/servers/sapphire_zone/Inventory/Inventory.h b/src/servers/sapphire_zone/Inventory/Inventory.h index dacfa514..997e840c 100644 --- a/src/servers/sapphire_zone/Inventory/Inventory.h +++ b/src/servers/sapphire_zone/Inventory/Inventory.h @@ -2,7 +2,7 @@ #define INVENTORY_H_ #include #include -#include "../Forwards.h" +#include "Forwards.h" namespace Core { diff --git a/src/servers/sapphire_zone/Inventory/ItemContainer.h b/src/servers/sapphire_zone/Inventory/ItemContainer.h index 1d7147d5..223dd7ae 100644 --- a/src/servers/sapphire_zone/Inventory/ItemContainer.h +++ b/src/servers/sapphire_zone/Inventory/ItemContainer.h @@ -5,7 +5,7 @@ #include -#include "../Forwards.h" +#include "Forwards.h" namespace Core { diff --git a/src/servers/sapphire_zone/Network/GameConnection.cpp b/src/servers/sapphire_zone/Network/GameConnection.cpp index 31fc5062..e885a994 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.cpp +++ b/src/servers/sapphire_zone/Network/GameConnection.cpp @@ -4,8 +4,11 @@ #include #include #include + +#include #include #include +#include #include "Zone/Zone.h" @@ -13,8 +16,6 @@ #include "DebugCommand/DebugCommandHandler.h" -#include "Actor/Player.h" - #include "GameConnection.h" #include "ServerZone.h" #include "Session.h" diff --git a/src/servers/sapphire_zone/Network/GameConnection.h b/src/servers/sapphire_zone/Network/GameConnection.h index e8a8af37..07e17bc3 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.h +++ b/src/servers/sapphire_zone/Network/GameConnection.h @@ -2,9 +2,9 @@ #define GAMECONNECTION_H #include -#include + #include -#include +//#include #include #include "Forwards.h" @@ -13,7 +13,9 @@ namespace Core { namespace Network { - +namespace Packets { + class GamePacket; +} enum ConnectionType : uint8_t { Zone = 1, diff --git a/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp index 6c37a645..50c81fb0 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp @@ -25,10 +25,6 @@ #include "DebugCommand/DebugCommandHandler.h" -#include "Actor/Player.h" - -#include "Inventory/Inventory.h" - #include "Event/EventHelper.h" #include "Action/Action.h" diff --git a/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp index 5e0b1bdf..683a966f 100644 --- a/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp @@ -15,9 +15,6 @@ #include "Network/PacketWrappers/ActorControlPacket144.h" #include "Network/PacketWrappers/PlayerStateFlagsPacket.h" -#include "Actor/Player.h" - -#include "Forwards.h" #include "Framework.h" #include "Session.h" diff --git a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp index f8a4763c..1e6913bb 100644 --- a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp @@ -19,14 +19,12 @@ #include "Script/ScriptMgr.h" -#include "Actor/Player.h" - #include "Event/EventHelper.h" #include "Zone/InstanceContent.h" #include "Session.h" -#include "Forwards.h" + #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp index 7f1d99d0..35808521 100644 --- a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp @@ -7,7 +7,6 @@ #include #include -#include #include "Network/GameConnection.h" @@ -16,9 +15,7 @@ #include "Zone/TerritoryMgr.h" #include "Zone/Zone.h" #include "Zone/InstanceContent.h" -#include "Zone/ZonePosition.h" -#include "Network/GameConnection.h" #include "Network/PacketWrappers/InitUIPacket.h" #include "Network/PacketWrappers/PingPacket.h" #include "Network/PacketWrappers/MoveActorPacket.h" @@ -31,20 +28,7 @@ #include "Network/PacketWrappers/EventFinishPacket.h" #include "Network/PacketWrappers/PlayerStateFlagsPacket.h" -#include "DebugCommand/DebugCommandHandler.h" - -#include "Actor/Player.h" - -#include "Inventory/Inventory.h" - -#include "Event/EventHelper.h" - -#include "Action/Action.h" -#include "Action/ActionTeleport.h" - -#include "Session.h" #include "ServerZone.h" -#include "Forwards.h" #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Network/Handlers/InventoryHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/InventoryHandler.cpp index 00b57c72..63c09215 100644 --- a/src/servers/sapphire_zone/Network/Handlers/InventoryHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/InventoryHandler.cpp @@ -17,11 +17,10 @@ #include "DebugCommand/DebugCommandHandler.h" #include "Actor/Player.h" -#include "Inventory/Inventory.h" #include "Session.h" #include "ServerZone.h" -#include "Forwards.h" + #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 1e23fd3a..a0b55b65 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -7,10 +7,7 @@ #include #include #include -#include -#include -#include #include #include "Network/GameConnection.h" @@ -32,10 +29,6 @@ #include "DebugCommand/DebugCommandHandler.h" -#include "Actor/Player.h" - -#include "Inventory/Inventory.h" - #include "Event/EventHelper.h" #include "Action/Action.h" @@ -55,9 +48,10 @@ using namespace Core::Network::Packets::Server; void Core::Network::GameConnection::fcInfoReqHandler( const Packets::GamePacket& inPacket, Entity::Player& player ) { - GamePacketPtr pPe( new GamePacket( 0xDD, 0x78, player.getId(), player.getId() ) ); - pPe->setValAt< uint8_t >( 0x48, 0x01 ); - queueOutPacket( pPe ); + // TODO: use new packet struct for this + //GamePacketPtr pPe( new GamePacket( 0xDD, 0x78, player.getId(), player.getId() ) ); + //pPe->setValAt< uint8_t >( 0x48, 0x01 ); + //queueOutPacket( pPe ); } void Core::Network::GameConnection::setSearchInfoHandler( const Packets::GamePacket& inPacket, diff --git a/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp index f3ed84d3..aa068d79 100644 --- a/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp @@ -18,8 +18,6 @@ #include "DebugCommand/DebugCommandHandler.h" -#include "Actor/Player.h" - #include "Action/Action.h" #include "Action/ActionCast.h" #include "Action/ActionMount.h" @@ -27,7 +25,6 @@ #include "Script/ScriptMgr.h" #include "Session.h" -#include "Forwards.h" #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Network/PacketWrappers/InitUIPacket.h b/src/servers/sapphire_zone/Network/PacketWrappers/InitUIPacket.h index 9017fee9..14ac8bf2 100644 --- a/src/servers/sapphire_zone/Network/PacketWrappers/InitUIPacket.h +++ b/src/servers/sapphire_zone/Network/PacketWrappers/InitUIPacket.h @@ -38,7 +38,7 @@ private: m_data.gender = player.getLookAt( Common::CharaLook::Gender ); m_data.currentClass = static_cast< uint8_t >( player.getClass() ); m_data.currentJob = static_cast< uint8_t >( player.getClass() ); - m_data.currentLevel = player.getLevel(); + m_data.maxLevel = player.getLevel(); m_data.deity = static_cast< uint8_t >( player.getGuardianDeity() ); m_data.namedayMonth = player.getBirthMonth(); m_data.namedayDay = player.getBirthDay(); @@ -77,7 +77,7 @@ private: // df stuff // todo: actually do this properly - m_data.unknown70[4] = 1; // enable df +// m_data.unknown70[4] = 1; // enable df // enable all raids/guildhests/dungeons memset( m_data.unlockedDungeons, 0xFF, sizeof( m_data.unlockedDungeons ) ); diff --git a/src/servers/sapphire_zone/ServerZone.cpp b/src/servers/sapphire_zone/ServerZone.cpp index 46f635ef..d1880965 100644 --- a/src/servers/sapphire_zone/ServerZone.cpp +++ b/src/servers/sapphire_zone/ServerZone.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include @@ -26,15 +25,12 @@ #include "Zone/TerritoryMgr.h" -#include "DebugCommand/DebugCommandHandler.h" - #include "Script/ScriptMgr.h" #include "Linkshell/LinkshellMgr.h" #include "Forwards.h" -#include + #include -#include #include #include "Framework.h" @@ -206,7 +202,7 @@ void Core::ServerZone::run( int32_t argc, char* argv[] ) void Core::ServerZone::printBanner() const { - auto pLog = g_fw.get< Core::Logger>(); + auto pLog = g_fw.get< Core::Logger >(); pLog->info("===========================================================" ); pLog->info( "Sapphire Server Project " ); @@ -335,15 +331,6 @@ void Core::ServerZone::removeSession( uint32_t sessionId ) m_sessionMapById.erase( sessionId ); } -void Core::ServerZone::updateSession( uint32_t id ) -{ - std::lock_guard< std::mutex > lock( m_sessionMutex ); - auto it = m_sessionMapById.find( id ); - - if( it != m_sessionMapById.end() ) - it->second->loadPlayer(); -} - Core::SessionPtr Core::ServerZone::getSession( uint32_t id ) { //std::lock_guard lock( m_sessionMutex ); @@ -373,14 +360,6 @@ void Core::ServerZone::removeSession( std::string playerName ) m_sessionMapByName.erase( playerName ); } -void Core::ServerZone::updateSession( std::string playerName ) -{ - std::lock_guard< std::mutex > lock( m_sessionMutex ); - auto it = m_sessionMapByName.find( playerName ); - - if( it != m_sessionMapByName.end() ) - it->second->loadPlayer(); -} bool Core::ServerZone::isRunning() const { diff --git a/src/servers/sapphire_zone/ServerZone.h b/src/servers/sapphire_zone/ServerZone.h index 4c728f9c..09230846 100644 --- a/src/servers/sapphire_zone/ServerZone.h +++ b/src/servers/sapphire_zone/ServerZone.h @@ -27,8 +27,6 @@ namespace Core { SessionPtr getSession( uint32_t id ); SessionPtr getSession( std::string playerName ); - void updateSession( uint32_t id ); - void updateSession( std::string playerName ); size_t getSessionCount() const; @@ -38,7 +36,6 @@ namespace Core { void printBanner() const; - private: uint16_t m_port; diff --git a/src/tools/exd_struct_gen/ex.json b/src/tools/exd_struct_gen/ex.json index eabdf8ec..8dd7ef24 100644 --- a/src/tools/exd_struct_gen/ex.json +++ b/src/tools/exd_struct_gen/ex.json @@ -1,5 +1,5 @@ { - "version": "2018.01.25.0000.0000", + "version": "2018.05.16.0000.0000", "sheets": [ { "sheet": "Achievement", @@ -113,9 +113,25 @@ "target": "ActionCategory" } }, + { + "index": 5, + "name": "Animation{Start}", + "converter": { + "type": "link", + "target": "ActionCastTimeline" + } + }, + { + "index": 6, + "name": "VFX", + "converter": { + "type": "link", + "target": "ActionCastVFX" + } + }, { "index": 7, - "name": "ActionTimeline{Use}", + "name": "Animation{End}", "converter": { "type": "link", "target": "ActionTimeline" @@ -278,6 +294,40 @@ } ] }, + { + "sheet": "ActionCastTimeline", + "defaultColumn": "Name", + "definitions": [ + { + "name": "Name", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 1, + "name": "VFX", + "converter": { + "type": "link", + "target": "VFX" + } + } + ] + }, + { + "sheet": "ActionCastVFX", + "defaultColumn": "VFX", + "definitions": [ + { + "name": "VFX", + "converter": { + "type": "link", + "target": "VFX" + } + } + ] + }, { "sheet": "ActionCategory", "defaultColumn": "Name", @@ -321,6 +371,15 @@ } ] }, + { + "sheet": "ActionParam", + "defaultColumn": "Name", + "definitions": [ + { + "name": "Name" + } + ] + }, { "sheet": "ActionProcStatus", "defaultColumn": "Status", @@ -344,6 +403,26 @@ } ] }, + { + "sheet": "ActionTimelineReplace", + "definitions": [ + { + "name": "Old", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 1, + "name": "New", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + } + ] + }, { "sheet": "ActionTransient", "defaultColumn": "Description", @@ -476,6 +555,30 @@ } ] }, + { + "sheet": "AetherCurrentCompFlgSet", + "definitions": [ + { + "name": "Territory", + "converter": { + "type": "link", + "target": "TerritoryType" + } + }, + { + "index": 2, + "type": "repeat", + "count": 15, + "definition": { + "name": "AetherCurrent", + "converter": { + "type": "link", + "target": "AetherCurrent" + } + } + } + ] + }, { "sheet": "AetherialWheel", "definitions": [ @@ -532,6 +635,18 @@ "target": "TerritoryType" } }, + { + "index": 11, + "type": "repeat", + "count": 4, + "definition": { + "name": "Level", + "converter": { + "type": "link", + "target": "Level" + } + } + }, { "index": 15, "name": "IsAetheryte" @@ -929,6 +1044,82 @@ { "index": 2, "name": "Description" + }, + { + "index": 4, + "name": "1HWpn%" + }, + { + "index": 5, + "name": "OH<%>" + }, + { + "index": 6, + "name": "Head<%>" + }, + { + "index": 7, + "name": "Chest<%>" + }, + { + "index": 8, + "name": "Hands<%>" + }, + { + "index": 9, + "name": "Waist<%>" + }, + { + "index": 10, + "name": "Legs<%>" + }, + { + "index": 11, + "name": "Feet<%>" + }, + { + "index": 12, + "name": "Earring<%>" + }, + { + "index": 13, + "name": "Necklace<%>" + }, + { + "index": 14, + "name": "Bracelet<%>" + }, + { + "index": 15, + "name": "Ring<%>" + }, + { + "index": 16, + "name": "2HWpn<%>" + }, + { + "index": 18, + "name": "ChestHead<%>" + }, + { + "index": 19, + "name": "ChestHeadLegsFeet<%>" + }, + { + "index": 21, + "name": "LegsFeet<%>" + }, + { + "index": 22, + "name": "HeadChestHandsLegsFeet<%>" + }, + { + "index": 23, + "name": "ChestLegsGloves<%>" + }, + { + "index": 24, + "name": "ChestLegsFeet<%>" } ] }, @@ -1066,7 +1257,11 @@ }, { "index": 7, - "name": "Expansion" + "name": "Expansion", + "converter": { + "type": "link", + "target": "ExVersion" + } }, { "index": 8, @@ -1294,6 +1489,43 @@ } ] }, + { + "sheet": "Buddy", + "definitions": [ + { + "index": 1, + "name": "QuestRequirement{2}", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 2, + "name": "QuestRequirement{1}", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 4, + "name": "SoundEffect{4}" + }, + { + "index": 5, + "name": "SoundEffect{3}" + }, + { + "index": 6, + "name": "SoundEffect{2}" + }, + { + "index": 7, + "name": "SoundEffect{1}" + } + ] + }, { "sheet": "BuddyAction", "defaultColumn": "Name", @@ -1404,6 +1636,43 @@ "definitions": [ { "name": "BuddyLevel" + }, + { + "index": 1, + "name": "IsActive" + }, + { + "index": 2, + "name": "Defender", + "converter": { + "type": "multiref", + "targets": [ + "Trait", + "Action" + ] + } + }, + { + "index": 3, + "name": "Attacker", + "converter": { + "type": "multiref", + "targets": [ + "Trait", + "Action" + ] + } + }, + { + "index": 4, + "name": "Healer", + "converter": { + "type": "multiref", + "targets": [ + "Trait", + "Action" + ] + } } ] }, @@ -1434,7 +1703,7 @@ }, { "sheet": "CabinetCategory", - "defaultColumn": "Name", + "defaultColumn": "Category", "definitions": [ { "name": "MenuOrder" @@ -1489,6 +1758,10 @@ { "index": 2, "name": "Data" + }, + { + "index": 3, + "name": "IsPurchasable" } ] }, @@ -1515,7 +1788,7 @@ "name": "Gender" }, { - "index": 2283, + "index": 3291, "type": "repeat", "count": 42, "definition": { @@ -1581,6 +1854,7 @@ }, { "sheet": "ChocoboRaceAbilityType", + "defaultColumn": "IsActive", "definitions": [ { "name": "IsActive" @@ -1672,8 +1946,21 @@ } ] }, + { + "sheet": "ChocoboTaxi", + "definitions": [ + { + "name": "Location", + "converter": { + "type": "link", + "target": "ChocoboTaxiStand" + } + } + ] + }, { "sheet": "ChocoboTaxiStand", + "defaultColumn": "PlaceName", "isGenericReferenceTarget": true, "definitions": [ { @@ -1789,6 +2076,30 @@ "target": "Item" } }, + { + "index": 38, + "name": "UnlockQuest", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 39, + "name": "RelicQuest", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 40, + "name": "Prerequisite", + "converter": { + "type": "link", + "target": "Quest" + } + }, { "index": 41, "name": "StartingLevel" @@ -1937,6 +2248,14 @@ { "index": 34, "name": "AST" + }, + { + "index": 35, + "name": "SAM" + }, + { + "index": 36, + "name": "RDM" } ] }, @@ -2367,11 +2686,7 @@ "sheet": "ContentFinderCondition", "definitions": [ { - "index": 1, - "name": "ContentIndicator" - }, - { - "index": 2, + "index": 3, "name": "InstanceContent", "converter": { "type": "link", @@ -2379,7 +2694,7 @@ } }, { - "index": 7, + "index": 9, "name": "ContentMemberType", "converter": { "type": "link", @@ -2387,23 +2702,35 @@ } }, { - "index": 13, + "index": 15, "name": "ClassJobLevel{Required}" }, { - "index": 14, + "index": 16, "name": "ClassJobLevel{Sync}" }, { - "index": 15, + "index": 17, "name": "ItemLevel{Required}" }, { - "index": 16, + "index": 18, "name": "ItemLevel{Sync}" }, { - "index": 36, + "index": 24, + "name": "ContentIndicator" + }, + { + "index": 33, + "name": "ContentType", + "converter": { + "type": "link", + "target": "ContentType" + } + }, + { + "index": 37, "name": "Icon", "converter": { "type": "icon" @@ -2441,6 +2768,23 @@ } ] }, + { + "sheet": "ContentNpcTalk", + "definitions": [ + { + "index": 1, + "type": "repeat", + "count": 8, + "definition": { + "name": "ContentTalk", + "converter": { + "type": "link", + "target": "ContentTalk" + } + } + } + ] + }, { "sheet": "ContentRoulette", "defaultColumn": "Name", @@ -2461,34 +2805,34 @@ "name": "IsInDutyFinder" }, { - "index": 10, + "index": 11, "name": "ItemLevel{Required}" }, { - "index": 12, + "index": 13, "name": "Icon", "converter": { "type": "icon" } }, { - "index": 14, + "index": 15, "name": "Reward{TomeA}" }, { - "index": 15, + "index": 16, "name": "Reward{TomeB}" }, { - "index": 16, + "index": 17, "name": "Reward{TomeC}" }, { - "index": 19, + "index": 20, "name": "SortKey" }, { - "index": 21, + "index": 22, "name": "ContentMemberType", "converter": { "type": "link", @@ -2496,11 +2840,74 @@ } }, { - "index": 31, + "index": 32, "name": "RequireAllDuties" } ] }, + { + "sheet": "ContentsNote", + "definitions": [ + { + "name": "ContentType", + "converter": { + "type": "link", + "target": "ContentsNoteCategory" + } + }, + { + "index": 2, + "name": "RequiredAmount" + } + ] + }, + { + "sheet": "ContentsNoteCategory", + "defaultColumn": "Type", + "definitions": [ + { + "index": 1, + "name": "Type", + "converter": { + "type": "link", + "target": "ContentType" + } + } + ] + }, + { + "sheet": "ContentTalk", + "defaultColumn": "Text", + "definitions": [ + { + "name": "ContentTalkParam", + "converter": { + "type": "link", + "target": "ContentTalkParam" + } + }, + { + "index": 1, + "name": "Text" + } + ] + }, + { + "sheet": "ContentTalkParam", + "definitions": [ + { + "name": "Param" + }, + { + "index": 2, + "name": "TestAction", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + } + ] + }, { "sheet": "ContentType", "defaultColumn": "Name", @@ -2535,6 +2942,22 @@ "index": 1, "name": "Description" }, + { + "index": 2, + "name": "Animation{Start}", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 3, + "name": "Animation{End}", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, { "index": 4, "name": "Icon", @@ -2676,9 +3099,6 @@ }, { "name": "ItemCount" - }, - { - "name": "HQ" } ] } @@ -3516,6 +3936,15 @@ } ] }, + { + "sheet": "EObjName", + "defaultColumn": "Singular", + "definitions": [ + { + "name": "Singular" + } + ] + }, { "sheet": "EquipRaceCategory", "definitions": [ @@ -3612,6 +4041,37 @@ } ] }, + { + "sheet": "EurekaAethernet", + "defaultColumn": "Location", + "definitions": [ + { + "name": "Location", + "converter": { + "type": "link", + "target": "PlaceName" + } + } + ] + }, + { + "sheet": "EurekaGrowData", + "defaultColumn": "BaseElementalPower", + "definitions": [ + { + "name": "BaseResistance" + } + ] + }, + { + "sheet": "EurekaSphereElementAdjust", + "defaultColumn": "PowerModifier", + "definitions": [ + { + "name": "PowerModifier" + } + ] + }, { "sheet": "EventAction", "defaultColumn": "Name", @@ -3749,6 +4209,13 @@ "sheet": "Fate", "defaultColumn": "Name", "definitions": [ + { + "name": "EurekaFate" + }, + { + "index": 2, + "name": "Location" + }, { "index": 3, "name": "ClassJobLevel" @@ -3779,6 +4246,14 @@ "type": "icon" } }, + { + "index": 13, + "name": "Music", + "converter": { + "type": "link", + "target": "BGM" + } + }, { "index": 27, "name": "Name" @@ -3798,6 +4273,14 @@ "definition": { "name": "StatusText" } + }, + { + "index": 33, + "name": "ArrayIndex", + "converter": { + "type": "link", + "target": "ArrayEventHandler" + } } ] }, @@ -3984,6 +4467,26 @@ } ] }, + { + "sheet": "FieldMarker", + "defaultColumn": "Icon", + "definitions": [ + { + "name": "VFX", + "converter": { + "type": "link", + "target": "VFX" + } + }, + { + "index": 1, + "name": "Icon", + "converter": { + "type": "icon" + } + } + ] + }, { "sheet": "FishingSpot", "defaultColumn": "PlaceName", @@ -4848,6 +5351,14 @@ "index": 1, "name": "Description" }, + { + "index": 3, + "name": "Action", + "converter": { + "type": "link", + "target": "Action" + } + }, { "index": 7, "name": "Icon", @@ -4879,9 +5390,9 @@ } }, { + "index": 3, "type": "repeat", "count": 3, - "index": 3, "definition": { "name": "Row{Required}", "converter": { @@ -5079,11 +5590,11 @@ } }, { - "index": 5, + "index": 6, "name": "Event" }, { - "index": 6, + "index": 7, "name": "Item", "converter": { "type": "link", @@ -5091,7 +5602,7 @@ } }, { - "index": 7, + "index": 8, "name": "DestroyOnRemoval" } ] @@ -5202,11 +5713,19 @@ }, { "index": 16, - "name": "InstanceContentTextData{Objective}{Start}" + "name": "InstanceContentTextData{Objective}{Start}", + "converter": { + "type": "link", + "target": "InstanceContentTextData" + } }, { "index": 17, - "name": "InstanceContentTextData{Objective}{End}" + "name": "InstanceContentTextData{Objective}{End}", + "converter": { + "type": "link", + "target": "InstanceContentTextData" + } }, { "index": 18, @@ -5306,23 +5825,6 @@ } ] }, - { - "sheet": "InstanceContentType", - "definitions": [ - { - "index": 2, - "name": "SortKey" - }, - { - "index": 4, - "name": "ContentType", - "converter": { - "type": "link", - "target": "ContentType" - } - } - ] - }, { "sheet": "Item", "defaultColumn": "Name", @@ -6007,7 +6509,6 @@ }, { "sheet": "Level", - "defaultColumn": "Map", "definitions": [ { "name": "X" @@ -6365,6 +6866,14 @@ "index": 4, "name": "SubtextOrientation" }, + { + "index": 5, + "name": "MapMarkerRegion", + "converter": { + "type": "link", + "target": "MapMarkerRegion" + } + }, { "index": 6, "name": "Type" @@ -6379,6 +6888,15 @@ } ] }, + { + "sheet": "MapMarkerRegion", + "defaultColumn": "X", + "definitions": [ + { + "name": "X" + } + ] + }, { "sheet": "MapSymbol", "definitions": [ @@ -6398,6 +6916,21 @@ } ] }, + { + "sheet": "Marker", + "definitions": [ + { + "name": "Icon", + "converter": { + "type": "icon" + } + }, + { + "index": 1, + "name": "Name" + } + ] + }, { "sheet": "MasterpieceSupplyDuty", "definitions": [ @@ -6753,6 +7286,112 @@ } ] }, + { + "sheet": "MoveTimeline", + "defaultColumn": "Idle", + "definitions": [ + { + "name": "Idle", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 1, + "name": "MoveForward", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 2, + "name": "MoveBack", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 3, + "name": "MoveLeft", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 4, + "name": "MoveRight", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 5, + "name": "MoveUp", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 6, + "name": "MoveDown", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 7, + "name": "MoveTurnLeft", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 8, + "name": "MoveTurnRight", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 9, + "name": "Extra", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + } + ] + }, + { + "sheet": "MoveVfx", + "defaultColumn": "0", + "definitions": [ + { + "name": "0", + "converter": { + "type": "link", + "target": "VFX" + } + }, + { + "index": 1, + "name": "1", + "converter": { + "type": "link", + "target": "VFX" + } + } + ] + }, { "sheet": "NpcEquip", "definitions": [ @@ -7025,6 +7664,88 @@ } ] }, + { + "sheet": "Perform", + "defaultColumn": "Name", + "definitions": [ + { + "name": "Name" + }, + { + "index": 2, + "name": "ModelKey" + }, + { + "index": 3, + "name": "Animation{Start}", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 4, + "name": "Animation{End}", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 5, + "name": "Animation{Idle}", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 6, + "name": "Animation{Play01}", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 7, + "name": "Animation{Play02}", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 8, + "name": "StopAnimation", + "converter": { + "type": "link", + "target": "ActionTimeline" + } + }, + { + "index": 9, + "name": "Instrument" + }, + { + "index": 11, + "name": "Transient", + "converter": { + "type": "link", + "target": "PerformTransient" + } + } + ] + }, + { + "sheet": "PerformTransient", + "defaultColumn": "Text", + "definitions": [ + { + "name": "Text" + } + ] + }, { "sheet": "Pet", "defaultColumn": "Name", @@ -7100,6 +7821,52 @@ } ] }, + { + "sheet": "PublicContent", + "defaultColumn": "Name", + "definitions": [ + { + "index": 1, + "name": "TimeLimit" + }, + { + "index": 2, + "name": "MapIcon", + "converter": { + "type": "icon" + } + }, + { + "index": 3, + "name": "Name" + }, + { + "index": 7, + "name": "TerritoryType", + "converter": { + "type": "link", + "target": "TerritoryType" + } + } + ] + }, + { + "sheet": "PvPActionSort", + "defaultColumn": "Name", + "definitions": [ + { + "name": "Name" + }, + { + "index": 1, + "name": "Action", + "converter": { + "type": "link", + "target": "Action" + } + } + ] + }, { "sheet": "Quest", "defaultColumn": "Name", @@ -7293,7 +8060,7 @@ "name": "RepeatIntervalType" }, { - "index": 49, + "index": 50, "type": "repeat", "count": 50, "definition": { @@ -7301,7 +8068,7 @@ } }, { - "index": 99, + "index": 100, "type": "repeat", "count": 50, "definition": { @@ -7309,7 +8076,7 @@ } }, { - "index": 1221, + "index": 1222, "type": "repeat", "count": 171, "definition": { @@ -7321,7 +8088,7 @@ } }, { - "index": 1437, + "index": 1438, "name": "ClassJob{Required}", "converter": { "type": "link", @@ -7329,19 +8096,19 @@ } }, { - "index": 1439, + "index": 1440, "name": "ExpFactor" }, { - "index": 1440, + "index": 1441, "name": "GilReward" }, { - "index": 1442, + "index": 1443, "name": "GCSeals" }, { - "index": 1443, + "index": 1444, "type": "repeat", "count": 3, "definition": { @@ -7353,7 +8120,7 @@ } }, { - "index": 1446, + "index": 1447, "type": "repeat", "count": 3, "definition": { @@ -7361,11 +8128,11 @@ } }, { - "index": 1449, + "index": 1450, "name": "ItemRewardType" }, { - "index": 1450, + "index": 1451, "type": "repeat", "count": 6, "definition": { @@ -7377,7 +8144,7 @@ } }, { - "index": 1457, + "index": 1458, "type": "repeat", "count": 6, "definition": { @@ -7385,7 +8152,7 @@ } }, { - "index": 1464, + "index": 1465, "type": "repeat", "count": 6, "definition": { @@ -7397,7 +8164,7 @@ } }, { - "index": 1471, + "index": 1472, "type": "repeat", "count": 5, "definition": { @@ -7409,7 +8176,7 @@ } }, { - "index": 1476, + "index": 1477, "type": "repeat", "count": 5, "definition": { @@ -7417,7 +8184,7 @@ } }, { - "index": 1481, + "index": 1482, "type": "repeat", "count": 5, "definition": { @@ -7425,7 +8192,7 @@ } }, { - "index": 1486, + "index": 1487, "type": "repeat", "count": 5, "definition": { @@ -7437,7 +8204,7 @@ } }, { - "index": 1491, + "index": 1492, "name": "Emote{Reward}", "converter": { "type": "link", @@ -7445,7 +8212,7 @@ } }, { - "index": 1492, + "index": 1493, "name": "Action{Reward}", "converter": { "type": "link", @@ -7453,7 +8220,7 @@ } }, { - "index": 1493, + "index": 1494, "type": "repeat", "count": 2, "definition": { @@ -7465,7 +8232,7 @@ } }, { - "index": 1496, + "index": 1497, "name": "Other{Reward}", "converter": { "type": "link", @@ -7473,7 +8240,7 @@ } }, { - "index": 1499, + "index": 1500, "name": "InstanceContent{Unlock}", "converter": { "type": "link", @@ -7481,7 +8248,7 @@ } }, { - "index": 1501, + "index": 1502, "name": "Tomestone{Reward}", "converter": { "type": "complexlink", @@ -7495,15 +8262,15 @@ } }, { - "index": 1502, + "index": 1503, "name": "TomestoneCount{Reward}" }, { - "index": 1503, + "index": 1504, "name": "ReputationReward" }, { - "index": 1504, + "index": 1505, "name": "PlaceName", "converter": { "type": "link", @@ -7511,7 +8278,7 @@ } }, { - "index": 1505, + "index": 1506, "name": "JournalGenre", "converter": { "type": "link", @@ -7519,21 +8286,21 @@ } }, { - "index": 1507, + "index": 1508, "name": "Icon", "converter": { "type": "icon" } }, { - "index": 1508, + "index": 1509, "name": "Icon{Special}", "converter": { "type": "icon" } }, { - "index": 1511, + "index": 1512, "name": "EventIconType", "converter": { "type": "link", @@ -7541,11 +8308,77 @@ } }, { - "index": 1513, + "index": 1514, "name": "SortKey" } ] }, + { + "sheet": "QuestClassJobReward", + "defaultColumn": "Name", + "definitions": [ + { + "name": "ClassJobCategory", + "converter": { + "type": "link", + "target": "ClassJobCategory" + } + }, + { + "index": 1, + "type": "repeat", + "count": 4, + "definition": { + "name": "Reward{Item}", + "converter": { + "type": "link", + "target": "Item" + } + } + }, + { + "index": 5, + "type": "repeat", + "count": 4, + "definition": { + "name": "Reward{Amount}" + } + }, + { + "index": 9, + "type": "repeat", + "count": 4, + "definition": { + "name": "Required{Item}", + "converter": { + "type": "link", + "target": "Item" + } + } + }, + { + "index": 13, + "type": "repeat", + "count": 4, + "definition": { + "name": "Required{Amount}" + } + } + ] + }, + { + "sheet": "QuestRepeatFlag", + "defaultColumn": "Quest", + "definitions": [ + { + "name": "Quest", + "converter": { + "type": "link", + "target": "Quest" + } + } + ] + }, { "sheet": "QuestRewardOther", "defaultColumn": "Name", @@ -7561,15 +8394,21 @@ "defaultColumn": "Text", "definitions": [ { - "index": 0, "name": "Name{Action}" }, { "index": 1, - "name": "Icon1", + "name": "Icon", "converter": { - "type": "icon", - "target": "Action" + "type": "icon" + } + }, + { + "index": 2, + "name": "Addon", + "converter": { + "type": "link", + "target": "Addon" } }, { @@ -7587,7 +8426,6 @@ "defaultColumn": "Text{Output}", "definitions": [ { - "index": 0, "name": "Text{Output}" } ] @@ -7845,6 +8683,10 @@ "index": 38, "name": "CanHq" }, + { + "index": 39, + "name": "ExpRewarded" + }, { "index": 40, "name": "Status{Required}", @@ -7887,15 +8729,15 @@ "name": "Stars" }, { - "index": 2, + "index": 3, "name": "Difficulty" }, { - "index": 3, + "index": 4, "name": "Quality" }, { - "index": 4, + "index": 5, "name": "Durability" } ] @@ -7917,6 +8759,19 @@ } ] }, + { + "sheet": "RecommendContents", + "defaultColumn": "Level", + "definitions": [ + { + "name": "Level", + "converter": { + "type": "link", + "target": "Level" + } + } + ] + }, { "sheet": "Relic", "defaultColumn": "Item{Animus}", @@ -8228,6 +9083,18 @@ } ] }, + { + "sheet": "RetainerTaskLvRange", + "definitions": [ + { + "name": "Min" + }, + { + "index": 1, + "name": "Max" + } + ] + }, { "sheet": "RetainerTaskNormal", "defaultColumn": "Item", @@ -8250,6 +9117,25 @@ { "index": 3, "name": "Quantity[2]" + }, + { + "index": 4, + "name": "GatheringLog", + "converter": { + "type": "link", + "target": "GatheringItem" + } + }, + { + "index": 5, + "name": "FishingLog", + "converter": { + "type": "multiref", + "targets": [ + "SpearfishingItem", + "FishParameter" + ] + } } ] }, @@ -8482,6 +9368,102 @@ } ] }, + { + "sheet": "ScenarioTree", + "definitions": [ + { + "name": "Type", + "converter": { + "type": "link", + "target": "ScenarioType" + } + }, + { + "index": 1, + "name": "Image", + "converter": { + "type": "link", + "target": "ScreenImage" + } + } + ] + }, + { + "sheet": "ScenarioTreeTips", + "defaultColumn": "Type", + "definitions": [ + { + "index": 1, + "name": "Tips1", + "converter": { + "type": "link", + "target": "ScenarioTreeTipsQuest" + } + }, + { + "index": 3, + "name": "Tips2", + "converter": { + "type": "link", + "target": "ScenarioTree" + } + } + ] + }, + { + "sheet": "ScenarioTreeTipsClassQuest", + "defaultColumn": "Quest", + "definitions": [ + { + "name": "Quest", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 1, + "name": "RequiredLevel" + }, + { + "index": 2, + "name": "RequiredExpansion", + "converter": { + "type": "link", + "target": "ExVersion" + } + }, + { + "index": 3, + "name": "RequiredQuest", + "converter": { + "type": "link", + "target": "Quest" + } + } + ] + }, + { + "sheet": "ScenarioTreeTipsQuest", + "definitions": [ + { + "name": "Level", + "converter": { + "type": "link", + "target": "level" + } + } + ] + }, + { + "sheet": "ScenarioType", + "defaultColumn": "Type", + "definitions": [ + { + "name": "Type" + } + ] + }, { "sheet": "ScreenImage", "definitions": [ @@ -8507,6 +9489,117 @@ } ] }, + { + "sheet": "SkyIsland2Mission", + "defaultColumn": "Item{1}", + "definitions": [ + { + "name": "Item{1}", + "converter": { + "type": "link", + "target": "EventItem" + } + }, + { + "index": 1, + "name": "Item{2}", + "converter": { + "type": "link", + "target": "EventItem" + } + }, + { + "index": 4, + "name": "Objective{1}", + "converter": { + "type": "link", + "target": "SkyIsland2MissionDetail" + } + }, + { + "index": 6, + "name": "RequiredAmount{1}" + }, + { + "index": 9, + "name": "Objective2", + "converter": { + "type": "link", + "target": "SkyIsland2MissionDetail" + } + }, + { + "index": 11, + "name": "RequiredAmount{2}" + }, + { + "index": 14, + "name": "Objective3", + "converter": { + "type": "link", + "target": "SkyIsland2MissionDetail" + } + }, + { + "index": 20, + "name": "Image", + "converter": { + "type": "icon" + } + } + ] + }, + { + "sheet": "SkyIsland2MissionDetail", + "defaultColumn": "Objective", + "definitions": [ + { + "name": "Type", + "converter": { + "type": "link", + "target": "SkyIsland2MissionType" + } + }, + { + "index": 2, + "name": "Range", + "converter": { + "type": "link", + "target": "SkyIsland2RangeType" + } + }, + { + "index": 4, + "name": "EObj", + "converter": { + "type": "link", + "target": "EObjName" + } + }, + { + "index": 7, + "name": "Objective" + } + ] + }, + { + "sheet": "SkyIsland2MissionType", + "defaultColumn": "Type", + "definitions": [ + { + "name": "Type" + } + ] + }, + { + "sheet": "SkyIsland2RangeType", + "defaultColumn": "Type", + "definitions": [ + { + "name": "Type" + } + ] + }, { "sheet": "SpearfishingItem", "defaultColumn": "Item", @@ -8753,6 +9846,27 @@ } ] }, + { + "sheet": "StainTransient", + "defaultColumn": "Item{1}", + "definitions": [ + { + "name": "Item{1}", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 1, + "name": "Item{2}", + "converter": { + "type": "link", + "target": "Item" + } + } + ] + }, { "sheet": "Status", "defaultColumn": "Name", @@ -8775,6 +9889,26 @@ "index": 3, "name": "MaxStacks" }, + { + "index": 4, + "name": "Category" + }, + { + "index": 5, + "name": "HitEffect", + "converter": { + "type": "link", + "target": "StatusHitEffect" + } + }, + { + "index": 6, + "name": "VFX", + "converter": { + "type": "link", + "target": "StatusLoopVFX" + } + }, { "index": 7, "name": "LockMovement" @@ -8796,12 +9930,12 @@ "name": "CanDispel" }, { - "index": 15, - "name": "IsPermanent" + "index": 14, + "name": "InflictedByActor" }, { - "index": 17, - "name": "InflictedByActor" + "index": 15, + "name": "IsPermanent" }, { "index": 21, @@ -8813,6 +9947,32 @@ } ] }, + { + "sheet": "StatusHitEffect", + "defaultColumn": "Location", + "definitions": [ + { + "name": "Location", + "converter": { + "type": "link", + "target": "VFX" + } + } + ] + }, + { + "sheet": "StatusLoopVFX", + "defaultColumn": "Location", + "definitions": [ + { + "name": "Location", + "converter": { + "type": "link", + "target": "VFX" + } + } + ] + }, { "sheet": "Story", "isGenericReferenceTarget": true, @@ -8894,8 +10054,10 @@ }, { "sheet": "SubmarineRank", - "defaultColumn": "Slot", "definitions": [ + { + "name": "Rank" + }, { "index": 1, "name": "ExpToNext" @@ -8984,7 +10146,15 @@ "name": "WeatherRate" }, { - "index": 23, + "index": 22, + "name": "ArrayEventHandler", + "converter": { + "type": "link", + "target": "ArrayEventHandler" + } + }, + { + "index": 24, "name": "Aetheryte", "converter": { "type": "link", @@ -9186,6 +10356,81 @@ } ] }, + { + "sheet": "Transformation", + "definitions": [ + { + "index": 1, + "name": "Model", + "converter": { + "type": "link", + "target": "ModelChara" + } + }, + { + "index": 2, + "name": "BNpcCustomize", + "converter": { + "type": "link", + "target": "BNpcCustomize" + } + }, + { + "index": 3, + "name": "BNpcEquip", + "converter": { + "type": "link", + "target": "BNpcEquip" + } + }, + { + "index": 4, + "type": "repeat", + "count": 6, + "definition": { + "name": "Action", + "converter": { + "type": "link", + "target": "Action" + } + } + }, + { + "index": 12, + "name": "Speed" + }, + { + "index": 13, + "name": "Scale" + }, + { + "index": 14, + "name": "IsPvP" + }, + { + "index": 15, + "name": "IsEvent" + }, + { + "index": 16, + "name": "PlayerCamera" + } + ] + }, + { + "sheet": "Treasure", + "defaultColumn": "Item", + "definitions": [ + { + "index": 8, + "name": "Item", + "converter": { + "type": "link", + "target": "Item" + } + } + ] + }, { "sheet": "TreasureHuntRank", "defaultColumn": "Name", @@ -9194,8 +10439,7 @@ "index": 1, "name": "Icon", "converter": { - "type": "icon", - "target": "Item" + "type": "icon" } }, { @@ -9574,6 +10818,28 @@ } ] }, + { + "sheet": "VaseFlower", + "definitions": [ + { + "index": 3, + "name": "Item", + "converter": { + "type": "link", + "target": "Item" + } + } + ] + }, + { + "sheet": "VFX", + "defaultColumn": "Location", + "definitions": [ + { + "name": "Location" + } + ] + }, { "sheet": "Warp", "isGenericReferenceTarget": true, @@ -9595,15 +10861,27 @@ }, { "index": 2, - "name": "DefaultTalk1" + "name": "DefaultTalk1", + "converter": { + "type": "link", + "target": "DefaultTalk" + } }, { "index": 3, - "name": "DefaultTalk2" + "name": "DefaultTalk2", + "converter": { + "type": "link", + "target": "DefaultTalk" + } }, { "index": 4, - "name": "DefaultTalk3" + "name": "DefaultTalk3", + "converter": { + "type": "link", + "target": "DefaultTalk" + } }, { "index": 5, @@ -9615,6 +10893,43 @@ } ] }, + { + "sheet": "WarpCondition", + "definitions": [ + { + "index": 2, + "name": "RequiredQuest{1}", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 3, + "name": "RequiredQuest{2}", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 4, + "name": "DRequiredQuest{3}", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 5, + "name": "RequiredQuest{4}", + "converter": { + "type": "link", + "target": "Quest" + } + } + ] + }, { "sheet": "Weather", "defaultColumn": "Name", @@ -9674,6 +10989,23 @@ } ] }, + { + "sheet": "WeddingBGM", + "defaultColumn": "Song", + "definitions": [ + { + "name": "Song", + "converter": { + "type": "link", + "target": "BGM" + } + }, + { + "index": 1, + "name": "SongName" + } + ] + }, { "sheet": "WeeklyBingoOrderData", "definitions": [ @@ -9769,6 +11101,19 @@ } ] }, + { + "sheet": "World", + "definitions": [ + { + "index": 1, + "name": "DataCenter", + "converter": { + "type": "link", + "target": "WorldDCGroupType" + } + } + ] + }, { "sheet": "WorldDCGroupType", "defaultColumn": "Name", @@ -9777,6 +11122,84 @@ "name": "Name" } ] + }, + { + "sheet": "YKW", + "definitions": [ + { + "index": 1, + "name": "Item", + "converter": { + "type": "link", + "target": "Item" + } + }, + { + "index": 2, + "type": "repeat", + "count": 3, + "definition": { + "name": "Location", + "converter": { + "type": "link", + "target": "TerritoryType" + } + } + } + ] + }, + { + "sheet": "ZoneSharedGroup", + "definitions": [ + { + "index": 2, + "name": "Quest{1}", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 6, + "name": "Quest{2}", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 10, + "name": "Quest{3}", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 14, + "name": "Quest{4}", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 18, + "name": "Quest{5}", + "converter": { + "type": "link", + "target": "Quest" + } + }, + { + "index": 22, + "name": "Quest{6}", + "converter": { + "type": "link", + "target": "Quest" + } + } + ] } ] -} +} \ No newline at end of file diff --git a/src/tools/exd_struct_gen/main.cpp b/src/tools/exd_struct_gen/main.cpp index e0d21973..4a7085a8 100644 --- a/src/tools/exd_struct_gen/main.cpp +++ b/src/tools/exd_struct_gen/main.cpp @@ -25,14 +25,35 @@ #include #include #include +#include Core::Logger g_log; Core::Data::ExdData g_exdData; bool skipUnmapped = true; -std::string datLocation( "/opt/sapphire_3_15_0/bin/sqpack" ); -//std::string datLocation( "C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack\\ffxiv" ); +std::map< char, std::string > numberToStringMap +{ + { '0', "zero" }, + { '1', "one" }, + { '2', "two" }, + { '3', "three" }, + { '4', "four" }, + { '5', "five" }, + { '6', "six" }, + { '7', "seven" }, + { '8', "eight" }, + { '9', "nine" }, +}; + +std::vector< std::string > cppKeyWords +{ + "new", + "class" +}; + +//std::string datLocation( "/opt/sapphire_3_15_0/bin/sqpack" ); +std::string datLocation( "C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack" ); std::map< uint8_t, std::string > g_typeMap; @@ -179,7 +200,23 @@ std::string generateStruct( const std::string &exd ) fieldName = indexToNameMap[count]; } fieldName[0] = std::tolower( fieldName[0] ); - fieldName.erase( boost::remove_if( fieldName, boost::is_any_of(",-':![](){}<>% \x02\x1f\x01\x03") ), fieldName.end() ); + fieldName.erase( boost::remove_if( fieldName, boost::is_any_of(",-':![](){}<>% \x02\x1f\x01\x03") ), fieldName.end() ); + + for( auto entry : numberToStringMap ) + { + if( fieldName[0] == entry.first ) + { + fieldName.erase( 0, 1 ); + fieldName.insert( 0, entry.second ); + } + } + + for( std::string keyword : cppKeyWords ) + { + if( fieldName == keyword ) + fieldName[0] = toupper( fieldName[0] ); + } + indexToNameMap[count] = fieldName; indexToTypeMap[count] = type; if( indexToTarget.find( count ) != indexToTarget.end() ) diff --git a/src/tools/quest_parser/main.cpp b/src/tools/quest_parser/main.cpp index 666bb61c..9c4098f8 100644 --- a/src/tools/quest_parser/main.cpp +++ b/src/tools/quest_parser/main.cpp @@ -16,11 +16,12 @@ #include #include +#include #include Core::Logger g_log; -Core::Data::ExdData g_exdData; +Core::Data::ExdDataGenerated g_exdDataGen; const std::string onTalkStr( " void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override\n" @@ -58,7 +59,7 @@ std::string titleCase( const std::string& str ) return retStr; } -void createScript( boost::shared_ptr< Core::Data::QuestInfo >& pQuestData, std::set< std::string >& additionalList ) +void createScript( boost::shared_ptr< Core::Data::Quest >& pQuestData, std::set< std::string >& additionalList, int questId ) { std::string header( "// This is an automatically generated C++ script template\n" @@ -69,8 +70,8 @@ void createScript( boost::shared_ptr< Core::Data::QuestInfo >& pQuestData, std:: "#include \n\n" ); - std::size_t splitPos( pQuestData->name_intern.find( "_" ) ); - std::string className( pQuestData->name_intern.substr( 0, splitPos ) ); + std::size_t splitPos( pQuestData->id.find( "_" ) ); + std::string className( pQuestData->id.substr( 0, splitPos ) ); //className = "Quest" + className; std::string sceneStr( " //////////////////////////////////////////////////////////////////////\n // Available Scenes in this quest, not necessarly all are used\n" ); std::string seqStr; @@ -131,26 +132,26 @@ void createScript( boost::shared_ptr< Core::Data::QuestInfo >& pQuestData, std:: std::string rewards; rewards.reserve( 0xFFF ); rewards += " // Quest rewards \n"; - rewards += ( pQuestData->reward_exp_factor != 0 ) ? " static constexpr auto RewardExpFactor = " + std::to_string( pQuestData->reward_exp_factor ) + ";\n" : ""; - rewards += ( pQuestData->reward_gil != 0 ) ? " static constexpr auto RewardGil = " + std::to_string( pQuestData->reward_gil ) + ";\n" : ""; - rewards += ( pQuestData->reward_emote != 0 ) ? " static constexpr auto RewardEmote = " + std::to_string( pQuestData->reward_emote ) + ";\n" : ""; - rewards += ( pQuestData->reward_action != 0 ) ? " static constexpr auto RewardAction = " + std::to_string( pQuestData->reward_action ) + ";\n" : ""; - rewards += ( pQuestData->reward_action_general1 != 0 ) ? " static constexpr auto RewardGeneralAction1 = " + std::to_string( pQuestData->reward_action_general1 ) + ";\n" : ""; - rewards += ( pQuestData->reward_action_general2 != 0 ) ? " static constexpr auto RewardGeneralAction2 = " + std::to_string( pQuestData->reward_action_general2 ) + ";\n" : ""; - rewards += ( pQuestData->reward_gc_seals != 0 ) ? " static constexpr auto RewardGCSeals = " + std::to_string( pQuestData->reward_gc_seals ) + ";\n" : ""; - rewards += ( pQuestData->reward_other != 0 ) ? " static constexpr auto RewardOther = " + std::to_string( pQuestData->reward_other ) + ";\n" : ""; - rewards += ( pQuestData->reward_reputation != 0 ) ? " static constexpr auto RewardReputation = " + std::to_string( pQuestData->reward_reputation ) + ";\n" : ""; - rewards += ( pQuestData->reward_tome_type != 0 ) ? " static constexpr auto RewardTomeType = " + std::to_string( pQuestData->reward_tome_type ) + ";\n" : ""; - rewards += ( pQuestData->reward_tome_count != 0 ) ? " static constexpr auto RewardTomeCount = " + std::to_string( pQuestData->reward_tome_count ) + ";\n" : ""; - rewards += ( pQuestData->instanced_content_unlock != 0 ) ? " static constexpr auto InstancedContentUnlock = " + std::to_string( pQuestData->instanced_content_unlock ) + ";\n" : ""; + rewards += ( pQuestData->expFactor != 0 ) ? " static constexpr auto RewardExpFactor = " + std::to_string( pQuestData->expFactor ) + ";\n" : ""; + rewards += ( pQuestData->gilReward != 0 ) ? " static constexpr auto RewardGil = " + std::to_string( pQuestData->gilReward ) + ";\n" : ""; + rewards += ( pQuestData->emoteReward != 0 ) ? " static constexpr auto RewardEmote = " + std::to_string( pQuestData->emoteReward ) + ";\n" : ""; + rewards += ( pQuestData->actionReward != 0 ) ? " static constexpr auto RewardAction = " + std::to_string( pQuestData->actionReward ) + ";\n" : ""; + rewards += ( pQuestData->generalActionReward[0] != 0 ) ? " static constexpr auto RewardGeneralAction1 = " + std::to_string( pQuestData->generalActionReward[0] ) + ";\n" : ""; + rewards += ( pQuestData->generalActionReward[1] != 0 ) ? " static constexpr auto RewardGeneralAction2 = " + std::to_string( pQuestData->generalActionReward[1] ) + ";\n" : ""; + rewards += ( pQuestData->gCSeals != 0 ) ? " static constexpr auto RewardGCSeals = " + std::to_string( pQuestData->gCSeals ) + ";\n" : ""; + rewards += ( pQuestData->otherReward != 0 ) ? " static constexpr auto RewardOther = " + std::to_string( pQuestData->otherReward ) + ";\n" : ""; + rewards += ( pQuestData->reputationReward != 0 ) ? " static constexpr auto RewardReputation = " + std::to_string( pQuestData->reputationReward ) + ";\n" : ""; + rewards += ( pQuestData->tomestoneReward != 0 ) ? " static constexpr auto RewardTomeType = " + std::to_string( pQuestData->tomestoneReward ) + ";\n" : ""; + rewards += ( pQuestData->tomestoneCountReward != 0 ) ? " static constexpr auto RewardTomeCount = " + std::to_string( pQuestData->tomestoneCountReward ) + ";\n" : ""; + rewards += ( pQuestData->instanceContentUnlock != 0 ) ? " static constexpr auto InstancedContentUnlock = " + std::to_string( pQuestData->instanceContentUnlock ) + ";\n" : ""; - if( pQuestData->reward_item.size() > 0 ) + if( !pQuestData->itemReward0.empty() ) { rewards += " static constexpr auto RewardItem[] = { "; - for( size_t ca = 0; ca < pQuestData->reward_item.size(); ca++ ) + for( size_t ca = 0; ca < pQuestData->itemReward0.size(); ca++ ) { - rewards += std::to_string( pQuestData->reward_item.at( ca ) ); - if( ca != pQuestData->reward_item.size() - 1 ) + rewards += std::to_string( pQuestData->itemReward0.at( ca ) ); + if( ca != pQuestData->itemReward0.size() - 1 ) { rewards += ", "; } @@ -158,13 +159,13 @@ void createScript( boost::shared_ptr< Core::Data::QuestInfo >& pQuestData, std:: rewards += " };\n"; } - if( pQuestData->reward_item.size() > 0 ) + if( !pQuestData->itemReward0.empty() ) { rewards += " static constexpr auto RewardItemCount[] = { "; - for( size_t ca = 0; ca < pQuestData->reward_item_count.size(); ca++ ) + for( size_t ca = 0; ca < pQuestData->itemCountReward0.size(); ca++ ) { - rewards += std::to_string( pQuestData->reward_item_count.at( ca ) ); - if( ca != pQuestData->reward_item_count.size() - 1 ) + rewards += std::to_string( pQuestData->itemCountReward0.at( ca ) ); + if( ca != pQuestData->itemCountReward0.size() - 1 ) { rewards += ", "; } @@ -172,13 +173,13 @@ void createScript( boost::shared_ptr< Core::Data::QuestInfo >& pQuestData, std:: rewards += " };\n"; } - if( pQuestData->reward_item_optional.size() > 0 ) + if( !pQuestData->itemReward1.empty() ) { rewards += " static constexpr auto RewardItemOptional[] = { "; - for( size_t ca = 0; ca < pQuestData->reward_item_optional.size(); ca++ ) + for( size_t ca = 0; ca < pQuestData->itemReward1.size(); ca++ ) { - rewards += std::to_string( pQuestData->reward_item_optional.at( ca ) ); - if( ca != pQuestData->reward_item_optional.size() - 1 ) + rewards += std::to_string( pQuestData->itemReward1.at( ca ) ); + if( ca != pQuestData->itemReward1.size() - 1 ) { rewards += ", "; } @@ -186,13 +187,13 @@ void createScript( boost::shared_ptr< Core::Data::QuestInfo >& pQuestData, std:: rewards += " };\n"; } - if( pQuestData->reward_item_optional_count.size() > 0 ) + if( !pQuestData->itemCountReward1.empty() ) { rewards += " static constexpr auto RewardItemOptionalCount[] = { "; - for( size_t ca = 0; ca < pQuestData->reward_item_optional_count.size(); ca++ ) + for( size_t ca = 0; ca < pQuestData->itemCountReward1.size(); ca++ ) { - rewards += std::to_string( pQuestData->reward_item_optional_count.at( ca ) ); - if( ca != pQuestData->reward_item_optional_count.size() - 1 ) + rewards += std::to_string( pQuestData->itemCountReward1.at( ca ) ); + if( ca != pQuestData->itemCountReward1.size() - 1 ) { rewards += ", "; } @@ -207,21 +208,22 @@ void createScript( boost::shared_ptr< Core::Data::QuestInfo >& pQuestData, std:: std::vector< std::string > script_entities; std::string sentities = " // Entities found in the script data of the quest\n"; - for( size_t ca = 0; ca < pQuestData->script_entity.size(); ca ++ ) + for( size_t ca = 0; ca < pQuestData->scriptInstruction.size(); ca ++ ) { - if( ( pQuestData->script_entity.at( ca ).find( "HOWTO" ) != std::string::npos ) || ( pQuestData->script_entity.at( ca ).find( "HOW_TO" ) != std::string::npos ) ) + if( ( pQuestData->scriptInstruction.at( ca ).find( "HOWTO" ) != std::string::npos ) || ( pQuestData->scriptInstruction.at( ca ).find( "HOW_TO" ) != std::string::npos ) ) continue; - if( ( pQuestData->script_entity.at( ca ).find( "EMOTENO" ) != std::string::npos ) || ( pQuestData->script_entity.at( ca ).find( "EMOTEOK" ) != std::string::npos ) ) + if( ( pQuestData->scriptInstruction.at( ca ).find( "EMOTENO" ) != std::string::npos ) || ( pQuestData->scriptInstruction.at( ca ).find( "EMOTEOK" ) != std::string::npos ) ) hasEmote = true; - if( pQuestData->script_entity.at( ca ).find( "ENEMY" ) != std::string::npos ) + if( pQuestData->scriptInstruction.at( ca ).find( "ENEMY" ) != std::string::npos ) { hasEnemies = true; - enemy_ids.push_back( pQuestData->script_value.at( ca ) ); + enemy_ids.push_back( pQuestData->scriptArg.at( ca ) ); } - script_entities.push_back( pQuestData->script_entity.at( ca ) + " = " + std::to_string( pQuestData->script_value.at( ca ) ) ); + if( !pQuestData->scriptInstruction.at( ca ).empty() ) + script_entities.push_back( pQuestData->scriptInstruction.at( ca ) + " = " + std::to_string( pQuestData->scriptArg.at( ca ) ) ); } std::sort( script_entities.begin(), script_entities.end() ); for( auto& entity : script_entities ) @@ -231,11 +233,11 @@ void createScript( boost::shared_ptr< Core::Data::QuestInfo >& pQuestData, std:: sentities += " static constexpr auto " + name + ";\n"; } - std::string additional = "// Quest Script: " + pQuestData->name_intern + "\n"; + std::string additional = "// Quest Script: " + pQuestData->id + "\n"; additional += "// Quest Name: " + pQuestData->name + "\n"; - additional += "// Quest ID: " + std::to_string( pQuestData->id ) + "\n"; - additional += "// Start NPC: " + std::to_string( pQuestData->enpc_resident_start ) + "\n"; - additional += "// End NPC: " + std::to_string( pQuestData->enpc_resident_end ) + "\n\n"; + additional += "// Quest ID: " + std::to_string( questId ) + "\n"; + additional += "// Start NPC: " + std::to_string( pQuestData->eNpcResidentStart ) + "\n"; + additional += "// End NPC: " + std::to_string( pQuestData->eNpcResidentEnd ) + "\n\n"; std::string scriptEntry; scriptEntry.reserve(0xFFFF); @@ -271,7 +273,7 @@ void createScript( boost::shared_ptr< Core::Data::QuestInfo >& pQuestData, std:: constructor += rewards + "\n"; constructor += sentities + "\n"; constructor += " public:\n"; - constructor += " " + className + "() : EventScript" + "( " + std::to_string( pQuestData->id ) + " ){}; \n"; + constructor += " " + className + "() : EventScript" + "( " + std::to_string( questId ) + " ){}; \n"; constructor += " ~" + className + "(){}; \n"; std::string classString( @@ -287,7 +289,7 @@ void createScript( boost::shared_ptr< Core::Data::QuestInfo >& pQuestData, std:: std::ofstream outputFile; - outputFile.open( "generated/" + className + ".cpp_generated" ); + outputFile.open( "generated/" + className + ".cpp" ); outputFile << header << additional << classString; outputFile.close(); } @@ -308,8 +310,8 @@ int main( int argc, char** argv ) unluac = true; - g_log.info( "Setting up EXD data" ); - if( !g_exdData.init( datLocation ) ) + g_log.info( "Setting up generated EXD data" ); + if( !g_exdDataGen.init( datLocation ) ) { std::cout << datLocation << "\n"; g_log.fatal( "Error setting up EXD data " ); @@ -318,33 +320,33 @@ int main( int argc, char** argv ) } xiv::dat::GameData data( datLocation ); - xiv::exd::ExdData eData( data ); - auto QuestDat = g_exdData.setupDatAccess( "Quest", xiv::exd::Language::en ); - auto rows = QuestDat.get_rows(); + auto rows = g_exdDataGen.getQuestIdList(); if ( !boost::filesystem::exists( "./generated" ) ) boost::filesystem::create_directory( "./generated" ); - std::cout << "Export in progress"; + g_log.info( "Export in progress" ); + uint32_t updateInterval = rows.size() / 20; uint32_t i = 0; for( const auto& row : rows ) { - auto questInfo = g_exdData.getQuestInfo( row.first ); + g_log.info( "Generating " + std::to_string( row ) ); + auto questInfo = g_exdDataGen.get( row ); - if( questInfo->name.empty() || questInfo->name_intern.empty() ) + if( questInfo->name.empty() || questInfo->id.empty() ) { continue; } - size_t pos_seperator = questInfo->name_intern.find_first_of( "_" ); + size_t pos_seperator = questInfo->id.find_first_of( "_" ); std::string folder; if( pos_seperator != std::string::npos ) { - folder = questInfo->name_intern.substr( pos_seperator + 1, 3 ); + folder = questInfo->id.substr( pos_seperator + 1, 3 ); } else { @@ -355,7 +357,7 @@ int main( int argc, char** argv ) const xiv::dat::Cat& test = data.getCategory( "game_script" ); - const std::string questPath = "game_script/quest/" + folder + "/" + questInfo->name_intern + ".luab"; + const std::string questPath = "game_script/quest/" + folder + "/" + questInfo->id + ".luab"; const auto &test_file = data.getFile( questPath ); auto §ion = test_file->access_data_sections().at( 0 ); @@ -366,12 +368,12 @@ int main( int argc, char** argv ) uint32_t offset = 0; std::ofstream outputFile1; - outputFile1.open( "generated/" + questInfo->name_intern + ".luab", std::ios::binary ); + outputFile1.open( "generated/" + questInfo->id + ".luab", std::ios::binary ); outputFile1.write( §ion[0], section.size() ); outputFile1.close(); if( unluac ) { - std::string command = std::string( "java -jar unluac_2015_06_13.jar " ) + "generated/" + questInfo->name_intern + ".luab" + ">> " + "generated/" + questInfo->name_intern + ".lua"; + std::string command = std::string( "java -jar unluac_2015_06_13.jar " ) + "generated/" + questInfo->id + ".luab" + ">> " + "generated/" + questInfo->id + ".lua"; if ( system( command.c_str() ) == -1 ) { g_log.error( "Error executing java command:\n" + command + "\nerrno: " + std::strerror( errno ) ); @@ -402,7 +404,7 @@ int main( int argc, char** argv ) } - createScript( questInfo, stringList ); + createScript( questInfo, stringList, row ); ++i; if( i % updateInterval == 0 ) std::cout << ".";