Index: clif.c =================================================================== --- clif.c (revision 17304) +++ clif.c (working copy) @@ -3270,6 +3270,8 @@ /// Notifies the client about the result of a request to equip an item (ZC_REQ_WEAR_EQUIP_ACK). /// 00aa .W .W .B /// 00aa .W .W .W .B (PACKETVER >= 20100629) +/// 08d0 .W .W .W .B +/// 0999 .W .L .W .B /// result: /// 0 = failure /// 1 = success @@ -3277,45 +3279,77 @@ void clif_equipitemack(struct map_session_data *sd,int n,int pos,int ok) { int fd; + int header,offs=0; +#if PACKETVER < 20110824 + header = 0xaa; +#elif PACKETVER < 20120925 + header = 0x8d0; + ok = ok ? 0 : 1; +#else + header = 0x999; + ok = ok ? 0 : 1; +#endif nullpo_retv(sd); fd=sd->fd; - WFIFOHEAD(fd,packet_len(0xaa)); - WFIFOW(fd,0)=0xaa; - WFIFOW(fd,2)=n+2; - WFIFOW(fd,4)=pos; + 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,6)=ok; + WFIFOB(fd,offs+6)=ok; #else if (ok && sd->inventory_data[n]->equip&EQP_VISIBLE) - WFIFOW(fd,6)=sd->inventory_data[n]->look; + WFIFOW(fd,offs+6)=sd->inventory_data[n]->look; else - WFIFOW(fd,6)=0; - WFIFOB(fd,8)=ok; + WFIFOW(fd,offs+6)=0; + WFIFOB(fd,offs+8)=ok; #endif - WFIFOSET(fd,packet_len(0xaa)); + WFIFOSET(fd,packet_len(header)); } /// Notifies the client about the result of a request to take off an item (ZC_REQ_TAKEOFF_EQUIP_ACK). /// 00ac .W .W .B +/// 08d1 .W .W .B +/// 099a .W .L .B /// result: /// 0 = failure /// 1 = success void clif_unequipitemack(struct map_session_data *sd,int n,int pos,int ok) { - int fd; - + int fd,header,offs=0; +#if PACKETVER < 20110824 + header = 0xac; +#elif PACKETVER < 20120925 + header = 0x8d1; + ok = ok ? 0 : 1; +#else + header = 0x99a; + ok = ok ? 0 : 1; +#endif nullpo_retv(sd); fd=sd->fd; - WFIFOHEAD(fd,packet_len(0xac)); - WFIFOW(fd,0)=0xac; - WFIFOW(fd,2)=n+2; - WFIFOW(fd,4)=pos; - WFIFOB(fd,6)=ok; - WFIFOSET(fd,packet_len(0xac)); + + 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 + WFIFOB(fd,offs+6)=ok; + WFIFOSET(fd,packet_len(header)); } @@ -8691,6 +8745,7 @@ /// 02d7 .W .24B .W .W .W .W .W .W .W .B {equip item}.28B* (ZC_EQUIPWIN_MICROSCOPE, PACKETVER >= 20100629) /// 0859 .W .24B .W .W .W .W .W .W .W .B {equip item}.28B* (ZC_EQUIPWIN_MICROSCOPE2, PACKETVER >= 20101124) /// 0859 .W .24B .W .W .W .W .W .W .W .W .B {equip item}.28B* (ZC_EQUIPWIN_MICROSCOPE2, PACKETVER >= 20110111) +/// 0997 .W .24B .W .W .W .W .W .W .W .W .B {equip item}.28B* (ZC_EQUIPWIN_MICROSCOPE_V5, PACKETVER >= 20120925) void clif_viewequip_ack(struct map_session_data* sd, struct map_session_data* tsd) { uint8* buf; @@ -8709,8 +8764,10 @@ #if PACKETVER < 20101124 WBUFW(buf, 0) = 0x2d7; +#elseif PACKETVER < 20120925 + WBUFW(buf, 0) = 0x859; #else - WBUFW(buf, 0) = 0x859; + WBUFW(buf, 0) = 0x997; #endif safestrncpy((char*)WBUFP(buf, 4), tsd->status.name, NAME_LENGTH); WBUFW(buf,28) = tsd->status.class_; @@ -10186,9 +10243,10 @@ /// Request to equip an item (CZ_REQ_WEAR_EQUIP). /// 00a9 .W .W +/// 0998 .W .L void clif_parse_EquipItem(int fd,struct map_session_data *sd) { - int index; + int index, req_pos; if(pc_isdead(sd)) { clif_clearunit_area(&sd->bl,CLR_DEAD); @@ -10222,8 +10280,15 @@ //Client doesn't send the position for ammo. if(sd->inventory_data[index]->type == IT_AMMO) pc_equipitem(sd,index,EQP_AMMO); - else - pc_equipitem(sd,index,RFIFOW(fd,4)); + else{ +#if PACKETVER >= 20120925 + req_pos = RFIFOL(fd,4); +#else + req_pos = RFIFOW(fd,4); +#endif + pc_equipitem(sd,index,req_pos); + } + } @@ -16730,7 +16852,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //#0x08C0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 7, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //#0x0900 @@ -16745,7 +16867,7 @@ 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, //#0x0980 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, + 31, 0, 0, 0, 0, 0, 0, -1, 8, 11, 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,