From 4b1566f1edf1d2140c689b839f4fc29a18a38845 Mon Sep 17 00:00:00 2001 From: karashiiro <49822414+karashiiro@users.noreply.github.com> Date: Fri, 9 Aug 2019 19:01:09 -0700 Subject: [PATCH 1/7] MarketBoardItemListing opcode/packet structure; organizational corrections Corrected a typo, reordered market board packets and moved them up to their corresponding positions relative to their position in Ipcs.h --- src/common/Network/PacketDef/Ipcs.h | 2 +- .../Network/PacketDef/Zone/ServerZoneDef.h | 128 ++++++++++++------ 2 files changed, 84 insertions(+), 46 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index b30f73ae..0b47938f 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -107,7 +107,7 @@ namespace Sapphire::Network::Packets MailLetterNotification = 0x013A, // updated 5.0 MarketBoardItemListingCount = 0x0125, // updated 4.5 - MarketBoardItemListing = 0x0126, // updated 4.5 + MarketBoardItemListing = 0x013C, // updated 5.0 MarketBoardItemListingHistory = 0x012A, // updated 4.5 MarketBoardSearchResult = 0x0139, // updated 4.5 diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 6649feb8..5965bcf2 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -272,7 +272,7 @@ namespace Sapphire::Network::Packets::Server * Structural representation of the packet sent by the server * to show the mail delivery notification */ - struct FFXIVIpcMailLetterNotificationt : FFXIVIpcBasePacket< MailLetterNotification > + struct FFXIVIpcMailLetterNotification : FFXIVIpcBasePacket< MailLetterNotification > { uint32_t sendbackCount; // The amount of letters sent back since you ran out of room (moogle dialog changes based on this) uint16_t friendLetters; // The amount of letters in the friends section of the letterbox @@ -283,6 +283,88 @@ namespace Sapphire::Network::Packets::Server char unk2[0x4]; // This has probs something to do with the support desk (inquiry id?) }; + struct FFFXIVIpcMarketBoardItemListingCount : FFXIVIpcBasePacket< MarketBoardItemListingCount > + { + uint32_t itemCatalogId; + uint32_t unknown1; // does some shit if nonzero + uint16_t requestId; + uint16_t quantity; // high/low u8s read separately? + uint32_t unknown3; + }; + + struct FFXIVIpcMarketBoardItemListing : FFXIVIpcBasePacket< MarketBoardItemListing > + { + struct itemListing // 152 bytes each + { + uint32_t unknown; + uint8_t padding; + uint16_t unknown1; + uint8_t padding1; + struct unknown2 + { + uint32_t unknown3; + uint16_t unknown4; + uint16_t unknown5; + } unknown6[3]; + uint32_t pricePerUnit; + uint32_t unknown7; + uint32_t itemQuantity; + uint32_t unknown8; + uint32_t unknown9; + uint32_t unknown10; + uint32_t unknown11; + char padding2[16]; + char retainerName[64]; + bool hq; + uint16_t padding3; + uint8_t unknown12; + uint64_t padding4; + } listing[10]; // Multiple packets are sent if there are more than 10 search results. + uint32_t unknown13; + char padding5[16]; + uint8_t unknown14; + uint16_t padding6; + uint8_t unknown15; + uint64_t padding7; + uint32_t unknown16; + uint32_t padding8; + }; + + struct FFXIVIpcMarketBoardItemListingHistory : FFXIVIpcBasePacket< MarketBoardItemListingHistory > + { + uint32_t itemCatalogId; + uint32_t itemCatalogId2; + + struct MarketListing + { + uint32_t salePrice; + uint32_t purchaseTime; + uint32_t quantity; + uint8_t isHq; + uint8_t padding; + uint8_t onMannequin; + + char buyerName[33]; + + uint32_t itemCatalogId; + } listing[20]; + }; + + struct FFXIVIpcMarketBoardSearchResult : FFXIVIpcBasePacket< MarketBoardSearchResult > + { + struct MarketBoardItem + { + uint32_t itemCatalogId; + uint16_t quantity; + uint16_t demand; + } items[20]; + + uint32_t itemIndexEnd; + uint32_t padding1; + uint32_t itemIndexStart; + uint32_t requestId; + }; + struct FFXIVIpcExamineFreeCompanyInfo : FFXIVIpcBasePacket< ExamineFreeCompanyInfo > { char unknown[0x20]; // likely fc allegiance/icon/housing info etc @@ -1889,50 +1971,6 @@ namespace Sapphire::Network::Packets::Server char otherName[32]; }; - struct FFXIVIpcMarketBoardSearchResult : FFXIVIpcBasePacket< MarketBoardSearchResult > - { - struct MarketBoardItem - { - uint32_t itemCatalogId; - uint16_t quantity; - uint16_t demand; - } items[20]; - - uint32_t itemIndexEnd; - uint32_t padding1; - uint32_t itemIndexStart; - uint32_t requestId; - }; - - struct FFFXIVIpcMarketBoardItemListingCount : FFXIVIpcBasePacket< MarketBoardItemListingCount > - { - uint32_t itemCatalogId; - uint32_t unknown1; // does some shit if nonzero - uint16_t requestId; - uint16_t quantity; // high/low u8s read separately? - uint32_t unknown3; - }; - - struct FFXIVIpcMarketBoardItemListingHistory : FFXIVIpcBasePacket< MarketBoardItemListingHistory > - { - uint32_t itemCatalogId; - uint32_t itemCatalogId2; - - struct MarketListing - { - uint32_t salePrice; - uint32_t purchaseTime; - uint32_t quantity; - uint8_t isHq; - uint8_t padding; - uint8_t onMannequin; - - char buyerName[33]; - - uint32_t itemCatalogId; - } listing[20]; - }; - } #endif /*_CORE_NETWORK_PACKETS_SERVER_IPC_H*/ From 0cf9b8a7963dd9e6a44b00b971e195deda6a4fee Mon Sep 17 00:00:00 2001 From: karashiiro <49822414+karashiiro@users.noreply.github.com> Date: Wed, 14 Aug 2019 19:44:02 -0700 Subject: [PATCH 2/7] Got two more useful pieces of data, renamed padding12 to unknown12 It seems to contain materia IDs as uint16_t values, with 6 bytes of padding somewhere? --- src/common/Network/PacketDef/Zone/ServerZoneDef.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 5965bcf2..d4d29a2c 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -313,11 +313,20 @@ namespace Sapphire::Network::Packets::Server uint32_t unknown9; uint32_t unknown10; uint32_t unknown11; - char padding2[16]; + char unknown12[16]; // Materia? Doesn't seem to match any IDs char retainerName[64]; bool hq; - uint16_t padding3; - uint8_t unknown12; + uint8_t materiaCount; + uint8_t padding3; + uint8_t retainerCity; + /** + * 0x01 Limsa Lominsa + * 0x02 Gridania + * 0x03 Ul'dah + * 0x04 Ishgard + * 0x07 Kugane + * 0x0A Crystarium + */ uint64_t padding4; } listing[10]; // Multiple packets are sent if there are more than 10 search results. uint32_t unknown13; From 3a5f0d9805383c9c5f14377634e8ac66651352c8 Mon Sep 17 00:00:00 2001 From: karashiiro <49822414+karashiiro@users.noreply.github.com> Date: Fri, 16 Aug 2019 14:19:39 -0700 Subject: [PATCH 3/7] it's always 30000 added itemID, materiaValue[5] --- .../Network/PacketDef/Zone/ServerZoneDef.h | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index d4d29a2c..44b9510e 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -296,7 +296,7 @@ namespace Sapphire::Network::Packets::Server { struct itemListing // 152 bytes each { - uint32_t unknown; + uint32_t unknown; // Changes if multiple packets are sent for a single item uint8_t padding; uint16_t unknown1; uint8_t padding1; @@ -309,15 +309,18 @@ namespace Sapphire::Network::Packets::Server uint32_t pricePerUnit; uint32_t unknown7; uint32_t itemQuantity; - uint32_t unknown8; - uint32_t unknown9; + uint32_t itemID; + uint16_t unknown8; + uint16_t unknown9; uint32_t unknown10; - uint32_t unknown11; - char unknown12[16]; // Materia? Doesn't seem to match any IDs + uint16_t unknown11; // Always 30000 + uint16_t padding3; + uint16_t materiaValue[5]; // Materia ID = (materiaValue & 0xFF0) >> 4 + uint32_t padding4; char retainerName[64]; bool hq; uint8_t materiaCount; - uint8_t padding3; + uint8_t padding5; uint8_t retainerCity; /** * 0x01 Limsa Lominsa @@ -327,16 +330,16 @@ namespace Sapphire::Network::Packets::Server * 0x07 Kugane * 0x0A Crystarium */ - uint64_t padding4; + uint64_t padding6; } listing[10]; // Multiple packets are sent if there are more than 10 search results. - uint32_t unknown13; - char padding5[16]; + uint32_t unknown12; + char padding7[16]; + uint8_t unknown13; + uint16_t padding8; uint8_t unknown14; - uint16_t padding6; - uint8_t unknown15; - uint64_t padding7; - uint32_t unknown16; - uint32_t padding8; + uint64_t padding9; + uint32_t unknown15; + uint32_t padding10; }; struct FFXIVIpcMarketBoardItemListingHistory : FFXIVIpcBasePacket< MarketBoardItemListingHistory > From 142bd93af05c842696c3ada7f057f9129af66024 Mon Sep 17 00:00:00 2001 From: karashiiro <49822414+karashiiro@users.noreply.github.com> Date: Fri, 16 Aug 2019 17:34:02 -0700 Subject: [PATCH 4/7] suggestion commits --- src/common/Network/PacketDef/Ipcs.h | 2 +- src/common/Network/PacketDef/Zone/ServerZoneDef.h | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 0b47938f..ab499c36 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -106,7 +106,7 @@ namespace Sapphire::Network::Packets ReqMoogleMailLetter = 0x0139, // updated 5.0 MailLetterNotification = 0x013A, // updated 5.0 - MarketBoardItemListingCount = 0x0125, // updated 4.5 + MarketBoardItemListingCount = 0x013B, // updated 5.0 MarketBoardItemListing = 0x013C, // updated 5.0 MarketBoardItemListingHistory = 0x012A, // updated 4.5 MarketBoardSearchResult = 0x0139, // updated 4.5 diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 44b9510e..efb57bb7 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -294,7 +294,7 @@ namespace Sapphire::Network::Packets::Server struct FFXIVIpcMarketBoardItemListing : FFXIVIpcBasePacket< MarketBoardItemListing > { - struct itemListing // 152 bytes each + struct ItemListing // 152 bytes each { uint32_t unknown; // Changes if multiple packets are sent for a single item uint8_t padding; @@ -309,13 +309,18 @@ namespace Sapphire::Network::Packets::Server uint32_t pricePerUnit; uint32_t unknown7; uint32_t itemQuantity; - uint32_t itemID; + uint32_t itemId; uint16_t unknown8; uint16_t unknown9; uint32_t unknown10; uint16_t unknown11; // Always 30000 uint16_t padding3; - uint16_t materiaValue[5]; // Materia ID = (materiaValue & 0xFF0) >> 4 + uint16_t materiaValue[5]; + /** + * auto materiaId = (i & 0xFF0) >> 4; + * auto index = i & 0xF; + * auto leftover = i >> 8; + */ uint32_t padding4; char retainerName[64]; bool hq; From f553042c9ae6d5046446d9759dc3ecfbdbdc5507 Mon Sep 17 00:00:00 2001 From: karashiiro <49822414+karashiiro@users.noreply.github.com> Date: Fri, 16 Aug 2019 17:35:15 -0700 Subject: [PATCH 5/7] oop --- src/common/Network/PacketDef/Zone/ServerZoneDef.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index efb57bb7..35551bb5 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -313,7 +313,7 @@ namespace Sapphire::Network::Packets::Server uint16_t unknown8; uint16_t unknown9; uint32_t unknown10; - uint16_t unknown11; // Always 30000 + uint16_t durability; uint16_t padding3; uint16_t materiaValue[5]; /** From 35bef796c56b5516530f0e85b0a5afb13fd31961 Mon Sep 17 00:00:00 2001 From: karashiiro <49822414+karashiiro@users.noreply.github.com> Date: Fri, 16 Aug 2019 17:38:27 -0700 Subject: [PATCH 6/7] Update ServerZoneDef.h doc positioning fix --- 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 35551bb5..dade719c 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -315,18 +315,17 @@ namespace Sapphire::Network::Packets::Server uint32_t unknown10; uint16_t durability; uint16_t padding3; - uint16_t materiaValue[5]; /** * auto materiaId = (i & 0xFF0) >> 4; * auto index = i & 0xF; * auto leftover = i >> 8; */ + uint16_t materiaValue[5]; uint32_t padding4; char retainerName[64]; bool hq; uint8_t materiaCount; uint8_t padding5; - uint8_t retainerCity; /** * 0x01 Limsa Lominsa * 0x02 Gridania @@ -335,6 +334,7 @@ namespace Sapphire::Network::Packets::Server * 0x07 Kugane * 0x0A Crystarium */ + uint8_t retainerCity; uint64_t padding6; } listing[10]; // Multiple packets are sent if there are more than 10 search results. uint32_t unknown12; From 9c7ef15e31fdfe422e63166d9b21bb4648928cc4 Mon Sep 17 00:00:00 2001 From: Asakusa Yakumo <9378097+LimiQS@users.noreply.github.com> Date: Sat, 17 Aug 2019 17:44:00 +0800 Subject: [PATCH 7/7] Add more detail+info --- .../Network/PacketDef/Zone/ServerZoneDef.h | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index dade719c..592856c8 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -296,36 +296,32 @@ namespace Sapphire::Network::Packets::Server { struct ItemListing // 152 bytes each { - uint32_t unknown; // Changes if multiple packets are sent for a single item - uint8_t padding; - uint16_t unknown1; - uint8_t padding1; - struct unknown2 - { - uint32_t unknown3; - uint16_t unknown4; - uint16_t unknown5; - } unknown6[3]; + uint64_t listingId; + uint64_t retainerId; + uint64_t retainerOwnerId; + uint64_t artisanId; uint32_t pricePerUnit; - uint32_t unknown7; + uint32_t totalTax; uint32_t itemQuantity; uint32_t itemId; - uint16_t unknown8; - uint16_t unknown9; - uint32_t unknown10; + uint16_t lastReviewTime; + uint16_t containerId; + uint32_t slotId; uint16_t durability; - uint16_t padding3; + uint16_t spiritBond; /** * auto materiaId = (i & 0xFF0) >> 4; * auto index = i & 0xF; * auto leftover = i >> 8; */ uint16_t materiaValue[5]; - uint32_t padding4; - char retainerName[64]; + uint16_t padding1; + uint32_t padding2; + char retainerName[32]; + char playerName[32]; bool hq; uint8_t materiaCount; - uint8_t padding5; + uint8_t onMannequin; /** * 0x01 Limsa Lominsa * 0x02 Gridania @@ -335,9 +331,13 @@ namespace Sapphire::Network::Packets::Server * 0x0A Crystarium */ uint8_t retainerCity; - uint64_t padding6; + uint16_t dyeId; + uint16_t padding3; + uint32_t padding4; } listing[10]; // Multiple packets are sent if there are more than 10 search results. - uint32_t unknown12; + uint8_t listingIndexEnd; + uint8_t listingIndexStart; + uint16_t requestId; char padding7[16]; uint8_t unknown13; uint16_t padding8;