diff options
author | Andrei Karas <akaras@inbox.ru> | 2018-07-10 00:44:36 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2018-07-15 20:36:24 +0300 |
commit | d8864002e09274f630cfe283f2b13e70e1b2ad62 (patch) | |
tree | d7cdb02fceaf55936c864bf94dc571675ca5fa9c /src/map | |
parent | baeacac7c2e48120dffcbb8660655c6b15aae5f1 (diff) | |
download | hercules-d8864002e09274f630cfe283f2b13e70e1b2ad62.tar.gz hercules-d8864002e09274f630cfe283f2b13e70e1b2ad62.tar.bz2 hercules-d8864002e09274f630cfe283f2b13e70e1b2ad62.tar.xz hercules-d8864002e09274f630cfe283f2b13e70e1b2ad62.zip |
Update packet CZ_PC_PURCHASE_ITEMLIST.
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/clif.c | 9 | ||||
-rw-r--r-- | src/map/packets_struct.h | 15 |
2 files changed, 20 insertions, 4 deletions
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 <packet len>.W { <amount>.W <name id>.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 |