From eb8587f5b5baf7162573ecdd0f80fff3e2683d38 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Thu, 17 Nov 2022 22:09:12 +0100 Subject: [PATCH] Removed the strange ACK function concept (#7404) Cleans up packet database a little more. Turned some more packets into structs. Co-authored-by: Vincent Stumpf --- src/map/chrif.cpp | 3 +- src/map/clif.cpp | 428 ++++++++++++++----------------------- src/map/clif.hpp | 44 ++-- src/map/clif_packetdb.hpp | 23 -- src/map/packets.hpp | 47 ++++ src/map/packets_struct.hpp | 18 +- src/map/pc.cpp | 17 +- src/map/pc.hpp | 2 +- src/map/pet.cpp | 2 +- src/map/script.cpp | 4 +- src/map/status.cpp | 9 +- 11 files changed, 259 insertions(+), 338 deletions(-) diff --git a/src/map/chrif.cpp b/src/map/chrif.cpp index 7e6c251353..79413cc84d 100644 --- a/src/map/chrif.cpp +++ b/src/map/chrif.cpp @@ -1614,8 +1614,7 @@ void chrif_parse_ack_vipActive(int fd) { } // Show info if status changed if (((flag&0x4) || changed) && !sd->vip.disableshowrate) { - clif_display_pinfo(sd,ZC_PERSONAL_INFOMATION); - //clif_vip_display_info(sd,ZC_PERSONAL_INFOMATION_CHN); + clif_display_pinfo( *sd ); } #endif } diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 768f479bd4..df6d90f914 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -79,7 +79,6 @@ static inline int32 client_exp(t_exp exp) { static struct eri *delay_clearunit_ers; struct s_packet_db packet_db[MAX_PACKET_DB + 1]; -int packet_db_ack[MAX_ACK_FUNC + 1]; // Reuseable global packet buffer to prevent too many allocations // Take socket.cpp::socket_max_client_packet into consideration static int8 packet_buffer[UINT16_MAX]; @@ -2491,25 +2490,13 @@ void clif_scriptclose(struct map_session_data *sd, int npcid) * @param sd : player pointer * @param npcid : npc gid to close */ -void clif_scriptclear(struct map_session_data *sd, int npcid) -{ - struct s_packet_db* info; - int16 len; - int cmd = 0; - int fd; +void clif_scriptclear( struct map_session_data& sd, int npcid ){ + struct PACKET_ZC_CLEAR_DIALOG p = {}; - nullpo_retv(sd); + p.packetType = HEADER_ZC_CLEAR_DIALOG; + p.GID = npcid; - cmd = packet_db_ack[ZC_CLEAR_DIALOG]; - if(!cmd) cmd = 0x8d6; //default - info = &packet_db[cmd]; - len = info->len; - fd = sd->fd; - - WFIFOHEAD(fd, len); - WFIFOW(fd,0)=0x8d6; - WFIFOL(fd,info->pos[0])=npcid; - WFIFOSET(fd,len); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); } /*========================================== @@ -4134,48 +4121,22 @@ void clif_statusupack(struct map_session_data *sd,int type,int ok,int val) { /// 0 = failure /// 1 = success /// 2 = failure due to low level -void clif_equipitemack(struct map_session_data *sd,int n,int pos,uint8 flag) -{ - int fd = 0, cmd = 0, look = 0; - struct s_packet_db *info = NULL; +void clif_equipitemack( struct map_session_data& sd, uint8 flag, int index, int pos ){ + struct PACKET_ZC_REQ_WEAR_EQUIP_ACK p = {}; - nullpo_retv(sd); - - cmd = packet_db_ack[ZC_WEAR_EQUIP_ACK]; - if (!cmd || !(info = &packet_db[cmd]) || !info->len) - return; - - fd = sd->fd; - - if (flag == ITEM_EQUIP_ACK_OK && sd->inventory_data[n]->equip&EQP_VISIBLE) - 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 PACKETVER < 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); -#endif - 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; + p.PacketType = HEADER_ZC_REQ_WEAR_EQUIP_ACK; + p.index = client_index( index ); + p.wearLocation = pos; +#if PACKETVER_MAIN_NUM >= 20101123 || PACKETVER_RE_NUM >= 20100629 + if( flag == ITEM_EQUIP_ACK_OK && sd.inventory_data[index]->equip&EQP_VISIBLE ){ + p.wItemSpriteNumber = sd.inventory_data[index]->look; + }else{ + p.wItemSpriteNumber = 0; } - WFIFOSET(fd, info->len); +#endif + p.result = flag; + + clif_send( &p, sizeof( p ), &sd.bl, SELF ); } @@ -7346,16 +7307,15 @@ void clif_cart_additem_ack(struct map_session_data *sd, uint8 flag) } // 09B7 (ZC_ACK_OPEN_BANKING) -void clif_bank_open(struct map_session_data *sd){ - int fd; +void clif_bank_open( struct map_session_data& sd ){ +#if PACKETVER >= 20130717 + struct PACKET_ZC_ACK_OPEN_BANKING p = {}; - nullpo_retv(sd); - fd = sd->fd; + p.packetType = HEADER_ZC_ACK_OPEN_BANKING; + p.unknown = 0; - WFIFOHEAD(fd,4); - WFIFOW(fd,0) = 0x09b7; - WFIFOW(fd,2) = 0; - WFIFOSET(fd,4); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); +#endif } /* @@ -7378,23 +7338,21 @@ void clif_parse_BankOpen(int fd, struct map_session_data* sd) { //request save ? //chrif_bankdata_request(sd->status.account_id, sd->status.char_id); //on succes open bank ? - clif_bank_open(sd); + clif_bank_open( *sd ); } } } // 09B9 (ZC_ACK_CLOSE_BANKING) +void clif_bank_close( struct map_session_data& sd ){ +#if PACKETVER >= 20130717 + struct PACKET_ZC_ACK_CLOSE_BANKING p = {}; -void clif_bank_close(struct map_session_data *sd){ - int fd; + p.packetType = HEADER_ZC_ACK_CLOSE_BANKING; + p.unknown = 0; - nullpo_retv(sd); - fd = sd->fd; - - WFIFOHEAD(fd,4); - WFIFOW(fd,0) = 0x09B9; - WFIFOW(fd,2) = 0; - WFIFOSET(fd,4); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); +#endif } /* @@ -7412,33 +7370,24 @@ void clif_parse_BankClose(int fd, struct map_session_data* sd) { } if(sd->status.account_id == aid){ sd->state.banking = 0; - clif_bank_close(sd); + clif_bank_close( *sd ); } } /* * Display how much we got in bank (I suppose) - 09A6 Q W (PACKET_ZC_BANKING_CHECK) + * 09A6 Q W (ZC_BANKING_CHECK) */ -void clif_Bank_Check(struct map_session_data* sd) { - unsigned char buf[13]; - struct s_packet_db* info; - int16 len; - int cmd = 0; +void clif_Bank_Check( struct map_session_data& sd ){ +#if PACKETVER >= 20130717 + struct PACKET_ZC_BANKING_CHECK p = {}; - nullpo_retv(sd); + p.packetType = HEADER_ZC_BANKING_CHECK; + p.money = sd.bank_vault; + p.reason = 0; - cmd = packet_db_ack[ZC_BANKING_CHECK]; - if(!cmd) cmd = 0x09A6; //default - info = &packet_db[cmd]; - len = info->len; - if(!len) return; //version as packet disable - // sd->state.banking = 1; //mark opening and closing - - WBUFW(buf,0) = cmd; - WBUFQ(buf,info->pos[0]) = sd->bank_vault; //value - WBUFW(buf,info->pos[1]) = 0; //reason - clif_send(buf,len,&sd->bl,SELF); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); +#endif } /* @@ -7456,7 +7405,7 @@ void clif_parse_BankCheck(int fd, struct map_session_data* sd) { struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; int aid = RFIFOL(fd,info->pos[0]); //unused should we check vs fd ? if(sd->status.account_id == aid) //since we have it let check it for extra security - clif_Bank_Check(sd); + clif_Bank_Check( *sd ); } } @@ -7464,25 +7413,17 @@ void clif_parse_BankCheck(int fd, struct map_session_data* sd) { * Acknowledge of deposit some money in bank 09A8 W Q L (PACKET_ZC_ACK_BANKING_DEPOSIT) */ -void clif_bank_deposit(struct map_session_data *sd, enum e_BANKING_DEPOSIT_ACK reason) { - unsigned char buf[17]; - struct s_packet_db* info; - int16 len; - int cmd =0; +void clif_bank_deposit( struct map_session_data& sd, enum e_BANKING_DEPOSIT_ACK reason ){ +#if PACKETVER >= 20130717 + struct PACKET_ZC_ACK_BANKING_DEPOSIT p = {}; - nullpo_retv(sd); + p.packetType = HEADER_ZC_ACK_BANKING_DEPOSIT; + p.money = sd.bank_vault; + p.zeny = sd.status.zeny; + p.reason = reason; - cmd = packet_db_ack[ZC_ACK_BANKING_DEPOSIT]; - if(!cmd) cmd = 0x09A8; - info = &packet_db[cmd]; - len = info->len; - if(!len) return; //version as packet disable - - WBUFW(buf,0) = cmd; - WBUFW(buf,info->pos[0]) = (short)reason; - WBUFQ(buf,info->pos[1]) = sd->bank_vault;/* money in the bank */ - WBUFL(buf,info->pos[2]) = sd->status.zeny;/* how much zeny char has after operation */ - clif_send(buf,len,&sd->bl,SELF); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); +#endif } /* @@ -7503,7 +7444,7 @@ void clif_parse_BankDeposit(int fd, struct map_session_data* sd) { if(sd->status.account_id == aid){ enum e_BANKING_DEPOSIT_ACK reason = pc_bank_deposit(sd,max(0,money)); - clif_bank_deposit(sd,reason); + clif_bank_deposit( *sd, reason ); } } } @@ -7512,26 +7453,17 @@ void clif_parse_BankDeposit(int fd, struct map_session_data* sd) { * Acknowledge of withdrawing some money from bank 09AA W Q L (PACKET_ZC_ACK_BANKING_WITHDRAW) */ -void clif_bank_withdraw(struct map_session_data *sd,enum e_BANKING_WITHDRAW_ACK reason) { - unsigned char buf[17]; - struct s_packet_db* info; - int16 len; - int cmd; +void clif_bank_withdraw( struct map_session_data& sd, enum e_BANKING_WITHDRAW_ACK reason ){ +#if PACKETVER >= 20130717 + struct PACKET_ZC_ACK_BANKING_WITHDRAW p = {}; - nullpo_retv(sd); + p.packetType = HEADER_ZC_ACK_BANKING_WITHDRAW; + p.reason = reason; + p.money = sd.bank_vault; + p.zeny = sd.status.zeny; - cmd = packet_db_ack[ZC_ACK_BANKING_WITHDRAW]; - if(!cmd) cmd = 0x09AA; - info = &packet_db[cmd]; - len = info->len; - if(!len) return; //version as packet disable - - WBUFW(buf,0) = cmd; - WBUFW(buf,info->pos[0]) = (short)reason; - WBUFQ(buf,info->pos[1]) = sd->bank_vault;/* money in the bank */ - WBUFL(buf,info->pos[2]) = sd->status.zeny;/* how much zeny char has after operation */ - - clif_send(buf,len,&sd->bl,SELF); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); +#endif } /* @@ -7550,7 +7482,7 @@ void clif_parse_BankWithdraw(int fd, struct map_session_data* sd) { int money = RFIFOL(fd,info->pos[1]); if(sd->status.account_id == aid){ enum e_BANKING_WITHDRAW_ACK reason = pc_bank_withdraw(sd,max(0,money)); - clif_bank_withdraw(sd,reason); + clif_bank_withdraw( *sd, reason ); } } } @@ -11088,8 +11020,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) map_getmapflag(sd->state.pmap, MF_BEXP) != mapdata->flag[MF_BEXP] ) { - clif_display_pinfo(sd,ZC_PERSONAL_INFOMATION); - //clif_vip_display_info(sd,ZC_PERSONAL_INFOMATION_CHN); + clif_display_pinfo( *sd ); } #endif @@ -12094,7 +12025,7 @@ void clif_parse_EquipItem(int fd,struct map_session_data *sd) return; if(!sd->inventory.u.items_inventory[index].identify) { - clif_equipitemack(sd,index,0,ITEM_EQUIP_ACK_FAIL); // fail + clif_equipitemack( *sd, ITEM_EQUIP_ACK_FAIL, index ); // fail return; } @@ -19957,19 +19888,16 @@ void clif_update_rankingpoint(map_session_data &sd, int rankingtype, int point) * 0 - map adjustment (bexp mapflag), 1 - Premium/VIP adjustment, 2 - Server rate adjustment, 3 - None */ #ifdef VIP_ENABLE -void clif_display_pinfo(struct map_session_data *sd, int cmdtype) { - if (sd) { - struct s_packet_db* info; - int16 len, szdetails = 13, maxinfotype = PINFO_MAX; - int cmd = 0, fd, i = 0; - int tot_baseexp = 100, tot_penalty = 100, tot_drop = 100, factor = 1000; +void clif_display_pinfo( struct map_session_data& sd ){ +#if PACKETVER_MAIN_NUM >= 20110627 || PACKETVER_RE_NUM >= 20110628 || defined(PACKETVER_ZERO) + // TODO: Whoever wants to take the blame, fix this crappy logic below - and yes I know indentation is wrong, but CANT TOUCH THIS! *sings* [Lemongrass] int details_bexp[PINFO_MAX], details_drop[PINFO_MAX], details_penalty[PINFO_MAX]; /** * EXP */ //0:PCRoom - details_bexp[PINFO_BASIC] = map_getmapflag(sd->bl.m, MF_BEXP); + details_bexp[PINFO_BASIC] = map_getmapflag( sd.bl.m, MF_BEXP ); if (details_bexp[PINFO_BASIC] == 100 || !details_bexp[PINFO_BASIC]) details_bexp[PINFO_BASIC] = 0; else { @@ -19981,7 +19909,7 @@ void clif_display_pinfo(struct map_session_data *sd, int cmdtype) { } //1:Premium - if (pc_isvip(sd)) { + if( pc_isvip( &sd ) ){ details_bexp[PINFO_PREMIUM] = battle_config.vip_base_exp_increase * battle_config.base_exp_rate / 100; if (details_bexp[PINFO_PREMIUM] < 0) details_bexp[PINFO_PREMIUM] = 0 - details_bexp[PINFO_PREMIUM]; @@ -20010,7 +19938,7 @@ void clif_display_pinfo(struct map_session_data *sd, int cmdtype) { details_drop[PINFO_BASIC] = 0; //1:Premium - if (pc_isvip(sd)) { + if( pc_isvip( &sd ) ){ details_drop[PINFO_PREMIUM] = (battle_config.vip_drop_increase * battle_config.item_rate_common) / 100; if (details_drop[PINFO_PREMIUM] < 0) details_drop[PINFO_PREMIUM] = 0 - details_drop[PINFO_PREMIUM]; @@ -20040,7 +19968,7 @@ void clif_display_pinfo(struct map_session_data *sd, int cmdtype) { details_penalty[PINFO_BASIC] = 0; //1:Premium - if (pc_isvip(sd)) { + if( pc_isvip( &sd ) ){ details_penalty[PINFO_PREMIUM] = battle_config.vip_exp_penalty_base; if (details_penalty[PINFO_PREMIUM] == 100) details_penalty[PINFO_PREMIUM] = 0; @@ -20071,53 +19999,40 @@ void clif_display_pinfo(struct map_session_data *sd, int cmdtype) { //3:TPLUS details_penalty[PINFO_CAFE] = 0; - cmd = packet_db_ack[cmdtype]; - info = &packet_db[cmd]; - len = info->len; //this is the base len without details - if(!len) return; //version as packet disable + struct PACKET_ZC_PERSONAL_INFOMATION* p = (struct PACKET_ZC_PERSONAL_INFOMATION*)packet_buffer; - if (cmdtype == ZC_PERSONAL_INFOMATION && cmd == 0x08cb) { //0x08cb version - szdetails = 7; - factor = 1; - } - else if (cmd == 0x097b) { - tot_baseexp *= factor; - tot_drop *= factor; - tot_penalty *= factor; - } + p->packetType = HEADER_ZC_PERSONAL_INFOMATION; + p->length = sizeof( *p ) + PINFO_MAX * sizeof( p->details[0] ); +#if PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502 || defined(PACKETVER_ZERO) + p->total_exp = 100 * 1000; + p->total_death = 100 * 1000; + p->total_drop = 100 * 1000; +#else + p->total_exp = 100; + p->total_death = 100; + p->total_drop = 100; +#endif - fd = sd->fd; - WFIFOHEAD(fd,len+maxinfotype*szdetails); - WFIFOW(fd,0) = cmd; + for( int i = PINFO_BASIC; i < PINFO_MAX; i++ ){ + p->details[i].type = i; // infotype 0 PCRoom, 1 Premium, 2 Server, 3 TPlus - for (i = 0; i < maxinfotype; i++) { - WFIFOB(fd,info->pos[4]+(i*szdetails)) = i; //infotype //0 PCRoom, 1 Premium, 2 Server, 3 TPlus +#if PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502 || defined(PACKETVER_ZERO) + p->details[i].exp = details_bexp[i] * 1000; + p->details[i].death = details_penalty[i] * 1000; + p->details[i].drop = details_drop[i] * 1000; +#else + p->details[i].exp = details_bexp[i]; + p->details[i].death = details_penalty[i]; + p->details[i].drop = details_drop[i]; +#endif - WFIFOL(fd,info->pos[5]+(i*szdetails)) = details_bexp[i]*factor; - WFIFOL(fd,info->pos[6]+(i*szdetails)) = details_penalty[i]*factor; - WFIFOL(fd,info->pos[7]+(i*szdetails)) = details_drop[i]*factor; - - tot_baseexp += details_bexp[i]*factor; - tot_drop += details_drop[i]*factor; - tot_penalty += details_penalty[i]*factor; - - len += szdetails; - } - WFIFOW(fd,info->pos[0]) = len; //packetlen - if (cmd == 0x08cb) { //0x08cb version - WFIFOW(fd,info->pos[1]) = tot_baseexp; - WFIFOW(fd,info->pos[2]) = tot_penalty; - WFIFOW(fd,info->pos[3]) = tot_drop; - } - else { //2013-08-07aRagexe uses 0x097b - WFIFOL(fd,info->pos[1]) = tot_baseexp; - WFIFOL(fd,info->pos[2]) = tot_penalty; - WFIFOL(fd,info->pos[3]) = tot_drop; - } - if (cmdtype == ZC_PERSONAL_INFOMATION_CHN) - WFIFOW(fd,info->pos[8]) = 0; //activity rate case of event ?? - WFIFOSET(fd,len); + p->total_exp += p->details[i].exp; + p->total_death += p->details[i].death; + p->total_drop += p->details[i].drop; } + + clif_send( p, p->length, &sd.bl, SELF ); +#endif } #endif @@ -20134,46 +20049,36 @@ void clif_parse_GMFullStrip(int fd, struct map_session_data *sd) { * @param fd * @param bl Crimson Marker target **/ -void clif_crimson_marker(struct map_session_data *sd, struct block_list *bl, bool remove) { - struct s_packet_db* info; - int cmd = 0; - int16 len; - unsigned char buf[11]; +void clif_crimson_marker( struct map_session_data& sd, struct block_list& bl, bool remove ){ +#if PACKETVER_MAIN_NUM >= 20130731 || PACKETVER_RE_NUM >= 20130707 || defined(PACKETVER_ZERO) + struct PACKET_ZC_C_MARKERINFO p = {}; - nullpo_retv(sd); + p.PacketType = HEADER_ZC_C_MARKERINFO; + p.AID = bl.id; + if( remove ){ + p.xPos = -1; + p.yPos = -1; + }else{ + p.xPos = bl.x; + p.yPos = bl.y; + } - cmd = packet_db_ack[ZC_C_MARKERINFO]; - if (!cmd) - cmd = 0x09C1; //default - info = &packet_db[cmd]; - if (!(len = info->len)) - return; - - WBUFW(buf, 0) = cmd; - WBUFL(buf, info->pos[0]) = bl->id; - WBUFW(buf, info->pos[1]) = (remove ? -1 : bl->x); - WBUFW(buf, info->pos[2]) = (remove ? -1 : bl->y); - clif_send(buf, len, &sd->bl, SELF); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); +#endif } /** * 02d3 .W (ZC_NOTIFY_BIND_ON_EQUIP) **/ -void clif_notify_bindOnEquip(struct map_session_data *sd, int n) { - struct s_packet_db *info = NULL; - int cmd = 0; +void clif_notify_bindOnEquip( struct map_session_data& sd, int16 index ){ +#if PACKETVER >= 20070227 + struct PACKET_ZC_NOTIFY_BIND_ON_EQUIP p = {}; - nullpo_retv(sd); + p.packetType = HEADER_ZC_NOTIFY_BIND_ON_EQUIP; + p.index = client_index( index ); - cmd = packet_db_ack[ZC_NOTIFY_BIND_ON_EQUIP]; - info = &packet_db[cmd]; - if (!cmd || !info->len) - return; - - WFIFOHEAD(sd->fd, info->len); - WFIFOW(sd->fd, 0) = cmd; - WFIFOW(sd->fd, info->pos[0]) = n+2; - WFIFOSET(sd->fd, info->len); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); +#endif } /** @@ -20707,25 +20612,21 @@ void clif_parse_roulette_item( int fd, struct map_session_data* sd ){ * @param fd * @param sd **/ -void clif_merge_item_ack(struct map_session_data *sd, unsigned short index, unsigned short count, enum MERGE_ITEM_ACK type) { - unsigned char buf[9]; - struct s_packet_db *info = NULL; - short cmd = 0; +void clif_merge_item_ack( struct map_session_data &sd, enum MERGE_ITEM_ACK type, uint16 index = 0, uint16 count = 0 ){ +#if PACKETVER_MAIN_NUM >= 20120314 || PACKETVER_RE_NUM >= 20120221 || defined(PACKETVER_ZERO) + struct PACKET_ZC_ACK_MERGE_ITEM p = {}; - nullpo_retv(sd); + p.packetType = HEADER_ZC_ACK_MERGE_ITEM; + if( type == MERGE_ITEM_SUCCESS ){ + p.index = client_index( index ); + }else{ + p.index = index; + } + p.amount = count; + p.reason = type; - if (!clif_session_isValid(sd)) - return; - if (!(cmd = packet_db_ack[ZC_ACK_MERGE_ITEM])) - return; - if (!(info = &packet_db[cmd]) || info->len == 0) - return; - - WBUFW(buf, 0) = cmd; - WBUFW(buf, info->pos[0]) = index; - WBUFW(buf, info->pos[1]) = count; - WBUFB(buf, info->pos[2]) = type; - clif_send(buf, info->len, &sd->bl, SELF); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); +#endif } /** @@ -20773,41 +20674,37 @@ static bool clif_merge_item_check(struct item_data *id, struct item *it) { * ZC 096D .W { .W }* (ZC_MERGE_ITEM_OPEN) * @param sd **/ -void clif_merge_item_open(struct map_session_data *sd) { - unsigned char buf[4 + MAX_INVENTORY*2] = { 0 }; - unsigned short cmd = 0, n = 0, i = 0, indexes[MAX_INVENTORY] = { 0 }; - int len = 0; - struct s_packet_db *info = NULL; - struct item *it; +void clif_merge_item_open( struct map_session_data& sd ){ +#if PACKETVER_MAIN_NUM >= 20120314 || PACKETVER_RE_NUM >= 20120221 || defined(PACKETVER_ZERO) + struct PACKET_ZC_MERGE_ITEM_OPEN* p = (struct PACKET_ZC_MERGE_ITEM_OPEN*)packet_buffer; - nullpo_retv(sd); - if (!clif_session_isValid(sd)) - return; - if (!(cmd = packet_db_ack[ZC_MERGE_ITEM_OPEN])) - return; - if (!(info = &packet_db[cmd]) || info->len == 0) - return; + p->packetType = HEADER_ZC_MERGE_ITEM_OPEN; + p->packetLen = sizeof( *p ); + + int n = 0; // Get entries - for (i = 0; i < MAX_INVENTORY; i++) { - if (!clif_merge_item_check(sd->inventory_data[i], (it = &sd->inventory.u.items_inventory[i]))) + for( int i = 0; i < MAX_INVENTORY; i++ ){ + struct item* it = &sd.inventory.u.items_inventory[i]; + + if( !clif_merge_item_check( sd.inventory_data[i], it ) ){ continue; - if (clif_merge_item_has_pair(sd, it)) - indexes[n++] = i; + } + + if( clif_merge_item_has_pair( &sd, it ) ){ + p->items[n++].index = client_index( i ); + p->packetLen += sizeof( p->items[0] ); + } } - if (n < 2) { // No item need to be merged - clif_msg(sd, MERGE_ITEM_NOT_AVAILABLE); + // No item need to be merged + if( n < 2 ){ + clif_msg( &sd, MERGE_ITEM_NOT_AVAILABLE ); return; } - WBUFW(buf, 0) = cmd; - WBUFW(buf, info->pos[0]) = (len = 4 + n*2); - for (i = 0; i < n; i++) { - WBUFW(buf, info->pos[1] + i*2) = indexes[i]+2; - } - - clif_send(buf, len, &sd->bl, SELF); + clif_send( p, p->packetLen, &sd.bl, SELF ); +#endif } /** @@ -20846,7 +20743,7 @@ void clif_parse_merge_item_req(int fd, struct map_session_data* sd) { continue; indexes[j] = idx; if (j && id->nameid != sd->inventory_data[indexes[0]]->nameid) { // Only can merge 1 kind at once - clif_merge_item_ack(sd, 0, 0, MERGE_ITEM_FAILED_NOT_MERGE); + clif_merge_item_ack( *sd, MERGE_ITEM_FAILED_NOT_MERGE ); return; } count += sd->inventory.u.items_inventory[idx].amount; @@ -20859,7 +20756,7 @@ void clif_parse_merge_item_req(int fd, struct map_session_data* sd) { } if (count >= (id->stack.amount ? id->stack.amount : MAX_AMOUNT)) { - clif_merge_item_ack(sd, 0, 0, MERGE_ITEM_FAILED_MAX_COUNT); + clif_merge_item_ack( *sd, MERGE_ITEM_FAILED_MAX_COUNT ); return; } @@ -20873,7 +20770,7 @@ void clif_parse_merge_item_req(int fd, struct map_session_data* sd) { } sd->inventory.u.items_inventory[indexes[0]].amount = count; - clif_merge_item_ack(sd, indexes[0]+2, count, MERGE_ITEM_SUCCESS); + clif_merge_item_ack( *sd, MERGE_ITEM_SUCCESS, indexes[0], count ); } /** @@ -25079,7 +24976,6 @@ void packetdb_addpacket( uint16 cmd, uint16 length, void (*func)(int, struct map *------------------------------------------*/ void packetdb_readdb(){ memset(packet_db,0,sizeof(packet_db)); - memset(packet_db_ack,0,sizeof(packet_db_ack)); #include "clif_packetdb.hpp" #include "clif_shuffle.hpp" diff --git a/src/map/clif.hpp b/src/map/clif.hpp index e548eb4427..dd35c867f7 100644 --- a/src/map/clif.hpp +++ b/src/map/clif.hpp @@ -59,25 +59,6 @@ enum e_PacketDBVersion { // packet DB #endif }; -enum e_packet_ack : uint8_t{ - ZC_ACK_OPEN_BANKING = 0, - ZC_ACK_CLOSE_BANKING, - ZC_ACK_BANKING_DEPOSIT, - ZC_ACK_BANKING_WITHDRAW, - ZC_BANKING_CHECK, - ZC_PERSONAL_INFOMATION, - ZC_PERSONAL_INFOMATION_CHN, - ZC_CLEAR_DIALOG, - ZC_C_MARKERINFO, - ZC_NOTIFY_BIND_ON_EQUIP, - ZC_WEAR_EQUIP_ACK, - ZC_MERGE_ITEM_OPEN, - ZC_ACK_MERGE_ITEM, - ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN, - //add other here - MAX_ACK_FUNC //auto upd len -}; - struct s_packet_db { short len; void (*func)(int, struct map_session_data *); @@ -214,7 +195,6 @@ enum class e_purchase_result : uint8{ #define packet_len(cmd) packet_db[cmd].len extern struct s_packet_db packet_db[MAX_PACKET_DB+1]; -extern int packet_db_ack[MAX_ACK_FUNC + 1]; // local define enum send_target : uint8_t { @@ -516,9 +496,15 @@ enum clif_messages : uint16_t { ADDITEM_TO_CART_FAIL_COUNT = 0x1, // clif_equipitemack flags +#if PACKETVER_MAIN_NUM >= 20121205 || PACKETVER_RE_NUM >= 20121107 || defined(PACKETVER_ZERO) ITEM_EQUIP_ACK_OK = 0, - ITEM_EQUIP_ACK_FAIL = 1, - ITEM_EQUIP_ACK_FAILLEVEL = 2, + ITEM_EQUIP_ACK_FAIL = 2, + ITEM_EQUIP_ACK_FAILLEVEL = 1, +#else + ITEM_EQUIP_ACK_OK = 1, + ITEM_EQUIP_ACK_FAIL = 0, + ITEM_EQUIP_ACK_FAILLEVEL = 0, +#endif /* -end- */ //! NOTE: These values below need client version validation @@ -645,7 +631,7 @@ void clif_parse_NPCMarketPurchase(int fd, struct map_session_data *sd); void clif_scriptmes( struct map_session_data& sd, uint32 npcid, const char *mes ); void clif_scriptnext( struct map_session_data& sd, uint32 npcid ); void clif_scriptclose(struct map_session_data *sd, int npcid); //self -void clif_scriptclear(struct map_session_data *sd, int npcid); //self +void clif_scriptclear( struct map_session_data& sd, int npcid ); //self void clif_scriptmenu(struct map_session_data* sd, int npcid, const char* mes); //self void clif_scriptinput(struct map_session_data *sd, int npcid); //self void clif_scriptinputstr(struct map_session_data *sd, int npcid); // self @@ -669,7 +655,7 @@ void clif_arrowequip(struct map_session_data *sd,int val); //self void clif_arrow_fail(struct map_session_data *sd,int type); //self void clif_arrow_create_list(struct map_session_data *sd); //self void clif_statusupack(struct map_session_data *sd,int type,int ok,int val); // self -void clif_equipitemack(struct map_session_data *sd,int n,int pos,uint8 flag); // self +void clif_equipitemack( struct map_session_data& sd, uint8 flag, int index, int pos = 0 ); // self void clif_unequipitemack(struct map_session_data *sd,int n,int pos,int ok); // self void clif_misceffect(struct block_list* bl,int type); // area void clif_changeoption_target(struct block_list* bl, struct block_list* target); @@ -1042,8 +1028,6 @@ void clif_PartyBookingDeleteNotify(struct map_session_data* sd, int index); void clif_PartyBookingInsertNotify(struct map_session_data* sd, struct party_booking_ad_info* pb_ad); /* Bank System [Yommy/Hercules] */ -void clif_bank_deposit (struct map_session_data *sd, enum e_BANKING_DEPOSIT_ACK reason); -void clif_bank_withdraw (struct map_session_data *sd,enum e_BANKING_WITHDRAW_ACK reason); void clif_parse_BankDeposit (int fd, struct map_session_data *sd); void clif_parse_BankWithdraw (int fd, struct map_session_data *sd); void clif_parse_BankCheck (int fd, struct map_session_data *sd); @@ -1074,7 +1058,7 @@ void clif_search_store_info_click_ack(struct map_session_data* sd, short x, shor void clif_cashshop_result( struct map_session_data* sd, t_itemid item_id, uint16 result ); void clif_cashshop_open( struct map_session_data* sd, int tab ); -void clif_display_pinfo(struct map_session_data *sd, int type); +void clif_display_pinfo( struct map_session_data& sd ); /// Roulette void clif_roulette_open(struct map_session_data* sd); @@ -1140,15 +1124,15 @@ void clif_channel_msg(struct Channel *channel, const char *msg, unsigned long co void clif_ranklist(struct map_session_data *sd, int16 rankingType); void clif_update_rankingpoint(map_session_data &sd, int rankingtype, int point); -void clif_crimson_marker(struct map_session_data *sd, struct block_list *bl, bool remove); +void clif_crimson_marker( struct map_session_data& sd, struct block_list& bl, bool remove ); void clif_showscript(struct block_list* bl, const char* message, enum send_target flag); void clif_party_leaderchanged(struct map_session_data *sd, int prev_leader_aid, int new_leader_aid); void clif_account_name(int fd, uint32 account_id, const char* accname); -void clif_notify_bindOnEquip(struct map_session_data *sd, int n); +void clif_notify_bindOnEquip( struct map_session_data& sd, int16 index ); -void clif_merge_item_open(struct map_session_data *sd); +void clif_merge_item_open( struct map_session_data& sd ); void clif_broadcast_obtain_special_item(const char *char_name, t_itemid nameid, t_itemid container, enum BROADCASTING_SPECIAL_ITEM_OBTAIN type); diff --git a/src/map/clif_packetdb.hpp b/src/map/clif_packetdb.hpp index e861cfbf6b..e2ae5ab061 100644 --- a/src/map/clif_packetdb.hpp +++ b/src/map/clif_packetdb.hpp @@ -6,9 +6,6 @@ #define packet(cmd,length) packetdb_addpacket(cmd,length,NULL,0) #define parseable_packet(cmd,length,func,...) packetdb_addpacket(cmd,length,func,__VA_ARGS__,0) - #define ack_packet(type,cmd,length,...) \ - packetdb_addpacket(cmd,length,NULL,__VA_ARGS__,0); \ - packet_db_ack[type] = cmd packet(0x0064,55); packet(0x0065,17); @@ -78,7 +75,6 @@ parseable_packet(0x00a7,8,clif_parse_UseItem,2,4); packet( useItemAckType, sizeof( struct PACKET_ZC_USE_ITEM_ACK ) ); parseable_packet(0x00a9,6,clif_parse_EquipItem,2,4); - ack_packet(ZC_WEAR_EQUIP_ACK,0x00aa,7,2,4,6); parseable_packet(0x00ab,4,clif_parse_UnequipItem,2); packet(0x00ac,7); //packet(0x00ad,-1); @@ -415,7 +411,6 @@ //packet(0x020c,-1); packet(0x020d,-1); packet(0x8b3,-1); - ack_packet(ZC_CLEAR_DIALOG,0x8d6,6,2); // 2004-07-05aSakexe #if PACKETVER >= 20040705 @@ -1082,7 +1077,6 @@ packet(0x02cd,26); packet(0x02ce,10); parseable_packet(0x02cf,6,clif_parse_MemorialDungeonCommand,2); - ack_packet(ZC_NOTIFY_BIND_ON_EQUIP,0x02d3,4,2); packet(0x02d5,2); parseable_packet(0x02d6,6,clif_parse_ViewPlayerEquip,2); parseable_packet(0x02d8,10,clif_parse_configuration,2,6); @@ -1582,7 +1576,6 @@ // 2009-12-01aRagexeRE #if PACKETVER >= 20091201 packet(0x07fc,10); - ack_packet(ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN,0x07fd,-1,0); //packet(0x07ff,-1); #endif @@ -1720,7 +1713,6 @@ // 2010-06-29aRagexeRE #if PACKETVER >= 20100629 - ack_packet(ZC_WEAR_EQUIP_ACK,0x00AA,9,2,4,6,8); //packet(0x07F1,18); //packet(0x07F2,8); //packet(0x07F3,6); @@ -1773,7 +1765,6 @@ packet(0x0856,-1); packet(0x0857,-1); packet(0x0858,-1); - ack_packet(ZC_WEAR_EQUIP_ACK,0x08d0,9,2,4,6,8); #endif // 2011-10-05aRagexeRE @@ -1924,11 +1915,8 @@ packet(0x0977,14); //Monster HP Bar parseable_packet(0x0916,26,clif_parse_GuildInvite2,2); parseable_packet(0x091d,41,clif_parse_PartyBookingRegisterReq,2,4,6); - ack_packet(ZC_PERSONAL_INFOMATION,0x08cb,10,2,4,6,8,10,11,13,15); //Still need further information // Merge Item - ack_packet(ZC_MERGE_ITEM_OPEN,0x096D,-1,2,4); // ZC_MERGE_ITEM_OPEN parseable_packet(0x096E,-1,clif_parse_merge_item_req,2,4); // CZ_REQ_MERGE_ITEM - ack_packet(ZC_ACK_MERGE_ITEM,0x096F,7,2,4,6); // ZC_ACK_MERGE_ITEM parseable_packet(0x0974,2,clif_parse_merge_item_cancel,0); // CZ_CANCEL_MERGE_ITEM parseable_packet(0x0844,2,clif_parse_cashshop_open_request,0); packet(0x0849,16); //clif_cashshop_result @@ -2033,10 +2021,7 @@ packet(0x0977,14); //Monster HP Bar parseable_packet(0x0978,6,clif_parse_reqworldinfo,2); packet(0x0979,50); //ackworldinfo - ack_packet(ZC_PERSONAL_INFOMATION,0x097b,16,2,4,8,12,16,17,21,25); //Still need further information - //ack_packet(ZC_PERSONAL_INFOMATION_CHN,0x0981,12,2,4,6,8,12,13,15,17,10); // Disabled until further information is found. parseable_packet(0x0998,8,clif_parse_EquipItem,2,4); // CZ_REQ_WEAR_EQUIP_V5 - ack_packet(ZC_WEAR_EQUIP_ACK,0x0999,11,2,4,8,10); // cz_wear_equipv5 packet(0x099a,9); // take_off_equipv5 packet(0x099b,8); //maptypeproperty2 // New Packets @@ -2060,16 +2045,11 @@ // 2013-07-17Ragexe #if PACKETVER >= 20130717 - ack_packet(ZC_BANKING_CHECK,0x09A6,12,2,10); parseable_packet(0x09A7,10,clif_parse_BankDeposit,2,6); - ack_packet(ZC_ACK_BANKING_DEPOSIT,0x09A8,16,2,4,12); parseable_packet(0x09A9,10,clif_parse_BankWithdraw,2,6); - ack_packet(ZC_ACK_BANKING_WITHDRAW,0x09AA,16,2,4,12); parseable_packet(0x09AB,6,clif_parse_BankCheck,2); parseable_packet(0x09B6,6,clif_parse_BankOpen,2); - ack_packet(ZC_ACK_OPEN_BANKING,0x09B7,4,2); parseable_packet(0x09B8,6,clif_parse_BankClose,2); - ack_packet(ZC_ACK_CLOSE_BANKING,0x09B9,4,2); #endif // 2013-07-31cRagexe @@ -2080,11 +2060,8 @@ // 2013-08-07Ragexe #if PACKETVER >= 20130807 - ack_packet(ZC_C_MARKERINFO,0x09C1,10,2,6,8); // Merge Item - ack_packet(ZC_MERGE_ITEM_OPEN,0x096D,-1,2,4); // ZC_MERGE_ITEM_OPEN parseable_packet(0x096E,-1,clif_parse_merge_item_req,2,4); // CZ_REQ_MERGE_ITEM - ack_packet(ZC_ACK_MERGE_ITEM,0x096F,7,2,4,6,7); // ZC_ACK_MERGE_ITEM parseable_packet(0x0974,2,clif_parse_merge_item_cancel,0); // CZ_CANCEL_MERGE_ITEM packet(0x9CD,8); // ZC_MSG_COLOR #endif diff --git a/src/map/packets.hpp b/src/map/packets.hpp index e7dc30bc71..14c60ed2e4 100644 --- a/src/map/packets.hpp +++ b/src/map/packets.hpp @@ -367,6 +367,46 @@ struct PACKET_CZ_REQ_CHANGE_MEMBERPOS{ struct PACKET_CZ_REQ_CHANGE_MEMBERPOS_sub list[]; } __attribute__((packed)); +struct PACKET_ZC_CLEAR_DIALOG{ + int16 packetType; + uint32 GID; +} __attribute__((packed)); + +struct PACKET_ZC_NOTIFY_BIND_ON_EQUIP{ + int16 packetType; + int16 index; +} __attribute__((packed)); + +struct PACKET_ZC_BANKING_CHECK{ + int16 packetType; + int64 money; + int16 reason; +} __attribute__((packed)); + +struct PACKET_ZC_ACK_BANKING_WITHDRAW{ + int16 packetType; + int16 reason; + int64 money; + int32 zeny; +} __attribute__((packed)); + +struct PACKET_ZC_ACK_BANKING_DEPOSIT{ + int16 packetType; + int16 reason; + int64 money; + int32 zeny; +} __attribute__((packed)); + +struct PACKET_ZC_ACK_CLOSE_BANKING{ + int16 packetType; + int16 unknown; +} __attribute__((packed)); + +struct PACKET_ZC_ACK_OPEN_BANKING{ + int16 packetType; + int16 unknown; +} __attribute__((packed)); + // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute #if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 ) #pragma pack( pop ) @@ -398,15 +438,22 @@ DEFINE_PACKET_HEADER(ZC_ACK_WEAPONREFINE, 0x223) DEFINE_PACKET_HEADER(CZ_REQ_MAKINGITEM, 0x25b) DEFINE_PACKET_HEADER(ZC_CASH_TIME_COUNTER, 0x298) DEFINE_PACKET_HEADER(ZC_CASH_ITEM_DELETE, 0x299) +DEFINE_PACKET_HEADER(ZC_NOTIFY_BIND_ON_EQUIP, 0x2d3) DEFINE_PACKET_HEADER(ZC_FAILED_TRADE_BUYING_STORE_TO_SELLER, 0x824) DEFINE_PACKET_HEADER(CZ_SSILIST_ITEM_CLICK, 0x83c) +DEFINE_PACKET_HEADER(ZC_CLEAR_DIALOG, 0x8d6) DEFINE_PACKET_HEADER(ZC_ENTRY_QUEUE_INIT, 0x90e); +DEFINE_PACKET_HEADER(ZC_BANKING_CHECK, 0x9a6) +DEFINE_PACKET_HEADER(ZC_ACK_BANKING_DEPOSIT, 0x9a8) +DEFINE_PACKET_HEADER(ZC_ACK_BANKING_WITHDRAW, 0x9aa) DEFINE_PACKET_HEADER(CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ac) DEFINE_PACKET_HEADER(ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ad) DEFINE_PACKET_HEADER(CZ_REQ_APPLY_BARGAIN_SALE_ITEM, 0x9ae) DEFINE_PACKET_HEADER(CZ_REQ_REMOVE_BARGAIN_SALE_ITEM, 0x9b0) DEFINE_PACKET_HEADER(ZC_NOTIFY_BARGAIN_SALE_SELLING, 0x9b2) DEFINE_PACKET_HEADER(ZC_NOTIFY_BARGAIN_SALE_CLOSE, 0x9b3) +DEFINE_PACKET_HEADER(ZC_ACK_OPEN_BANKING, 0x9b7) +DEFINE_PACKET_HEADER(ZC_ACK_CLOSE_BANKING, 0x9b9) DEFINE_PACKET_HEADER(ZC_ACK_COUNT_BARGAIN_SALE_ITEM, 0x9c4) DEFINE_PACKET_HEADER(ZC_ACK_GUILDSTORAGE_LOG, 0x9da) DEFINE_PACKET_HEADER(CZ_REQ_APPLY_BARGAIN_SALE_ITEM2, 0xa3d) diff --git a/src/map/packets_struct.hpp b/src/map/packets_struct.hpp index 3a7d5767cf..9f90b97321 100644 --- a/src/map/packets_struct.hpp +++ b/src/map/packets_struct.hpp @@ -4704,7 +4704,23 @@ struct PACKET_ZC_PERSONAL_INFOMATION { struct PACKET_ZC_PERSONAL_INFOMATION_SUB details[]; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_PERSONAL_INFOMATION, 0x097b); -#endif // PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502 || defined(PACKETVER_ZERO) +#elif PACKETVER_MAIN_NUM >= 20110627 || PACKETVER_RE_NUM >= 20110628 +struct PACKET_ZC_PERSONAL_INFOMATION_SUB { + int8 type; + int16 exp; + int16 death; + int16 drop; +} __attribute__((packed)); +struct PACKET_ZC_PERSONAL_INFOMATION { + int16 packetType; + int16 length; + int16 total_exp; + int16 total_death; + int16 total_drop; + struct PACKET_ZC_PERSONAL_INFOMATION_SUB details[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_PERSONAL_INFOMATION, 0x08cb); +#endif // PACKETVER_MAIN_NUM >= 20110627 || PACKETVER_RE_NUM >= 20110628 struct PACKET_CZ_REQUEST_ACTNPC { int16 packetType; diff --git a/src/map/pc.cpp b/src/map/pc.cpp index edb97793f8..88bcf280c9 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -9258,7 +9258,7 @@ void pc_close_npc(struct map_session_data *sd,int flag) if (sd->st) { if (sd->st->state == CLOSE) { clif_scriptclose(sd, sd->npc_id); - clif_scriptclear(sd, sd->npc_id); // [Ind/Hercules] + clif_scriptclear( *sd, sd->npc_id ); // [Ind/Hercules] sd->st->state = END; // Force to end now } if (sd->st->state == END) { // free attached scripts that are waiting @@ -11512,7 +11512,8 @@ bool pc_equipitem(struct map_session_data *sd,short n,int req_pos,bool equipswit if( equipswitch ){ clif_equipswitch_add( sd, n, req_pos, ITEM_EQUIP_ACK_FAIL ); }else{ - clif_equipitemack(sd,0,0,ITEM_EQUIP_ACK_FAIL); + // Does not deserve an answer... [Lemongrass] + //clif_equipitemack( sd, ITEM_EQUIP_ACK_FAIL, n ); } return false; } @@ -11520,7 +11521,7 @@ bool pc_equipitem(struct map_session_data *sd,short n,int req_pos,bool equipswit if( equipswitch ){ clif_equipswitch_add( sd, n, req_pos, ITEM_EQUIP_ACK_FAIL ); }else{ - clif_equipitemack(sd,n,0,ITEM_EQUIP_ACK_FAIL); + clif_equipitemack( *sd, ITEM_EQUIP_ACK_FAIL, n ); } return false; } @@ -11536,7 +11537,7 @@ bool pc_equipitem(struct map_session_data *sd,short n,int req_pos,bool equipswit if( equipswitch ){ clif_equipswitch_add( sd, n, req_pos, res ); }else{ - clif_equipitemack(sd,n,0,res); // fail + clif_equipitemack( *sd, res, n ); // fail } return false; } @@ -11550,7 +11551,7 @@ bool pc_equipitem(struct map_session_data *sd,short n,int req_pos,bool equipswit if( equipswitch ){ clif_equipswitch_add( sd, n, req_pos, ITEM_EQUIP_ACK_FAIL ); }else{ - clif_equipitemack(sd,n,0,ITEM_EQUIP_ACK_FAIL); // fail + clif_equipitemack( *sd, ITEM_EQUIP_ACK_FAIL, n ); // fail } return false; } @@ -11558,7 +11559,7 @@ bool pc_equipitem(struct map_session_data *sd,short n,int req_pos,bool equipswit if( equipswitch ){ clif_equipswitch_add( sd, n, req_pos, ITEM_EQUIP_ACK_FAIL ); }else{ - clif_equipitemack(sd,n,0,ITEM_EQUIP_ACK_FAIL); //Fail + clif_equipitemack( *sd, ITEM_EQUIP_ACK_FAIL, n ); //Fail } return false; } @@ -11567,7 +11568,7 @@ bool pc_equipitem(struct map_session_data *sd,short n,int req_pos,bool equipswit if ( !equipswitch && id->flag.bindOnEquip && !sd->inventory.u.items_inventory[n].bound) { sd->inventory.u.items_inventory[n].bound = (char)battle_config.default_bind_on_equip; - clif_notify_bindOnEquip(sd,n); + clif_notify_bindOnEquip( *sd, n ); } if(pos == EQP_ACC) { //Accessories should only go in one of the two. @@ -11650,7 +11651,7 @@ bool pc_equipitem(struct map_session_data *sd,short n,int req_pos,bool equipswit clif_arrow_fail(sd,3); } else - clif_equipitemack(sd,n,pos,ITEM_EQUIP_ACK_OK); + clif_equipitemack( *sd, ITEM_EQUIP_ACK_OK, n, pos ); sd->inventory.u.items_inventory[n].equip = pos; } diff --git a/src/map/pc.hpp b/src/map/pc.hpp index 5f026dad65..c7eb87a561 100644 --- a/src/map/pc.hpp +++ b/src/map/pc.hpp @@ -1146,7 +1146,7 @@ static bool pc_cant_act( struct map_session_data* sd ){ #define pc_iscloaking(sd) ( !((sd)->sc.option&OPTION_CHASEWALK) && ((sd)->sc.option&OPTION_CLOAK) ) #define pc_ischasewalk(sd) ( (sd)->sc.option&OPTION_CHASEWALK ) #ifdef VIP_ENABLE - #define pc_isvip(sd) ( sd->vip.enabled ? true : false ) + #define pc_isvip(sd) ( (sd)->vip.enabled ? true : false ) #else #define pc_isvip(sd) ( false ) #endif diff --git a/src/map/pet.cpp b/src/map/pet.cpp index 49d480c540..fb5db221eb 100644 --- a/src/map/pet.cpp +++ b/src/map/pet.cpp @@ -1514,7 +1514,7 @@ int pet_equipitem(struct map_session_data *sd,int index) t_itemid nameid = sd->inventory.u.items_inventory[index].nameid; if(pet_db_ptr->AcceID == 0 || nameid != pet_db_ptr->AcceID || pd->pet.equip != 0) { - clif_equipitemack(sd,0,0,ITEM_EQUIP_ACK_FAIL); + clif_equipitemack( *sd, ITEM_EQUIP_ACK_FAIL, index ); return 1; } diff --git a/src/map/script.cpp b/src/map/script.cpp index d41416ff46..b41d9a2456 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -4967,7 +4967,7 @@ BUILDIN_FUNC(clear) if (!script_rid2sd(sd)) return SCRIPT_CMD_FAILURE; - clif_scriptclear(sd, st->oid); + clif_scriptclear( *sd, st->oid ); return SCRIPT_CMD_SUCCESS; } @@ -23610,7 +23610,7 @@ BUILDIN_FUNC(mergeitem) { if (!script_charid2sd(2, sd)) return SCRIPT_CMD_FAILURE; - clif_merge_item_open(sd); + clif_merge_item_open( *sd ); return SCRIPT_CMD_SUCCESS; } diff --git a/src/map/status.cpp b/src/map/status.cpp index cc58d6aafb..87bb260fa2 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -12815,8 +12815,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty break; case SC_C_MARKER: //Send mini-map, don't wait for first timer triggered - if (src->type == BL_PC && (sd = map_id2sd(src->id))) - clif_crimson_marker(sd, bl, false); + if (src->type == BL_PC) { + clif_crimson_marker(*(struct map_session_data *)(src), *bl, false); + } break; case SC_ITEMSCRIPT: // Shows Buff Icons if (sd) @@ -13419,7 +13420,7 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid) ARR_FIND(0,MAX_SKILL_CRIMSON_MARKER,i,caster->c_marker[i] == bl->id); if (i < MAX_SKILL_CRIMSON_MARKER) { caster->c_marker[i] = 0; - clif_crimson_marker(caster, bl, true); + clif_crimson_marker( *caster, *bl, true ); } } break; @@ -14417,7 +14418,7 @@ TIMER_FUNC(status_change_timer){ if (!caster || caster->bl.m != bl->m) //End the SC if caster isn't in same map break; sc_timer_next(1000 + tick); - clif_crimson_marker(caster, bl, false); + clif_crimson_marker( *caster, *bl, false ); return 0; } break;