From d8864002e09274f630cfe283f2b13e70e1b2ad62 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 10 Jul 2018 00:44:36 +0300 Subject: Update packet CZ_PC_PURCHASE_ITEMLIST. --- src/map/clif.c | 9 +++++---- src/map/packets_struct.h | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/map/clif.c b/src/map/clif.c index 17f108c18..4648b4229 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -11120,12 +11120,13 @@ static void clif_parse_NpcBuyListSend(int fd, struct map_session_data *sd) __att /// 00c8 .W { .W .W }* static void clif_parse_NpcBuyListSend(int fd, struct map_session_data *sd) { - int n = ((int)RFIFOW(fd,2)-4) / 4; + int n = ((int)RFIFOW(fd, 2) - sizeof(struct PACKET_CZ_PC_PURCHASE_ITEMLIST)) / sizeof(struct PACKET_CZ_PC_PURCHASE_ITEMLIST_sub); int result; + const struct PACKET_CZ_PC_PURCHASE_ITEMLIST *p = RFIFOP(fd, 0); Assert_retv(n >= 0); - if( sd->state.trading || !sd->npc_shopid || pc_has_permission(sd,PC_PERM_DISABLE_STORE) ) { + if (sd->state.trading || !sd->npc_shopid || pc_has_permission(sd, PC_PERM_DISABLE_STORE)) { result = 1; } else { struct itemlist item_list = { 0 }; @@ -11136,8 +11137,8 @@ static void clif_parse_NpcBuyListSend(int fd, struct map_session_data *sd) for (i = 0; i < n; i++) { struct itemlist_entry entry = { 0 }; - entry.amount = RFIFOW(fd, 4 + 4 * i); - entry.id = RFIFOW(fd, 4 + 4 * i + 2); + entry.amount = p->items[i].amount; + entry.id = p->items[i].itemId; VECTOR_PUSH(item_list, entry); } diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index 2d6b3c4c4..17ff1b159 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -2265,6 +2265,21 @@ struct PACKET_ZC_PC_PURCHASE_ITEMLIST { struct PACKET_ZC_PC_PURCHASE_ITEMLIST_sub items[]; } __attribute__((packed)); +struct PACKET_CZ_PC_PURCHASE_ITEMLIST_sub { + uint16 amount; +#if PACKETVER_RE_NUM >= 20180704 + uint32 itemId; +#else + uint16 itemId; +#endif +} __attribute__((packed)); + +struct PACKET_CZ_PC_PURCHASE_ITEMLIST { + int16 packetType; + int16 packetLength; + struct PACKET_CZ_PC_PURCHASE_ITEMLIST_sub items[]; +} __attribute__((packed)); + #if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute #pragma pack(pop) #endif // not NetBSD < 6 / Solaris -- cgit v1.2.3-70-g09d2