diff --git a/db/packet_db.txt b/db/packet_db.txt index f5d298f2ed..117ca5e0c8 100644 --- a/db/packet_db.txt +++ b/db/packet_db.txt @@ -107,7 +107,7 @@ packet_ver: 5 0x00a7,8,useitem,2:4 0x00a8,7 0x00a9,6,equipitem,2:4 -0x00aa,7 +0x00aa,7,ZC_WEAR_EQUIP_ACK,2:4:6 0x00ab,4,unequipitem,2 0x00ac,7 //0x00ad,-1 @@ -1586,7 +1586,7 @@ packet_ver: 25 //0x083F,22 //2010-06-29aRagexeRE -0x00AA,9 +0x00AA,9,ZC_WEAR_EQUIP_ACK,2:4:6:8 //0x07F1,18 //0x07F2,8 //0x07F3,6 @@ -1631,7 +1631,7 @@ packet_ver: 26 0x0857,-1 0x0858,-1 0x0859,-1 -0x08d0,9 +0x08d0,9,ZC_WEAR_EQUIP_ACK,2:4:6:8 //2011-10-05aRagexeRE packet_ver: 27 @@ -1869,7 +1869,7 @@ packet_ver: 34 0x0996,-1 //store itemlist equip 0x0997,-1 //ZC_EQUIPWIN_MICROSCOPE_V5 0x0998,8,equipitem,2:4 // CZ_REQ_WEAR_EQUIP_V5 -0x0999,11 // cz_wear_equipv5 +0x0999,11,ZC_WEAR_EQUIP_ACK,2:4:8:10 // cz_wear_equipv5 0x099a,9 // take_off_equipv5 0x099b,8 //maptypeproperty2 diff --git a/src/map/clif.c b/src/map/clif.c index 3b7f24329e..ba35d5c657 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -3390,36 +3390,46 @@ void clif_statusupack(struct map_session_data *sd,int type,int ok,int val) /// 2 = failure due to low level void clif_equipitemack(struct map_session_data *sd,int n,int pos,uint8 flag) { - int fd, header, offs = 0; -#if PACKETVER < 20110824 - header = 0xaa; -#elif PACKETVER < 20120925 - header = 0x8d0; -#else - header = 0x999; -#endif + int fd = 0, cmd = 0, look = 0; + struct s_packet_db *info = NULL; + nullpo_retv(sd); + cmd = packet_db_ack[sd->packet_ver][ZC_WEAR_EQUIP_ACK]; + if (!cmd || !(info = &packet_db[sd->packet_ver][cmd]) || !info->len) + return; + fd = sd->fd; - WFIFOHEAD(fd,packet_len(header)); - WFIFOW(fd,offs+0) = header; - WFIFOW(fd,offs+2) = n+2; -#if PACKETVER >= 20120925 - WFIFOL(fd,offs+4) = pos; - offs += 2; -#else - WFIFOW(fd,offs+4) = (int)pos; -#endif -#if PACKETVER < 20100629 - WFIFOB(fd,offs+6) = flag; -#else + if (flag == ITEM_EQUIP_ACK_OK && sd->inventory_data[n]->equip&EQP_VISIBLE) - WFIFOW(fd,offs+6) = sd->inventory_data[n]->look; - else - WFIFOW(fd,offs+6) = 0; - WFIFOB(fd,offs+8) = flag; -#endif - WFIFOSET(fd,packet_len(header)); + look = sd->inventory_data[n]->look; + + WFIFOHEAD(fd, info->len); + WFIFOW(fd, 0) = cmd; + WFIFOW(fd, info->pos[0]) = n+2; + switch (cmd) { + case 0xaa: + WFIFOW(fd, info->pos[1]) = pos; + if (sd->packet_ver < date2version(20100629)) + WFIFOW(fd, info->pos[2]) = (flag == ITEM_EQUIP_ACK_OK ? 1 : 0); + else { + WFIFOL(fd, info->pos[2]) = look; + WFIFOW(fd, info->pos[3]) = (flag == ITEM_EQUIP_ACK_OK ? 1 : 0); + } + break; + case 0x8d0: + if (flag == ITEM_EQUIP_ACK_FAILLEVEL) + flag = 1; + case 0x999: + if (cmd == 0x999) + WFIFOL(fd, info->pos[1]) = pos; + else + WFIFOW(fd, info->pos[1]) = pos; + WFIFOL(fd, info->pos[2]) = look; + WFIFOW(fd, info->pos[3]) = flag; + break; + } + WFIFOSET(fd, info->len); } @@ -18123,6 +18133,7 @@ void packetdb_readdb(void) { "ZC_CLEAR_DIALOG", ZC_CLEAR_DIALOG}, { "ZC_C_MARKERINFO", ZC_C_MARKERINFO}, { "ZC_NOTIFY_BIND_ON_EQUIP", ZC_NOTIFY_BIND_ON_EQUIP }, + { "ZC_WEAR_EQUIP_ACK", ZC_WEAR_EQUIP_ACK }, }; const char *filename[] = { "packet_db.txt", DBIMPORT"/packet_db.txt"}; int f; diff --git a/src/map/clif.h b/src/map/clif.h index 4a7cc2f77a..1c46152683 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -48,6 +48,7 @@ enum e_packet_ack { ZC_CLEAR_DIALOG, ZC_C_MARKERINFO, ZC_NOTIFY_BIND_ON_EQUIP, + ZC_WEAR_EQUIP_ACK, //add other here MAX_ACK_FUNC //auto upd len }; @@ -365,23 +366,14 @@ enum useskill_fail_cause enum clif_messages { /* Constant values */ + // clif_cart_additem_ack flags ADDITEM_TO_CART_FAIL_WEIGHT = 0x0, ADDITEM_TO_CART_FAIL_COUNT = 0x1, - // clif_equipitemack flag -#if PACKETVER < 20110824 - ITEM_EQUIP_ACK_OK = 1, - ITEM_EQUIP_ACK_FAIL = 0, - ITEM_EQUIP_ACK_FAILLEVEL = 0, -#elif PACKETVER < 20120925 - ITEM_EQUIP_ACK_OK = 0, - ITEM_EQUIP_ACK_FAIL = 1, - ITEM_EQUIP_ACK_FAILLEVEL = 1, -#else + // clif_equipitemack flags ITEM_EQUIP_ACK_OK = 0, ITEM_EQUIP_ACK_FAIL = 1, ITEM_EQUIP_ACK_FAILLEVEL = 2, -#endif /* -end- */ //! NOTE: These values below need client version validation