diff --git a/npc/scripts_athena.conf b/npc/scripts_athena.conf index a709976..7d577ad 100644 --- a/npc/scripts_athena.conf +++ b/npc/scripts_athena.conf @@ -276,3 +276,5 @@ npc: npc/quests/thana_quest.txt // Be sure that the time zone set corresponds with the server's. // For more info, read the comments in npc/quests/the_sign_quest.txt npc: npc/quests/the_sign_quest.txt + +npc: npc/test/vip_storage diff --git a/src/map/clif.c b/src/map/clif.c index d45c05f..db6745b 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -2519,32 +2519,39 @@ void clif_storagelist(struct map_session_data* sd, struct item* items, int items int i,n,ne,nn; unsigned char *buf; unsigned char *bufe; - unsigned char *bufn; #if PACKETVER < 5 const int s = 10; //Entry size.normal item const int sidx=4; //start itemlist idx + const int cmd = 0xa5; #elif PACKETVER < 20080102 const int s = 18; const int sidx=4; + const int cmd = 0x1f0; #elif PACKETVER < 20120925 const int s = 22; const int sidx=4; + const int cmd = 0x2ea; #else const int s = 24; const int sidx = 4+24; + const int cmd = 0x995; #endif #if PACKETVER < 20071002 const int se = 20; //entry size equip const int sidxe = 4; //start itemlist idx + const int cmde = 0xa6; #elif PACKETVER < 20100629 const int se = 26; const int sidxe = 4; + const int cmde = 0xa6; #elif PACKETVER < 20120925 const int se = 28; const int sidxe = 4; + const int cmde = 0x2d1; #else const int se = 31; const int sidxe = 4+24; + const int cmde = 0x996; #endif buf = (unsigned char*)aMalloc(items_length * s + sidx); @@ -2566,37 +2573,30 @@ void clif_storagelist(struct map_session_data* sd, struct item* items, int items } for (i = 0; i < n;) // Loop through non-equipable items { - nn = n - i < (client_buf - 4)/s ? n - i : (client_buf - 4)/s; // Split up non-equipable items - bufn = buf + i*s; // Update buffer to new index range + nn = n - i < (client_buf - sidx)/s ? n - i : (client_buf - sidx)/s; // Split up non-equipable items i += nn; -#if PACKETVER < 5 - WBUFW(bufn,0)=0xa5; -#elif PACKETVER < 20080102 - WBUFW(bufn,0)=0x1f0; -#elif PACKETVER < 20120925 - WBUFW(bufn,0)=0x2ea; -#else - WBUFW(bufn,0)=0x995; - memset((char*)WBUFP(buf,4),0,24); //storename + WFIFOHEAD(sd->fd,sidx+nn*s); + WFIFOW(sd->fd,0)=cmd; + WFIFOW(sd->fd,2)=sidx+nn*s; +#if PACKETVER >= 20120925 + memset((char*)WFIFOP(sd->fd,4),0,24); //storename #endif - WBUFW(bufn,2)=sidx+nn*s; - clif_send(bufn, WBUFW(bufn,2), &sd->bl, SELF); + memcpy(WFIFOP(sd->fd,sidx),buf + sidx + i*s,nn*s); + WFIFOSET(sd->fd,WFIFOW(sd->fd,2)); } for (i = 0; i < ne;) // Loop through equipable items { - nn = ne - i < (client_buf - 4)/se ? ne - i : (client_buf - 4)/se; // Split up equipable items - bufn = bufe + i*se; // Update buffer to new index range + nn = ne - i < (client_buf - sidxe)/se ? ne - i : (client_buf - sidxe)/se; // Split up equipable items i += nn; -#if PACKETVER < 20071002 - WBUFW(bufn,0)=0xa6; -#elif PACKETVER < 20120925 - WBUFW(bufn,0)=0x2d1; -#else - WBUFW(bufn,0)=0x996; - memset((char*)WBUFP(bufn,4),0,24); //storename + + WFIFOHEAD(sd->fd,sidxe+nn*s); + WFIFOW(sd->fd,0)=cmde; + WFIFOW(sd->fd,2)=sidxe+nn*s; +#if PACKETVER >= 20120925 + memset((char*)WFIFOP(sd->fd,4),0,24); //storename #endif - WBUFW(bufn,2)=sidxe+nn*se; - clif_send(bufn, WBUFW(bufn,2), &sd->bl, SELF); + memcpy(WFIFOP(sd->fd,sidx),bufe + sidx + i*s,nn*s); + WFIFOSET(sd->fd,WFIFOW(sd->fd,2)); } if( buf ) aFree(buf);