From 5f8aad034ed5d55bb5206d24b16aa9d8ab228382 Mon Sep 17 00:00:00 2001 From: Maru Date: Tue, 22 May 2018 04:30:40 -0300 Subject: [PATCH 01/31] apply opcode shift+lobby versioning --- src/common/Network/PacketDef/Ipcs.h | 44 +++++++++---------- src/servers/sapphire_lobby/GameConnection.cpp | 4 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index e8174617..2ba1d7c3 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -98,31 +98,31 @@ namespace Packets { 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 + 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 + UpdateClassInfo = 0x018A, // 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 + 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 - 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 + ItemInfo = 0x0190, // updated 4.3 + ContainerInfo = 0x0191, // updated 4.3 + InventoryTransactionFinish = 0x0192, // updated 4.3 + InventoryTransaction = 0x0193, // updated 4.3 + CurrencyCrystalInfo = 0x0197, // updated 4.3 InventoryActionAck = 0x0180, // updated 4.2 ? UpdateInventorySlot = 0x0181, // updated 4.2 @@ -165,7 +165,7 @@ namespace Packets { ActorGauge = 0x027D, // updated 4.2 DuelChallenge = 0x0277, // 4.2; this is the responsible for opening an ui - PerformNote = 0x0286, // updated 4.2 + PerformNote = 0x0286, // updated 4.3 // Unknown IPC types that still need to be sent // TODO: figure all these out properly @@ -243,7 +243,7 @@ namespace Packets { LinkshellEventHandler = 0x0144, // updated 4.1 ?? LinkshellEventHandler1 = 0x0145, // updated 4.1 ?? - PerformNoteHandler = 0x0160, + PerformNoteHandler = 0x0160, // updated 4.2 ReqEquipDisplayFlagsChange = 0x016C, // updated 4.2 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 ); } From 052ea5f1d20902a40bb12844d3755ae5c41df693 Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 22 May 2018 17:42:50 +0200 Subject: [PATCH 02/31] Zone-Server should now start up fine again --- src/common/Exd/ExdDataGenerated.cpp | 729 +++++++-- src/common/Exd/ExdDataGenerated.h | 1004 +++++++++++- src/servers/sapphire_zone/Actor/Player.cpp | 2 +- src/tools/exd_struct_gen/ex.json | 1627 ++++++++++++++++++-- src/tools/exd_struct_gen/main.cpp | 4 +- 5 files changed, 3127 insertions(+), 239 deletions(-) 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/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index b9d62560..9aed1649 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -317,7 +317,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/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..f4a9c847 100644 --- a/src/tools/exd_struct_gen/main.cpp +++ b/src/tools/exd_struct_gen/main.cpp @@ -31,8 +31,8 @@ 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::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; From 2c901c12ec2eae742c359ee4291519891e78b5e6 Mon Sep 17 00:00:00 2001 From: goaaats Date: Tue, 22 May 2018 20:15:30 +0200 Subject: [PATCH 03/31] exd_struct_gen: Fix fields starting with numbers, fix fields that are cpp keywords --- src/tools/exd_struct_gen/main.cpp | 41 +++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/src/tools/exd_struct_gen/main.cpp b/src/tools/exd_struct_gen/main.cpp index e0d21973..c31aca84 100644 --- a/src/tools/exd_struct_gen/main.cpp +++ b/src/tools/exd_struct_gen/main.cpp @@ -25,13 +25,34 @@ #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::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( "E:\\Steam\\SteamApps\\common\\FINAL FANTASY XIV Online\\game\\sqpack" ); //std::string datLocation( "C:\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack\\ffxiv" ); 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() ) From 3b0a5c9226e578e2009b771a3e9c5dddde1d8177 Mon Sep 17 00:00:00 2001 From: goaaats Date: Tue, 22 May 2018 20:15:46 +0200 Subject: [PATCH 04/31] Update ex.json(needs testing) --- src/tools/exd_struct_gen/ex.json | 1627 ++++++++++++++++++++++++++++-- 1 file changed, 1525 insertions(+), 102 deletions(-) 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 From c48c3bb961d5e4bd9560c459631c9d9a38e16190 Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 22 May 2018 21:20:43 +0200 Subject: [PATCH 05/31] Fixed lobby packet definitions --- .../Network/PacketDef/Lobby/ServerLobbyDef.h | 2 ++ src/servers/sapphire_api/PlayerMinimal.cpp | 14 +++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) 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/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; } From 0200360c5f2b5af6e8c94c02d98f0868c62ea662 Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 22 May 2018 22:19:55 +0200 Subject: [PATCH 06/31] Fixed more opcodes -> faster login -> Slow walk fixed --- src/common/Network/PacketDef/Ipcs.h | 91 ++++++++++++++--------------- 1 file changed, 45 insertions(+), 46 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 2ba1d7c3..be26c89a 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -83,8 +83,8 @@ namespace Packets { ServerNotice = 0x00F0, // updated 4.2 SetOnlineStatus = 0x00F1, // updated 4.2 - CountdownInitiate = 0x00FB, // updated 4.2 - CountdownCancel = 0x00FC, // updated 4.2 + CountdownInitiate = 0x0111, // updated 4.3 + CountdownCancel = 0x0112, // updated 4.3 BlackList = 0x00FF, // updated 4.2 @@ -92,9 +92,9 @@ namespace Packets { 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 + StatusEffectList = 0x0150, // updated 4.3 + Effect = 0x0151, // updated 4.3 + PersistantEffect = 0x0158, // updated 4.3 GCAffiliation = 0xCCFC, // OUTDATED @@ -135,42 +135,41 @@ namespace Packets { EventLinkshell = 0x1169, - QuestMessage = 0x01B8, // updated 4.2 - QuestTracker = 0x01BD, // updated 4.2 + QuestMessage = 0x01CE, // updated 4.3 + QuestTracker = 0x01D3, // 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 + QuestActiveList = 0x01C3, // updated 4.3 + QuestUpdate = 0x01C4, // updated 4.3 + QuestCompleteList = 0x01C5, // updated 4.3 - QuestUpdate = 0x01AE, // updated 4.2 - QuestCompleteList = 0x01AF, // updated 4.2 + Mount = 0x01E3, // updated 4.3 - Mount = 0x01CD, // updated 4.2 + DirectorVars = 0x01E5, // updated 4.3 - DirectorVars = 0x01CF, // updated 4.2 + WeatherChange = 0x0200, // updated 4.3 + PlayerTitleList = 0x0201, // updated 4.3 + Discovery = 0x0202, // updated 4.3 - WeatherChange = 0x01EA, // updated 4.2 - PlayerTitleList = 0x01EB, // updated 4.2 - Discovery = 0x01EC, // updated 4.2 - - EorzeaTimeOffset = 0x01EE, // updated 4.2 + EorzeaTimeOffset = 0x0204, // updated 4.3 EquipDisplayFlags = 0x01FA, // updated 4.2 CFAvailableContents = 0x01FD, // updated 4.2 - PrepareZoning = 0x027C, // updated 4.2 - ActorGauge = 0x027D, // updated 4.2 + 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.3 // 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 }; @@ -202,14 +201,14 @@ namespace Packets { ChatHandler = 0x00C7, // updated 4.2 - SocialListHandler = 0x00CF, // updated 4.2 - ReqSearchInfoHandler = 0x00D4, // updated 4.2 + SocialListHandler = 0x00DB, // updated 4.3 + ReqSearchInfoHandler = 0x00E0, // updated 4.3 SetSearchInfoHandler = 0x00D2, // updated 4.2 - 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,30 +217,30 @@ 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 + + UpdatePositionHandler = 0x0144, // updated 4.3 + UpdatePositionInstance = 0x0183, // updated 4.3 InventoryModifyHandler = 0x013F, // updated 4.2 - 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 + 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 = 0x0151, // updated 4.2 - TradeReturnEventHandler = 0x0152, // updated 4.2 + 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, // updated 4.2 From 6b790e7fe855cab87df7c0ea1c0b00b7295a9f6d Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 22 May 2018 23:10:31 +0200 Subject: [PATCH 07/31] Chat opcode fix --- src/common/Network/PacketDef/Ipcs.h | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index be26c89a..265197bb 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -199,11 +199,11 @@ namespace Packets { SocialReqSendHandler = 0x00AE, // updated 4.1 - ChatHandler = 0x00C7, // updated 4.2 + ChatHandler = 0x00D3, // updated 4.3 SocialListHandler = 0x00DB, // updated 4.3 ReqSearchInfoHandler = 0x00E0, // updated 4.3 - SetSearchInfoHandler = 0x00D2, // updated 4.2 + SetSearchInfoHandler = 0x00DE, // updated 4.2 BlackListHandler = 0x00EC, // updated 4.3 PlayerSearchHandler = 0x00E2, // updated 4.2 @@ -230,21 +230,21 @@ namespace Packets { InventoryModifyHandler = 0x013F, // 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 ? + 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 ? + ReturnEventHandler = 0x015D, // updated 4.3 + TradeReturnEventHandler = 0x015E, // updated 4.3 LinkshellEventHandler = 0x0150, // updated 4.1 ?? LinkshellEventHandler1 = 0x0151, // updated 4.1 ?? PerformNoteHandler = 0x0160, // updated 4.2 - ReqEquipDisplayFlagsChange = 0x016C, // updated 4.2 + ReqEquipDisplayFlagsChange = 0x0178, // updated 4.3 }; From 029dccf8a2489a8ff97544fb60ddb354297888cd Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 22 May 2018 23:23:21 +0200 Subject: [PATCH 08/31] Missed a comment --- src/common/Network/PacketDef/Ipcs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 265197bb..d56d90cb 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -203,7 +203,7 @@ namespace Packets { SocialListHandler = 0x00DB, // updated 4.3 ReqSearchInfoHandler = 0x00E0, // updated 4.3 - SetSearchInfoHandler = 0x00DE, // updated 4.2 + SetSearchInfoHandler = 0x00DE, // updated 4.3 BlackListHandler = 0x00EC, // updated 4.3 PlayerSearchHandler = 0x00E2, // updated 4.2 From f9e71c4bd8ac30d86aff22b577519bf453aa1df0 Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 22 May 2018 23:46:23 +0200 Subject: [PATCH 09/31] Events work again --- src/common/Network/PacketDef/Ipcs.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index d56d90cb..c34b87d8 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -80,7 +80,7 @@ namespace Packets { UpdateSearchInfo = 0x00EA, // updated 4.2 InitSearchInfo = 0x00EB, // updated 4.2 - ServerNotice = 0x00F0, // updated 4.2 + ServerNotice = 0x0106, // updated 4.2 SetOnlineStatus = 0x00F1, // updated 4.2 CountdownInitiate = 0x0111, // updated 4.3 @@ -127,11 +127,11 @@ namespace Packets { InventoryActionAck = 0x0180, // updated 4.2 ? UpdateInventorySlot = 0x0181, // updated 4.2 - EventPlay = 0x018E, // updated 4.2 + EventPlay = 0x01A6, // updated 4.3 DirectorPlayScene = 0x0192, // updated 4.2 - EventStart = 0x0198, // updated 4.2 - EventFinish = 0x0199, // updated 4.2 + EventStart = 0x01AF, // updated 4.3 + EventFinish = 0x01B0, // updated 4.3 EventLinkshell = 0x1169, From c34f119bcd2400900804c92d2caba395af0e9f79 Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 22 May 2018 23:48:49 +0200 Subject: [PATCH 10/31] Forgot comments yet again --- src/common/Network/PacketDef/Ipcs.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index c34b87d8..a55a14c1 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -80,7 +80,7 @@ namespace Packets { UpdateSearchInfo = 0x00EA, // updated 4.2 InitSearchInfo = 0x00EB, // updated 4.2 - ServerNotice = 0x0106, // updated 4.2 + ServerNotice = 0x0106, // updated 4.3 SetOnlineStatus = 0x00F1, // updated 4.2 CountdownInitiate = 0x0111, // updated 4.3 @@ -138,9 +138,9 @@ namespace Packets { QuestMessage = 0x01CE, // updated 4.3 QuestTracker = 0x01D3, // updated 4.3 - QuestFinish = 0x01C6, // updated 4.3 ? - MSQTrackerComplete = 0x01C7, // updated 4.3 ? - MSQTrackerProgress = 0x01C8, // updated 4.3 ? + QuestFinish = 0x01C6, // updated 4.3 + MSQTrackerComplete = 0x01C7, // updated 4.3 + MSQTrackerProgress = 0x01C8, // updated 4.3 QuestActiveList = 0x01C3, // updated 4.3 QuestUpdate = 0x01C4, // updated 4.3 From ed504807793b82faf501d640ffe832a12c1fa7eb Mon Sep 17 00:00:00 2001 From: Mordred Date: Wed, 23 May 2018 20:01:24 +0200 Subject: [PATCH 11/31] Opcodes... --- src/common/Network/PacketDef/Ipcs.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index a55a14c1..ce326e4f 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -62,7 +62,7 @@ namespace Packets { /////////////////////////////////////////////////// ChatBanned = 0x006B, - Logout = 0x0077, + Logout = 0x0077, // updated 4.3 CFNotify = 0x0078, CFMemberStatus = 0x0079, CFDutyInfo = 0x007A, @@ -128,7 +128,7 @@ namespace Packets { UpdateInventorySlot = 0x0181, // updated 4.2 EventPlay = 0x01A6, // updated 4.3 - DirectorPlayScene = 0x0192, // updated 4.2 + DirectorPlayScene = 0x01AA, // updated 4.3 EventStart = 0x01AF, // updated 4.3 EventFinish = 0x01B0, // updated 4.3 @@ -140,7 +140,7 @@ namespace Packets { QuestFinish = 0x01C6, // updated 4.3 MSQTrackerComplete = 0x01C7, // updated 4.3 - MSQTrackerProgress = 0x01C8, // updated 4.3 + MSQTrackerProgress = 0x01C8, // updated 4.3 QuestActiveList = 0x01C3, // updated 4.3 QuestUpdate = 0x01C4, // updated 4.3 @@ -181,10 +181,10 @@ namespace Packets { 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, @@ -192,8 +192,8 @@ 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 From e6f2fb0a0f9be4ecc410c999d93416ccbb06ba1e Mon Sep 17 00:00:00 2001 From: Mordred Date: Wed, 23 May 2018 22:57:08 +0200 Subject: [PATCH 12/31] Fixed AFK status crashing the game among with more opcodes --- src/common/Network/PacketDef/Ipcs.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index ce326e4f..e914219c 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -77,11 +77,11 @@ namespace Packets { Chat = 0x00E1, // updated 4.2 SocialList = 0x00E7, // updated 4.2 - UpdateSearchInfo = 0x00EA, // updated 4.2 - InitSearchInfo = 0x00EB, // updated 4.2 + UpdateSearchInfo = 0x0100, // updated 4.3 + InitSearchInfo = 0x0101, // updated 4.3 ServerNotice = 0x0106, // updated 4.3 - SetOnlineStatus = 0x00F1, // updated 4.2 + SetOnlineStatus = 0x0107, // updated 4.3 CountdownInitiate = 0x0111, // updated 4.3 CountdownCancel = 0x0112, // updated 4.3 @@ -156,7 +156,7 @@ namespace Packets { EorzeaTimeOffset = 0x0204, // updated 4.3 - EquipDisplayFlags = 0x01FA, // updated 4.2 + EquipDisplayFlags = 0x0210, // updated 4.3 CFAvailableContents = 0x01FD, // updated 4.2 @@ -228,7 +228,7 @@ namespace Packets { UpdatePositionHandler = 0x0144, // updated 4.3 UpdatePositionInstance = 0x0183, // updated 4.3 - InventoryModifyHandler = 0x013F, // updated 4.2 + InventoryModifyHandler = 0x014B, // updated 4.3 TalkEventHandler = 0x0154, // updated 4.3 EmoteEventHandler = 0x0155, // updated 4.3 From 069a5fc9e04afbe5098717c17eab369031420211 Mon Sep 17 00:00:00 2001 From: goaaats Date: Fri, 25 May 2018 14:16:39 +0200 Subject: [PATCH 13/31] Use generated EXD data for quest_parse --- src/tools/quest_parser/main.cpp | 119 ++++++++++++++++---------------- 1 file changed, 61 insertions(+), 58 deletions(-) diff --git a/src/tools/quest_parser/main.cpp b/src/tools/quest_parser/main.cpp index 666bb61c..72c124dc 100644 --- a/src/tools/quest_parser/main.cpp +++ b/src/tools/quest_parser/main.cpp @@ -16,11 +16,13 @@ #include #include +#include #include +#include "exd_struct_gen/ExdDataGenerated.h" 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 +60,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 +71,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 +133,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 +160,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 +174,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 +188,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 +209,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 +234,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 +274,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 +290,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 +311,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 +321,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 +358,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 +369,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 +405,7 @@ int main( int argc, char** argv ) } - createScript( questInfo, stringList ); + createScript( questInfo, stringList, row ); ++i; if( i % updateInterval == 0 ) std::cout << "."; From 00858a5f696cc6b14c817d4d9935b80db029d3e4 Mon Sep 17 00:00:00 2001 From: goaaats Date: Fri, 25 May 2018 14:27:54 +0200 Subject: [PATCH 14/31] Fixed bad include --- src/tools/quest_parser/main.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/tools/quest_parser/main.cpp b/src/tools/quest_parser/main.cpp index 72c124dc..9c4098f8 100644 --- a/src/tools/quest_parser/main.cpp +++ b/src/tools/quest_parser/main.cpp @@ -18,7 +18,6 @@ #include #include #include -#include "exd_struct_gen/ExdDataGenerated.h" Core::Logger g_log; From a75734ad05b7728b0f5f16cca45879223e8fc991 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 26 May 2018 09:25:56 +0200 Subject: [PATCH 15/31] Fixed statuseffect crash, ty Ravahn --- src/common/Network/PacketDef/Ipcs.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index e914219c..f02126cb 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -49,7 +49,7 @@ namespace Packets { Ping = 0x0065, Init = 0x0066, - ActorSpawn = 0x0190, // DEPRECATED + //ActorSpawn = 0x0190, // DEPRECATED ActorFreeSpawn = 0x0191, InitZone = 0x019A, @@ -74,8 +74,8 @@ 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 + Chat = 0x00F7, // updated 4.3 + SocialList = 0x00FD, // updated 4.3 UpdateSearchInfo = 0x0100, // updated 4.3 InitSearchInfo = 0x0101, // updated 4.3 @@ -92,7 +92,8 @@ namespace Packets { LinkshellList = 0x0106, // updated 4.2 SetCharacterFCInfo = 0x0114, // updated 4.2 - StatusEffectList = 0x0150, // updated 4.3 + + StatusEffectList = 0x014E, // updated 4.3 Effect = 0x0151, // updated 4.3 PersistantEffect = 0x0158, // updated 4.3 @@ -242,7 +243,7 @@ namespace Packets { LinkshellEventHandler = 0x0150, // updated 4.1 ?? LinkshellEventHandler1 = 0x0151, // updated 4.1 ?? - PerformNoteHandler = 0x0160, // updated 4.2 + PerformNoteHandler = 0x029B, // updated 4.3 ReqEquipDisplayFlagsChange = 0x0178, // updated 4.3 From 6a784921d5afc31e678d47d33c8c79e839f90079 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sun, 27 May 2018 01:28:43 +0200 Subject: [PATCH 16/31] Initial initui fixes ( still alot to do ) and inventory fix --- src/common/Network/PacketDef/Ipcs.h | 6 +- .../Network/PacketDef/Zone/ServerZoneDef.h | 120 ++++++++++-------- .../Network/PacketWrappers/InitUIPacket.h | 2 +- 3 files changed, 70 insertions(+), 58 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index f02126cb..48e69b5b 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -120,9 +120,9 @@ namespace Packets { ModelEquip = 0x0186, // updated 4.3 ItemInfo = 0x0190, // updated 4.3 - ContainerInfo = 0x0191, // updated 4.3 - InventoryTransactionFinish = 0x0192, // updated 4.3 - InventoryTransaction = 0x0193, // updated 4.3 + ContainerInfo = 0x0192, // updated 4.3 + InventoryTransactionFinish = 0x0193, // updated 4.3 + InventoryTransaction = 0x0194, // updated 4.3 CurrencyCrystalInfo = 0x0197, // updated 4.3 InventoryActionAck = 0x0180, // updated 4.2 ? diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 0a5fcd26..b88b6024 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -614,35 +614,13 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket 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; @@ -658,21 +636,61 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket uint8_t unknown6A; uint8_t unknown6B; uint8_t unknown6C[4]; - uint8_t unknown70[61]; - uint8_t preNamePadding; - char name[32]; - uint8_t unknownOword[16]; - uint8_t unknownDE[2]; + uint8_t unknown70[34]; + + uint16_t unknown18; + uint8_t maxLevel; + uint8_t expansion; + uint8_t unknown; + 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; + uint8_t petHotBar; + uint8_t companionRank; + uint8_t companionStars; + uint8_t companionSp; + uint8_t companionUnk2B; + uint8_t companionColor; + uint8_t companionFavoFeed; + uint8_t companionUnk2E; + uint8_t companionTimePassed[4]; + uint16_t unknown38[11]; + + uint32_t exp[25]; + uint8_t unknown564[16]; + uint32_t pvpFrontlineOverall1st; + uint32_t pvpFrontlineOverall2nd; + uint32_t pvpFrontlineOverall3rd; + uint8_t relicBookCompletion1[4]; uint16_t levels[25]; uint16_t levelsPadding; - uint32_t exp[25]; + uint8_t unknown__[16]; + uint16_t fishingRecordsFish[26]; + uint16_t fishingRecordsFishWeight[26]; + uint8_t unknownMask554[44]; + + uint8_t companion_name[21]; + uint8_t companionDefRank; + uint8_t companionAttRank; + uint8_t companionHealRank; + uint8_t mountGuideMask[16]; + char name[32]; + uint8_t unknownOword[16]; uint8_t unlockBitmask[64]; - uint8_t aetheryte[16]; + uint8_t aetheryte[17]; uint8_t discovery[421]; uint8_t howto[33]; - uint8_t minions[37]; + uint8_t minions[38]; uint8_t chocoboTaxiMask[8]; - uint8_t contentClearMask[108]; + uint8_t contentClearMask[111]; uint8_t contentClearPadding; uint16_t unknown428[8]; uint8_t companionBardingMask[8]; @@ -681,18 +699,13 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket 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; @@ -720,18 +733,16 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket 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 relicBookCompletion2[8]; + uint8_t sightseeingMask[26]; + uint16_t unknown_XXX; + uint8_t unknown61E; - uint8_t centurioSealHunts[32]; - uint8_t alliedSealHunts[22]; + uint8_t unknown61F[32]; + uint8_t unknown63F[22]; uint8_t tripleTriadCards[28]; uint8_t unknown671[11]; uint8_t unknownMask67C[22]; @@ -739,7 +750,7 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket 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 unknownMask6CB[16]; uint8_t unknown6DB[14]; uint8_t unlockedRaids[28]; uint8_t unlockedDungeons[18]; @@ -747,8 +758,9 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket uint8_t unlockedTrials[7]; uint8_t unlockedPvp[5]; uint8_t unknownMask72D[28]; - uint8_t unknownMask749[18]; - uint8_t unknown749[23]; + // uint8_t unknownMask749[18]; + //uint8_t unknown749[13]; + }; /** diff --git a/src/servers/sapphire_zone/Network/PacketWrappers/InitUIPacket.h b/src/servers/sapphire_zone/Network/PacketWrappers/InitUIPacket.h index 9017fee9..548c45a6 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(); From 61abfd384523bc1a0424abf5ccfdd1d7d6200e5c Mon Sep 17 00:00:00 2001 From: Mordred Date: Sun, 27 May 2018 01:31:29 +0200 Subject: [PATCH 17/31] Updateinventoryslot opcode --- src/common/Network/PacketDef/Ipcs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 48e69b5b..9eb847e3 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -126,7 +126,7 @@ namespace Packets { CurrencyCrystalInfo = 0x0197, // updated 4.3 InventoryActionAck = 0x0180, // updated 4.2 ? - UpdateInventorySlot = 0x0181, // updated 4.2 + UpdateInventorySlot = 0x0198, // updated 4.3 EventPlay = 0x01A6, // updated 4.3 DirectorPlayScene = 0x01AA, // updated 4.3 From 88a512e8b2be8890851c15274688f805d8656ce9 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sun, 27 May 2018 16:21:52 +0200 Subject: [PATCH 18/31] More initui adjustments --- .../Network/PacketDef/Zone/ServerZoneDef.h | 292 +++++++++--------- .../Network/PacketWrappers/InitUIPacket.h | 2 +- 2 files changed, 143 insertions(+), 151 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index b88b6024..1385202a 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -609,157 +609,149 @@ struct FFXIVIpcInitZone : FFXIVIpcBasePacket */ struct FFXIVIpcInitUI : FFXIVIpcBasePacket { - uint64_t contentId; - uint32_t unknown8; - uint32_t unknownC; - uint32_t charId; - uint32_t restedExp; - - uint32_t companionCurrentExp; - - 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[34]; - - uint16_t unknown18; - uint8_t maxLevel; - uint8_t expansion; - uint8_t unknown; - 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; - uint8_t petHotBar; - uint8_t companionRank; - uint8_t companionStars; - uint8_t companionSp; - uint8_t companionUnk2B; - uint8_t companionColor; - uint8_t companionFavoFeed; - uint8_t companionUnk2E; - uint8_t companionTimePassed[4]; - uint16_t unknown38[11]; - - uint32_t exp[25]; - uint8_t unknown564[16]; - uint32_t pvpFrontlineOverall1st; - uint32_t pvpFrontlineOverall2nd; - uint32_t pvpFrontlineOverall3rd; - uint8_t relicBookCompletion1[4]; - uint16_t levels[25]; - uint16_t levelsPadding; - uint8_t unknown__[16]; - uint16_t fishingRecordsFish[26]; - uint16_t fishingRecordsFishWeight[26]; - uint8_t unknownMask554[44]; - - uint8_t companion_name[21]; - uint8_t companionDefRank; - uint8_t companionAttRank; - uint8_t companionHealRank; - uint8_t mountGuideMask[16]; + // plain C types for a bit until the packet is actually fixed. + // makes conversion between different editors easier. + __int64 contentId; + 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 __int16 pvpWolfFoldWeeklyMatches; + unsigned __int16 pvpWolfFoldWeeklyVictories; + unsigned __int16 pvpStats[6]; + unsigned __int16 playerCommendations; + unsigned __int16 pvpStats1; + unsigned __int8 frontlineCampaigns[4]; + unsigned __int16 frontlineCampaignsWeekly; + unsigned __int8 currentRelic; + unsigned __int8 currentBook; + unsigned __int8 masterCrafterMask; + unsigned __int8 unknown69; + unsigned __int8 unknown6A; + unsigned __int8 unknown6B; + unsigned __int8 unknown6C[4]; + unsigned __int8 unknown50[34]; + unsigned __int16 unknown18; + unsigned __int8 maxLevel; + unsigned __int8 expansion; + unsigned __int8 unknown76; + unsigned __int8 race; + unsigned __int8 tribe; + unsigned __int8 gender; + unsigned __int8 currentJob; + unsigned __int8 currentClass; + unsigned __int8 deity; + unsigned __int8 namedayMonth; + unsigned __int8 namedayDay; + unsigned __int8 cityState; + unsigned __int8 homepoint; + unsigned __int8 unknown26; + unsigned __int8 petHotBar; + unsigned __int8 companionRank; + unsigned __int8 companionStars; + unsigned __int8 companionSp; + unsigned __int8 companionUnk2B; + unsigned __int8 companionColor; + unsigned __int8 companionFavoFeed; + unsigned __int8 companionUnk89; + unsigned __int8 companionUnk90[5]; + unsigned __int16 unknown90[7]; + unsigned __int16 unknown9E; + unsigned __int16 unknownA0; + unsigned int exp[25]; + unsigned __int8 unknown564[16]; + unsigned int pvpFrontlineOverall1st; + unsigned int pvpFrontlineOverall2nd; + unsigned int pvpFrontlineOverall3rd; + unsigned __int8 relicBookCompletion1[4]; + unsigned __int16 levels[25]; + unsigned __int16 levelsPadding; + unsigned __int16 unknown15C[8]; + unsigned __int16 fishingRecordsFish[26]; + unsigned __int16 fishingRecordsFishWeight[26]; + unsigned __int8 unknownMask554[44]; + unsigned __int8 companion_name[21]; + unsigned __int8 companionDefRank; + unsigned __int8 companionAttRank; + unsigned __int8 companionHealRank; + unsigned __int8 mountGuideMask[16]; char name[32]; - uint8_t unknownOword[16]; - uint8_t unlockBitmask[64]; - uint8_t aetheryte[17]; - uint8_t discovery[421]; - uint8_t howto[33]; - uint8_t minions[38]; - uint8_t chocoboTaxiMask[8]; - uint8_t contentClearMask[111]; - 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 fishingGuideMask[89]; - uint8_t fishingSpotVisited[25]; - - - uint8_t unknownMask4Padding; - - 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; - uint16_t pvpFrontlineWeekly1st; - uint16_t pvpFrontlineWeekly2nd; - uint16_t pvpFrontlineWeekly3rd; - uint8_t relicBookCompletion2[8]; - uint8_t sightseeingMask[26]; - uint16_t unknown_XXX; - - uint8_t unknown61E; - uint8_t unknown61F[32]; - uint8_t unknown63F[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 unknownMask6CB[16]; - 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[13]; + unsigned __int8 unknownOword[16]; + unsigned __int8 unknown258; + unsigned __int8 unlockBitmask[64]; + unsigned __int8 aetheryte[17]; + unsigned __int8 discovery[421]; + unsigned __int8 howto[33]; + unsigned __int8 minions[38]; + unsigned __int8 chocoboTaxiMask[8]; + unsigned __int8 contentClearMask[111]; + unsigned __int8 contentClearPadding; + unsigned __int16 unknown428[8]; + unsigned __int8 companionBardingMask[8]; + unsigned __int8 companionEquippedHead; + unsigned __int8 companionEquippedBody; + unsigned __int8 companionEquippedFeet; + unsigned __int8 companionUnk4[4]; + unsigned __int8 companion_fields[11]; + unsigned __int8 fishingGuideMask[89]; + unsigned __int8 fishingSpotVisited[25]; + unsigned __int8 unknownMask4Padding; + unsigned __int8 rankAmalJaa; + unsigned __int8 rankSylph; + unsigned __int8 rankKobold; + unsigned __int8 rankSahagin; + unsigned __int8 rankIxal; + unsigned __int8 rankVanu; + unsigned __int8 rankVath; + unsigned __int8 rankMoogle; + unsigned __int8 rankKojin; + unsigned __int8 rankAnata; + unsigned __int16 expAmalJaa; + unsigned __int16 expSylph; + unsigned __int16 expKobold; + unsigned __int16 expSahagin; + unsigned __int16 expIxal; + unsigned __int16 expVanu; + unsigned __int16 expVath; + unsigned __int16 expMoogle; + unsigned __int16 expKojin; + unsigned __int16 expAnata; + unsigned __int8 unknown596[10]; + unsigned __int16 unknown5A0[5]; + unsigned __int8 unknownMask59E[5]; + unsigned __int8 unknown5A3[18]; + unsigned __int8 unknownMask5C1[28]; + unsigned __int8 unknown_03411; + unsigned int unknownDword5E0; + unsigned __int16 pvpFrontlineWeekly1st; + unsigned __int16 pvpFrontlineWeekly2nd; + unsigned __int16 pvpFrontlineWeekly3rd; + unsigned __int8 relicBookCompletion2[8]; + unsigned __int8 sightseeingMask[26]; + unsigned __int16 unknown_XXX; + unsigned __int8 unknown61E[20]; + unsigned __int8 unknown656[29]; + unsigned __int8 unknown63F[22]; + unsigned __int8 tripleTriadCards[28]; + unsigned __int8 unknown671[11]; + unsigned __int8 unknownMask67C[22]; + unsigned __int8 unknown692[3]; + unsigned __int8 orchestrionMask[40]; + unsigned __int8 hallOfNoviceCompleteMask[3]; + unsigned __int8 unknownMask6C0[11]; + unsigned __int8 unknownMask6CB[16]; + unsigned __int8 unknown6DB[14]; + unsigned __int8 unlockedRaids[28]; + unsigned __int8 unlockedDungeons[18]; + unsigned __int8 unlockedGuildhests[10]; + unsigned __int8 unlockedTrials[7]; + unsigned __int8 unlockedPvp[5]; + unsigned __int8 unknownMask72D[28]; }; diff --git a/src/servers/sapphire_zone/Network/PacketWrappers/InitUIPacket.h b/src/servers/sapphire_zone/Network/PacketWrappers/InitUIPacket.h index 548c45a6..14ac8bf2 100644 --- a/src/servers/sapphire_zone/Network/PacketWrappers/InitUIPacket.h +++ b/src/servers/sapphire_zone/Network/PacketWrappers/InitUIPacket.h @@ -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 ) ); From 7c7767457e28c5be04362750d84a1514f1422dc0 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 29 May 2018 23:33:45 +1000 Subject: [PATCH 19/31] update opcodes --- src/common/Network/PacketDef/Ipcs.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 9eb847e3..0f6c5b69 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -86,12 +86,13 @@ namespace Packets { CountdownInitiate = 0x0111, // updated 4.3 CountdownCancel = 0x0112, // updated 4.3 - BlackList = 0x00FF, // updated 4.2 + BlackList = 0x0115, // updated 4.3 LogMessage = 0x00D0, - LinkshellList = 0x0106, // updated 4.2 - SetCharacterFCInfo = 0x0114, // 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 @@ -199,6 +200,7 @@ namespace Packets { CFDutyInfoHandler = 0x0078, // updated 4.2 SocialReqSendHandler = 0x00AE, // updated 4.1 + CreateCrossWorldLS = 0x00AF, // updated 4.3 ChatHandler = 0x00D3, // updated 4.3 From 0f1ef9fd4deb3f549457179f1a4d37efa139a3e0 Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 29 May 2018 22:12:55 +0200 Subject: [PATCH 20/31] Removed unused functions --- src/servers/sapphire_zone/ServerZone.cpp | 17 ----------------- src/servers/sapphire_zone/ServerZone.h | 3 --- 2 files changed, 20 deletions(-) diff --git a/src/servers/sapphire_zone/ServerZone.cpp b/src/servers/sapphire_zone/ServerZone.cpp index 46f635ef..25a6e323 100644 --- a/src/servers/sapphire_zone/ServerZone.cpp +++ b/src/servers/sapphire_zone/ServerZone.cpp @@ -335,15 +335,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 +364,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; From d34598d2955c8c85980b5ff3e4a5880102ca410b Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 2 Jun 2018 13:38:00 +0200 Subject: [PATCH 21/31] Some cleanup and buildfix --- src/common/Network/PacketDef/Ipcs.h | 4 +- .../Network/PacketDef/Zone/ServerZoneDef.h | 280 +++++++++--------- src/servers/sapphire_zone/Event/EventDefs.h | 6 - .../sapphire_zone/Inventory/Inventory.cpp | 4 +- .../sapphire_zone/Network/GameConnection.cpp | 2 + .../sapphire_zone/Network/GameConnection.h | 2 +- .../Network/Handlers/GMCommandHandlers.cpp | 7 - src/servers/sapphire_zone/ServerZone.cpp | 8 +- 8 files changed, 147 insertions(+), 166 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 0f6c5b69..7d1af019 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 { @@ -175,8 +175,6 @@ namespace Packets { }; - // TODO: Include structures for the individual packet segment types - /** * Client IPC Zone Type Codes. */ diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 1385202a..3baa1305 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -611,147 +611,147 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket { // plain C types for a bit until the packet is actually fixed. // makes conversion between different editors easier. - __int64 contentId; - 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 __int16 pvpWolfFoldWeeklyMatches; - unsigned __int16 pvpWolfFoldWeeklyVictories; - unsigned __int16 pvpStats[6]; - unsigned __int16 playerCommendations; - unsigned __int16 pvpStats1; - unsigned __int8 frontlineCampaigns[4]; - unsigned __int16 frontlineCampaignsWeekly; - unsigned __int8 currentRelic; - unsigned __int8 currentBook; - unsigned __int8 masterCrafterMask; - unsigned __int8 unknown69; - unsigned __int8 unknown6A; - unsigned __int8 unknown6B; - unsigned __int8 unknown6C[4]; - unsigned __int8 unknown50[34]; - unsigned __int16 unknown18; - unsigned __int8 maxLevel; - unsigned __int8 expansion; - unsigned __int8 unknown76; - unsigned __int8 race; - unsigned __int8 tribe; - unsigned __int8 gender; - unsigned __int8 currentJob; - unsigned __int8 currentClass; - unsigned __int8 deity; - unsigned __int8 namedayMonth; - unsigned __int8 namedayDay; - unsigned __int8 cityState; - unsigned __int8 homepoint; - unsigned __int8 unknown26; - unsigned __int8 petHotBar; - unsigned __int8 companionRank; - unsigned __int8 companionStars; - unsigned __int8 companionSp; - unsigned __int8 companionUnk2B; - unsigned __int8 companionColor; - unsigned __int8 companionFavoFeed; - unsigned __int8 companionUnk89; - unsigned __int8 companionUnk90[5]; - unsigned __int16 unknown90[7]; - unsigned __int16 unknown9E; - unsigned __int16 unknownA0; - unsigned int exp[25]; - unsigned __int8 unknown564[16]; - unsigned int pvpFrontlineOverall1st; - unsigned int pvpFrontlineOverall2nd; - unsigned int pvpFrontlineOverall3rd; - unsigned __int8 relicBookCompletion1[4]; - unsigned __int16 levels[25]; - unsigned __int16 levelsPadding; - unsigned __int16 unknown15C[8]; - unsigned __int16 fishingRecordsFish[26]; - unsigned __int16 fishingRecordsFishWeight[26]; - unsigned __int8 unknownMask554[44]; - unsigned __int8 companion_name[21]; - unsigned __int8 companionDefRank; - unsigned __int8 companionAttRank; - unsigned __int8 companionHealRank; - unsigned __int8 mountGuideMask[16]; + uint64_t contentId; + uint32_t unknown8; + uint32_t unknownC; + uint32_t charId; + uint32_t restedExp; + uint32_t companionCurrentExp; + 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; + uint16_t frontlineCampaigns[4]; + uint16_t frontlineCampaignsWeekly; + uint16_t currentRelic; + uint16_t currentBook; + uint16_t masterCrafterMask; + uint16_t unknown69; + uint16_t unknown6A; + uint16_t unknown6B; + uint16_t unknown6C[4]; + uint16_t unknown50[34]; + uint16_t unknown18; + uint16_t maxLevel; + uint16_t expansion; + uint16_t unknown76; + uint16_t race; + uint16_t tribe; + uint16_t gender; + uint16_t currentJob; + uint16_t currentClass; + uint16_t deity; + uint16_t namedayMonth; + uint16_t namedayDay; + uint16_t cityState; + uint16_t homepoint; + uint16_t unknown26; + uint16_t petHotBar; + uint16_t companionRank; + uint16_t companionStars; + uint16_t companionSp; + uint16_t companionUnk2B; + uint16_t companionColor; + uint16_t companionFavoFeed; + uint16_t companionUnk89; + uint16_t companionUnk90[5]; + uint16_t unknown90[7]; + uint16_t unknown9E; + uint16_t unknownA0; + uint32_t exp[25]; + uint16_t unknown564[16]; + uint32_t pvpFrontlineOverall1st; + uint32_t pvpFrontlineOverall2nd; + uint32_t pvpFrontlineOverall3rd; + uint16_t relicBookCompletion1[4]; + uint16_t levels[25]; + uint16_t levelsPadding; + uint16_t unknown15C[8]; + uint16_t fishingRecordsFish[26]; + uint16_t fishingRecordsFishWeight[26]; + uint16_t unknownMask554[44]; + uint16_t companion_name[21]; + uint16_t companionDefRank; + uint16_t companionAttRank; + uint16_t companionHealRank; + uint16_t mountGuideMask[16]; char name[32]; - unsigned __int8 unknownOword[16]; - unsigned __int8 unknown258; - unsigned __int8 unlockBitmask[64]; - unsigned __int8 aetheryte[17]; - unsigned __int8 discovery[421]; - unsigned __int8 howto[33]; - unsigned __int8 minions[38]; - unsigned __int8 chocoboTaxiMask[8]; - unsigned __int8 contentClearMask[111]; - unsigned __int8 contentClearPadding; - unsigned __int16 unknown428[8]; - unsigned __int8 companionBardingMask[8]; - unsigned __int8 companionEquippedHead; - unsigned __int8 companionEquippedBody; - unsigned __int8 companionEquippedFeet; - unsigned __int8 companionUnk4[4]; - unsigned __int8 companion_fields[11]; - unsigned __int8 fishingGuideMask[89]; - unsigned __int8 fishingSpotVisited[25]; - unsigned __int8 unknownMask4Padding; - unsigned __int8 rankAmalJaa; - unsigned __int8 rankSylph; - unsigned __int8 rankKobold; - unsigned __int8 rankSahagin; - unsigned __int8 rankIxal; - unsigned __int8 rankVanu; - unsigned __int8 rankVath; - unsigned __int8 rankMoogle; - unsigned __int8 rankKojin; - unsigned __int8 rankAnata; - unsigned __int16 expAmalJaa; - unsigned __int16 expSylph; - unsigned __int16 expKobold; - unsigned __int16 expSahagin; - unsigned __int16 expIxal; - unsigned __int16 expVanu; - unsigned __int16 expVath; - unsigned __int16 expMoogle; - unsigned __int16 expKojin; - unsigned __int16 expAnata; - unsigned __int8 unknown596[10]; - unsigned __int16 unknown5A0[5]; - unsigned __int8 unknownMask59E[5]; - unsigned __int8 unknown5A3[18]; - unsigned __int8 unknownMask5C1[28]; - unsigned __int8 unknown_03411; - unsigned int unknownDword5E0; - unsigned __int16 pvpFrontlineWeekly1st; - unsigned __int16 pvpFrontlineWeekly2nd; - unsigned __int16 pvpFrontlineWeekly3rd; - unsigned __int8 relicBookCompletion2[8]; - unsigned __int8 sightseeingMask[26]; - unsigned __int16 unknown_XXX; - unsigned __int8 unknown61E[20]; - unsigned __int8 unknown656[29]; - unsigned __int8 unknown63F[22]; - unsigned __int8 tripleTriadCards[28]; - unsigned __int8 unknown671[11]; - unsigned __int8 unknownMask67C[22]; - unsigned __int8 unknown692[3]; - unsigned __int8 orchestrionMask[40]; - unsigned __int8 hallOfNoviceCompleteMask[3]; - unsigned __int8 unknownMask6C0[11]; - unsigned __int8 unknownMask6CB[16]; - unsigned __int8 unknown6DB[14]; - unsigned __int8 unlockedRaids[28]; - unsigned __int8 unlockedDungeons[18]; - unsigned __int8 unlockedGuildhests[10]; - unsigned __int8 unlockedTrials[7]; - unsigned __int8 unlockedPvp[5]; - unsigned __int8 unknownMask72D[28]; + uint16_t unknownOword[16]; + uint16_t unknown258; + uint16_t unlockBitmask[64]; + uint16_t aetheryte[17]; + uint16_t discovery[421]; + uint16_t howto[33]; + uint16_t minions[38]; + uint16_t chocoboTaxiMask[8]; + uint16_t contentClearMask[111]; + uint16_t contentClearPadding; + uint16_t unknown428[8]; + uint16_t companionBardingMask[8]; + uint16_t companionEquippedHead; + uint16_t companionEquippedBody; + uint16_t companionEquippedFeet; + uint16_t companionUnk4[4]; + uint16_t companion_fields[11]; + uint16_t fishingGuideMask[89]; + uint16_t fishingSpotVisited[25]; + uint16_t unknownMask4Padding; + uint16_t rankAmalJaa; + uint16_t rankSylph; + uint16_t rankKobold; + uint16_t rankSahagin; + uint16_t rankIxal; + uint16_t rankVanu; + uint16_t rankVath; + uint16_t rankMoogle; + uint16_t rankKojin; + uint16_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; + uint16_t unknown596[10]; + uint16_t unknown5A0[5]; + uint16_t unknownMask59E[5]; + uint16_t unknown5A3[18]; + uint16_t unknownMask5C1[28]; + uint16_t unknown_03411; + uint32_t unknownDword5E0; + uint16_t pvpFrontlineWeekly1st; + uint16_t pvpFrontlineWeekly2nd; + uint16_t pvpFrontlineWeekly3rd; + uint16_t relicBookCompletion2[8]; + uint16_t sightseeingMask[26]; + uint16_t unknown_XXX; + uint16_t unknown61E[20]; + uint16_t unknown656[29]; + uint16_t unknown63F[22]; + uint16_t tripleTriadCards[28]; + uint16_t unknown671[11]; + uint16_t unknownMask67C[22]; + uint16_t unknown692[3]; + uint16_t orchestrionMask[40]; + uint16_t hallOfNoviceCompleteMask[3]; + uint16_t unknownMask6C0[11]; + uint16_t unknownMask6CB[16]; + uint16_t unknown6DB[14]; + uint16_t unlockedRaids[28]; + uint16_t unlockedDungeons[18]; + uint16_t unlockedGuildhests[10]; + uint16_t unlockedTrials[7]; + uint16_t unlockedPvp[5]; + uint16_t unknownMask72D[28]; }; 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/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/Network/GameConnection.cpp b/src/servers/sapphire_zone/Network/GameConnection.cpp index 31fc5062..a106481f 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.cpp +++ b/src/servers/sapphire_zone/Network/GameConnection.cpp @@ -4,6 +4,8 @@ #include #include #include + +#include #include #include diff --git a/src/servers/sapphire_zone/Network/GameConnection.h b/src/servers/sapphire_zone/Network/GameConnection.h index e8a8af37..ec14ec94 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.h +++ b/src/servers/sapphire_zone/Network/GameConnection.h @@ -2,7 +2,7 @@ #define GAMECONNECTION_H #include -#include + #include #include #include diff --git a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp index 7f1d99d0..110a1107 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" @@ -18,7 +17,6 @@ #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" @@ -33,16 +31,11 @@ #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" diff --git a/src/servers/sapphire_zone/ServerZone.cpp b/src/servers/sapphire_zone/ServerZone.cpp index 25a6e323..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 " ); From 86b2a9cdedefeec90f9a67bee6c7d722da59cdc9 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 2 Jun 2018 15:52:35 +0200 Subject: [PATCH 22/31] More cleanup yet --- src/servers/sapphire_zone/Action/ActionCollision.cpp | 1 - src/servers/sapphire_zone/Action/ActionCollision.h | 4 ++-- src/servers/sapphire_zone/Action/ActionMount.h | 2 +- src/servers/sapphire_zone/Action/ActionTeleport.h | 2 +- src/servers/sapphire_zone/Action/EventAction.cpp | 1 - src/servers/sapphire_zone/Action/EventAction.h | 2 +- src/servers/sapphire_zone/Action/EventItemAction.h | 2 +- src/servers/sapphire_zone/Actor/Actor.cpp | 10 +--------- src/servers/sapphire_zone/Actor/Chara.cpp | 1 - src/servers/sapphire_zone/Actor/EventObject.cpp | 1 - src/servers/sapphire_zone/Actor/EventObject.h | 7 ++++--- src/servers/sapphire_zone/Actor/Player.cpp | 5 ----- src/servers/sapphire_zone/Actor/PlayerEvent.cpp | 5 ----- src/servers/sapphire_zone/Actor/PlayerQuest.cpp | 2 -- src/servers/sapphire_zone/Actor/PlayerSql.cpp | 6 ------ .../sapphire_zone/DebugCommand/DebugCommandHandler.cpp | 3 --- src/servers/sapphire_zone/Event/EventHandler.h | 2 +- src/servers/sapphire_zone/Event/EventHelper.cpp | 6 ++++-- src/servers/sapphire_zone/Inventory/Inventory.h | 2 +- src/servers/sapphire_zone/Inventory/ItemContainer.h | 2 +- src/servers/sapphire_zone/Network/GameConnection.cpp | 3 +-- src/servers/sapphire_zone/Network/GameConnection.h | 6 ++++-- .../sapphire_zone/Network/Handlers/ActionHandler.cpp | 4 ---- .../sapphire_zone/Network/Handlers/CFHandlers.cpp | 3 --- .../sapphire_zone/Network/Handlers/EventHandlers.cpp | 4 +--- .../Network/Handlers/GMCommandHandlers.cpp | 9 --------- .../Network/Handlers/InventoryHandler.cpp | 3 +-- .../sapphire_zone/Network/Handlers/PacketHandlers.cpp | 7 ------- .../sapphire_zone/Network/Handlers/SkillHandler.cpp | 3 --- 29 files changed, 25 insertions(+), 83 deletions(-) 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..eac02744 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.cpp +++ b/src/servers/sapphire_zone/Actor/EventObject.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include 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 9aed1649..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" 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/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.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 a106481f..e885a994 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.cpp +++ b/src/servers/sapphire_zone/Network/GameConnection.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include "Zone/Zone.h" @@ -15,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 ec14ec94..07e17bc3 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.h +++ b/src/servers/sapphire_zone/Network/GameConnection.h @@ -4,7 +4,7 @@ #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 110a1107..35808521 100644 --- a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp @@ -15,7 +15,6 @@ #include "Zone/TerritoryMgr.h" #include "Zone/Zone.h" #include "Zone/InstanceContent.h" -#include "Zone/ZonePosition.h" #include "Network/PacketWrappers/InitUIPacket.h" #include "Network/PacketWrappers/PingPacket.h" @@ -29,15 +28,7 @@ #include "Network/PacketWrappers/EventFinishPacket.h" #include "Network/PacketWrappers/PlayerStateFlagsPacket.h" -#include "DebugCommand/DebugCommandHandler.h" - -#include "Event/EventHelper.h" - -#include "Action/Action.h" -#include "Action/ActionTeleport.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..49efc3de 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" 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; From fbc6c42a483c38f83c8231c5c8e523bc840d68bb Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 2 Jun 2018 18:09:29 +0200 Subject: [PATCH 23/31] Reordered IPC list --- src/common/Network/PacketDef/Ipcs.h | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 7d1af019..0515d755 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -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, @@ -74,6 +73,7 @@ namespace Packets { CFRegistered = 0x00B8, // updated 4.1 SocialRequestResponse = 0x00BB, // updated 4.1 CancelAllianceForming = 0x00C6, // updated 4.2 + Chat = 0x00F7, // updated 4.3 SocialList = 0x00FD, // updated 4.3 @@ -111,7 +111,8 @@ namespace Packets { ObjectSpawn = 0x017D, // updated 4.3 ObjectDespawn = 0x017E, // updated 4.3 - UpdateClassInfo = 0x018A, // updated 4.3 + + InventoryActionAck = 0x0180, // updated 4.2 ? InitUI = 0x0181, // updated 4.3 PlayerStats = 0x0182, // updated 4.3 @@ -120,13 +121,14 @@ namespace Packets { PlayerClassInfo = 0x0185, // updated 4.3 ModelEquip = 0x0186, // updated 4.3 + 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 - InventoryActionAck = 0x0180, // updated 4.2 ? UpdateInventorySlot = 0x0198, // updated 4.3 EventPlay = 0x01A6, // updated 4.3 @@ -137,21 +139,24 @@ namespace Packets { EventLinkshell = 0x1169, - QuestMessage = 0x01CE, // updated 4.3 - QuestTracker = 0x01D3, // updated 4.3 + QuestActiveList = 0x01C3, // updated 4.3 + QuestUpdate = 0x01C4, // updated 4.3 + QuestCompleteList = 0x01C5, // updated 4.3 QuestFinish = 0x01C6, // updated 4.3 MSQTrackerComplete = 0x01C7, // updated 4.3 MSQTrackerProgress = 0x01C8, // updated 4.3 - QuestActiveList = 0x01C3, // updated 4.3 - QuestUpdate = 0x01C4, // updated 4.3 - QuestCompleteList = 0x01C5, // updated 4.3 + QuestMessage = 0x01CE, // updated 4.3 + + QuestTracker = 0x01D3, // updated 4.3 Mount = 0x01E3, // updated 4.3 DirectorVars = 0x01E5, // updated 4.3 + CFAvailableContents = 0x01FD, // updated 4.2 + WeatherChange = 0x0200, // updated 4.3 PlayerTitleList = 0x0201, // updated 4.3 Discovery = 0x0202, // updated 4.3 @@ -160,13 +165,13 @@ namespace Packets { EquipDisplayFlags = 0x0210, // updated 4.3 - CFAvailableContents = 0x01FD, // updated 4.2 + 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.3 + // Unknown IPC types that still need to be sent // TODO: figure all these out properly From 10a39b26253e45dbe7ae6c5e484cfd9c3deabdf3 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sun, 3 Jun 2018 19:31:03 +0200 Subject: [PATCH 24/31] Cleanup cleanup cleanup --- src/common/Network/CommonNetwork.h | 56 +++++------ src/common/Network/GamePacket.cpp | 2 +- src/common/Network/GamePacketNew.h | 28 +++--- src/common/Network/GamePacketParser.cpp | 96 +++++++------------ src/common/Network/PacketContainer.cpp | 4 +- src/common/Network/PacketContainer.h | 6 +- .../sapphire_zone/Actor/EventObject.cpp | 1 - .../Network/Handlers/PacketHandlers.cpp | 7 +- 8 files changed, 82 insertions(+), 118 deletions(-) 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..b5072b8f 100644 --- a/src/common/Network/GamePacket.cpp +++ b/src/common/Network/GamePacket.cpp @@ -88,7 +88,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 ); diff --git a/src/common/Network/GamePacketNew.h b/src/common/Network/GamePacketNew.h index b59a0cdf..451c4eee 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,11 +31,11 @@ using ChatChannelPacket = GamePacketNew< T, ServerChatIpcType >; /** * The base implementation of a game packet. Needed for parsing packets. */ -template -class GamePacketNewBase +template < typename T1 > +class FFXIVPacketBase { public: - virtual ~GamePacketNewBase() = default; + virtual ~FFXIVPacketBase() = default; /** * @brief Gets the IPC type of this packet. (Useful for determining the * type of a parsed packet.) @@ -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 FFXIVPacketBase< 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; @@ -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..4a9fd067 100644 --- a/src/common/Network/GamePacketParser.cpp +++ b/src/common/Network/GamePacketParser.cpp @@ -11,80 +11,67 @@ namespace Core { namespace Packets { - PacketParseResult getHeader( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - FFXIVARR_PACKET_HEADER &header) + PacketParseResult getHeader( const std::vector< uint8_t > &buffer, + const uint32_t offset, + FFXIVARR_PACKET_HEADER &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 ) - { + if( remainingBytes < headerSize ) return Incomplete; - } // Copy packet header. memcpy( &header, buffer.data() + offset, headerSize ); - if ( !checkHeader(header) ) - { + if( !checkHeader(header) ) return Malformed; - } return Success; } - PacketParseResult getSegmentHeader( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - FFXIVARR_PACKET_SEGMENT_HEADER &header) + 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) - { + if( remainingBytes < headerSize ) return Incomplete; - } // Copy segment header - memcpy(&header, buffer.data() + offset, headerSize); + 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) + 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 ) - { + 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 ) + while( count < packetHeader.count ) { FFXIVARR_PACKET_RAW rawPacket; // Copy ipc packet message - const auto packetResult = getPacket(buffer, offset + bytesProcessed, rawPacket); - if ( packetResult != Success ) - { + 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? + // why is okay to do this? packets.push_back( rawPacket ); // Add message size and count @@ -94,34 +81,25 @@ namespace Core // 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 ) - { + if( bytesExpected != bytesProcessed ) return Malformed; - } return Success; } - PacketParseResult getPacket( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - FFXIVARR_PACKET_RAW &packet - ) + 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 ) - { + const auto headerResult = getSegmentHeader( buffer, offset, packet.segHdr ); + if( headerResult != Success ) return headerResult; - } // Check header sanity and it's size - if ( !checkSegmentHeader( packet.segHdr ) ) - { + if( !checkSegmentHeader( packet.segHdr ) ) return Malformed; - } - const auto dataOffset = offset + sizeof(struct FFXIVARR_PACKET_SEGMENT_HEADER); + const auto dataOffset = offset + sizeof( struct FFXIVARR_PACKET_SEGMENT_HEADER ); const auto dataSize = packet.segHdr.size; // Allocate data buffer and copy @@ -131,30 +109,24 @@ namespace Core return Success; } - bool checkHeader(const FFXIVARR_PACKET_HEADER &header) + bool checkHeader( const FFXIVARR_PACKET_HEADER &header ) { // Max size of the packet is capped at 1MB for now. - if ( header.size > 1 * 1024 * 1024 ) - { + if( header.size > 1 * 1024 * 1024 ) return false; - } // Max number of message is capped at 255 for now. - if ( header.count > 255 ) - { + if( header.count > 255 ) return false; - } return true; } - - bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header) + + bool checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER &header ) { // Max size of individual message is capped at 256KB for now. - if ( header.size > 256 * 1024 ) - { + if( header.size > 256 * 1024 ) return false; - } return true; } 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/servers/sapphire_zone/Actor/EventObject.cpp b/src/servers/sapphire_zone/Actor/EventObject.cpp index eac02744..79244193 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.cpp +++ b/src/servers/sapphire_zone/Actor/EventObject.cpp @@ -7,7 +7,6 @@ #include #include #include -#include #include using namespace Core::Common; diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 49efc3de..a0b55b65 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -48,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, From 8f2c6f0e87addbb8552e4248d095249d8ebad834 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sun, 3 Jun 2018 19:50:21 +0200 Subject: [PATCH 25/31] Buildfix --- src/common/Network/GamePacket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/Network/GamePacket.cpp b/src/common/Network/GamePacket.cpp index b5072b8f..c4d61f81 100644 --- a/src/common/Network/GamePacket.cpp +++ b/src/common/Network/GamePacket.cpp @@ -23,7 +23,7 @@ void Core::Network::Packets::GamePacket::setHeader( uint16_t size, uint16_t type 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 ) ); From d7481b0b86f8ba9c129e606afc90c0d2218e56dd Mon Sep 17 00:00:00 2001 From: goaaats <16760685+goaaats@users.noreply.github.com> Date: Sun, 3 Jun 2018 20:47:22 +0200 Subject: [PATCH 26/31] Update README.md --- README.md | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) 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 From c1be28e9d3cf8f479be25feb56c259085ac4c257 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 5 Jun 2018 20:16:35 +1000 Subject: [PATCH 27/31] add new ultimate instance script --- .../raids/TheWeaponsRefrainUltimate.cpp | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp diff --git a/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp new file mode 100644 index 00000000..49780ca0 --- /dev/null +++ b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp @@ -0,0 +1,37 @@ +#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( boost::shared_ptr instance, Core::Entity::Player& player, + unsigned int eventId, unsigned short param1, unsigned short param2 ) override + { + + } + +}; \ No newline at end of file From 17018d6ccb6c1b6ee310f9585c3088e81ef95098 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 5 Jun 2018 20:22:05 +1000 Subject: [PATCH 28/31] fix incorrect type usage --- .../Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp index 49780ca0..96204fbf 100644 --- a/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp +++ b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp @@ -28,8 +28,7 @@ public: } - void onEnterTerritory( boost::shared_ptr instance, Core::Entity::Player& player, - unsigned int eventId, unsigned short param1, unsigned short param2 ) override + void onEnterTerritory( InstanceContentPtr instance, Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override { } From 78f8cdbaf561d0ceaa3d6d673b63b7833dca60d6 Mon Sep 17 00:00:00 2001 From: Mordred Date: Thu, 7 Jun 2018 20:32:02 +0200 Subject: [PATCH 29/31] Fixed initui packet -> equipping gear fixed --- .../Network/PacketDef/Zone/ServerZoneDef.h | 284 +++++++++--------- 1 file changed, 145 insertions(+), 139 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 3baa1305..d8a628a8 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -612,146 +612,152 @@ 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; - uint32_t companionCurrentExp; - 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; - uint16_t frontlineCampaigns[4]; - uint16_t frontlineCampaignsWeekly; - uint16_t currentRelic; - uint16_t currentBook; - uint16_t masterCrafterMask; - uint16_t unknown69; - uint16_t unknown6A; - uint16_t unknown6B; - uint16_t unknown6C[4]; - uint16_t unknown50[34]; - uint16_t unknown18; - uint16_t maxLevel; - uint16_t expansion; - uint16_t unknown76; - uint16_t race; - uint16_t tribe; - uint16_t gender; - uint16_t currentJob; - uint16_t currentClass; - uint16_t deity; - uint16_t namedayMonth; - uint16_t namedayDay; - uint16_t cityState; - uint16_t homepoint; - uint16_t unknown26; - uint16_t petHotBar; - uint16_t companionRank; - uint16_t companionStars; - uint16_t companionSp; - uint16_t companionUnk2B; - uint16_t companionColor; - uint16_t companionFavoFeed; - uint16_t companionUnk89; - uint16_t companionUnk90[5]; - uint16_t unknown90[7]; - uint16_t unknown9E; - uint16_t unknownA0; - uint32_t exp[25]; - uint16_t unknown564[16]; - uint32_t pvpFrontlineOverall1st; - uint32_t pvpFrontlineOverall2nd; - uint32_t pvpFrontlineOverall3rd; - uint16_t relicBookCompletion1[4]; - uint16_t levels[25]; - uint16_t levelsPadding; - uint16_t unknown15C[8]; - uint16_t fishingRecordsFish[26]; - uint16_t fishingRecordsFishWeight[26]; - uint16_t unknownMask554[44]; - uint16_t companion_name[21]; - uint16_t companionDefRank; - uint16_t companionAttRank; - uint16_t companionHealRank; - uint16_t mountGuideMask[16]; + 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]; - uint16_t unknownOword[16]; - uint16_t unknown258; - uint16_t unlockBitmask[64]; - uint16_t aetheryte[17]; - uint16_t discovery[421]; - uint16_t howto[33]; - uint16_t minions[38]; - uint16_t chocoboTaxiMask[8]; - uint16_t contentClearMask[111]; - uint16_t contentClearPadding; - uint16_t unknown428[8]; - uint16_t companionBardingMask[8]; - uint16_t companionEquippedHead; - uint16_t companionEquippedBody; - uint16_t companionEquippedFeet; - uint16_t companionUnk4[4]; - uint16_t companion_fields[11]; - uint16_t fishingGuideMask[89]; - uint16_t fishingSpotVisited[25]; - uint16_t unknownMask4Padding; - uint16_t rankAmalJaa; - uint16_t rankSylph; - uint16_t rankKobold; - uint16_t rankSahagin; - uint16_t rankIxal; - uint16_t rankVanu; - uint16_t rankVath; - uint16_t rankMoogle; - uint16_t rankKojin; - uint16_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; - uint16_t unknown596[10]; - uint16_t unknown5A0[5]; - uint16_t unknownMask59E[5]; - uint16_t unknown5A3[18]; - uint16_t unknownMask5C1[28]; - uint16_t unknown_03411; - uint32_t unknownDword5E0; - uint16_t pvpFrontlineWeekly1st; - uint16_t pvpFrontlineWeekly2nd; - uint16_t pvpFrontlineWeekly3rd; - uint16_t relicBookCompletion2[8]; - uint16_t sightseeingMask[26]; - uint16_t unknown_XXX; - uint16_t unknown61E[20]; - uint16_t unknown656[29]; - uint16_t unknown63F[22]; - uint16_t tripleTriadCards[28]; - uint16_t unknown671[11]; - uint16_t unknownMask67C[22]; - uint16_t unknown692[3]; - uint16_t orchestrionMask[40]; - uint16_t hallOfNoviceCompleteMask[3]; - uint16_t unknownMask6C0[11]; - uint16_t unknownMask6CB[16]; - uint16_t unknown6DB[14]; - uint16_t unlockedRaids[28]; - uint16_t unlockedDungeons[18]; - uint16_t unlockedGuildhests[10]; - uint16_t unlockedTrials[7]; - uint16_t unlockedPvp[5]; - uint16_t unknownMask72D[28]; + 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]; }; From 2d5d0debca1cbb51e619a4a5c6591f97526ac69d Mon Sep 17 00:00:00 2001 From: Mordred Date: Thu, 7 Jun 2018 20:33:06 +0200 Subject: [PATCH 30/31] Cleanup --- src/common/Network/GamePacket.cpp | 20 +- src/common/Network/GamePacketNew.h | 12 +- src/common/Network/GamePacketParser.cpp | 235 ++++++++++++------------ src/common/Network/GamePacketParser.h | 85 ++++----- 4 files changed, 167 insertions(+), 185 deletions(-) diff --git a/src/common/Network/GamePacket.cpp b/src/common/Network/GamePacket.cpp index c4d61f81..bc142ab5 100644 --- a/src/common/Network/GamePacket.cpp +++ b/src/common/Network/GamePacket.cpp @@ -7,16 +7,17 @@ #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; @@ -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 ); @@ -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 451c4eee..595b8222 100644 --- a/src/common/Network/GamePacketNew.h +++ b/src/common/Network/GamePacketNew.h @@ -20,7 +20,7 @@ template < typename T, typename T1 > class GamePacketNew; template < typename T, typename T1 > -std::ostream& operator<< ( std::ostream& os, const GamePacketNew< T, T1 >& packet ); +std::ostream& operator << ( std::ostream& os, const GamePacketNew< T, T1 >& packet ); template< class T > using ZoneChannelPacket = GamePacketNew< T, ServerZoneIpcType >; @@ -32,15 +32,15 @@ using ChatChannelPacket = GamePacketNew< T, ServerChatIpcType >; * The base implementation of a game packet. Needed for parsing packets. */ template < typename T1 > -class FFXIVPacketBase +class FFXIVIpcPacketBase { public: - virtual ~FFXIVPacketBase() = 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; }; /** @@ -50,7 +50,7 @@ public: * 32 byte header information.) */ template < typename T, typename T1 > -class GamePacketNew : public FFXIVPacketBase< T1 > +class GamePacketNew : public FFXIVIpcPacketBase< T1 > { public: /** @@ -96,7 +96,7 @@ protected: }; public: - virtual T1 ipcType( void ) + virtual T1 ipcType() { return static_cast< T1 >( m_data._ServerIpcType ); }; diff --git a/src/common/Network/GamePacketParser.cpp b/src/common/Network/GamePacketParser.cpp index 4a9fd067..52cfe1a3 100644 --- a/src/common/Network/GamePacketParser.cpp +++ b/src/common/Network/GamePacketParser.cpp @@ -5,131 +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); + +} +} } From 4cd71f53fdbedc3ab389fb36fda43d7c8b91e395 Mon Sep 17 00:00:00 2001 From: Perize Date: Sun, 10 Jun 2018 13:26:43 +0900 Subject: [PATCH 31/31] opcode --- src/common/Common.h | 2 ++ src/common/Network/PacketDef/Ipcs.h | 3 +++ 2 files changed, 5 insertions(+) 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/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 0515d755..56f8e6a0 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -107,11 +107,14 @@ namespace Packets { ActorCast = 0x0178, // updated 4.3 + PartyList = 0x017A, // updated 4.3 HateList = 0x017B, // updated 4.3 ObjectSpawn = 0x017D, // updated 4.3 ObjectDespawn = 0x017E, // updated 4.3 + SetLevelSync = 0x017F, // updated 4.3 + InventoryActionAck = 0x0180, // updated 4.2 ? InitUI = 0x0181, // updated 4.3