diff --git a/db/packet_db.txt b/db/packet_db.txt index dee8941..f48c461 100644 --- a/db/packet_db.txt +++ b/db/packet_db.txt @@ -1995,7 +1995,7 @@ packet_ver: 38 0x0361,5,hommenu,2,4 0x0883,36,storagepassword,2:4:20 -//2013-06-05 Ragexe (Shakto) +//2013-06-12 Ragexe (Shakto) packet_ver: 39 0x0369,7,actionrequest,2:6 0x083C,10,useskilltoid,2:4:6 @@ -2026,3 +2026,164 @@ packet_ver: 39 0x0940,26,friendslistadd,2 0x093A,5,hommenu,2:4 0x0964,36,storagepassword,2:4:20 + +//2013-06-18 Ragexe (Shaktoh) +packet_ver: 40 +0x0889,7,actionrequest,2:6 +0x0951,10,useskilltoid,2:4:6 +0x088E,5,walktoxy,2 +0x0930,6,ticksend,2 +0x08A6,5,changedir,2:4 +0x0962,6,takeitem,2 +0x0917,6,dropitem,2:4 +0x0885,8,movetokafra,2:4 +0x0936,8,movefromkafra,2:4 +0x096A,10,useskilltopos,2:4:6:8 +0x094F,90,useskilltoposinfo,2:4:6:8:10 +0x0944,6,getcharnamerequest,2 +0x0945,6,solvecharname,2 +0x0890,12,searchstoreinfolistitemclick,2:6:10 +0x0363,2,searchstoreinfonextpage,0 +0x0281,-1,searchstoreinfo,2:4:5:9:13:14:15 +0x0891,-1,reqtradebuyingstore,2:4:8:12 +0x0862,6,reqclickbuyingstore,2 +0x085A,2,reqclosebuyingstore,0 +0x0932,-1,reqopenbuyingstore,2:4:8:9:89 +0x08A7,18,bookingregreq,2:4:6 +// 0x087A,8 CZ_JOIN_BATTLE_FIELD +0x0942,-1,itemlistwindowselected,2:4:8:12 +0x095B,19,wanttoconnection,2:6:10:14:18 +0x0887,26,partyinvite2,2 +// 0x0878,4 CZ_GANGSI_RANK +0x0953,26,friendslistadd,2 +0x02C4,5,hommenu,2:4 +0x0864,36,storagepassword,2:4:20 + +//2013-06-26 Ragexe +packet_ver: 41 +0x0369,7,actionrequest,2:6 +0x083C,10,useskilltoid,2:4:6 +0x0437,5,walktoxy,2 +0x035F,6,ticksend,2 +0x094D,5,changedir,2:4 +0x088B,6,takeitem,2 +0x0952,6,dropitem,2:4 +0x0921,8,movetokafra,2:4 +0x0817,8,movefromkafra,2:4 +0x0438,10,useskilltopos,2:4:6:8 +0x0366,90,useskilltoposinfo,2:4:6:8:10 +0x096A,6,getcharnamerequest,2 +0x0368,6,solvecharname,2 +0x0838,12,searchstoreinfolistitemclick,2:6:10 +0x0835,2,searchstoreinfonextpage,0 +0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 +0x0811,-1,reqtradebuyingstore,2:4:8:12 +0x0360,6,reqclickbuyingstore,2 +0x0365,2,reqclosebuyingstore,0 +0x0815,-1,reqopenbuyingstore,2:4:8:9:89 +0x0894,18,bookingregreq,2:4:6 +// 0x0860,8 CZ_JOIN_BATTLE_FIELD +0x08A5,-1,itemlistwindowselected,2:4:8:12 +0x088C,19,wanttoconnection,2:6:10:14:18 +0x0895,26,partyinvite2,2 +// 0x088F,4 CZ_GANGSI_RANK +0x08AB,26,friendslistadd,2 +0x0960,5,hommenu,2:4 +0x0930,36,storagepassword,2:4:20 + +//2013-07-03 Ragexe +packet_ver: 42 +0x0369,7,actionrequest,2:6 +0x083C,10,useskilltoid,2:4:6 +0x0437,5,walktoxy,2 +0x035F,6,ticksend,2 +0x0930,5,changedir,2:4 +0x07E4,6,takeitem,2 +0x0362,6,dropitem,2:4 +0x07EC,8,movetokafra,2:4 +0x0364,8,movefromkafra,2:4 +0x0438,10,useskilltopos,2:4:6:8 +0x0366,90,useskilltoposinfo,2:4:6:8:10 +0x096A,6,getcharnamerequest,2 +0x0368,6,solvecharname,2 +0x0838,12,searchstoreinfolistitemclick,2:6:10 +0x0835,2,searchstoreinfonextpage,0 +0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 +0x0811,-1,reqtradebuyingstore,2:4:8:12 +0x0202,6,reqclickbuyingstore,2 +0x0817,2,reqclosebuyingstore,0 +0x0815,-1,reqopenbuyingstore,2:4:8:9:89 +0x0365,18,bookingregreq,2:4:6 +// 0x0363,8 CZ_JOIN_BATTLE_FIELD +0x0281,-1,itemlistwindowselected,2:4:8:12 +0x022D,19,wanttoconnection,2:6:10:14:18 +0x0802,26,partyinvite2,2 +// 0x0436,4 CZ_GANGSI_RANK +0x0360,26,friendslistadd,2 +0x094A,5,hommenu,2:4 +0x0873,36,storagepassword,2:4:20 + +//2013-07-10 Ragexe +packet_ver: 43 +0x0369,7,actionrequest,2:6 +0x083C,10,useskilltoid,2:4:6 +0x0437,5,walktoxy,2 +0x035F,6,ticksend,2 +0x0202,5,changedir,2:4 +0x07E4,6,takeitem,2 +0x0362,6,dropitem,2:4 +0x07EC,8,movetokafra,2:4 +0x0364,8,movefromkafra,2:4 +0x0438,10,useskilltopos,2:4:6:8 +0x0366,90,useskilltoposinfo,2:4:6:8:10 +0x096A,6,getcharnamerequest,2 +0x0368,6,solvecharname,2 +0x0838,12,searchstoreinfolistitemclick,2:6:10 +0x0835,2,searchstoreinfonextpage,0 +0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15 +0x0811,-1,reqtradebuyingstore,2:4:8:12 +0x0360,6,reqclickbuyingstore,2 +0x0817,2,reqclosebuyingstore,0 +0x0815,-1,reqopenbuyingstore,2:4:8:9:89 +0x0365,18,bookingregreq,2:4:6 +// 0x0363,8 CZ_JOIN_BATTLE_FIELD +0x0281,-1,itemlistwindowselected,2:4:8:12 +0x022D,19,wanttoconnection,2:6:10:14:18 +0x0802,26,partyinvite2,2 +// 0x0436,4 CZ_GANGSI_RANK +0x023B,26,friendslistadd,2 +0x0361,5,hommenu,2:4 +0x0880,36,storagepassword,2:4:20 +0x097c,4,ranklist,2 + +//2013-07-17 Ragexe +packet_ver: 44 +0x0918,7,actionrequest,2:6 +0x091E,10,useskilltoid,2:4:6 +0x083C,5,walktoxy,2 +0x02C4,6,ticksend,2 +0x088C,5,changedir,2:4 +0x08A9,6,takeitem,2 +0x0917,6,dropitem,2:4 +0x089B,8,movetokafra,2:4 +0x0956,8,movefromkafra,2:4 +0x0882,10,useskilltopos,2:4:6:8 +0x0952,90,useskilltoposinfo,2:4:6:8:10 +0x0958,6,getcharnamerequest,2 +0x0967,6,solvecharname,2 +0x0960,12,searchstoreinfolistitemclick,2:6:10 +0x0819,2,searchstoreinfonextpage,0 +0x086B,-1,searchstoreinfo,2:4:5:9:13:14:15 +0x093B,-1,reqtradebuyingstore,2:4:8:12 +0x0898,6,reqclickbuyingstore,2 +0x096A,2,reqclosebuyingstore,0 +0x08AA,-1,reqopenbuyingstore,2:4:8:9:89 +0x0862,18,bookingregreq,2:4:6 +// 0x08A6,8 CZ_JOIN_BATTLE_FIELD +0x0897,-1,itemlistwindowselected,2:4:8:12 +0x091D,19,wanttoconnection,2:6:10:14:18 +0x092F,26,partyinvite2,2 +// 0x086C,4 CZ_GANGSI_RANK +0x0863,26,friendslistadd,2 +0x088A,5,hommenu,2:4 +0x095B,36,storagepassword,2:4:20 diff --git a/src/map/clif.c b/src/map/clif.c index 4e3a3f8..879daaf 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -2520,7 +2520,7 @@ void clif_storagelist(struct map_session_data* sd, struct item* items, int items WBUFW(buf,0)=0x2ea; #else WBUFW(buf,0)=0x995; - memset((char*)WBUFP(buf,6),0,24); //storename + memset((char*)WBUFP(buf,4),0,24); //storename #endif WBUFW(buf,2)=n*s+sidx; clif_send(buf, WBUFW(buf,2), &sd->bl, SELF); @@ -2533,7 +2533,7 @@ void clif_storagelist(struct map_session_data* sd, struct item* items, int items WBUFW(bufe,0)=0x2d1; #else WBUFW(bufe,0)=0x996; - memset((char*)WBUFP(bufe,6),0,24); //storename + memset((char*)WBUFP(bufe,4),0,24); //storename #endif WBUFW(bufe,2)=ne*se+sidxe; clif_send(bufe, WBUFW(bufe,2), &sd->bl, SELF); @@ -16562,6 +16562,97 @@ void clif_parse_client_version(int fd,struct map_session_data *sd){ ; } +/// Ranking list + +/// ranking pointlist { .24B .L }*10 +void clif_sub_ranklist(unsigned char *buf,int idx,struct map_session_data* sd, int listid){ + const char* name; + struct fame_list* list; + int i, skip; + + switch(listid+1) //to keep the same case as char.c + { + case 1: list = smith_fame_list; break; + case 2: list = chemist_fame_list; break; + case 3: list = taekwon_fame_list; break; + default: skip=1; break; + } + + if(!skip){ + //Packet size limits this list to 10 elements. [Skotlex] + for (i = 0; i < 10 && i < MAX_FAME_LIST; i++) { + if (list[i].id > 0) { + if (strcmp(list[i].name, "-") == 0 && + (name = map_charid2nick(list[i].id)) != NULL) + { + strncpy((char *)(WBUFP(buf,idx + 24 * i)), name, NAME_LENGTH); + } else + strncpy((char *)(WBUFP(buf,idx + 24 * i)), list[i].name, NAME_LENGTH); + } else + strncpy((char *)(WBUFP(buf, idx + 24 * i)), "None", 5); + WBUFL(buf, idx+24*10 + i * 4) = list[i].fame; //points + } + for(;i < 10; i++) { //In case the MAX is less than 10. + strncpy((char *)(WBUFP(buf, idx + 24 * i)), "Unavailable", 12); + WBUFL(buf, idx+24*10 + i * 4) = 0; + } + } +} + +/// 097d .W {.24B L}*10 L (ZC_ACK_RANKING) +void clif_ranklist(struct map_session_data *sd, int rankingType){ + unsigned char buf[MAX_FAME_LIST * sizeof(struct fame_list)]; + int mypoint=0, fd=sd->fd; + + WFIFOHEAD(fd,288); + WFIFOW(fd,0) = 0x97d; + WFIFOW(fd,2) = rankingType; + + clif_sub_ranklist(WBUFP(buf,0),4,sd,rankingType); + + switch(sd->class_&MAPID_UPPERMASK){ //mypoint (checking if valid type) + case MAPID_BLACKSMITH: + case MAPID_ALCHEMIST: + case MAPID_TAEKWON: + mypoint = sd->status.fame; + } + WFIFOL(fd,284) = mypoint; //mypoint + WFIFOSET(fd,288); +} + +/* + * 097c (CZ_REQ_RANKING) + * type + * 0: /blacksmith + * 1: /alchemist + * 2: /taekwon + * 3: /pk + * */ +void clif_parse_ranklist(int fd,struct map_session_data *sd){ + struct s_packet_db* info = &packet_db[sd->packet_ver][RFIFOW(fd,0)]; + int listid = RFIFOL(fd,info->pos[0]); //type + if(listid != 3) clif_ranklist(sd,listid); // pk_list unsuported atm +} + +// 097e .W .L .L (unused atm) (ZC_UPDATE_RANKING_POINT) +void clif_update_rankingpoint(struct map_session_data *sd, int rankingtype, int point){ +#if PACKETVER < 20130710 + switch(ranktype){ + case 0: clif_fame_blacksmith(sd,point); break; // Blacksmith + case 1: clif_fame_alchemist(sd,point); break; //Alchemist + case 2: clif_fame_taekwon(sd,point); break; // Taekwon + } +#else + int fd=sd->fd; + WFIFOHEAD(fd,14); + WFIFOW(fd,0) = 0x97e; + WFIFOW(fd,2) = rankingtype; + WFIFOL(fd,4) = point; + WFIFOL(fd,8) = sd->status.fame; + WFIFOSET(fd,12); +#endif +} + #ifdef DUMP_UNKNOWN_PACKET void DumpUnknow(int fd,TBL_PC *sd,int cmd,int packet_len){ const char* packet_txt = "save/packet.txt"; @@ -17190,6 +17281,7 @@ void packetdb_readdb(void) { clif_parse_reqworldinfo, "reqworldinfo"}, { clif_parse_client_version, "clientversion"}, { clif_parse_blocking_playcancel, "booking_playcancel"}, + { clif_parse_ranklist, "ranklist"}, {NULL,NULL} }; diff --git a/src/map/clif.h b/src/map/clif.h index 177afc5..4778d0d 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -35,7 +35,7 @@ struct party_booking_ad_info; enum {// packet DB MAX_PACKET_DB = 0xf00, - MAX_PACKET_VER = 39, + MAX_PACKET_VER = 44, MAX_PACKET_POS = 20, }; diff --git a/src/map/pc.c b/src/map/pc.c index 8caecad..dec0c54 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -353,21 +353,19 @@ int pc_banding(struct map_session_data *sd, uint16 skill_lv) { // Increases a player's fame points and displays a notice to him void pc_addfame(struct map_session_data *sd,int count) { + int ranktype=-1; nullpo_retv(sd); sd->status.fame += count; if(sd->status.fame > MAX_FAME) sd->status.fame = MAX_FAME; + switch(sd->class_&MAPID_UPPERMASK){ - case MAPID_BLACKSMITH: // Blacksmith - clif_fame_blacksmith(sd,count); - break; - case MAPID_ALCHEMIST: // Alchemist - clif_fame_alchemist(sd,count); - break; - case MAPID_TAEKWON: // Taekwon - clif_fame_taekwon(sd,count); - break; + case MAPID_BLACKSMITH: ranktype=0; break; + case MAPID_ALCHEMIST: ranktype=1; break; + case MAPID_TAEKWON: ranktype=2; break; } + + clif_update_rankingpoint(sd,ranktype,count); chrif_updatefamelist(sd); } @@ -8541,6 +8539,7 @@ int pc_load_combo(struct map_session_data *sd) { } return ret; } + /*========================================== * Equip item on player sd at req_pos from inventory index n *------------------------------------------*/