UserInterface: 32-bit LONG sockets in TItemData/TShopItemData
The 40250 wire structs hold Win32 long (4 bytes) sockets; on LP64 `long` is 8, so each TShopItemData was too wide and SHOP_SUBHEADER_GC_START/_EX misread every item after the first. Pin the wire size with a static_assert. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d3cf586849
commit
22ca5da387
@@ -321,7 +321,7 @@ typedef struct packet_item
|
|||||||
BYTE count;
|
BYTE count;
|
||||||
DWORD flags;
|
DWORD flags;
|
||||||
DWORD anti_flags;
|
DWORD anti_flags;
|
||||||
long alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
|
LONG alSockets[ITEM_SOCKET_SLOT_MAX_NUM]; // PORT: LONG, the 32-bit Win32 long
|
||||||
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
|
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
|
||||||
} TItemData;
|
} TItemData;
|
||||||
|
|
||||||
@@ -331,12 +331,15 @@ typedef struct packet_shop_item
|
|||||||
DWORD price;
|
DWORD price;
|
||||||
BYTE count;
|
BYTE count;
|
||||||
BYTE display_pos;
|
BYTE display_pos;
|
||||||
long alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
|
LONG alSockets[ITEM_SOCKET_SLOT_MAX_NUM]; // PORT: LONG, the 32-bit Win32 long
|
||||||
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
|
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
|
||||||
} TShopItemData;
|
} TShopItemData;
|
||||||
|
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
// PORT: wire sizes of the 32-bit client (SHOP_SUBHEADER_GC_START/_EX send 40 of these back to back).
|
||||||
|
static_assert(sizeof(TShopItemData) == 43, "TShopItemData must match the 40250 wire layout");
|
||||||
|
|
||||||
inline float GetSqrtDistance(int ix1, int iy1, int ix2, int iy2) // By sqrt
|
inline float GetSqrtDistance(int ix1, int iy1, int ix2, int iy2) // By sqrt
|
||||||
{
|
{
|
||||||
float dx, dy;
|
float dx, dy;
|
||||||
|
|||||||
Reference in New Issue
Block a user