summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2018-07-10 07:11:55 +0300
committerAndrei Karas <akaras@inbox.ru>2018-07-15 20:36:26 +0300
commitbcc0738e5eacd865915798aefdc5a3b7fde48596 (patch)
tree96a08a95a4abab2231cff7a7ae6ce1f3684610d3
parent18df2dcdd7bbf8f7fd98c6773d981844b7ce814b (diff)
downloadhercules-bcc0738e5eacd865915798aefdc5a3b7fde48596.tar.gz
hercules-bcc0738e5eacd865915798aefdc5a3b7fde48596.tar.bz2
hercules-bcc0738e5eacd865915798aefdc5a3b7fde48596.tar.xz
hercules-bcc0738e5eacd865915798aefdc5a3b7fde48596.zip
Update packet ZC_MAKABLEITEMLIST.
-rw-r--r--src/map/clif.c43
-rw-r--r--src/map/packets_struct.h16
2 files changed, 40 insertions, 19 deletions
diff --git a/src/map/clif.c b/src/map/clif.c
index cb3ba70f0..793aa9e71 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -5593,35 +5593,40 @@ static void clif_skill_estimation(struct map_session_data *sd, struct block_list
/// unused by the client
static void clif_skill_produce_mix_list(struct map_session_data *sd, int skill_id, int trigger)
{
- int i,c,view,fd;
+ int i, c, view, fd;
+ int len;
+ struct PACKET_ZC_MAKABLEITEMLIST *p;
+
nullpo_retv(sd);
- if(sd->menuskill_id == skill_id)
+ if (sd->menuskill_id == skill_id)
return; //Avoid resending the menu twice or more times...
- if( skill_id == GC_CREATENEWPOISON )
+ if (skill_id == GC_CREATENEWPOISON)
skill_id = GC_RESEARCHNEWPOISON;
- fd=sd->fd;
- WFIFOHEAD(fd, MAX_SKILL_PRODUCE_DB * 8 + 8);
- WFIFOW(fd, 0)=0x18d;
+ fd = sd->fd;
+ len = MAX_SKILL_PRODUCE_DB * sizeof(struct PACKET_ZC_MAKABLEITEMLIST_sub) + sizeof(struct PACKET_ZC_MAKABLEITEMLIST);
+ WFIFOHEAD(fd, len);
+ p = WFIFOP(fd, 0);
+ p->packetType = 0x18d;
- for(i=0,c=0;i<MAX_SKILL_PRODUCE_DB;i++){
- if( skill->can_produce_mix(sd,skill->dbs->produce_db[i].nameid, trigger, 1) &&
- ( ( skill_id > 0 && skill->dbs->produce_db[i].req_skill == skill_id ) || skill_id < 0 )
- ){
- if((view = itemdb_viewid(skill->dbs->produce_db[i].nameid)) > 0)
- WFIFOW(fd,c*8+ 4)= view;
+ for (i = 0, c = 0; i < MAX_SKILL_PRODUCE_DB; i++) {
+ if (skill->can_produce_mix(sd, skill->dbs->produce_db[i].nameid, trigger, 1) &&
+ ((skill_id > 0 && skill->dbs->produce_db[i].req_skill == skill_id) || skill_id < 0)) {
+ if ((view = itemdb_viewid(skill->dbs->produce_db[i].nameid)) > 0)
+ p->items[c].itemId = view;
else
- WFIFOW(fd,c*8+ 4)= skill->dbs->produce_db[i].nameid;
- WFIFOW(fd,c*8+ 6)= 0;
- WFIFOW(fd,c*8+ 8)= 0;
- WFIFOW(fd,c*8+10)= 0;
+ p->items[c].itemId = skill->dbs->produce_db[i].nameid;
+ p->items[c].material[0] = 0;
+ p->items[c].material[1] = 0;
+ p->items[c].material[2] = 0;
c++;
}
}
- WFIFOW(fd, 2)=c*8+8;
- WFIFOSET(fd,WFIFOW(fd,2));
- if(c > 0) {
+ len = c * sizeof(struct PACKET_ZC_MAKABLEITEMLIST_sub) + sizeof(struct PACKET_ZC_MAKABLEITEMLIST);
+ p->packetLength = len;
+ WFIFOSET(fd, len);
+ if (c > 0) {
sd->menuskill_id = skill_id;
sd->menuskill_val = trigger;
return;
diff --git a/src/map/packets_struct.h b/src/map/packets_struct.h
index 211ae654b..05c85a55a 100644
--- a/src/map/packets_struct.h
+++ b/src/map/packets_struct.h
@@ -2390,6 +2390,22 @@ struct PACKET_CZ_REQ_TRADE_BUYING_STORE {
struct PACKET_CZ_REQ_TRADE_BUYING_STORE_sub items[];
} __attribute__((packed));
+struct PACKET_ZC_MAKABLEITEMLIST_sub {
+#if PACKETVER_RE_NUM >= 20180704
+ uint32 itemId;
+ uint32 material[3];
+#else
+ uint16 itemId;
+ uint16 material[3];
+#endif
+} __attribute__((packed));
+
+struct PACKET_ZC_MAKABLEITEMLIST {
+ int16 packetType;
+ int16 packetLength;
+ struct PACKET_ZC_MAKABLEITEMLIST_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