From b8b65a031b79ff9ec1d5b6ecd138fc47613c0b65 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Thu, 5 Jul 2018 21:51:38 +0300 Subject: Update packet ZC_ADD_ITEM_TO_CART. --- src/map/clif.c | 40 +++++++++++++++++++--------------------- src/map/packets_struct.h | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/map/clif.c b/src/map/clif.c index 7ce9ef53a..5b4643de2 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -6434,37 +6434,35 @@ static void clif_item_skill(struct map_session_data *sd, uint16 skill_id, uint16 /// 01c5 .W .L .W .B .B .B .B .W .W .W .W (ZC_ADD_ITEM_TO_CART2) static void clif_cart_additem(struct map_session_data *sd, int n, int amount, int fail) { - int view,fd; - unsigned char *buf; - int offset = 0; + int view, fd; + struct PACKET_ZC_ADD_ITEM_TO_CART p; nullpo_retv(sd); - fd=sd->fd; - if(n<0 || n>=MAX_CART || sd->status.cart[n].nameid<=0) + fd = sd->fd; + if (n < 0 || n >= MAX_CART || sd->status.cart[n].nameid <= 0) return; - WFIFOHEAD(fd,packet_len(cartaddType)); - buf=WFIFOP(fd,0); - WBUFW(buf,0)=cartaddType; - WBUFW(buf,2)=n+2; - WBUFL(buf,4)=amount; - if((view = itemdb_viewid(sd->status.cart[n].nameid)) > 0) - WBUFW(buf,8)=view; + WFIFOHEAD(fd, sizeof(p)); + p.packetType = cartaddType; + p.index = n + 2; + p.amount = amount; + if ((view = itemdb_viewid(sd->status.cart[n].nameid)) > 0) + p.itemId = view; else - WBUFW(buf,8)=sd->status.cart[n].nameid; + p.itemId = sd->status.cart[n].nameid; #if PACKETVER >= 5 - WBUFB(buf,10)=itemdb_type(sd->status.cart[n].nameid); - offset = 1; + p.itemType = itemdb_type(sd->status.cart[n].nameid); #endif - WBUFB(buf,10+offset)=sd->status.cart[n].identify; - WBUFB(buf,11+offset)=sd->status.cart[n].attribute; - WBUFB(buf,12+offset)=sd->status.cart[n].refine; - clif->addcards((struct EQUIPSLOTINFO*)WBUFP(buf, 13 + offset), &sd->status.cart[n]); + p.identified = sd->status.cart[n].identify; + p.damaged = sd->status.cart[n].attribute; + p.refine = sd->status.cart[n].refine; + clif->addcards(&p.slot, &sd->status.cart[n]); #if PACKETVER >= 20150226 - clif->add_item_options(WBUFP(buf, 21 + offset), &sd->status.cart[n]); + clif->add_item_options(&p.option_data[0], &sd->status.cart[n]); #endif - WFIFOSET(fd,packet_len(cartaddType)); + memcpy(WFIFOP(fd, 0), &p, sizeof(p)); + WFIFOSET(fd, sizeof(p)); } /// Deletes an item from character's cart (ZC_DELETE_ITEM_FROM_CART). diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h index 900c9d5bb..1a30ee7e2 100644 --- a/src/map/packets_struct.h +++ b/src/map/packets_struct.h @@ -1883,6 +1883,25 @@ struct PACKET_ZC_ACK_TOUSESKILL { uint8 cause; } __attribute__((packed)); +struct PACKET_ZC_ADD_ITEM_TO_CART { + int16 packetType; + int16 index; + int32 amount; +#if PACKETVER_RE_NUM >= 20180704 + uint32 itemId; +#else + uint16 itemId; +#endif +#if PACKETVER >= 5 + uint8 itemType; +#endif + uint8 identified; + uint8 damaged; + uint8 refine; + struct EQUIPSLOTINFO slot; + struct ItemOptions option_data[MAX_ITEM_OPTIONS]; +} __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