diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index b30f73ae..ab499c36 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -106,8 +106,8 @@ namespace Sapphire::Network::Packets ReqMoogleMailLetter = 0x0139, // updated 5.0 MailLetterNotification = 0x013A, // updated 5.0 - MarketBoardItemListingCount = 0x0125, // updated 4.5 - MarketBoardItemListing = 0x0126, // 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 6649feb8..592856c8 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,105 @@ 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 + { + uint64_t listingId; + uint64_t retainerId; + uint64_t retainerOwnerId; + uint64_t artisanId; + uint32_t pricePerUnit; + uint32_t totalTax; + uint32_t itemQuantity; + uint32_t itemId; + uint16_t lastReviewTime; + uint16_t containerId; + uint32_t slotId; + uint16_t durability; + uint16_t spiritBond; + /** + * auto materiaId = (i & 0xFF0) >> 4; + * auto index = i & 0xF; + * auto leftover = i >> 8; + */ + uint16_t materiaValue[5]; + uint16_t padding1; + uint32_t padding2; + char retainerName[32]; + char playerName[32]; + 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; + uint16_t dyeId; + uint16_t padding3; + uint32_t padding4; + } listing[10]; // Multiple packets are sent if there are more than 10 search results. + uint8_t listingIndexEnd; + uint8_t listingIndexStart; + uint16_t requestId; + char padding7[16]; + uint8_t unknown13; + uint16_t padding8; + uint8_t unknown14; + uint64_t padding9; + uint32_t unknown15; + uint32_t padding10; + }; + + 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 +1988,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*/