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