Ver código fonte

Multi-client support for clif_equipitemack with packet identifier ZC_WEAR_EQUIP_ACK

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
Cydh Ramdh 10 anos atrás
pai
commit
817d6bf800
3 arquivos alterados com 44 adições e 41 exclusões
  1. 4 4
      db/packet_db.txt
  2. 37 26
      src/map/clif.c
  3. 3 11
      src/map/clif.h

+ 4 - 4
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
 

+ 37 - 26
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;

+ 3 - 11
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