diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index effcede5ef..823bf534a0 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -1641,11 +1641,11 @@ ACMD_FUNC(baselevelup) level*=-1; } sd->status.base_exp = 0; - clif_updatestatus(sd, SP_STATUSPOINT); - clif_updatestatus(sd, SP_TRAITPOINT); - clif_updatestatus(sd, SP_BASELEVEL); - clif_updatestatus(sd, SP_BASEEXP); - clif_updatestatus(sd, SP_NEXTBASEEXP); + clif_updatestatus(*sd, SP_STATUSPOINT); + clif_updatestatus(*sd, SP_TRAITPOINT); + clif_updatestatus(*sd, SP_BASELEVEL); + clif_updatestatus(*sd, SP_BASEEXP); + clif_updatestatus(*sd, SP_NEXTBASEEXP); pc_baselevelchanged(sd); if(sd->status.party_id) party_send_levelup(sd); @@ -1702,10 +1702,10 @@ ACMD_FUNC(joblevelup) level *=-1; } sd->status.job_exp = 0; - clif_updatestatus(sd, SP_JOBLEVEL); - clif_updatestatus(sd, SP_JOBEXP); - clif_updatestatus(sd, SP_NEXTJOBEXP); - clif_updatestatus(sd, SP_SKILLPOINT); + clif_updatestatus(*sd, SP_JOBLEVEL); + clif_updatestatus(*sd, SP_JOBEXP); + clif_updatestatus(*sd, SP_NEXTJOBEXP); + clif_updatestatus(*sd, SP_SKILLPOINT); status_calc_pc(sd, SCO_FORCE); if( level > 0 && battle_config.atcommand_levelup_events ) @@ -2417,7 +2417,7 @@ ACMD_FUNC(refine) current_position = sd->inventory.u.items_inventory[i].equip; pc_unequipitem(sd, i, 3); clif_refine(fd, 0, i, sd->inventory.u.items_inventory[i].refine); - clif_delitem(sd, i, 1, 3); + clif_delitem( *sd, i, 1, 3 ); clif_additem(sd, i, 1, 0); pc_equipitem(sd, i, current_position); clif_misceffect(&sd->bl, 3); @@ -2496,7 +2496,7 @@ ACMD_FUNC(grade) sd->inventory.u.items_inventory[i].enchantgrade = final_grade; current_position = sd->inventory.u.items_inventory[i].equip; pc_unequipitem(sd, i, 3); - clif_delitem(sd, i, 1, 3); + clif_delitem( *sd, i, 1, 3 ); clif_additem(sd, i, 1, 0); pc_equipitem(sd, i, current_position); clif_misceffect(&sd->bl, 3); @@ -2690,7 +2690,7 @@ ACMD_FUNC(statuspoint) if (new_status_point != sd->status.status_point) { sd->status.status_point = new_status_point; - clif_updatestatus(sd, SP_STATUSPOINT); + clif_updatestatus(*sd, SP_STATUSPOINT); clif_displaymessage(fd, msg_txt(sd,174)); // Number of status points changed. } else { if (point < 0) @@ -2738,7 +2738,7 @@ ACMD_FUNC(traitpoint) if (new_trait_point != sd->status.trait_point) { sd->status.trait_point = new_trait_point; - clif_updatestatus(sd, SP_TRAITPOINT); + clif_updatestatus(*sd, SP_TRAITPOINT); clif_displaymessage(fd, msg_txt(sd, 174)); // Number of status points changed. } else { @@ -2788,7 +2788,7 @@ ACMD_FUNC(skillpoint) if (new_skill_point != sd->status.skill_point) { sd->status.skill_point = new_skill_point; - clif_updatestatus(sd, SP_SKILLPOINT); + clif_updatestatus(*sd, SP_SKILLPOINT); clif_displaymessage(fd, msg_txt(sd,175)); // Number of skill points changed. } else { if (point < 0) @@ -2884,12 +2884,12 @@ ACMD_FUNC(param) if( new_value != status ){ if (stat < PARAM_POW) { pc_setstat( sd, SP_STR + stat - PARAM_STR, new_value ); - clif_updatestatus(sd, SP_STR + stat); - clif_updatestatus(sd, SP_USTR + stat); + clif_updatestatus(*sd, static_cast<_sp>( SP_STR + stat ) ); + clif_updatestatus(*sd, static_cast<_sp>( SP_USTR + stat ) ); } else { pc_setstat( sd, SP_POW + stat - PARAM_POW, new_value ); - clif_updatestatus(sd, SP_POW + stat - PARAM_POW); - clif_updatestatus(sd, SP_UPOW + stat - PARAM_POW); + clif_updatestatus(*sd, static_cast<_sp>( SP_POW + stat - PARAM_POW ) ); + clif_updatestatus(*sd, static_cast<_sp>( SP_UPOW + stat - PARAM_POW ) ); } status_calc_pc(sd, SCO_FORCE); clif_displaymessage(fd, msg_txt(sd,42)); // Stat changed. @@ -2947,8 +2947,8 @@ ACMD_FUNC(stat_all) if (new_value != status[i]) { pc_setstat( sd, SP_STR + i, new_value ); - clif_updatestatus(sd, SP_STR + i); - clif_updatestatus(sd, SP_USTR + i); + clif_updatestatus(*sd, static_cast<_sp>( SP_STR + i ) ); + clif_updatestatus(*sd, static_cast<_sp>( SP_USTR + i ) ); count++; } } @@ -3021,8 +3021,8 @@ ACMD_FUNC(trait_all) { if (new_value != status[i]) { pc_setstat( sd, SP_POW + i - PARAM_POW, new_value ); - clif_updatestatus(sd, SP_POW + i - PARAM_POW); - clif_updatestatus(sd, SP_UPOW + i - PARAM_POW); + clif_updatestatus(*sd, static_cast<_sp>( SP_POW + i - PARAM_POW ) ); + clif_updatestatus(*sd, static_cast<_sp>( SP_UPOW + i - PARAM_POW ) ); count++; } } @@ -3657,7 +3657,7 @@ ACMD_FUNC(allskill) nullpo_retr(-1, sd); pc_allskillup(sd); // all skills sd->status.skill_point = 0; // 0 skill points - clif_updatestatus(sd, SP_SKILLPOINT); // update + clif_updatestatus(*sd, SP_SKILLPOINT); // update clif_displaymessage(fd, msg_txt(sd,76)); // All skills have been added to your skill tree. return 0; @@ -4295,7 +4295,7 @@ ACMD_FUNC(reload) { iter = mapit_getallusers(); for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ){ pc_close_npc(pl_sd,1); - clif_cutin(pl_sd, "", 255); + clif_cutin( *pl_sd, "", 255 ); pl_sd->state.block_action &= ~(PCBLOCK_ALL ^ PCBLOCK_IMMUNE); bg_queue_leave(pl_sd); } @@ -6141,7 +6141,7 @@ ACMD_FUNC(clearcart) } clif_clearcart(fd); - clif_updatestatus(sd,SP_CARTINFO); + clif_updatestatus(*sd,SP_CARTINFO); clif_displaymessage(fd, msg_txt(sd,1397)); // Your cart was cleaned. return 0; @@ -7947,7 +7947,7 @@ ACMD_FUNC(showmobs) continue; // hide mobs waiting for respawn ++number; - clif_viewpoint(sd, 1, 0, md->bl.x, md->bl.y, number, 0xFFFFFF); + clif_viewpoint( *sd, 1, 0, md->bl.x, md->bl.y, number, 0xFFFFFF ); } mapit_free(it); @@ -8005,7 +8005,9 @@ ACMD_FUNC(homevolution) clif_displaymessage(fd, msg_txt(sd,1255)); // Your homunculus doesn't evolve. return -1; } - clif_homskillinfoblock(sd); + + clif_homskillinfoblock( *sd->hd ); + return 0; } @@ -8088,7 +8090,7 @@ ACMD_FUNC(homfriendly) friendly = cap_value(friendly, 0, 1000); sd->hd->homunculus.intimacy = friendly * 100 ; - clif_send_homdata(sd,SP_INTIMATE,friendly); + clif_send_homdata( *sd->hd, SP_INTIMATE ); return 0; } @@ -8115,7 +8117,7 @@ ACMD_FUNC(homhungry) hungry = cap_value(hungry, 0, 100); sd->hd->homunculus.hunger = hungry; - clif_send_homdata(sd,SP_HUNGRY,hungry); + clif_send_homdata( *sd->hd, SP_HUNGRY ); return 0; } @@ -10594,8 +10596,8 @@ ACMD_FUNC(clonestat) { clonestat_check(luk, PARAM_LUK); for (i = PARAM_STR; i < PARAM_POW; i++) { - clif_updatestatus(sd, SP_STR + i); - clif_updatestatus(sd, SP_USTR + i); + clif_updatestatus(*sd, static_cast<_sp>( SP_STR + i ) ); + clif_updatestatus(*sd, static_cast<_sp>( SP_USTR + i ) ); } if (sd->class_ & JOBL_FOURTH) { @@ -10607,8 +10609,8 @@ ACMD_FUNC(clonestat) { clonestat_check(crt, PARAM_CRT); for (i = PARAM_POW; i < PARAM_MAX; i++) { - clif_updatestatus(sd, SP_POW + i - PARAM_POW); - clif_updatestatus(sd, SP_UPOW + i - PARAM_POW); + clif_updatestatus(*sd, static_cast<_sp>( SP_POW + i - PARAM_POW ) ); + clif_updatestatus(*sd, static_cast<_sp>( SP_UPOW + i - PARAM_POW ) ); } } @@ -10954,7 +10956,7 @@ ACMD_FUNC(setcard) log_pick_pc( sd, LOG_TYPE_COMMAND, -1, &sd->inventory.u.items_inventory[i] ); sd->inventory.u.items_inventory[i].card[slot] = card_id; log_pick_pc( sd, LOG_TYPE_COMMAND, 1, &sd->inventory.u.items_inventory[i] ); - clif_delitem(sd, i, 1, 0); + clif_delitem( *sd, i, 1, 0 ); clif_additem(sd, i, 1, 0); pc_equipitem(sd, i, current_position); return 0; diff --git a/src/map/chrif.cpp b/src/map/chrif.cpp index 178dbaa3e7..fd8c7e85cc 100644 --- a/src/map/chrif.cpp +++ b/src/map/chrif.cpp @@ -463,7 +463,7 @@ int chrif_changemapserverack(uint32 account_id, int login_id1, int login_id2, ui clif_authfail_fd(node->fd, 0); chrif_char_offline(node->sd); } else - clif_changemapserver(node->sd, map, x, y, ntohl(ip), ntohs(port)); + clif_changemapserver( *node->sd, map, x, y, ntohl(ip), ntohs(port) ); //Player has been saved already, remove him from memory. [Skotlex] chrif_auth_delete(account_id, char_id, ST_MAPCHANGE); @@ -994,7 +994,7 @@ int chrif_changedsex(int fd) { } } - clif_updatestatus(sd, SP_SKILLPOINT); + clif_updatestatus(*sd, SP_SKILLPOINT); // Change to other gender version of the job if needed. if (sd->status.sex)// Changed from female version of job. sd->status.class_ -= 1; diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 9df1175a96..4e54045a1e 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -256,7 +256,6 @@ static inline void RFIFOPOS2(int fd, unsigned short pos, short* x0, short* y0, s RBUFPOS2(WFIFOP(fd,pos), 0, x0, y0, x1, y1, sx0, sy0); } - //To idenfity disguised characters. static inline bool disguised(struct block_list* bl) { return (bool)( bl->type == BL_PC && ((TBL_PC*)bl)->disguise ); @@ -761,33 +760,26 @@ int clif_send(const void* buf, int len, struct block_list* bl, enum send_target /// 0a18 .L .3B .B .B .W .B (ZC_ACCEPT_ENTER3) void clif_authok(map_session_data *sd) { -#if PACKETVER < 20080102 - const int cmd = 0x73; -#elif PACKETVER < 20141022 || PACKETVER >= 20160330 - const int cmd = 0x2eb; -#else - const int cmd = 0xa18; -#endif - int fd = sd->fd; + PACKET_ZC_ACCEPT_ENTER packet{}; - WFIFOHEAD(fd,packet_len(cmd)); - WFIFOW(fd, 0) = cmd; - WFIFOL(fd, 2) = client_tick(gettick()); - WFIFOPOS(fd, 6, sd->bl.x, sd->bl.y, sd->ud.dir); - WFIFOB(fd, 9) = 5; // ignored - WFIFOB(fd,10) = 5; // ignored + packet.packetType = HEADER_ZC_ACCEPT_ENTER; + packet.startTime = client_tick(gettick()); + WBUFPOS(packet.posDir, 0, sd->bl.x, sd->bl.y, sd->ud.dir); + packet.xSize = 5; // ignored + packet.ySize = 5; // ignored #if PACKETVER >= 20080102 - WFIFOW(fd,11) = sd->status.font; + packet.font = sd->status.font; #endif #if PACKETVER >= 20141016 && PACKETVER < 20160330 - WFIFOB(fd,13) = sd->status.sex; + packet.sex = sd->status.sex; #endif - WFIFOSET(fd,packet_len(cmd)); + + clif_send(&packet, sizeof(packet), &sd->bl, SELF); } -/// Notifies the client, that it's connection attempt was refused (ZC_REFUSE_ENTER). -/// 0074 .B +/// Notifies the client, that it's connection attempt was refused. +/// 0074 .B (ZC_REFUSE_ENTER) /// error code: /// 0 = client type mismatch /// 1 = ID mismatch @@ -796,15 +788,17 @@ void clif_authok(map_session_data *sd) /// 4 = mobile - waiting state void clif_authrefuse(int fd, uint8 error_code) { - WFIFOHEAD(fd,packet_len(0x74)); - WFIFOW(fd,0) = 0x74; - WFIFOB(fd,2) = error_code; - WFIFOSET(fd,packet_len(0x74)); + PACKET_ZC_REFUSE_ENTER packet{}; + + packet.packetType = HEADER_ZC_REFUSE_ENTER; + packet.errorCode = error_code; + + socket_send(fd, packet); } -/// Notifies the client of a ban or forced disconnect (SC_NOTIFY_BAN). -/// 0081 .B +/// Notifies the client of a ban or forced disconnect. +/// 0081 .B (SC_NOTIFY_BAN) /// error code: /// 0 = BAN_UNFAIR /// 1 = server closed -> MsgStringTable[4] @@ -839,33 +833,36 @@ void clif_authfail_fd(int fd, int type) { if (!session_isValid(fd) || session[fd]->func_parse != clif_parse) //clif_authfail should only be invoked on players! return; + + PACKET_SC_NOTIFY_BAN packet{}; + + packet.packetType = HEADER_SC_NOTIFY_BAN; + packet.errorCode = static_cast(type); + + socket_send(fd, packet); - WFIFOHEAD(fd, packet_len(0x81)); - WFIFOW(fd,0) = 0x81; - WFIFOB(fd,2) = type; - WFIFOSET(fd,packet_len(0x81)); set_eof(fd); } -/// Notifies the client, whether it can disconnect and change servers (ZC_RESTART_ACK). -/// 00b3 .B +/// Notifies the client, whether it can disconnect and change servers. +/// 00b3 .B (ZC_RESTART_ACK) /// type: /// 1 = disconnect, char-select /// ? = nothing void clif_charselectok(int id, uint8 ok) { - map_session_data* sd; - int fd; + map_session_data* sd = map_id2sd(id); - if ((sd = map_id2sd(id)) == nullptr || !session_isValid(sd->fd)) + if (sd == nullptr) return; - fd = sd->fd; - WFIFOHEAD(fd,packet_len(0xb3)); - WFIFOW(fd,0) = 0xb3; - WFIFOB(fd,2) = ok; - WFIFOSET(fd,packet_len(0xb3)); + PACKET_ZC_RESTART_ACK packet{}; + + packet.packetType = HEADER_ZC_RESTART_ACK; + packet.type = ok; + + clif_send( &packet, sizeof( packet ), &sd->bl, SELF ); } /// Makes an item appear on the ground. @@ -937,65 +934,58 @@ void clif_dropflooritem( struct flooritem_data* fitem, bool canShowEffect ){ /// Makes an item disappear from the ground. /// 00a1 .L (ZC_ITEM_DISAPPEAR) -void clif_clearflooritem(struct flooritem_data *fitem, int fd) -{ - unsigned char buf[16]; +void clif_clearflooritem( flooritem_data& fitem, map_session_data* tsd ){ + PACKET_ZC_ITEM_DISAPPEAR packet{}; - nullpo_retv(fitem); + packet.packetType = HEADER_ZC_ITEM_DISAPPEAR; + packet.itemAid = fitem.bl.id; - WBUFW(buf,0) = 0xa1; - WBUFL(buf,2) = fitem->bl.id; - - if ( !session_isActive( fd ) ){ - clif_send(buf, packet_len(0xa1), &fitem->bl, AREA); + if( tsd == nullptr ){ + clif_send(&packet, sizeof(PACKET_ZC_ITEM_DISAPPEAR), &fitem.bl, AREA); } else { - WFIFOHEAD(fd,packet_len(0xa1)); - memcpy(WFIFOP(fd,0), buf, packet_len(0xa1)); - WFIFOSET(fd,packet_len(0xa1)); + clif_send(&packet, sizeof(PACKET_ZC_ITEM_DISAPPEAR), &tsd->bl, SELF ); } } -/// Makes a unit (char, npc, mob, homun) disappear to one client (ZC_NOTIFY_VANISH). -/// 0080 .L .B +/// Makes a unit (char, npc, mob, homun) disappear to one client. +/// 0080 .L .B (ZC_NOTIFY_VANISH) /// type: /// 0 = out of sight /// 1 = died /// 2 = logged out /// 3 = teleport /// 4 = trickdead -void clif_clearunit_single(int id, clr_type type, int fd) -{ - WFIFOHEAD(fd, packet_len(0x80)); - WFIFOW(fd,0) = 0x80; - WFIFOL(fd,2) = id; - WFIFOB(fd,6) = type; - WFIFOSET(fd, packet_len(0x80)); +void clif_clearunit_single( uint32 GID, clr_type type, map_session_data& tsd ){ + PACKET_ZC_NOTIFY_VANISH packet{}; + + packet.packetType = HEADER_ZC_NOTIFY_VANISH; + packet.gid = GID; + packet.type = static_cast(type); + + clif_send( &packet, sizeof( packet ), &tsd.bl, SELF ); } -/// Makes a unit (char, npc, mob, homun) disappear to all clients in area (ZC_NOTIFY_VANISH). -/// 0080 .L .B +/// Makes a unit (char, npc, mob, homun) disappear to all clients in area. +/// 0080 .L .B (ZC_NOTIFY_VANISH) /// type: /// 0 = out of sight /// 1 = died /// 2 = logged out /// 3 = teleport /// 4 = trickdead -void clif_clearunit_area(struct block_list* bl, clr_type type) -{ - unsigned char buf[8]; +void clif_clearunit_area( block_list& bl, clr_type type ){ + PACKET_ZC_NOTIFY_VANISH packet{}; - nullpo_retv(bl); + packet.packetType = HEADER_ZC_NOTIFY_VANISH; + packet.gid = bl.id; + packet.type = static_cast(type); - WBUFW(buf,0) = 0x80; - WBUFL(buf,2) = bl->id; - WBUFB(buf,6) = type; + clif_send(&packet, sizeof(PACKET_ZC_NOTIFY_VANISH), &bl, type == CLR_DEAD ? AREA : AREA_WOS); - clif_send(buf, packet_len(0x80), bl, type == CLR_DEAD ? AREA : AREA_WOS); - - if(disguised(bl)) { - WBUFL(buf,2) = disguised_bl_id( bl->id ); - clif_send(buf, packet_len(0x80), bl, SELF); + if(disguised(&bl)) { + packet.gid = disguised_bl_id( bl.id ); + clif_send(&packet, sizeof(PACKET_ZC_NOTIFY_VANISH), &bl, SELF); } } @@ -1005,8 +995,12 @@ void clif_clearunit_area(struct block_list* bl, clr_type type) /// automatically. static TIMER_FUNC(clif_clearunit_delayed_sub){ struct block_list *bl = (struct block_list *)data; - clif_clearunit_area(bl, (clr_type) id); - ers_free(delay_clearunit_ers,bl); + + if( bl != nullptr ){ + clif_clearunit_area( *bl, (clr_type)id ); + ers_free( delay_clearunit_ers, bl ); + } + return 0; } void clif_clearunit_delayed(struct block_list* bl, clr_type type, t_tick tick) @@ -1568,32 +1562,47 @@ void clif_abyssball( map_session_data& sd, struct block_list* target, enum send_ } /// Notifies the client of an object's Millenium Shields. -static void clif_millenniumshield_single(int fd, map_session_data *sd) -{ - nullpo_retv(sd); +static void clif_millenniumshield_single( map_session_data& sd, map_session_data& tsd ){ +#if PACKETVER >= 20081126 + status_change_entry* sce = sd.sc.getSCE( SC_MILLENNIUMSHIELD ); - if (sd->sc.getSCE(SC_MILLENNIUMSHIELD) == nullptr) + if( sce == nullptr ){ return; + } - WFIFOHEAD(fd, packet_len(0x440)); - WFIFOW(fd, 0) = 0x440; - WFIFOL(fd, 2) = sd->bl.id; - WFIFOW(fd, 6) = sd->sc.getSCE(SC_MILLENNIUMSHIELD)->val2; - WFIFOW(fd, 8) = 0; - WFIFOSET(fd, packet_len(0x440)); + PACKET_ZC_MILLENNIUMSHIELD packet{}; + + packet.packetType = HEADER_ZC_MILLENNIUMSHIELD; + packet.aid = sd.bl.id; + packet.num = sce->val2; + packet.state = 0; + + clif_send( &packet, sizeof( packet ), &tsd.bl, SELF ); +#endif } /*========================================== * Kagerou/Oboro amulet spirit *------------------------------------------*/ -static void clif_spiritcharm_single(int fd, map_session_data *sd) -{ - WFIFOHEAD(fd, packet_len(0x08cf)); - WFIFOW(fd,0)=0x08cf; - WFIFOL(fd,2)=sd->bl.id; - WFIFOW(fd,6)=sd->spiritcharm_type; - WFIFOW(fd,8)=sd->spiritcharm; - WFIFOSET(fd, packet_len(0x08cf)); +static void clif_spiritcharm_single( map_session_data& sd, map_session_data& tsd ){ +#if PACKETVER >= 20111102 + if( sd.spiritcharm_type == CHARM_TYPE_NONE ){ + return; + } + + if( sd.spiritcharm <= 0 ){ + return; + } + + PACKET_ZC_SPIRITS_ATTRIBUTE packet{}; + + packet.packetType = HEADER_ZC_SPIRITS_ATTRIBUTE; + packet.aid = sd.bl.id; + packet.spiritsType = static_cast(sd.spiritcharm_type); + packet.num = static_cast(sd.spiritcharm); + + clif_send( &packet, sizeof( packet ), &tsd.bl, SELF ); +#endif } /*========================================== @@ -1861,8 +1870,8 @@ void clif_hominfo( map_session_data *sd, struct homun_data *hd, int flag ){ } -/// Notification about a change in homunuculus' state (ZC_CHANGESTATE_MER). -/// 0230 .B .B .L .L +/// Notification about a change in homunuculus' state. +/// 0230 .B .B .L .L (ZC_CHANGESTATE_MER) /// type: /// unused /// state: @@ -1871,82 +1880,109 @@ void clif_hominfo( map_session_data *sd, struct homun_data *hd, int flag ){ /// 2 = hunger /// 3 = accessory? /// ? = ignored -void clif_send_homdata(map_session_data *sd, int state, int param) -{ //[orn] - int fd = sd->fd; +void clif_send_homdata( homun_data& hd, e_hom_state2 state ){ +#if PACKETVER >= 20050523 + if( hd.master == nullptr ){ + return; + } - if ( (state == SP_INTIMATE) && (param >= 910) && (sd->hd->homunculus.class_ == sd->hd->homunculusDB->evo_class) ) - hom_calc_skilltree(sd->hd); + uint32 param; - WFIFOHEAD(fd, packet_len(0x230)); - WFIFOW(fd,0)=0x230; - WFIFOB(fd,2)=0; - WFIFOB(fd,3)=state; - WFIFOL(fd,4)=sd->hd->bl.id; - WFIFOL(fd,8)=param; - WFIFOSET(fd,packet_len(0x230)); + switch( state ){ + case SP_ACK: + param = 0; + break; + case SP_INTIMATE: + // TODO: Why is something like this here? [Lemongrass] + if( hd.homunculus.class_ == hd.homunculusDB->evo_class && hom_intimacy_intimacy2grade( hd.homunculus.intimacy ) >= HOMGRADE_LOYAL ){ + hom_calc_skilltree( &hd ); + } + + param = hd.homunculus.intimacy / 100; + break; + case SP_HUNGRY: + param = hd.homunculus.hunger; + break; + default: + return; + } + + PACKET_ZC_CHANGESTATE_MER packet{}; + + packet.packetType = HEADER_ZC_CHANGESTATE_MER; + packet.type = 0; + packet.state = state; + packet.gid = hd.bl.id; + packet.data = param; + + clif_send( &packet, sizeof( packet ), &hd.master->bl, SELF ); +#endif } -int clif_homskillinfoblock(map_session_data *sd) -{ //[orn] - struct homun_data *hd; - int fd = sd->fd; - int i, len=4; +void clif_homskillinfoblock( homun_data& hd ){ +#if PACKETVER >= 20050530 + map_session_data* sd = hd.master; - nullpo_ret(sd); + if( sd == nullptr ){ + return; + } + + PACKET_ZC_HOSKILLINFO_LIST* packet = reinterpret_cast(packet_buffer); - hd = sd->hd; - if ( !hd ) - return 0 ; + packet->packetType = HEADER_ZC_HOSKILLINFO_LIST; + packet->packetLength = sizeof( *packet ); - WFIFOHEAD(fd, 4+37*MAX_HOMUNSKILL); - WFIFOW(fd,0)=0x235; - for ( i = 0; i < MAX_HOMUNSKILL; i++){ - int id = hd->homunculus.hskill[i].id; - if( id != 0 ){ - int combo = (hd->homunculus.hskill[i].flag)&SKILL_FLAG_TMP_COMBO; + for(int i = 0, count = 0; i < MAX_HOMUNSKILL; i++) { + int id = hd.homunculus.hskill[i].id; + + if (id != 0) { + int combo = (hd.homunculus.hskill[i].flag)&SKILL_FLAG_TMP_COMBO; short idx = hom_skill_get_index(id); if (idx == -1) continue; - WFIFOW(fd,len ) = id; - WFIFOW(fd,len+2) = ((combo)?INF_SELF_SKILL:skill_get_inf(id)); - WFIFOW(fd,len+4) = 0; - WFIFOW(fd,len+6) = hd->homunculus.hskill[idx].lv; - WFIFOW(fd,len+8) = skill_get_sp(id,hd->homunculus.hskill[idx].lv); - WFIFOW(fd,len+10)= skill_get_range2(&sd->hd->bl,id,hd->homunculus.hskill[idx].lv,false); - safestrncpy(WFIFOCP(fd,len+12), skill_get_name(id), NAME_LENGTH); - WFIFOB(fd,len+36) = (hd->homunculus.level < hom_skill_get_min_level(hd->homunculus.class_, id) || hd->homunculus.hskill[idx].lv >= hom_skill_tree_get_max(id, hd->homunculus.class_)) ? 0 : 1; - len+=37; + packet->skills[count].id = id; + packet->skills[count].inf = (combo) ? INF_SELF_SKILL : skill_get_inf(id); + packet->skills[count].unknown = 0; + packet->skills[count].level = hd.homunculus.hskill[idx].lv; + packet->skills[count].sp = skill_get_sp(id,hd.homunculus.hskill[idx].lv); + packet->skills[count].range = skill_get_range2(&hd.bl,id,hd.homunculus.hskill[idx].lv,false); + safestrncpy(packet->skills[count].name, skill_get_name(id), NAME_LENGTH); + packet->skills[count].upgradable = (hd.homunculus.level < hom_skill_get_min_level(hd.homunculus.class_, id) || hd.homunculus.hskill[idx].lv >= hom_skill_tree_get_max(id, hd.homunculus.class_)) ? 0 : 1; + packet->packetLength += sizeof( packet->skills[0] ); + count++; } } - WFIFOW(fd,2)=len; - WFIFOSET(fd,len); - return 0; + clif_send( packet, packet->packetLength, &sd->bl, SELF ); +#endif } -void clif_homskillup(map_session_data *sd, uint16 skill_id) -{ //[orn] - struct homun_data *hd; - int fd; - short idx = -1; - nullpo_retv(sd); +void clif_homskillup( homun_data& hd, uint16 skill_id ){ +#if PACKETVER >= 20050531 + short idx = hom_skill_get_index( skill_id ); - if ((idx = hom_skill_get_index(skill_id)) == -1) + if( idx == -1 ){ return; + } - fd = sd->fd; - hd = sd->hd; + map_session_data* sd = hd.master; - WFIFOHEAD(fd, packet_len(0x239)); - WFIFOW(fd,0) = 0x239; - WFIFOW(fd,2) = skill_id; - WFIFOW(fd,4) = hd->homunculus.hskill[idx].lv; - WFIFOW(fd,6) = skill_get_sp(skill_id,hd->homunculus.hskill[idx].lv); - WFIFOW(fd,8) = skill_get_range2(&hd->bl,skill_id,hd->homunculus.hskill[idx].lv,false); - WFIFOB(fd,10) = (hd->homunculus.level < hom_skill_get_min_level(hd->homunculus.class_, skill_id) || hd->homunculus.hskill[idx].lv >= hom_skill_tree_get_max(hd->homunculus.hskill[idx].id, hd->homunculus.class_)) ? 0 : 1; - WFIFOSET(fd,packet_len(0x239)); + if( sd == nullptr ){ + return; + } + + PACKET_ZC_HOSKILLINFO_UPDATE packet{}; + + packet.packetType = HEADER_ZC_HOSKILLINFO_UPDATE; + packet.skill_id = skill_id; + packet.Level = hd.homunculus.hskill[idx].lv; + packet.SP = skill_get_sp(skill_id,hd.homunculus.hskill[idx].lv); + packet.AttackRange = skill_get_range2(&hd.bl,skill_id,hd.homunculus.hskill[idx].lv,false); + packet.upgradable = (hd.homunculus.level < hom_skill_get_min_level(hd.homunculus.class_, skill_id) || hd.homunculus.hskill[idx].lv >= hom_skill_tree_get_max(skill_id, hd.homunculus.class_)) ? 0 : 1; + + clif_send( &packet, sizeof( packet ), &sd->bl, SELF ); +#endif } /// Result of request to feed a homun/merc. @@ -1967,17 +2003,16 @@ void clif_hom_food( map_session_data *sd, int foodid, int fail ){ } -/// Notifies the client, that it is walking (ZC_NOTIFY_PLAYERMOVE). -/// 0087 .L .6B -void clif_walkok(map_session_data *sd) -{ - int fd=sd->fd; +/// Notifies the client, that it is walking. +/// 0087 .L .6B (ZC_NOTIFY_PLAYERMOVE) +void clif_walkok( map_session_data& sd ){ + PACKET_ZC_NOTIFY_PLAYERMOVE packet{}; - WFIFOHEAD(fd, packet_len(0x87)); - WFIFOW(fd,0)=0x87; - WFIFOL(fd,2)=client_tick(gettick()); - WFIFOPOS2(fd,6,sd->bl.x,sd->bl.y,sd->ud.to_x,sd->ud.to_y,8,8); - WFIFOSET(fd,packet_len(0x87)); + packet.packetType = HEADER_ZC_NOTIFY_PLAYERMOVE; + packet.moveStartTime = client_tick(gettick()); + WBUFPOS2(packet.moveData, 0, sd.bl.x, sd.bl.y, sd.ud.to_x, sd.ud.to_y, 8, 8); + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); } @@ -2025,15 +2060,17 @@ static void clif_move2( struct block_list *bl, struct view_data *vd, struct unit } -/// Notifies clients in an area, that an other visible object is walking (ZC_NOTIFY_PLAYERMOVE). -/// 0086 .L .6B .L +/// Notifies clients in an area, that an other visible object is walking. +/// 0086 .L .6B .L (ZC_NOTIFY_MOVE) /// Note: unit must not be self void clif_move(struct unit_data *ud) { - unsigned char buf[16]; struct view_data* vd; struct block_list* bl = ud->bl; status_change *sc = nullptr; + PACKET_ZC_NOTIFY_MOVE packet{}; + + packet.packetType = HEADER_ZC_NOTIFY_MOVE; vd = status_get_viewdata(bl); if (!vd ) @@ -2042,11 +2079,11 @@ void clif_move(struct unit_data *ud) else if( vd->class_ == JT_INVISIBLE ){ // If the player was disguised we still need to update the disguised unit, since the main unit will be updated through clif_walkok if(disguised(bl)) { - WBUFW(buf,0)=0x86; - WBUFL(buf,2)=disguised_bl_id(bl->id); - WBUFPOS2(buf,6,bl->x,bl->y,ud->to_x,ud->to_y,8,8); - WBUFL(buf,12)=client_tick(gettick()); - clif_send(buf, packet_len(0x86), bl, SELF); + packet.gid = disguised_bl_id(bl->id); + WBUFPOS2(packet.moveData, 0, bl->x, bl->y, ud->to_x, ud->to_y, 8, 8); + packet.moveStartTime = client_tick(gettick()); + + clif_send(&packet, sizeof(packet), bl, SELF); } return; } @@ -2066,14 +2103,16 @@ void clif_move(struct unit_data *ud) if ((sc = status_get_sc(bl)) && sc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_INVISIBLE|OPTION_CHASEWALK)) clif_ally_only = true; - WBUFW(buf,0)=0x86; - WBUFL(buf,2)=bl->id; - WBUFPOS2(buf,6,bl->x,bl->y,ud->to_x,ud->to_y,8,8); - WBUFL(buf,12)=client_tick(gettick()); - clif_send(buf, packet_len(0x86), bl, AREA_WOS); + packet.gid = bl->id; + WBUFPOS2(packet.moveData,6,bl->x,bl->y,ud->to_x,ud->to_y,8,8); + packet.moveStartTime = client_tick(gettick()); + + clif_send(&packet, sizeof(PACKET_ZC_NOTIFY_MOVE), bl, AREA_WOS); + if (disguised(bl)) { - WBUFL(buf,2)=disguised_bl_id(bl->id); - clif_send(buf, packet_len(0x86), bl, SELF); + packet.gid = disguised_bl_id(bl->id); + + clif_send(&packet, sizeof(packet), bl, SELF); } clif_ally_only = false; } @@ -2110,50 +2149,40 @@ void clif_quitsave(int fd,map_session_data *sd) { /// Notifies the client of a position change to coordinates on given map (ZC_NPCACK_MAPMOVE). /// 0091 .16B .W .W -void clif_changemap(map_session_data *sd, short m, int x, int y) -{ - nullpo_retv(sd); - int fd = sd->fd; +void clif_changemap( map_session_data& sd, short m, uint16 x, uint16 y ){ + PACKET_ZC_NPCACK_MAPMOVE packet{}; - WFIFOHEAD(fd,packet_len(0x91)); - WFIFOW(fd,0) = 0x91; - mapindex_getmapname_ext(map_mapid2mapname(m), WFIFOCP(fd,2)); - WFIFOW(fd,18) = x; - WFIFOW(fd,20) = y; - WFIFOSET(fd,packet_len(0x91)); + packet.packetType = HEADER_ZC_NPCACK_MAPMOVE; + mapindex_getmapname_ext(map_mapid2mapname(m), packet.mapName); + packet.xPos = x; + packet.yPos = y; + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); } /// Notifies the client of a position change to coordinates on given map, which is on another map-server. /// 0092 .16B .W .W .L .W (ZC_NPCACK_SERVERMOVE) -/// 0ac7 .16B .W .W .L .W .128B (ZC_NPCACK_SERVERMOVE2) -void clif_changemapserver(map_session_data* sd, const char* map, int x, int y, uint32 ip, uint16 port) -{ - int fd; -#if PACKETVER >= 20170315 - int cmd = 0xac7; -#else - int cmd = 0x92; -#endif - nullpo_retv(sd); - fd = sd->fd; +/// 0ac7 .16B .W .W .L .W .128B (ZC_NPCACK_SERVERMOVE_DOMAIN) +void clif_changemapserver( map_session_data& sd, const char* map, uint16 x, uint16 y, uint32 ip, uint16 port ){ + PACKET_ZC_NPCACK_SERVERMOVE packet{}; - WFIFOHEAD(fd,packet_len(cmd)); - WFIFOW(fd,0) = cmd; - mapindex_getmapname_ext( map, WFIFOCP( fd, 2 ) ); - WFIFOW(fd,18) = x; - WFIFOW(fd,20) = y; - WFIFOL(fd,22) = htonl(ip); - WFIFOW(fd,26) = ntows(htons(port)); // [!] LE byte order here [!] + packet.packetType = HEADER_ZC_NPCACK_SERVERMOVE; + + mapindex_getmapname_ext(map, packet.mapName); + packet.xPos = x; + packet.yPos = y; + packet.ip = htonl(ip); + packet.port = ntows(htons(port)); // [!] LE byte order here [!] #if PACKETVER >= 20170315 - memset(WFIFOP(fd, 28), 0, 128); // Unknown + safestrncpy( packet.domain, "", sizeof( packet.domain ) ); #endif + #ifdef DEBUG - ShowDebug( - "Sending the client (%d %d.%d.%d.%d) to map-server with ip %d.%d.%d.%d and port %hu\n", - sd->status.account_id, CONVIP(session[fd]->client_addr), CONVIP(ip), port); + ShowDebug( "Sending the client (%d %d.%d.%d.%d) to map-server with ip %d.%d.%d.%d and port %hu\n", sd.status.account_id, CONVIP(session[sd.fd]->client_addr), CONVIP(ip), port ); #endif - WFIFOSET(fd,packet_len(cmd)); + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); } @@ -2162,45 +2191,40 @@ void clif_changemapserver(map_session_data* sd, const char* map, int x, int y, u void clif_blown(struct block_list *bl) { clif_slide(bl, bl->x, bl->y); - clif_fixpos(bl); + clif_fixpos( *bl ); } /// Visually moves(slides) a character to x,y. If the target cell /// isn't walkable, the char doesn't move at all. If the char is -/// sitting it will stand up (ZC_STOPMOVE). -/// 0088 .L .W .W -void clif_fixpos(struct block_list *bl) -{ - unsigned char buf[10]; - nullpo_retv(bl); +/// sitting it will stand up. +/// 0088 .L .W .W (ZC_STOPMOVE) +void clif_fixpos( block_list& bl ){ + PACKET_ZC_STOPMOVE packet = {}; - WBUFW(buf,0) = 0x88; - WBUFL(buf,2) = bl->id; - WBUFW(buf,6) = bl->x; - WBUFW(buf,8) = bl->y; - clif_send(buf, packet_len(0x88), bl, AREA); + packet.packetType = HEADER_ZC_STOPMOVE; + packet.AID = bl.id; + packet.xPos = bl.x; + packet.yPos = bl.y; - if( disguised(bl) ) { - WBUFL(buf,2) = disguised_bl_id(bl->id); - clif_send(buf, packet_len(0x88), bl, SELF); + clif_send( &packet, sizeof( packet ), &bl, AREA); + + if( disguised( &bl ) ){ + packet.AID = disguised_bl_id( bl.id ); + clif_send( &packet, sizeof( packet ), &bl, SELF ); } } -/// Displays the buy/sell dialog of an NPC shop (ZC_SELECT_DEALTYPE). -/// 00c4 .L -void clif_npcbuysell(map_session_data* sd, int id) -{ - int fd; +/// Displays the buy/sell dialog of an NPC shop. +/// 00c4 .L (ZC_SELECT_DEALTYPE) +void clif_npcbuysell( map_session_data& sd, npc_data& nd ){ + PACKET_ZC_SELECT_DEALTYPE packet{}; - nullpo_retv(sd); + packet.packetType = HEADER_ZC_SELECT_DEALTYPE; + packet.npcId = nd.bl.id; - fd=sd->fd; - WFIFOHEAD(fd, packet_len(0xc4)); - WFIFOW(fd,0)=0xc4; - WFIFOL(fd,2)=id; - WFIFOSET(fd,packet_len(0xc4)); + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); } @@ -2243,42 +2267,58 @@ void clif_buylist( map_session_data *sd, struct npc_data *nd ){ } -/// Presents list of items, that can be sold to an NPC shop (ZC_PC_SELL_ITEMLIST). -/// 00c7 .W { .W .L .L }* -void clif_selllist(map_session_data *sd) -{ - int fd,i,c=0,val; - struct npc_data *nd; - - nullpo_retv(sd); - if (!sd->npc_shopid || (nd = map_id2nd(sd->npc_shopid)) == nullptr) +/// Presents list of items, that can be sold to an NPC shop. +/// 00c7 .W { .W .L .L }* (ZC_PC_SELL_ITEMLIST) +void clif_selllist( map_session_data& sd){ + if( !sd.npc_shopid ){ return; - - fd=sd->fd; - WFIFOHEAD(fd, MAX_INVENTORY * 10 + 4); - WFIFOW(fd,0)=0xc7; - for( i = 0; i < MAX_INVENTORY; i++ ) - { - if( sd->inventory.u.items_inventory[i].nameid > 0 && sd->inventory_data[i] ) - { - if( !pc_can_sell_item(sd, &sd->inventory.u.items_inventory[i], nd->subtype)) - continue; - - if (battle_config.rental_item_novalue && sd->inventory.u.items_inventory[i].expire_time) - val = 0; - else { - val = sd->inventory_data[i]->value_sell; - if( val < 0 ) - continue; - } - WFIFOW(fd,4+c*10)=i+2; - WFIFOL(fd,6+c*10)=val; - WFIFOL(fd,10+c*10)=pc_modifysellvalue(sd,val); - c++; - } } - WFIFOW(fd,2)=c*10+4; - WFIFOSET(fd,WFIFOW(fd,2)); + + npc_data* nd = map_id2nd( sd.npc_shopid ); + + if( nd == nullptr ){ + return; + } + + PACKET_ZC_PC_SELL_ITEMLIST *packet = reinterpret_cast(packet_buffer); + + packet->packetType = HEADER_ZC_PC_SELL_ITEMLIST; + packet->packetLength = sizeof( *packet ); + + for( int i = 0, c = 0; i < MAX_INVENTORY; i++ ){ + if( sd.inventory.u.items_inventory[i].nameid <= 0 ){ + continue; + } + + if( sd.inventory_data[i] == nullptr ){ + continue; + } + + if( !pc_can_sell_item( &sd, &sd.inventory.u.items_inventory[i], nd->subtype ) ){ + continue; + } + + int price; + + if( battle_config.rental_item_novalue && sd.inventory.u.items_inventory[i].expire_time ){ + price = 0; + }else{ + price = sd.inventory_data[i]->value_sell; + + if( price < 0 ){ + continue; + } + } + + packet->items[c].index = client_index(i); + packet->items[c].price = price; + packet->items[c].overcharge = pc_modifysellvalue( &sd, price ); + + packet->packetLength += sizeof( packet->items[0] ); + c++; + } + + clif_send( packet, packet->packetLength, &sd.bl, SELF ); } /// Closes shop (CZ_NPC_TRADE_QUIT). @@ -2467,8 +2507,8 @@ void clif_scriptnext( map_session_data& sd, uint32 npcid ){ } -/// Adds a 'close' button to an NPC dialog (ZC_CLOSE_DIALOG). -/// 00b6 .L +/// Adds a 'close' button to an NPC dialog. +/// 00b6 .L (ZC_CLOSE_DIALOG) /// Client behavior: /// - if dialog window is open: /// - remove 'next' button @@ -2482,17 +2522,13 @@ void clif_scriptnext( map_session_data& sd, uint32 npcid ){ /// - close the dialog window /// - close the menu window /// - 0146 .L -void clif_scriptclose(map_session_data *sd, int npcid) -{ - int fd; +void clif_scriptclose( map_session_data& sd, uint32 npcid ){ + PACKET_ZC_CLOSE_DIALOG packet{}; - nullpo_retv(sd); + packet.packetType = HEADER_ZC_CLOSE_DIALOG; + packet.npcId = npcid; - fd=sd->fd; - WFIFOHEAD(fd, packet_len(0xb6)); - WFIFOW(fd,0)=0xb6; - WFIFOL(fd,2)=npcid; - WFIFOSET(fd,packet_len(0xb6)); + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); } /** @@ -2511,33 +2547,28 @@ void clif_scriptclear( map_session_data& sd, int npcid ){ clif_send( &p, sizeof( p ), &sd.bl, SELF ); } -/*========================================== - * - *------------------------------------------*/ -void clif_sendfakenpc(map_session_data *sd, int npcid) { - unsigned char *buf; - int fd = sd->fd; - sd->state.using_fake_npc = 1; - WFIFOHEAD(fd, packet_len(0x78)); - buf = WFIFOP(fd,0); - memset(WBUFP(buf,0), 0, packet_len(0x78)); - WBUFW(buf,0)=0x78; +void clif_sendfakenpc( map_session_data& sd, uint32 npcid ){ + sd.state.using_fake_npc = 1; + + PACKET_ZC_NOTIFY_STANDENTRY packet{}; + + packet.packetType = HEADER_ZC_NOTIFY_STANDENTRY; #if PACKETVER >= 20071106 - WBUFB(buf,2) = 0; // object type - buf = WFIFOP(fd,1); + packet.objecttype = 0; #endif - WBUFL(buf,2)=npcid; - WBUFW(buf,14)=111; - WBUFPOS(buf,46,sd->bl.x,sd->bl.y,sd->ud.dir); - WBUFB(buf,49)=5; - WBUFB(buf,50)=5; - WFIFOSET(fd, packet_len(0x78)); + packet.GID = npcid; + packet.job = JT_HIDDEN_NPC; + WBUFPOS(packet.PosDir,0,sd.bl.x,sd.bl.y,sd.ud.dir); + packet.xSize = 5; + packet.ySize = 5; + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); } -/// Displays an NPC dialog menu (ZC_MENU_LIST). -/// 00b7 .W .L .?B +/// Displays an NPC dialog menu. +/// 00b7 .W .L .?B (ZC_MENU_LIST) /// Client behavior: /// - disable mouse targeting /// - close the menu window @@ -2556,29 +2587,28 @@ void clif_sendfakenpc(map_session_data *sd, int npcid) { /// WARNING: the 'cancel' button closes other windows besides the dialog window and the menu window. /// Which suggests their have intertwined behavior. (probably the mouse targeting) /// TODO investigate behavior of other windows [FlavioJS] -void clif_scriptmenu(map_session_data* sd, int npcid, const char* mes) -{ - int fd = sd->fd; - int16 slen; - slen = static_cast( strlen(mes) + 9 ); +void clif_scriptmenu( map_session_data& sd, uint32 npcid, const char* mes ){ struct block_list *bl = nullptr; + + if (!sd.state.using_fake_npc && (npcid == fake_nd->bl.id || ((bl = map_id2bl(npcid)) && (bl->m!=sd.bl.m || + bl->xx>sd.bl.x+AREA_SIZE+1 || + bl->yy>sd.bl.y+AREA_SIZE+1)))) + clif_sendfakenpc( sd, npcid ); - if (!sd->state.using_fake_npc && (npcid == fake_nd->bl.id || ((bl = map_id2bl(npcid)) && (bl->m!=sd->bl.m || - bl->xbl.x-AREA_SIZE-1 || bl->x>sd->bl.x+AREA_SIZE+1 || - bl->ybl.y-AREA_SIZE-1 || bl->y>sd->bl.y+AREA_SIZE+1)))) - clif_sendfakenpc(sd, npcid); + PACKET_ZC_MENU_LIST *packet = reinterpret_cast(packet_buffer); - WFIFOHEAD(fd, slen); - WFIFOW(fd,0)=0xb7; - WFIFOW(fd,2)=slen; - WFIFOL(fd,4)=npcid; - memcpy(WFIFOCP(fd,8), mes, slen-8); - WFIFOSET(fd,WFIFOW(fd,2)); + size_t mes_length = strlen(mes); + packet->packetType = HEADER_ZC_MENU_LIST; + packet->npcId = npcid; + packet->packetLength = sizeof(PACKET_ZC_MENU_LIST) + mes_length; + memcpy(packet->menu, mes, mes_length); + + clif_send( packet, packet->packetLength, &sd.bl, SELF ); } -/// Displays an NPC dialog input box for numbers (ZC_OPEN_EDITDLG). -/// 0142 .L +/// Displays an NPC dialog input box for numbers. +/// 0142 .L (ZC_OPEN_EDITDLG) /// Client behavior (inputnum window): /// - if npcid exists in the client: /// - open the inputnum window @@ -2588,28 +2618,25 @@ void clif_scriptmenu(map_session_data* sd, int npcid, const char* mes) /// - if npcid exists in the client: /// - 0143 .L .L /// - close inputnum window -void clif_scriptinput(map_session_data *sd, int npcid) -{ - int fd; +void clif_scriptinput( map_session_data& sd, uint32 npcid ){ struct block_list *bl = nullptr; - nullpo_retv(sd); + if (!sd.state.using_fake_npc && (npcid == fake_nd->bl.id || ((bl = map_id2bl(npcid)) && (bl->m!=sd.bl.m || + bl->xx>sd.bl.x+AREA_SIZE+1 || + bl->yy>sd.bl.y+AREA_SIZE+1)))) + clif_sendfakenpc( sd, npcid ); - if (!sd->state.using_fake_npc && (npcid == fake_nd->bl.id || ((bl = map_id2bl(npcid)) && (bl->m!=sd->bl.m || - bl->xbl.x-AREA_SIZE-1 || bl->x>sd->bl.x+AREA_SIZE+1 || - bl->ybl.y-AREA_SIZE-1 || bl->y>sd->bl.y+AREA_SIZE+1)))) - clif_sendfakenpc(sd, npcid); + PACKET_ZC_OPEN_EDITDLG packet{}; - fd=sd->fd; - WFIFOHEAD(fd, packet_len(0x142)); - WFIFOW(fd,0)=0x142; - WFIFOL(fd,2)=npcid; - WFIFOSET(fd,packet_len(0x142)); + packet.packetType = HEADER_ZC_OPEN_EDITDLG; + packet.npcId = npcid; + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); } -/// Displays an NPC dialog input box for numbers (ZC_OPEN_EDITDLGSTR). -/// 01d4 .L +/// Displays an NPC dialog input box for strings. +/// 01d4 .L (ZC_OPEN_EDITDLGSTR) /// Client behavior (inputstr window): /// - if npcid is 0 or npcid exists in the client: /// - open the inputstr window @@ -2619,28 +2646,25 @@ void clif_scriptinput(map_session_data *sd, int npcid) /// - if npcid is 0 or npcid exists in the client: /// - 01d5 .W .L .?B /// - close inputstr window -void clif_scriptinputstr(map_session_data *sd, int npcid) -{ - int fd; +void clif_scriptinputstr( map_session_data& sd, uint32 npcid ){ struct block_list *bl = nullptr; - nullpo_retv(sd); + if (!sd.state.using_fake_npc && (npcid == fake_nd->bl.id || ((bl = map_id2bl(npcid)) && (bl->m!=sd.bl.m || + bl->xx>sd.bl.x+AREA_SIZE+1 || + bl->yy>sd.bl.y+AREA_SIZE+1)))) + clif_sendfakenpc( sd, npcid ); - if (!sd->state.using_fake_npc && (npcid == fake_nd->bl.id || ((bl = map_id2bl(npcid)) && (bl->m!=sd->bl.m || - bl->xbl.x-AREA_SIZE-1 || bl->x>sd->bl.x+AREA_SIZE+1 || - bl->ybl.y-AREA_SIZE-1 || bl->y>sd->bl.y+AREA_SIZE+1)))) - clif_sendfakenpc(sd, npcid); + PACKET_ZC_OPEN_EDITDLGSTR packet{}; - fd=sd->fd; - WFIFOHEAD(fd, packet_len(0x1d4)); - WFIFOW(fd,0)=0x1d4; - WFIFOL(fd,2)=npcid; - WFIFOSET(fd,packet_len(0x1d4)); + packet.packetType = HEADER_ZC_OPEN_EDITDLGSTR; + packet.npcId = npcid; + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); } -/// Marks a position on client's minimap (ZC_COMPASS). -/// 0144 .L .L .L .L .B .L +/// Marks a position on client's minimap. +/// 0144 .L .L .L .L .B .L (ZC_COMPASS) /// npc id: /// is ignored in the client /// type: @@ -2649,22 +2673,18 @@ void clif_scriptinputstr(map_session_data *sd, int npcid) /// 2 = remove mark /// color: /// 0x00RRGGBB -void clif_viewpoint(map_session_data *sd, int npc_id, int type, int x, int y, int id, int color) -{ - int fd; +void clif_viewpoint( map_session_data& sd, uint32 npc_id, int type, uint16 x, uint16 y, int id, uint32 color ){ + PACKET_ZC_COMPASS packet{}; - nullpo_retv(sd); + packet.packetType = HEADER_ZC_COMPASS; + packet.npcId = npc_id; + packet.type = type; + packet.xPos = x; + packet.yPos = y; + packet.id = id; + packet.color = color; - fd=sd->fd; - WFIFOHEAD(fd, packet_len(0x144)); - WFIFOW(fd,0)=0x144; - WFIFOL(fd,2)=npc_id; - WFIFOL(fd,6)=type; - WFIFOL(fd,10)=x; - WFIFOL(fd,14)=y; - WFIFOB(fd,18)=id; - WFIFOL(fd,19)=color; - WFIFOSET(fd,packet_len(0x144)); + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); } /// Displays an illustration image. @@ -2677,18 +2697,14 @@ void clif_viewpoint(map_session_data *sd, int npc_id, int type, int x, int y, in /// 3 = middle of screen, inside a movable window /// 4 = middle of screen, movable with a close button, chrome-less /// 255 = clear all displayed cutins -void clif_cutin(map_session_data* sd, const char* image, int type) -{ - int fd; +void clif_cutin( map_session_data& sd, const char* image, int type ){ + PACKET_ZC_SHOW_IMAGE packet{}; - nullpo_retv(sd); + packet.packetType = HEADER_ZC_SHOW_IMAGE; + safestrncpy(packet.image, image, sizeof(packet.image)); + packet.type = type; - fd=sd->fd; - WFIFOHEAD(fd, packet_len(0x1b3)); - WFIFOW(fd,0)=0x1b3; - strncpy(WFIFOCP(fd,2),image,64); - WFIFOB(fd,66)=type; - WFIFOSET(fd,packet_len(0x1b3)); + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); } @@ -2831,25 +2847,21 @@ void clif_additem( map_session_data *sd, int n, int amount, unsigned char fail ) } -/// Notifies the client, that an inventory item was deleted or dropped (ZC_ITEM_THROW_ACK). -/// 00af .W .W -void clif_dropitem(map_session_data *sd,int n,int amount) -{ - int fd; +/// Notifies the client, that an inventory item was deleted or dropped. +/// 00af .W .W (ZC_ITEM_THROW_ACK) +void clif_dropitem( map_session_data& sd, int index, int amount ){ + PACKET_ZC_ITEM_THROW_ACK packet{}; - nullpo_retv(sd); + packet.packetType = HEADER_ZC_ITEM_THROW_ACK; + packet.index = client_index( index ); + packet.count = amount; - fd=sd->fd; - WFIFOHEAD(fd, packet_len(0xaf)); - WFIFOW(fd,0)=0xaf; - WFIFOW(fd,2)=n+2; - WFIFOW(fd,4)=amount; - WFIFOSET(fd,packet_len(0xaf)); + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); } -/// Notifies the client, that an inventory item was deleted (ZC_DELETE_ITEM_FROM_BODY). -/// 07fa .W .W .W +/// Notifies the client, that an inventory item was deleted. +/// 07fa .W .W .W (ZC_DELETE_ITEM_FROM_BODY) /// delete type: /// 0 = Normal /// 1 = Item used for a skill @@ -2859,23 +2871,18 @@ void clif_dropitem(map_session_data *sd,int n,int amount) /// 5 = Moved to cart /// 6 = Item sold /// 7 = Consumed by Four Spirit Analysis (SO_EL_ANALYSIS) skill -void clif_delitem(map_session_data *sd,int n,int amount, short reason) -{ -#if PACKETVER < 20091117 - clif_dropitem(sd,n,amount); +void clif_delitem( map_session_data& sd, int index, int amount, short reason ){ +#if PACKETVER >= 20091117 + PACKET_ZC_DELETE_ITEM_FROM_BODY packet{}; + + packet.packetType = HEADER_ZC_DELETE_ITEM_FROM_BODY; + packet.deleteType = reason; + packet.index = client_index( index ); + packet.count = amount; + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); #else - int fd; - - nullpo_retv(sd); - - fd=sd->fd; - - WFIFOHEAD(fd, packet_len(0x7fa)); - WFIFOW(fd,0)=0x7fa; - WFIFOW(fd,2)=reason; - WFIFOW(fd,4)=n+2; - WFIFOW(fd,6)=amount; - WFIFOSET(fd,packet_len(0x7fa)); + clif_dropitem( sd, index, amount ); #endif } @@ -3243,63 +3250,62 @@ void clif_cartlist( map_session_data *sd ){ } -/// Removes cart (ZC_CARTOFF). -/// 012b +/// Removes cart. +/// 012b (ZC_CARTOFF) /// Client behaviour: /// Closes the cart storage and removes all it's items from memory. /// The Num & Weight values of the cart are left untouched and the cart is NOT removed. void clif_clearcart(int fd) { - WFIFOHEAD(fd, packet_len(0x12b)); - WFIFOW(fd,0) = 0x12b; - WFIFOSET(fd, packet_len(0x12b)); + PACKET_ZC_CARTOFF packet{}; + packet.packetType = HEADER_ZC_CARTOFF; + + socket_send(fd, packet); } -/// Guild XY locators (ZC_NOTIFY_POSITION_TO_GUILDM) [Valaris] -/// 01eb .L .W .W -void clif_guild_xy(map_session_data *sd) -{ - unsigned char buf[10]; +/// Sends XY location to all other guild members +/// 01eb .L .W .W (ZC_NOTIFY_POSITION_TO_GUILDM) +void clif_guild_xy( map_session_data& sd ){ + PACKET_ZC_NOTIFY_POSITION_TO_GUILDM packet{}; - nullpo_retv(sd); + packet.packetType = HEADER_ZC_NOTIFY_POSITION_TO_GUILDM; + packet.aid = sd.status.account_id; + packet.xPos = sd.bl.x; + packet.yPos = sd.bl.y; - WBUFW(buf,0)=0x1eb; - WBUFL(buf,2)=sd->status.account_id; - WBUFW(buf,6)=sd->bl.x; - WBUFW(buf,8)=sd->bl.y; - clif_send(buf,packet_len(0x1eb),&sd->bl,GUILD_SAMEMAP_WOS); + clif_send(&packet, sizeof(packet), &sd.bl, GUILD_SAMEMAP_WOS); } -/*========================================== - * Sends x/y dot to a single fd. [Skotlex] - *------------------------------------------*/ -void clif_guild_xy_single(int fd, map_session_data *sd) -{ - if( sd->bg_id ) +/// Sends XY location to a specific guild member +/// 01eb .L .W .W (ZC_NOTIFY_POSITION_TO_GUILDM) +void clif_guild_xy_single( map_session_data& sd, map_session_data& tsd ){ + if( sd.bg_id ){ return; + } - WFIFOHEAD(fd,packet_len(0x1eb)); - WFIFOW(fd,0)=0x1eb; - WFIFOL(fd,2)=sd->status.account_id; - WFIFOW(fd,6)=sd->bl.x; - WFIFOW(fd,8)=sd->bl.y; - WFIFOSET(fd,packet_len(0x1eb)); + PACKET_ZC_NOTIFY_POSITION_TO_GUILDM packet{}; + + packet.packetType = HEADER_ZC_NOTIFY_POSITION_TO_GUILDM; + packet.aid = sd.status.account_id; + packet.xPos = sd.bl.x; + packet.yPos = sd.bl.y; + + clif_send( &packet, sizeof( packet ), &tsd.bl, SELF ); } -// Guild XY locators [Valaris] -void clif_guild_xy_remove(map_session_data *sd) -{ - unsigned char buf[10]; +/// Removes XY location from all other guild members +/// 01eb .L .W .W (ZC_NOTIFY_POSITION_TO_GUILDM) +void clif_guild_xy_remove( map_session_data& sd ){ + PACKET_ZC_NOTIFY_POSITION_TO_GUILDM packet{}; - nullpo_retv(sd); + packet.packetType = HEADER_ZC_NOTIFY_POSITION_TO_GUILDM; + packet.aid = sd.status.account_id; + packet.xPos = -1; + packet.yPos = -1; - WBUFW(buf,0)=0x1eb; - WBUFL(buf,2)=sd->status.account_id; - WBUFW(buf,6)=-1; - WBUFW(buf,8)=-1; - clif_send(buf,packet_len(0x1eb),&sd->bl,GUILD_SAMEMAP_WOS); + clif_send( &packet, sizeof( packet ), &sd.bl, GUILD_SAMEMAP_WOS ); } /*========================================== @@ -3486,377 +3492,367 @@ void clif_update_hp(map_session_data &sd) { /// Notifies client of a character parameter change. /// 00b0 .W .L (ZC_PAR_CHANGE) +static void clif_par_change(map_session_data& sd, uint16 varId, int count) { + PACKET_ZC_PAR_CHANGE packet{}; + + packet.PacketType = HEADER_ZC_PAR_CHANGE; + packet.varID = varId; + packet.count = count; + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); +} + +/// Notifies client of a character parameter change. /// 00b1 .W .L (ZC_LONGPAR_CHANGE) +static void clif_longpar_change(map_session_data& sd, uint16 varId, int amount) { + PACKET_ZC_LONGPAR_CHANGE packet{}; + + packet.PacketType = HEADER_ZC_LONGPAR_CHANGE; + packet.varID = varId; + packet.amount = amount; + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); +} + +/// Notifies client of a character parameter change. /// 00be .W .B (ZC_STATUS_CHANGE) +static void clif_zc_status_change(map_session_data& sd, uint16 status_id, uint8 value) { + PACKET_ZC_STATUS_CHANGE packet{}; + + packet.PacketType = HEADER_ZC_STATUS_CHANGE; + packet.statusID = status_id; + packet.value = value; + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); +} + +/// Notifies client of a character parameter change. /// 0121 .W .W .L .L (ZC_NOTIFY_CARTITEM_COUNTINFO) +static void clif_cartcount( map_session_data& sd ){ + PACKET_ZC_NOTIFY_CARTITEM_COUNTINFO packet{}; + + packet.PacketType = HEADER_ZC_NOTIFY_CARTITEM_COUNTINFO; + packet.curCount = sd.cart_num; + packet.maxCount = MAX_CART; + packet.curWeight = sd.cart_weight; + packet.maxWeight = sd.cart_weight_max; + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); +} + +/// Tells the client how far it is allowed to attack (weapon range) /// 013a .W (ZC_ATTACK_RANGE) +static void clif_attackrange( map_session_data& sd, int16 range ){ + PACKET_ZC_ATTACK_RANGE packet{}; + + packet.PacketType = HEADER_ZC_ATTACK_RANGE; + packet.currentAttRange = range; + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); +} + +/// Notifies client of a character parameter change. /// 0141 .L .L .L (ZC_COUPLESTATUS) -/// 0acb .W .Q (ZC_LONGPAR_CHANGE2) -/// TODO: Extract individual packets. -/// FIXME: Packet lengths from packet_len(cmd) -void clif_updatestatus(map_session_data *sd,int type) -{ - int fd,len=8; +static void clif_couplestatus(map_session_data& sd, uint32 status_type, int32 defaultStatus, int32 plusStatus) { + PACKET_ZC_COUPLESTATUS packet{}; - nullpo_retv(sd); + packet.PacketType = HEADER_ZC_COUPLESTATUS; + packet.statusType = status_type; + packet.defaultStatus = defaultStatus; + packet.plusStatus = plusStatus; - fd=sd->fd; + clif_send(&packet, sizeof(packet), &sd.bl, SELF); +} - if ( !session_isActive(fd) ) // Invalid pointer fix, by sasuke [Kevin] - return; +/// Notifies client of a character parameter change. +/// 0acb .W .Q (ZC_LONGLONGPAR_CHANGE) +static void clif_longlongpar_change(map_session_data& sd, uint16 varId, int64 amount) { +#if PACKETVER_MAIN_NUM >= 20170906 || PACKETVER_RE_NUM >= 20170830 || defined(PACKETVER_ZERO) + PACKET_ZC_LONGLONGPAR_CHANGE packet{}; - WFIFOHEAD(fd, 14); - WFIFOW(fd,0)=0xb0; - WFIFOW(fd,2)=type; + packet.PacketType = HEADER_ZC_LONGLONGPAR_CHANGE; + packet.varID = varId; + packet.amount = amount; + + clif_send( &packet, sizeof( packet ), &sd.bl, SELF ); +#endif +} + +/// Notifies client of a character parameter change. +void clif_updatestatus( map_session_data& sd, enum _sp type ){ switch(type){ - // 00b0 - case SP_WEIGHT: - pc_updateweightstatus(sd); - WFIFOHEAD(fd,14); - WFIFOW(fd,0)=0xb0; //Need to re-set as pc_updateweightstatus can alter the buffer. [Skotlex] - WFIFOW(fd,2)=type; - WFIFOL(fd,4)=sd->weight; - break; - case SP_MAXWEIGHT: - WFIFOL(fd,4)=sd->max_weight; - break; - case SP_SPEED: - WFIFOL(fd,4)=sd->battle_status.speed; - break; - case SP_BASELEVEL: - WFIFOL(fd,4)=sd->status.base_level; - break; - case SP_JOBLEVEL: - WFIFOL(fd,4)=sd->status.job_level; - break; - case SP_KARMA: // Adding this back, I wonder if the client intercepts this - [Lance] - WFIFOL(fd,4)=sd->status.karma; - break; - case SP_MANNER: - WFIFOL(fd,4)=sd->status.manner; - break; - case SP_STATUSPOINT: - WFIFOL(fd,4)=sd->status.status_point; - break; - case SP_SKILLPOINT: - WFIFOL(fd,4)=sd->status.skill_point; - break; - case SP_HIT: - WFIFOL(fd,4)=sd->battle_status.hit; - break; - case SP_FLEE1: - WFIFOL(fd,4)=sd->battle_status.flee; - break; - case SP_FLEE2: - WFIFOL(fd,4)=sd->battle_status.flee2/10; - break; - case SP_MAXHP: - WFIFOL(fd,4)=sd->battle_status.max_hp; - break; - case SP_MAXSP: - WFIFOL(fd,4)=sd->battle_status.max_sp; - break; - case SP_HP: - // On officials the HP never go below 1, even if you die [Lemongrass] - // On officials the HP Novice class never go below 50%, even if you die [Napster] - WFIFOL(fd,4)= sd->battle_status.hp ? sd->battle_status.hp : (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE ? 1 : sd->battle_status.max_hp/2; - break; - case SP_SP: - WFIFOL(fd,4)=sd->battle_status.sp; - break; - case SP_ASPD: - WFIFOL(fd,4)=sd->battle_status.amotion; - break; - case SP_ATK1: - WFIFOL(fd,4)=pc_leftside_atk(sd); - break; - case SP_DEF1: - WFIFOL(fd,4)=pc_leftside_def(sd); - break; - case SP_MDEF1: - WFIFOL(fd,4)=pc_leftside_mdef(sd); - break; - case SP_ATK2: - WFIFOL(fd,4)=pc_rightside_atk(sd); - break; - case SP_DEF2: - WFIFOL(fd,4)=pc_rightside_def(sd); - break; - case SP_MDEF2: { - //negative check (in case you have something like Berserk active) - int mdef2 = pc_rightside_mdef(sd); + case SP_WEIGHT: + pc_updateweightstatus(&sd); + clif_par_change(sd, type, sd.weight); + break; + case SP_MAXWEIGHT: + clif_par_change(sd, type, sd.max_weight); + break; + case SP_SPEED: + clif_par_change(sd, type, sd.battle_status.speed); + break; + case SP_BASELEVEL: + clif_par_change(sd, type, sd.status.base_level); + break; + case SP_JOBLEVEL: + clif_par_change(sd, type, sd.status.job_level); + break; + case SP_KARMA: + // Adding this back, I wonder if the client intercepts this - [Lance] + clif_par_change(sd, type, sd.status.karma); + break; + case SP_MANNER: + clif_par_change(sd, type, sd.status.manner); + break; + case SP_STATUSPOINT: + clif_par_change(sd, type, sd.status.status_point); + break; + case SP_SKILLPOINT: + clif_par_change(sd, type, sd.status.skill_point); + break; + case SP_HIT: + clif_par_change(sd, type, sd.battle_status.hit); + break; + case SP_FLEE1: + clif_par_change(sd, type, sd.battle_status.flee); + break; + case SP_FLEE2: + clif_par_change(sd, type, sd.battle_status.flee2/10); + break; + case SP_MAXHP: + clif_par_change(sd, type, sd.battle_status.max_hp); + break; + case SP_MAXSP: + clif_par_change(sd, type, sd.battle_status.max_sp); + break; + case SP_HP: + // On officials the HP never go below 1, even if you die [Lemongrass] + // On officials the HP Novice class never go below 50%, even if you die [Napster] + if (sd.battle_status.hp == 0) { + clif_par_change(sd, type, (sd.class_&MAPID_UPPERMASK) != MAPID_NOVICE ? 1 : sd.battle_status.max_hp/2); + } else { + clif_par_change(sd, type, sd.battle_status.hp); + } + break; + case SP_SP: + clif_par_change(sd, type, sd.battle_status.sp); + break; + case SP_ASPD: + clif_par_change(sd, type, sd.battle_status.amotion); + break; + case SP_ATK1: + clif_par_change(sd, type, pc_leftside_atk(&sd)); + break; + case SP_DEF1: + clif_par_change(sd, type, pc_leftside_def(&sd)); + break; + case SP_MDEF1: + clif_par_change(sd, type, pc_leftside_mdef(&sd)); + break; + case SP_ATK2: + clif_par_change(sd, type, pc_rightside_atk(&sd)); + break; + case SP_DEF2: + clif_par_change(sd, type, pc_rightside_def(&sd)); + break; + case SP_MDEF2: { + //negative check (in case you have something like Berserk active) + int mdef2 = pc_rightside_mdef(&sd); - WFIFOL(fd,4)= #ifndef RENEWAL - ( mdef2 < 0 ) ? 0 : -#endif - mdef2; - - } - break; - case SP_CRITICAL: - WFIFOL(fd,4)=sd->battle_status.cri/10; - break; - case SP_MATK1: - WFIFOL(fd,4)=pc_rightside_matk(sd); - break; - case SP_MATK2: - WFIFOL(fd,4)=pc_leftside_matk(sd); - break; - - case SP_ZENY: - WFIFOW(fd,0)=0xb1; - WFIFOL(fd,4)=sd->status.zeny; - break; -#if PACKETVER >= 20170830 - case SP_BASEEXP: - WFIFOW(fd,0)=0xacb; - WFIFOQ(fd,4)=client_exp(sd->status.base_exp); - len = packet_len(0xacb); - break; - case SP_JOBEXP: - WFIFOW(fd,0)=0xacb; - WFIFOQ(fd,4)=client_exp(sd->status.job_exp); - len = packet_len(0xacb); - break; - case SP_NEXTBASEEXP: - WFIFOW(fd,0)=0xacb; - WFIFOQ(fd,4)=client_exp(pc_nextbaseexp(sd)); - len = packet_len(0xacb); - break; - case SP_NEXTJOBEXP: - WFIFOW(fd,0)=0xacb; - WFIFOQ(fd,4)=client_exp(pc_nextjobexp(sd)); - len = packet_len(0xacb); - break; + clif_par_change(sd, type, mdef2 < 0 ? 0 : mdef2); #else - case SP_BASEEXP: - WFIFOW(fd,0)=0xb1; - WFIFOL(fd,4)=client_exp(sd->status.base_exp); - break; - case SP_JOBEXP: - WFIFOW(fd,0)=0xb1; - WFIFOL(fd,4)=client_exp(sd->status.job_exp); - break; - case SP_NEXTBASEEXP: - WFIFOW(fd,0)=0xb1; - WFIFOL(fd,4)= client_exp(pc_nextbaseexp(sd)); - break; - case SP_NEXTJOBEXP: - WFIFOW(fd,0)=0xb1; - WFIFOL(fd,4)= client_exp(pc_nextjobexp(sd)); - break; + clif_par_change(sd, type, mdef2); +#endif + } + break; + case SP_CRITICAL: + clif_par_change(sd, type, sd.battle_status.cri/10); + break; + case SP_MATK1: + clif_par_change(sd, type, pc_rightside_matk(&sd)); + break; + case SP_MATK2: + clif_par_change(sd, type, pc_leftside_matk(&sd)); + break; + + case SP_ZENY: + clif_longpar_change(sd, type, sd.status.zeny); + break; +#if PACKETVER >= 20170830 + case SP_BASEEXP: + clif_longlongpar_change(sd, type, client_exp(sd.status.base_exp)); + break; + case SP_JOBEXP: + clif_longlongpar_change(sd, type, client_exp(sd.status.job_exp)); + break; + case SP_NEXTBASEEXP: + clif_longlongpar_change(sd, type, client_exp(pc_nextbaseexp(&sd))); + break; + case SP_NEXTJOBEXP: + clif_longlongpar_change(sd, type, client_exp(pc_nextjobexp(&sd))); + break; +#else + case SP_BASEEXP: + clif_par_change(sd, type, client_exp(sd.status.base_exp)); + break; + case SP_JOBEXP: + clif_par_change(sd, type, client_exp(sd.status.job_exp)); + break; + case SP_NEXTBASEEXP: + clif_par_change(sd, type, client_exp(pc_nextbaseexp(&sd))); + break; + case SP_NEXTJOBEXP: + clif_par_change(sd, type, client_exp(pc_nextjobexp(&sd))); + break; #endif - /** - * SP_U are used to update the amount of points necessary to increase that stat - **/ - case SP_USTR: - case SP_UAGI: - case SP_UVIT: - case SP_UINT: - case SP_UDEX: - case SP_ULUK: - WFIFOW(fd,0)=0xbe; - WFIFOB(fd,4)=pc_need_status_point(sd,type-SP_USTR+SP_STR,1); - len=5; - break; + /** + * SP_U are used to update the amount of points necessary to increase that stat + **/ + case SP_USTR: + case SP_UAGI: + case SP_UVIT: + case SP_UINT: + case SP_UDEX: + case SP_ULUK: + clif_zc_status_change(sd, static_cast(type), static_cast(pc_need_status_point(&sd, type-SP_USTR+SP_STR, 1))); + break; - /** - * Tells the client how far it is allowed to attack (weapon range) - **/ - case SP_ATTACKRANGE: - WFIFOW(fd,0)=0x13a; - WFIFOW(fd,2)=sd->battle_status.rhw.range; - len=4; - break; + case SP_ATTACKRANGE: + clif_attackrange( sd, sd.battle_status.rhw.range ); + break; - case SP_STR: - WFIFOW(fd,0)=0x141; - WFIFOL(fd,2)=type; - WFIFOL(fd,6)=sd->status.str; - WFIFOL(fd,10)=sd->battle_status.str - sd->status.str; - len=14; - break; - case SP_AGI: - WFIFOW(fd,0)=0x141; - WFIFOL(fd,2)=type; - WFIFOL(fd,6)=sd->status.agi; - WFIFOL(fd,10)=sd->battle_status.agi - sd->status.agi; - len=14; - break; - case SP_VIT: - WFIFOW(fd,0)=0x141; - WFIFOL(fd,2)=type; - WFIFOL(fd,6)=sd->status.vit; - WFIFOL(fd,10)=sd->battle_status.vit - sd->status.vit; - len=14; - break; - case SP_INT: - WFIFOW(fd,0)=0x141; - WFIFOL(fd,2)=type; - WFIFOL(fd,6)=sd->status.int_; - WFIFOL(fd,10)=sd->battle_status.int_ - sd->status.int_; - len=14; - break; - case SP_DEX: - WFIFOW(fd,0)=0x141; - WFIFOL(fd,2)=type; - WFIFOL(fd,6)=sd->status.dex; - WFIFOL(fd,10)=sd->battle_status.dex - sd->status.dex; - len=14; - break; - case SP_LUK: - WFIFOW(fd,0)=0x141; - WFIFOL(fd,2)=type; - WFIFOL(fd,6)=sd->status.luk; - WFIFOL(fd,10)=sd->battle_status.luk - sd->status.luk; - len=14; - break; + case SP_STR: + clif_couplestatus(sd, type, sd.status.str, sd.battle_status.str - sd.status.str); + break; + case SP_AGI: + clif_couplestatus(sd, type, sd.status.agi, sd.battle_status.agi - sd.status.agi); + break; + case SP_VIT: + clif_couplestatus(sd, type, sd.status.vit, sd.battle_status.vit - sd.status.vit); + break; + case SP_INT: + clif_couplestatus(sd, type, sd.status.int_, sd.battle_status.int_ - sd.status.int_); + break; + case SP_DEX: + clif_couplestatus(sd, type, sd.status.dex, sd.battle_status.dex - sd.status.dex); + break; + case SP_LUK: + clif_couplestatus(sd, type, sd.status.luk, sd.battle_status.luk - sd.status.luk); + break; - case SP_CARTINFO: - WFIFOW(fd,0)=0x121; - WFIFOW(fd,2)=sd->cart_num; - WFIFOW(fd,4)=MAX_CART; - WFIFOL(fd,6)=sd->cart_weight; - WFIFOL(fd,10)=sd->cart_weight_max; - len=14; - break; + case SP_CARTINFO: + clif_cartcount( sd ); + break; #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - case SP_AP: - WFIFOL(fd, 4) = sd->battle_status.ap; - break; - case SP_TRAITPOINT: - WFIFOL(fd, 4) = sd->status.trait_point; - break; - case SP_MAXAP: - WFIFOL(fd, 4) = sd->battle_status.max_ap; - break; + case SP_AP: + clif_par_change( sd, SP_AP, sd.battle_status.ap ); + break; + case SP_TRAITPOINT: + clif_par_change( sd, SP_TRAITPOINT, sd.status.trait_point ); + break; + case SP_MAXAP: + clif_par_change( sd, SP_MAXAP, sd.battle_status.max_ap ); + break; - case SP_POW: - WFIFOW(fd, 0) = 0x141; - WFIFOL(fd, 2) = type; - WFIFOL(fd, 6) = sd->status.pow; - WFIFOL(fd, 10) = sd->battle_status.pow - sd->status.pow; - len = 14; - break; - case SP_STA: - WFIFOW(fd, 0) = 0x141; - WFIFOL(fd, 2) = type; - WFIFOL(fd, 6) = sd->status.sta; - WFIFOL(fd, 10) = sd->battle_status.sta - sd->status.sta; - len = 14; - break; - case SP_WIS: - WFIFOW(fd, 0) = 0x141; - WFIFOL(fd, 2) = type; - WFIFOL(fd, 6) = sd->status.wis; - WFIFOL(fd, 10) = sd->battle_status.wis - sd->status.wis; - len = 14; - break; - case SP_SPL: - WFIFOW(fd, 0) = 0x141; - WFIFOL(fd, 2) = type; - WFIFOL(fd, 6) = sd->status.spl; - WFIFOL(fd, 10) = sd->battle_status.spl - sd->status.spl; - len = 14; - break; - case SP_CON: - WFIFOW(fd, 0) = 0x141; - WFIFOL(fd, 2) = type; - WFIFOL(fd, 6) = sd->status.con; - WFIFOL(fd, 10) = sd->battle_status.con - sd->status.con; - len = 14; - break; - case SP_CRT: - WFIFOW(fd, 0) = 0x141; - WFIFOL(fd, 2) = type; - WFIFOL(fd, 6) = sd->status.crt; - WFIFOL(fd, 10) = sd->battle_status.crt - sd->status.crt; - len = 14; - break; + case SP_POW: + clif_couplestatus( sd, SP_POW, sd.status.pow, sd.battle_status.pow - sd.status.pow ); + break; + case SP_STA: + clif_couplestatus( sd, SP_STA, sd.status.sta, sd.battle_status.sta - sd.status.sta ); + break; + case SP_WIS: + clif_couplestatus( sd, SP_WIS, sd.status.wis, sd.battle_status.wis - sd.status.wis ); + break; + case SP_SPL: + clif_couplestatus( sd, SP_SPL, sd.status.spl, sd.battle_status.spl - sd.status.spl ); + break; + case SP_CON: + clif_couplestatus( sd, SP_CON, sd.status.con, sd.battle_status.con - sd.status.con ); + break; + case SP_CRT: + clif_couplestatus( sd, SP_CRT, sd.status.crt, sd.battle_status.crt - sd.status.crt ); + break; - case SP_UPOW: - case SP_USTA: - case SP_UWIS: - case SP_USPL: - case SP_UCON: - case SP_UCRT: - WFIFOW(fd, 0) = 0xbe; - WFIFOB(fd, 4) = pc_need_trait_point(sd,type-SP_UPOW+SP_POW, 1); - len = 5; - break; + case SP_UPOW: + case SP_USTA: + case SP_UWIS: + case SP_USPL: + case SP_UCON: + case SP_UCRT: + clif_zc_status_change( sd, static_cast( type ), static_cast( pc_need_trait_point( &sd, type - SP_UPOW + SP_POW, 1 ) ) ); + break; - case SP_PATK: - WFIFOL(fd, 4) = sd->battle_status.patk; - break; - case SP_SMATK: - WFIFOL(fd, 4) = sd->battle_status.smatk; - break; - case SP_RES: - WFIFOL(fd, 4) = sd->battle_status.res; - break; - case SP_MRES: - WFIFOL(fd, 4) = sd->battle_status.mres; - break; - case SP_HPLUS: - WFIFOL(fd, 4) = sd->battle_status.hplus; - break; - case SP_CRATE: - WFIFOL(fd, 4) = sd->battle_status.crate; - break; + case SP_PATK: + clif_par_change( sd, SP_PATK, sd.battle_status.patk ); + break; + case SP_SMATK: + clif_par_change( sd, SP_SMATK, sd.battle_status.smatk ); + break; + case SP_RES: + clif_par_change( sd, SP_RES, sd.battle_status.res ); + break; + case SP_MRES: + clif_par_change( sd, SP_MRES, sd.battle_status.mres ); + break; + case SP_HPLUS: + clif_par_change( sd, SP_HPLUS, sd.battle_status.hplus ); + break; + case SP_CRATE: + clif_par_change( sd, SP_CRATE, sd.battle_status.crate ); + break; #else - case SP_AP: - case SP_TRAITPOINT: - case SP_MAXAP: - case SP_POW: - case SP_STA: - case SP_WIS: - case SP_SPL: - case SP_CON: - case SP_CRT: - case SP_UPOW: - case SP_USTA: - case SP_UWIS: - case SP_USPL: - case SP_UCON: - case SP_UCRT: - case SP_PATK: - case SP_SMATK: - case SP_RES: - case SP_MRES: - case SP_HPLUS: - case SP_CRATE: - // 4th job status are not supported by older clients - return; + case SP_AP: + case SP_TRAITPOINT: + case SP_MAXAP: + case SP_POW: + case SP_STA: + case SP_WIS: + case SP_SPL: + case SP_CON: + case SP_CRT: + case SP_UPOW: + case SP_USTA: + case SP_UWIS: + case SP_USPL: + case SP_UCON: + case SP_UCRT: + case SP_PATK: + case SP_SMATK: + case SP_RES: + case SP_MRES: + case SP_HPLUS: + case SP_CRATE: + // 4th job status are not supported by older clients + return; #endif default: ShowError("clif_updatestatus : unrecognized type %d\n",type); return; } - WFIFOSET(fd,len); // Additional update packets that should be sent right after switch( type ){ case SP_BASELEVEL: - if( sd->status.party_id ){ + if( sd.status.party_id ){ struct party_data* p; int i; - if( ( p = party_search( sd->status.party_id ) ) != nullptr ){ - ARR_FIND(0, MAX_PARTY, i, p->party.member[i].char_id == sd->status.char_id); + if( ( p = party_search( sd.status.party_id ) ) != nullptr ){ + ARR_FIND(0, MAX_PARTY, i, p->party.member[i].char_id == sd.status.char_id); if( i < MAX_PARTY ){ - p->party.member[i].lv = sd->status.base_level; - clif_party_job_and_level( *sd ); + p->party.member[i].lv = sd.status.base_level; + clif_party_job_and_level( sd ); } } } break; case SP_HP: - clif_update_hp(*sd); + clif_update_hp( sd ); break; } } @@ -4119,38 +4115,38 @@ void clif_initialstatus(map_session_data *sd) { WFIFOSET(fd, packet_len(0xbd)); - clif_updatestatus(sd, SP_STR); - clif_updatestatus(sd, SP_AGI); - clif_updatestatus(sd, SP_VIT); - clif_updatestatus(sd, SP_INT); - clif_updatestatus(sd, SP_DEX); - clif_updatestatus(sd, SP_LUK); + clif_updatestatus(*sd, SP_STR); + clif_updatestatus(*sd, SP_AGI); + clif_updatestatus(*sd, SP_VIT); + clif_updatestatus(*sd, SP_INT); + clif_updatestatus(*sd, SP_DEX); + clif_updatestatus(*sd, SP_LUK); - clif_updatestatus(sd, SP_ATTACKRANGE); - clif_updatestatus(sd, SP_ASPD); + clif_updatestatus(*sd, SP_ATTACKRANGE); + clif_updatestatus(*sd, SP_ASPD); #ifdef RENEWAL - clif_updatestatus(sd, SP_POW); - clif_updatestatus(sd, SP_STA); - clif_updatestatus(sd, SP_WIS); - clif_updatestatus(sd, SP_SPL); - clif_updatestatus(sd, SP_CON); - clif_updatestatus(sd, SP_CRT); - clif_updatestatus(sd, SP_PATK); - clif_updatestatus(sd, SP_SMATK); - clif_updatestatus(sd, SP_RES); - clif_updatestatus(sd, SP_MRES); - clif_updatestatus(sd, SP_HPLUS); - clif_updatestatus(sd, SP_CRATE); - clif_updatestatus(sd, SP_TRAITPOINT); - clif_updatestatus(sd, SP_AP); - clif_updatestatus(sd, SP_MAXAP); - clif_updatestatus(sd, SP_UPOW); - clif_updatestatus(sd, SP_USTA); - clif_updatestatus(sd, SP_UWIS); - clif_updatestatus(sd, SP_USPL); - clif_updatestatus(sd, SP_UCON); - clif_updatestatus(sd, SP_UCRT); + clif_updatestatus(*sd, SP_POW); + clif_updatestatus(*sd, SP_STA); + clif_updatestatus(*sd, SP_WIS); + clif_updatestatus(*sd, SP_SPL); + clif_updatestatus(*sd, SP_CON); + clif_updatestatus(*sd, SP_CRT); + clif_updatestatus(*sd, SP_PATK); + clif_updatestatus(*sd, SP_SMATK); + clif_updatestatus(*sd, SP_RES); + clif_updatestatus(*sd, SP_MRES); + clif_updatestatus(*sd, SP_HPLUS); + clif_updatestatus(*sd, SP_CRATE); + clif_updatestatus(*sd, SP_TRAITPOINT); + clif_updatestatus(*sd, SP_AP); + clif_updatestatus(*sd, SP_MAXAP); + clif_updatestatus(*sd, SP_UPOW); + clif_updatestatus(*sd, SP_USTA); + clif_updatestatus(*sd, SP_UWIS); + clif_updatestatus(*sd, SP_USPL); + clif_updatestatus(*sd, SP_UCON); + clif_updatestatus(*sd, SP_UCRT); #endif } @@ -5026,10 +5022,8 @@ static void clif_getareachar_pc(map_session_data* sd,map_session_data* dstsd) if(dstsd->spiritball > 0) clif_spiritball( &dstsd->bl, &sd->bl, SELF ); - if (dstsd->sc.getSCE(SC_MILLENNIUMSHIELD)) - clif_millenniumshield_single(sd->fd, dstsd); - if (dstsd->spiritcharm_type != CHARM_TYPE_NONE && dstsd->spiritcharm > 0) - clif_spiritcharm_single(sd->fd, dstsd); + clif_millenniumshield_single( *dstsd, *sd ); + clif_spiritcharm_single( *dstsd, *sd ); if (dstsd->soulball > 0) clif_soulball( dstsd, &sd->bl, SELF ); if (dstsd->servantball > 0) @@ -5632,7 +5626,7 @@ int clif_outsight(struct block_list *bl,va_list ap) switch(bl->type){ case BL_PC: if(sd->vd.class_ != JT_INVISIBLE) - clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd); + clif_clearunit_single( bl->id, CLR_OUTSIGHT, *tsd ); if(sd->chatID){ struct chat_data *cd; cd=(struct chat_data*)map_id2bl(sd->chatID); @@ -5645,18 +5639,18 @@ int clif_outsight(struct block_list *bl,va_list ap) clif_buyingstore_disappear_entry( *sd, &tsd->bl ); break; case BL_ITEM: - clif_clearflooritem((struct flooritem_data*)bl,tsd->fd); + clif_clearflooritem( *reinterpret_cast( bl ), tsd ); break; case BL_SKILL: clif_clearchar_skillunit((struct skill_unit *)bl,tsd->fd); break; case BL_NPC: if(!(((TBL_NPC*)bl)->is_invisible)) - clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd); + clif_clearunit_single( bl->id, CLR_OUTSIGHT, *tsd ); break; default: if((vd=status_get_viewdata(bl)) && vd->class_ != JT_INVISIBLE) - clif_clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd); + clif_clearunit_single( bl->id, CLR_OUTSIGHT, *tsd ); break; } } @@ -5666,7 +5660,7 @@ int clif_outsight(struct block_list *bl,va_list ap) clif_clearchar_skillunit((struct skill_unit *)tbl,sd->fd); else if(((vd=status_get_viewdata(tbl)) && vd->class_ != JT_INVISIBLE) && !(tbl->type == BL_NPC && (((TBL_NPC*)tbl)->is_invisible))) - clif_clearunit_single(tbl->id,CLR_OUTSIGHT,sd->fd); + clif_clearunit_single( tbl->id, CLR_OUTSIGHT, *sd ); } return 0; } @@ -9922,35 +9916,33 @@ void clif_refresh(map_session_data *sd) { nullpo_retv(sd); - clif_changemap(sd,sd->bl.m,sd->bl.x,sd->bl.y); + clif_changemap( *sd, sd->bl.m, sd->bl.x, sd->bl.y ); clif_inventorylist(sd); clif_equipswitch_list(sd); if(pc_iscarton(sd)) { clif_cartlist(sd); - clif_updatestatus(sd,SP_CARTINFO); + clif_updatestatus(*sd,SP_CARTINFO); } - clif_updatestatus(sd,SP_WEIGHT); - clif_updatestatus(sd,SP_MAXWEIGHT); - clif_updatestatus(sd,SP_STR); - clif_updatestatus(sd,SP_AGI); - clif_updatestatus(sd,SP_VIT); - clif_updatestatus(sd,SP_INT); - clif_updatestatus(sd,SP_DEX); - clif_updatestatus(sd,SP_LUK); + clif_updatestatus(*sd,SP_WEIGHT); + clif_updatestatus(*sd,SP_MAXWEIGHT); + clif_updatestatus(*sd,SP_STR); + clif_updatestatus(*sd,SP_AGI); + clif_updatestatus(*sd,SP_VIT); + clif_updatestatus(*sd,SP_INT); + clif_updatestatus(*sd,SP_DEX); + clif_updatestatus(*sd,SP_LUK); #ifdef RENEWAL - clif_updatestatus(sd,SP_POW); - clif_updatestatus(sd,SP_STA); - clif_updatestatus(sd,SP_WIS); - clif_updatestatus(sd,SP_SPL); - clif_updatestatus(sd,SP_CON); - clif_updatestatus(sd,SP_CRT); + clif_updatestatus(*sd,SP_POW); + clif_updatestatus(*sd,SP_STA); + clif_updatestatus(*sd,SP_WIS); + clif_updatestatus(*sd,SP_SPL); + clif_updatestatus(*sd,SP_CON); + clif_updatestatus(*sd,SP_CRT); #endif if (sd->spiritball) clif_spiritball( &sd->bl, &sd->bl, SELF ); - if (sd->sc.getSCE(SC_MILLENNIUMSHIELD)) - clif_millenniumshield_single(sd->fd, sd); - if (sd->spiritcharm_type != CHARM_TYPE_NONE && sd->spiritcharm > 0) - clif_spiritcharm_single(sd->fd, sd); + clif_millenniumshield_single( *sd, *sd ); + clif_spiritcharm_single( *sd, *sd ); if (sd->soulball) clif_soulball( sd, &sd->bl, SELF ); if (sd->servantball) @@ -9962,7 +9954,7 @@ void clif_refresh(map_session_data *sd) if (sd->vd.body_style) clif_refreshlook(&sd->bl,sd->bl.id,LOOK_BODY2,sd->vd.body_style,SELF); if(hom_is_active(sd->hd)) - clif_send_homdata(sd,SP_ACK,0); + clif_send_homdata( *sd->hd, SP_ACK ); if( sd->md ) { clif_mercenary_info(sd); clif_mercenary_skillblock(sd); @@ -9978,7 +9970,7 @@ void clif_refresh(map_session_data *sd) if( pc_issit(sd) ) clif_sitting(&sd->bl); // FIXME: just send to self, not area if( pc_isdead(sd) ) // When you refresh, resend the death packet. - clif_clearunit_single(sd->bl.id,CLR_DEAD,sd->fd); + clif_clearunit_single( sd->bl.id, CLR_DEAD, *sd ); else clif_changed_dir(&sd->bl, SELF); clif_efst_status_change_sub(&sd->bl,&sd->bl,SELF); @@ -10848,7 +10840,7 @@ void clif_parse_LoadEndAck(int fd,map_session_data *sd) if (sd->state.rewarp) { //Rewarp player. sd->state.rewarp = 0; - clif_changemap(sd, sd->bl.m, sd->bl.x, sd->bl.y); + clif_changemap( *sd, sd->bl.m, sd->bl.x, sd->bl.y ); return; } @@ -10876,12 +10868,12 @@ void clif_parse_LoadEndAck(int fd,map_session_data *sd) // cart if(pc_iscarton(sd)) { clif_cartlist(sd); - clif_updatestatus(sd,SP_CARTINFO); + clif_updatestatus(*sd,SP_CARTINFO); } // weight - clif_updatestatus(sd,SP_WEIGHT); - clif_updatestatus(sd,SP_MAXWEIGHT); + clif_updatestatus(*sd,SP_WEIGHT); + clif_updatestatus(*sd,SP_MAXWEIGHT); // guild // (needs to go before clif_spawn() to show guild emblems correctly) @@ -10964,10 +10956,10 @@ void clif_parse_LoadEndAck(int fd,map_session_data *sd) if(map_addblock(&sd->hd->bl)) return; clif_spawn(&sd->hd->bl); - clif_send_homdata(sd,SP_ACK,0); + clif_send_homdata( *sd->hd, SP_ACK ); clif_hominfo(sd,sd->hd,1); clif_hominfo(sd,sd->hd,0); //for some reason, at least older clients want this sent twice - clif_homskillinfoblock(sd); + clif_homskillinfoblock( *sd->hd ); if( battle_config.hom_setting&HOMSET_COPY_SPEED ) status_calc_bl(&sd->hd->bl, { SCB_SPEED }); //Homunc mimic their master's speed on each map change if( !(battle_config.hom_setting&HOMSET_NO_INSTANT_LAND_SKILL) ) @@ -11002,11 +10994,11 @@ void clif_parse_LoadEndAck(int fd,map_session_data *sd) #if PACKETVER_MAIN_NUM >= 20190522 || PACKETVER_RE_NUM >= 20190508 || PACKETVER_ZERO_NUM >= 20190605 clif_hotkeys_send(sd,1); #endif - clif_updatestatus(sd,SP_BASEEXP); - clif_updatestatus(sd,SP_NEXTBASEEXP); - clif_updatestatus(sd,SP_JOBEXP); - clif_updatestatus(sd,SP_NEXTJOBEXP); - clif_updatestatus(sd,SP_SKILLPOINT); + clif_updatestatus(*sd,SP_BASEEXP); + clif_updatestatus(*sd,SP_NEXTBASEEXP); + clif_updatestatus(*sd,SP_JOBEXP); + clif_updatestatus(*sd,SP_NEXTJOBEXP); + clif_updatestatus(*sd,SP_SKILLPOINT); clif_initialstatus(sd); if (sd->sc.option&OPTION_FALCON) @@ -11053,19 +11045,19 @@ void clif_parse_LoadEndAck(int fd,map_session_data *sd) unit_setdir(&sd->bl, sd->status.body_direction, false); } else { //For some reason the client "loses" these on warp/map-change. - clif_updatestatus(sd,SP_STR); - clif_updatestatus(sd,SP_AGI); - clif_updatestatus(sd,SP_VIT); - clif_updatestatus(sd,SP_INT); - clif_updatestatus(sd,SP_DEX); - clif_updatestatus(sd,SP_LUK); + clif_updatestatus(*sd,SP_STR); + clif_updatestatus(*sd,SP_AGI); + clif_updatestatus(*sd,SP_VIT); + clif_updatestatus(*sd,SP_INT); + clif_updatestatus(*sd,SP_DEX); + clif_updatestatus(*sd,SP_LUK); #ifdef RENEWAL - clif_updatestatus(sd,SP_POW); - clif_updatestatus(sd,SP_STA); - clif_updatestatus(sd,SP_WIS); - clif_updatestatus(sd,SP_SPL); - clif_updatestatus(sd,SP_CON); - clif_updatestatus(sd,SP_CRT); + clif_updatestatus(*sd,SP_POW); + clif_updatestatus(*sd,SP_STA); + clif_updatestatus(*sd,SP_WIS); + clif_updatestatus(*sd,SP_SPL); + clif_updatestatus(*sd,SP_CON); + clif_updatestatus(*sd,SP_CRT); #endif // abort currently running script @@ -11217,7 +11209,7 @@ void clif_parse_LoadEndAck(int fd,map_session_data *sd) // If player is dead, and is spawned (such as @refresh) send death packet. [Valaris] if(pc_isdead(sd)) - clif_clearunit_area(&sd->bl, CLR_DEAD); + clif_clearunit_area( sd->bl, CLR_DEAD ); else { skill_usave_trigger(sd); if (battle_config.spawn_direction) @@ -11394,7 +11386,7 @@ void clif_parse_progressbar(int fd, map_session_data * sd){ // If a message window was open, offer a close button to the user if( sd->st->mes_active ){ - clif_scriptclose( sd, npc_id ); + clif_scriptclose( *sd, npc_id ); } } @@ -11439,7 +11431,7 @@ void clif_parse_WalkToXY(int fd, map_session_data *sd) short x, y; if (pc_isdead(sd)) { - clif_clearunit_area(&sd->bl, CLR_DEAD); + clif_clearunit_area( sd->bl, CLR_DEAD ); return; } @@ -11739,7 +11731,7 @@ void clif_parse_HowManyConnections(int fd, map_session_data *sd) void clif_parse_ActionRequest_sub( map_session_data& sd, int action_type, int target_id, t_tick tick ){ if (pc_isdead(&sd)) { - clif_clearunit_area(&sd.bl, CLR_DEAD); + clif_clearunit_area(sd.bl, CLR_DEAD); return; } @@ -12050,7 +12042,7 @@ void clif_parse_TakeItem(int fd, map_session_data *sd) do { if (pc_isdead(sd)) { - clif_clearunit_area(&sd->bl, CLR_DEAD); + clif_clearunit_area( sd->bl, CLR_DEAD ); break; } @@ -12103,7 +12095,7 @@ void clif_parse_DropItem(int fd, map_session_data *sd){ } //Because the client does not like being ignored. - clif_dropitem(sd, item_index,0); + clif_dropitem( *sd, item_index, 0 ); } @@ -12116,7 +12108,7 @@ void clif_parse_UseItem(int fd, map_session_data *sd) int n; if (pc_isdead(sd)) { - clif_clearunit_area(&sd->bl, CLR_DEAD); + clif_clearunit_area( sd->bl, CLR_DEAD ); return; } @@ -12150,7 +12142,7 @@ void clif_parse_EquipItem(int fd,map_session_data *sd) struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if(pc_isdead(sd)) { - clif_clearunit_area(&sd->bl,CLR_DEAD); + clif_clearunit_area( sd->bl, CLR_DEAD ); return; } index = RFIFOW(fd,info->pos[0])-2; @@ -12208,7 +12200,7 @@ void clif_parse_UnequipItem(int fd,map_session_data *sd) int index; if(pc_isdead(sd)) { - clif_clearunit_area(&sd->bl,CLR_DEAD); + clif_clearunit_area( sd->bl, CLR_DEAD ); return; } @@ -12247,7 +12239,7 @@ void clif_parse_NpcClicked(int fd,map_session_data *sd) struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; if(pc_isdead(sd)) { - clif_clearunit_area(&sd->bl,CLR_DEAD); + clif_clearunit_area( sd->bl, CLR_DEAD ); return; } @@ -12770,7 +12762,7 @@ void clif_parse_StatusUp(int fd,map_session_data *sd) /// The amount to increase the trait status void clif_parse_traitstatus_up( int fd, map_session_data *sd ){ #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - struct PACKET_CZ_UNCONFIRMED_TSTATUS_UP* p = (struct PACKET_CZ_UNCONFIRMED_TSTATUS_UP*)RFIFOP( fd, 0 ); + struct PACKET_CZ_ADVANCED_STATUS_CHANGE* p = (struct PACKET_CZ_ADVANCED_STATUS_CHANGE*)RFIFOP( fd, 0 ); if( p->amount < 0 ){ ShowDebug( "clif_parse_traitstatus_up: Negative 'increase' value sent by client! %s (AID: %d, CID: %d, value: %d)\n", sd->status.name, sd->status.account_id, sd->status.char_id, p->amount ); @@ -14424,7 +14416,7 @@ void clif_parse_GuildChangeEmblem(int fd,map_session_data *sd){ guild_change_emblem( *sd, emblem_len, (const char*)emblem ); } -/// Request to update the guild emblem id (version, according to Gravity) +/// Request to update the guild emblem id /// 0b46 .L .L void clif_parse_GuildChangeEmblem2(int fd, map_session_data* sd) { if( sd == nullptr ){ @@ -14432,7 +14424,7 @@ void clif_parse_GuildChangeEmblem2(int fd, map_session_data* sd) { } #if PACKETVER >= 20190724 - const PACKET_CZ_GUILD_EMBLEM_CHANGE2* p = (PACKET_CZ_GUILD_EMBLEM_CHANGE2*)RFIFOP(fd, 0); + const PACKET_CZ_REQ_ADD_NEW_EMBLEM* p = (PACKET_CZ_REQ_ADD_NEW_EMBLEM*)RFIFOP(fd, 0); auto &g = sd->guild; if (!g || g->guild.guild_id != p->guild_id) @@ -16628,7 +16620,7 @@ void clif_parse_Mail_delete(int fd, map_session_data *sd){ /// 0273 .L .24B void clif_parse_Mail_return(int fd, map_session_data *sd){ #if PACKETVER_MAIN_NUM >= 20201104 || PACKETVER_RE_NUM >= 20211103 || PACKETVER_ZERO_NUM >= 20201118 - struct PACKET_CZ_UNCONFIRMED_RODEX_RETURN* p = (struct PACKET_CZ_UNCONFIRMED_RODEX_RETURN*)RFIFOP( fd, 0 ); + struct PACKET_CZ_RODEX_RETURN* p = (struct PACKET_CZ_RODEX_RETURN*)RFIFOP( fd, 0 ); //ShowDump( p, sizeof( p ) ); @@ -21061,7 +21053,7 @@ void clif_parse_merge_item_req( int fd, map_session_data* sd ){ log_pick_pc( sd, LOG_TYPE_MERGE_ITEM, -amount, &sd->inventory.u.items_inventory[idx] ); memset( &sd->inventory.u.items_inventory[idx], 0, sizeof( sd->inventory.u.items_inventory[0] ) ); sd->inventory_data[idx] = nullptr; - clif_delitem( sd, idx, amount, 0 ); + clif_delitem( *sd, idx, amount, 0 ); } sd->inventory.u.items_inventory[idx_main].amount = total_amount; @@ -23605,7 +23597,7 @@ void clif_parse_laphine_upgrade( int fd, map_session_data* sd ){ log_pick_pc( sd, LOG_TYPE_LAPHINE, -1, item ); // Visually remove it from the client - clif_delitem( sd, index, 1, 0 ); + clif_delitem( *sd, index, 1, 0 ); // Apply the random options if( upgrade->randomOptionGroup != nullptr ){ @@ -24170,7 +24162,7 @@ void clif_parse_item_reform_start( int fd, map_session_data* sd ){ log_pick_pc( sd, LOG_TYPE_REFORM, -1, &selected_item ); // Visually remove it from the client - clif_delitem( sd, index, 1, 0 ); + clif_delitem( *sd, index, 1, 0 ); // Apply the random options if( base->randomOptionGroup != nullptr ){ diff --git a/src/map/clif.hpp b/src/map/clif.hpp index af593f4dd0..4274df55d8 100644 --- a/src/map/clif.hpp +++ b/src/map/clif.hpp @@ -49,6 +49,8 @@ struct s_laphine_upgrade; struct s_captcha_data; enum e_macro_detect_status : uint8; enum e_macro_report_status : uint8; +enum e_hom_state2 : uint8; +enum _sp; enum e_PacketDBVersion { // packet DB MIN_PACKET_DB = 0x064, @@ -629,39 +631,39 @@ void clif_authrefuse(int fd, uint8 error_code); void clif_authfail_fd(int fd, int type); void clif_charselectok(int id, uint8 ok); void clif_dropflooritem(struct flooritem_data* fitem, bool canShowEffect); -void clif_clearflooritem(struct flooritem_data *fitem, int fd); +void clif_clearflooritem( flooritem_data& fitem, map_session_data* tsd = nullptr ); -void clif_clearunit_single(int id, clr_type type, int fd); -void clif_clearunit_area(struct block_list* bl, clr_type type); +void clif_clearunit_single( uint32 GID, clr_type type, map_session_data& tsd ); +void clif_clearunit_area( block_list& bl, clr_type type ); void clif_clearunit_delayed(struct block_list* bl, clr_type type, t_tick tick); int clif_spawn(struct block_list *bl, bool walking = false); //area -void clif_walkok(map_session_data *sd); // self +void clif_walkok( map_session_data& sd ); void clif_move(struct unit_data *ud); //area -void clif_changemap(map_session_data *sd, short m, int x, int y); //self -void clif_changemapserver( map_session_data* sd, const char* map, int x, int y, uint32 ip, uint16 port ); +void clif_changemap( map_session_data& sd, short m, uint16 x, uint16 y ); +void clif_changemapserver( map_session_data& sd, const char* map, uint16 x, uint16 y, uint32 ip, uint16 port ); void clif_blown(struct block_list *bl); // area void clif_slide(struct block_list *bl, int x, int y); // area -void clif_fixpos(struct block_list *bl); // area -void clif_npcbuysell(map_session_data* sd, int id); //self +void clif_fixpos( block_list& bl ); +void clif_npcbuysell( map_session_data& sd, npc_data& nd ); void clif_buylist(map_session_data *sd, struct npc_data *nd); //self -void clif_selllist(map_session_data *sd); //self +void clif_selllist( map_session_data& sd ); void clif_npc_market_open(map_session_data *sd, struct npc_data *nd); void clif_parse_NPCMarketClosed(int fd, map_session_data *sd); void clif_parse_NPCMarketPurchase(int fd, map_session_data *sd); void clif_scriptmes( map_session_data& sd, uint32 npcid, const char *mes ); void clif_scriptnext( map_session_data& sd, uint32 npcid ); -void clif_scriptclose(map_session_data *sd, int npcid); //self +void clif_scriptclose( map_session_data& sd, uint32 npcid ); void clif_scriptclear( map_session_data& sd, int npcid ); //self -void clif_scriptmenu(map_session_data* sd, int npcid, const char* mes); //self -void clif_scriptinput(map_session_data *sd, int npcid); //self -void clif_scriptinputstr(map_session_data *sd, int npcid); // self -void clif_cutin(map_session_data* sd, const char* image, int type); //self -void clif_viewpoint(map_session_data *sd, int npc_id, int type, int x, int y, int id, int color); //self +void clif_scriptmenu( map_session_data& sd, uint32 npcid, const char* mes ); +void clif_scriptinput( map_session_data& sd, uint32 npcid ); +void clif_scriptinputstr( map_session_data& sd, uint32 npcid ); +void clif_cutin( map_session_data& sd, const char* image, int type ); +void clif_viewpoint( map_session_data& sd, uint32 npc_id, int type, uint16 x, uint16 y, int id, uint32 color ); void clif_additem(map_session_data *sd, int n, int amount, unsigned char fail); // self -void clif_dropitem(map_session_data *sd,int n,int amount); //self -void clif_delitem(map_session_data *sd,int n,int amount, short reason); //self +void clif_dropitem( map_session_data& sd, int index, int amount ); +void clif_delitem( map_session_data& sd, int index, int amount, short reason ); void clif_update_hp(map_session_data &sd); -void clif_updatestatus(map_session_data *sd,int type); //self +void clif_updatestatus( map_session_data& sd, _sp type ); void clif_changestatus(map_session_data* sd,int type,int val); //area int clif_damage(struct block_list* src, struct block_list* dst, t_tick tick, int sdelay, int ddelay, int64 sdamage, int div, enum e_damage_type type, int64 sdamage2, bool spdamage); // area void clif_takeitem(struct block_list* src, struct block_list* dst); @@ -863,9 +865,9 @@ void clif_guild_allianceack(map_session_data *sd,int flag); void clif_guild_delalliance(map_session_data *sd,int guild_id,int flag); void clif_guild_oppositionack(map_session_data *sd,int flag); void clif_guild_broken(map_session_data *sd,int flag); -void clif_guild_xy(map_session_data *sd); -void clif_guild_xy_single(int fd, map_session_data *sd); -void clif_guild_xy_remove(map_session_data *sd); +void clif_guild_xy( map_session_data& sd ); +void clif_guild_xy_single( map_session_data& sd, map_session_data& tsd ); +void clif_guild_xy_remove( map_session_data& sd ); void clif_guild_castle_list(map_session_data& sd); void clif_guild_castle_info(map_session_data& sd, std::shared_ptr castle ); void clif_guild_castle_teleport_res(map_session_data& sd, enum e_siege_teleport_result result); @@ -958,10 +960,10 @@ void clif_feel_hate_reset(map_session_data *sd); // [blackhole89] void clif_hominfo(map_session_data *sd, struct homun_data *hd, int flag); -int clif_homskillinfoblock(map_session_data *sd); -void clif_homskillup(map_session_data *sd, uint16 skill_id); //[orn] +void clif_homskillinfoblock( homun_data& hd ); +void clif_homskillup( homun_data& hd, uint16 skill_id ); void clif_hom_food(map_session_data *sd,int foodid,int fail); //[orn] -void clif_send_homdata(map_session_data *sd, int state, int param); //[orn] +void clif_send_homdata( homun_data& hd, e_hom_state2 state ); void clif_configuration( map_session_data* sd, enum e_config_type type, bool enabled ); void clif_viewequip_ack(map_session_data* sd, map_session_data* tsd); diff --git a/src/map/clif_packetdb.hpp b/src/map/clif_packetdb.hpp index 89df91c9eb..991276eb9b 100644 --- a/src/map/clif_packetdb.hpp +++ b/src/map/clif_packetdb.hpp @@ -22,12 +22,9 @@ packet(0x0070,6); packet(0x0071,28); parseable_packet(0x0072,19,clif_parse_WantToConnection,2,6,10,14,18); - packet(0x0073,11); - packet(0x0074,3); packet(0x0075,-1); packet(0x0076,9); packet(0x0077,5); - packet(0x0078,54); packet(0x0079,53); packet(0x007a,58); packet(0x007b,60); @@ -35,15 +32,10 @@ parseable_packet(0x007d,2,clif_parse_LoadEndAck,0); parseable_packet(0x007e,6,clif_parse_TickSend,2); packet(0x007f,6); - packet(0x0080,7); - packet(0x0081,3); packet(0x0082,2); packet(0x0083,2); packet(0x0084,2); parseable_packet(0x0085,5,clif_parse_WalkToXY,2); - packet(0x0086,16); - packet(0x0087,12); - packet(0x0088,10); parseable_packet(0x0089,7,clif_parse_ActionRequest,2,6); packet(0x008a,29); packet(0x008b,2); @@ -52,8 +44,6 @@ packet(0x008e,-1); //packet(0x008f,-1); parseable_packet(0x0090,7,clif_parse_NpcClicked,2,6); - packet(0x0091,22); - packet(0x0092,28); packet(0x0093,2); parseable_packet(0x0094,6,clif_parse_GetCharNameRequest,2); parseable_packet(0x0096,-1,clif_parse_WisMessage,2,4,28); @@ -65,7 +55,6 @@ packet( HEADER_ZC_ITEM_ENTRY, sizeof( struct PACKET_ZC_ITEM_ENTRY ) ); packet(0x009e,17); parseable_packet(0x009f,6,clif_parse_TakeItem,2); - packet(0x00a1,6); parseable_packet(0x00a2,6,clif_parse_DropItem,2,4); packet( inventorylistnormalType, -1 ); packet( inventorylistequipType, -1 ); @@ -78,29 +67,20 @@ packet(0x00ac,7); //packet(0x00ad,-1); packet(0x00ae,-1); - packet(0x00af,6); - packet(0x00b0,8); - packet(0x00b1,8); parseable_packet(0x00b2,3,clif_parse_Restart,2); - packet(0x00b3,3); - packet(0x00b6,6); - packet(0x00b7,-1); parseable_packet(0x00b8,7,clif_parse_NpcSelectMenu,2,6); parseable_packet(0x00b9,6,clif_parse_NpcNextClicked,2); packet(0x00ba,2); parseable_packet(0x00bb,5,clif_parse_StatusUp,2,4); packet(0x00bc,6); packet(0x00bd,44); - packet(0x00be,5); parseable_packet(0x00bf,3,clif_parse_Emotion,2); packet(0x00c0,7); parseable_packet(0x00c1,2,clif_parse_HowManyConnections,0); packet(0x00c2,6); packet(0x00c3,8); - packet(0x00c4,6); parseable_packet(0x00c5,7,clif_parse_NpcBuySellSelected,2,6); packet(0x00c6,-1); - packet(0x00c7,-1); parseable_packet(0x00c8,-1,clif_parse_NpcBuyListSend,2,4); parseable_packet(HEADER_CZ_PC_SELL_ITEMLIST,-1,clif_parse_NpcSellListSend,2,4); packet(0x00ca,3); @@ -183,7 +163,6 @@ packet(0x011e,3); packet(0x011f,16); packet(0x0120,6); - packet(0x0121,14); packet( cartlistequipType, -1 ); packet( cartlistnormalType, -1 ); packet(0x0125,8); @@ -192,7 +171,6 @@ parseable_packet(0x0128,8,clif_parse_MoveFromKafraToCart,2,4); parseable_packet(0x0129,8,clif_parse_MoveToKafraFromCart,2,4); parseable_packet(0x012a,2,clif_parse_RemoveOption,0); - packet(0x012b,2); packet(0x012c,3); packet(0x012d,4); parseable_packet(0x012e,2,clif_parse_CloseVending,0); @@ -204,17 +182,13 @@ packet(0x0137,6); packet(0x0138,3); packet(0x0139,16); - packet(0x013a,4); packet(0x013b,4); packet(0x013c,4); packet(0x013d,6); packet(0x013e,24); parseable_packet(0x013f,26,clif_parse_GM_Item_Monster,2); parseable_packet(0x0140,22,clif_parse_MapMove,2,18,20); - packet(0x0141,14); - packet(0x0142,6); parseable_packet(0x0143,10,clif_parse_NpcAmountInput,2,6); - packet(0x0144,23); packet(0x0145,19); parseable_packet(0x0146,6,clif_parse_NpcCloseClicked,2); packet(0x0147,39); @@ -325,7 +299,6 @@ packet(0x01b0,11); packet(0x01b1,7); parseable_packet(0x01b2,-1,clif_parse_OpenVending,2,4,84,85); - packet(0x01b3,67); packet(0x01b4,12); packet(0x01b5,18); packet(0x01b6,114); @@ -353,7 +326,6 @@ packet(0x01d0,8); packet(0x01d1,14); packet(0x01d2,10); - packet(0x01d4,6); parseable_packet(0x01d5,-1,clif_parse_NpcStringInput,2,4,8); packet(0x01d6,4); packet(0x01d7,11); @@ -375,7 +347,6 @@ parseable_packet(0x01e7,2,clif_parse_NoviceDoriDori,0); parseable_packet(0x01e8,28,clif_parse_CreateParty2,2,26,27); packet(0x01ea,6); - packet(0x01eb,10); packet(0x01ec,26); parseable_packet(0x01ed,2,clif_parse_NoviceExplosionSpirits,0); packet(0x01f0,-1); @@ -693,13 +664,11 @@ // 2005-05-23aSakexe #if PACKETVER >= 20050523 packet(0x022e,69); - packet(0x0230,12); #endif // 2005-05-30aSakexe #if PACKETVER >= 20050530 packet(0x022e,71); - packet(0x0235,-1); packet(0x0236,10); parseable_packet(0x0237,2,clif_parse_RankingPk,0); packet(0x0238,282); @@ -708,7 +677,6 @@ // 2005-05-31aSakexe #if PACKETVER >= 20050531 packet(0x0216,2); - packet(0x0239,11); #endif // 2005-06-08aSakexe @@ -1096,7 +1064,6 @@ // 2007-11-06aSakexe #if PACKETVER >= 20071106 - packet(0x0078,55); packet(0x007c,42); packet(0x022c,65); packet(0x029b,80); @@ -1125,7 +1092,6 @@ // 2008-01-02aSakexe #if PACKETVER >= 20080102 parseable_packet(0x01df,6,clif_parse_GMReqAccountName,2); - packet(0x02eb,13); packet(0x02ec,67); packet(0x02ed,59); packet(0x02ee,60); @@ -1327,7 +1293,6 @@ // 2008-11-26aSakexe #if PACKETVER >= 20081126 packet(0x01a2,37); - packet(0x0440,10); packet(0x0441,4); #endif @@ -1408,7 +1373,6 @@ // 2008-12-17aRagexeRE #if PACKETVER >= 20081217 packet(0x01a2,37); - //packet(0x0440,10); //packet(0x0441,4); //packet(0x0443,8); #endif @@ -1559,11 +1523,6 @@ packet(0x07f9,-1); #endif -// 2009-11-17aRagexeRE -#if PACKETVER >= 20091117 - packet(0x07fa,8); -#endif - // 2009-11-24aRagexeRE #if PACKETVER >= 20091124 packet(0x07fb,25); @@ -1801,7 +1760,6 @@ parseable_packet(0x08ab,-1,clif_parse_SearchStoreInfo,2,4,5,9,13,14,15); parseable_packet(0x088b,2,clif_parse_SearchStoreInfoNextPage,0); parseable_packet(0x08a2,sizeof(struct PACKET_CZ_SSILIST_ITEM_CLICK),clif_parse_SearchStoreInfoListItemClick,2,6,10); - packet(0x08cf,10); //Amulet spirits #endif // 2012-03-07fRagexeRE @@ -1915,7 +1873,7 @@ 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 - parseable_packet(0x0848,-1,clif_parse_cashshop_buy,2,6,4,10); + parseable_packet(HEADER_CZ_SE_PC_BUY_CASHITEM_LIST,-1,clif_parse_cashshop_buy,0); parseable_packet(0x084a,2,clif_parse_cashshop_close,0); parseable_packet(0x08c9,2,clif_parse_cashshop_list_request,0); #endif @@ -1981,7 +1939,6 @@ parseable_packet(0x044A,6,clif_parse_client_version,2); parseable_packet(0x0844,2,clif_parse_cashshop_open_request,0); packet(0x0849,16); //clif_cashshop_result - parseable_packet(0x0848,-1,clif_parse_cashshop_buy,2,6,4,10); parseable_packet(0x084a,2,clif_parse_cashshop_close,0); packet(0x084b,19); //fallitem4 parseable_packet(0x085a,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10); @@ -1999,7 +1956,6 @@ parseable_packet(0x089b,10,clif_parse_UseSkillToId,2,4,6); parseable_packet(0x08ac,8,clif_parse_MoveToKafra,2,4); parseable_packet(0x08c9,2,clif_parse_cashshop_list_request,0); - packet(0x08cf,10); //Amulet spirits packet(0x08d2,10); parseable_packet(0x0922,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); //parseable_packet(0x092e,2,clif_parse_SearchStoreInfoNextPage,0); @@ -2031,7 +1987,6 @@ // 2013-07-10Ragexe #if PACKETVER >= 20130710 - parseable_packet(0x0848,-1,clif_parse_cashshop_buy,2,6,4,10); packet(0x097D,288); //ZC_ACK_RANKING packet(0x097E,12); //ZC_UPDATE_RANKING_POINT #endif @@ -2140,7 +2095,6 @@ packet(0x006d,149); packet(0x08e3,149); // New Packet - packet(0x0A18,14); // ZC_ACCEPT_ENTER3 packet(0x0A27,8); packet(0x0A28,3); // ZC_ACK_OPENSTORE2 packet(0x09FD,-1); // ZC_NOTIFY_MOVEENTRY11 @@ -2278,11 +2232,6 @@ packet(0x0A9D,4); #endif -// 2017-03-15cRagexeRE -#if PACKETVER >= 20170315 - packet(0xac7,156); -#endif - // 2017-04-19bRagexeRE #if PACKETVER >= 20170419 parseable_packet(0x0AC0,26,clif_parse_Mail_refreshinbox,2,10); @@ -2304,7 +2253,6 @@ // 2017-08-30bRagexeRE #if PACKETVER >= 20170830 - packet(0x0ACB,12); packet(0x0ACC,18); #endif @@ -2379,7 +2327,7 @@ #endif #if PACKETVER >= 20190724 - parseable_packet(HEADER_CZ_GUILD_EMBLEM_CHANGE2, sizeof( PACKET_CZ_GUILD_EMBLEM_CHANGE2 ), clif_parse_GuildChangeEmblem2, 0 ); + parseable_packet(HEADER_CZ_REQ_ADD_NEW_EMBLEM, sizeof( PACKET_CZ_REQ_ADD_NEW_EMBLEM ), clif_parse_GuildChangeEmblem2, 0 ); packet(HEADER_ZC_CHANGE_GUILD, sizeof(PACKET_ZC_CHANGE_GUILD)); #endif @@ -2412,7 +2360,7 @@ #endif #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - parseable_packet( HEADER_CZ_UNCONFIRMED_TSTATUS_UP, sizeof( PACKET_CZ_UNCONFIRMED_TSTATUS_UP ), clif_parse_traitstatus_up, 0 ); + parseable_packet( HEADER_CZ_ADVANCED_STATUS_CHANGE, sizeof( PACKET_CZ_ADVANCED_STATUS_CHANGE ), clif_parse_traitstatus_up, 0 ); parseable_packet( HEADER_CZ_GRADE_ENCHANT_SELECT_EQUIPMENT, sizeof( struct PACKET_CZ_GRADE_ENCHANT_SELECT_EQUIPMENT ), clif_parse_enchantgrade_add, 0 ); parseable_packet( HEADER_CZ_GRADE_ENCHANT_REQUEST, sizeof( struct PACKET_CZ_GRADE_ENCHANT_REQUEST ), clif_parse_enchantgrade_start, 0 ); parseable_packet( HEADER_CZ_GRADE_ENCHANT_CLOSE_UI, sizeof( struct PACKET_CZ_GRADE_ENCHANT_CLOSE_UI ), clif_parse_enchantgrade_close, 0 ); @@ -2429,7 +2377,7 @@ #if PACKETVER_RE_NUM >= 20211103 || PACKETVER_ZERO_NUM >= 20210818 || PACKETVER_MAIN_NUM >= 20220330 parseable_packet( HEADER_CZ_CHECKNAME2, sizeof( struct PACKET_CZ_CHECKNAME2 ), clif_parse_Mail_Receiver_Check, 0 ); - parseable_packet( HEADER_CZ_UNCONFIRMED_RODEX_RETURN, sizeof( struct PACKET_CZ_UNCONFIRMED_RODEX_RETURN ), clif_parse_Mail_return, 0 ); + parseable_packet( HEADER_CZ_RODEX_RETURN, sizeof( struct PACKET_CZ_RODEX_RETURN ), clif_parse_Mail_return, 0 ); parseable_packet( HEADER_CZ_REQ_TAKEOFF_EQUIP_ALL, sizeof( struct PACKET_CZ_REQ_TAKEOFF_EQUIP_ALL ), clif_parse_unequipall, 0 ); parseable_packet( 0xb93, 12, clif_parse_dull, 0 ); #endif diff --git a/src/map/guild.cpp b/src/map/guild.cpp index d963dad2da..eafb8b4f4e 100644 --- a/src/map/guild.cpp +++ b/src/map/guild.cpp @@ -664,7 +664,7 @@ int guild_send_xy_timer_sub(const struct mmo_guild& g) { for (int i = 0; i < g.max_member; i++) { map_session_data* sd = g.member[i].sd; if( sd != nullptr && sd->fd && (sd->guild_x != sd->bl.x || sd->guild_y != sd->bl.y) && !sd->bg_id ) { - clif_guild_xy(sd); + clif_guild_xy( *sd ); sd->guild_x = sd->bl.x; sd->guild_y = sd->bl.y; } @@ -683,7 +683,7 @@ static TIMER_FUNC(guild_send_xy_timer){ int guild_send_dot_remove(map_session_data *sd) { if (sd->status.guild_id) - clif_guild_xy_remove(sd); + clif_guild_xy_remove( *sd ); return 0; } //------------------------------------------------------------------------ @@ -1360,8 +1360,8 @@ int guild_recv_memberinfoshort(int guild_id,uint32 account_id,uint32 char_id,int g->guild.member[i].sd->bl.m != g->guild.member[idx].sd->bl.m) continue; - clif_guild_xy_single(g->guild.member[idx].sd->fd, g->guild.member[i].sd); - clif_guild_xy_single(g->guild.member[i].sd->fd, g->guild.member[idx].sd); + clif_guild_xy_single( *g->guild.member[idx].sd, *g->guild.member[i].sd ); + clif_guild_xy_single( *g->guild.member[i].sd, *g->guild.member[idx].sd ); } return 0; diff --git a/src/map/homunculus.cpp b/src/map/homunculus.cpp index a64fdb389c..fe11d83eae 100644 --- a/src/map/homunculus.cpp +++ b/src/map/homunculus.cpp @@ -394,8 +394,7 @@ void hom_calc_skilltree(homun_data *hd) { hom_calc_skilltree_sub(*hd, homun_current->skill_tree); - if (hd->master) - clif_homskillinfoblock(hd->master); + clif_homskillinfoblock( *hd ); } /** @@ -484,11 +483,14 @@ void hom_skillup(struct homun_data *hd, uint16 skill_id) hd->homunculus.hskill[idx].lv++; hd->homunculus.skillpts-- ; status_calc_homunculus(hd, SCO_NONE); + + clif_homskillup( *hd, skill_id ); + if (hd->master) { - clif_homskillup(hd->master, skill_id); clif_hominfo(hd->master,hd,0); - clif_homskillinfoblock(hd->master); } + + clif_homskillinfoblock( *hd ); } } @@ -570,7 +572,7 @@ int hom_levelup(struct homun_data *hd) // Needed to update skill list for mutated homunculus so unlocked skills will appear when the needed level is reached. status_calc_homunculus(hd,SCO_NONE); clif_hominfo(hd->master,hd,0); - clif_homskillinfoblock(hd->master); + clif_homskillinfoblock( *hd ); if ( hd->master && battle_config.homunculus_show_growth ) { char output[256] ; @@ -905,8 +907,8 @@ int hom_food(map_session_data *sd, struct homun_data *hd) log_feeding(sd, LOG_FEED_HOMUNCULUS, foodID); clif_emotion(&hd->bl,emotion); - clif_send_homdata(sd,SP_HUNGRY,hd->homunculus.hunger); - clif_send_homdata(sd,SP_INTIMATE,hd->homunculus.intimacy / 100); + clif_send_homdata( *hd, SP_HUNGRY ); + clif_send_homdata( *hd, SP_INTIMATE ); clif_hom_food(sd,foodID,1); // Too much food :/ @@ -955,10 +957,10 @@ static TIMER_FUNC(hom_hungry){ // Delete the homunculus if intimacy <= 100 if (!hom_decrease_intimacy(hd, 100)) return hom_delete(hd, ET_HUK); - clif_send_homdata(sd,SP_INTIMATE,hd->homunculus.intimacy / 100); + clif_send_homdata( *hd, SP_INTIMATE ); } - clif_send_homdata(sd,SP_HUNGRY,hd->homunculus.hunger); + clif_send_homdata( *hd, SP_HUNGRY ); int hunger_delay = (battle_config.homunculus_starving_rate > 0 && hd->homunculus.hunger <= battle_config.homunculus_starving_rate) ? battle_config.homunculus_starving_delay : hd->homunculusDB->hungryDelay; // Every 20 seconds if hunger <= 10 @@ -1132,10 +1134,10 @@ bool hom_call(map_session_data *sd) if(map_addblock(&hd->bl)) return false; clif_spawn(&hd->bl); - clif_send_homdata(sd,SP_ACK,0); + clif_send_homdata( *hd, SP_ACK ); clif_hominfo(sd,hd,1); clif_hominfo(sd,hd,0); // send this x2. dunno why, but kRO does that [blackhole89] - clif_homskillinfoblock(sd); + clif_homskillinfoblock( *hd ); if (battle_config.hom_setting&HOMSET_COPY_SPEED) status_calc_bl(&hd->bl, { SCB_SPEED }); hom_save(hd); @@ -1196,10 +1198,10 @@ int hom_recv_data(uint32 account_id, struct s_homunculus *sh, int flag) if(map_addblock(&hd->bl)) return 0; clif_spawn(&hd->bl); - clif_send_homdata(sd,SP_ACK,0); + clif_send_homdata( *hd, SP_ACK ); clif_hominfo(sd,hd,1); clif_hominfo(sd,hd,0); // send this x2. dunno why, but kRO does that [blackhole89] - clif_homskillinfoblock(sd); + clif_homskillinfoblock( *hd ); hom_init_timers(hd); #ifdef RENEWAL @@ -1314,12 +1316,14 @@ void hom_revive(struct homun_data *hd, unsigned int hp, unsigned int sp) hd->homunculus.hp = hd->battle_status.hp; if (!sd) return; - clif_send_homdata(sd,SP_ACK,0); + clif_send_homdata( *hd, SP_ACK ); clif_hominfo(sd,hd,1); clif_hominfo(sd,hd,0); - clif_homskillinfoblock(sd); - if (hd->homunculus.class_ == 6052) //eleanor + clif_homskillinfoblock( *hd ); + + if( hd->homunculus.class_ == MER_ELEANOR ){ sc_start(&hd->bl,&hd->bl, SC_STYLE_CHANGE, 100, MH_MD_FIGHTING, INFINITE_TICK); + } } /** @@ -1394,7 +1398,7 @@ int hom_shuffle(struct homun_data *hd) hd->homunculus.exp = exp; memcpy(&hd->homunculus.hskill, &b_skill, sizeof(b_skill)); hd->homunculus.skillpts = skillpts; - clif_homskillinfoblock(sd); + clif_homskillinfoblock( *hd ); status_calc_homunculus(hd, SCO_NONE); status_percent_heal(&hd->bl, 100, 100); clif_specialeffect(&hd->bl,EF_HO_UP,AREA); diff --git a/src/map/mail.cpp b/src/map/mail.cpp index ade79fbf0a..1d30ba9388 100644 --- a/src/map/mail.cpp +++ b/src/map/mail.cpp @@ -143,7 +143,7 @@ bool mail_removezeny( map_session_data *sd, bool flag ){ } }else{ // Update is called by pc_payzeny, so only call it in the else condition - clif_updatestatus(sd, SP_ZENY); + clif_updatestatus(*sd, SP_ZENY); } } @@ -176,7 +176,7 @@ enum mail_attach_result mail_setitem(map_session_data *sd, short idx, uint32 amo #endif sd->mail.zeny = amount; - // clif_updatestatus(sd, SP_ZENY); + // clif_updatestatus(*sd, SP_ZENY); return MAIL_ATTACH_SUCCESS; } else { // Item Transfer int i; diff --git a/src/map/map.cpp b/src/map/map.cpp index 7183b7fb2c..1779555674 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -1622,7 +1622,7 @@ TIMER_FUNC(map_clearflooritem_timer){ if (pet_db_search(fitem->item.nameid, PET_EGG)) intif_delete_petdata(MakeDWord(fitem->item.card[1], fitem->item.card[2])); - clif_clearflooritem(fitem, 0); + clif_clearflooritem( *fitem ); map_deliddb(&fitem->bl); map_delblock(&fitem->bl); map_freeblock(&fitem->bl); @@ -1638,7 +1638,7 @@ void map_clearflooritem(struct block_list *bl) { if( fitem->cleartimer != INVALID_TIMER ) delete_timer(fitem->cleartimer,map_clearflooritem_timer); - clif_clearflooritem(fitem, 0); + clif_clearflooritem( *fitem ); map_deliddb(&fitem->bl); map_delblock(&fitem->bl); map_freeblock(&fitem->bl); diff --git a/src/map/mob.cpp b/src/map/mob.cpp index 510fa28331..971c05bab3 100644 --- a/src/map/mob.cpp +++ b/src/map/mob.cpp @@ -237,7 +237,7 @@ void mvptomb_destroy(struct mob_data *md) { int i; struct map_data *mapdata = map_getmapdata(nd->bl.m); - clif_clearunit_area(&nd->bl,CLR_OUTSIGHT); + clif_clearunit_area( nd->bl, CLR_OUTSIGHT ); map_delblock(&nd->bl); ARR_FIND( 0, mapdata->npc_num, i, mapdata->npc[i] == nd ); @@ -3177,7 +3177,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) if( pcdb_checkid(md->vd->class_) ) {//Player mobs are not removed automatically by the client. /* first we set them dead, then we delay the outsight effect */ - clif_clearunit_area(&md->bl,CLR_DEAD); + clif_clearunit_area( md->bl, CLR_DEAD ); clif_clearunit_delayed(&md->bl, CLR_OUTSIGHT,tick+3000); } else /** @@ -6702,7 +6702,7 @@ static int mob_reload_sub( struct mob_data *md, va_list args ){ // If they are spawned right now if( md->bl.prev != nullptr ){ // Respawn all mobs on client side so that they are displayed correctly(if their view id changed) - clif_clearunit_area(&md->bl, CLR_OUTSIGHT); + clif_clearunit_area( md->bl, CLR_OUTSIGHT ); clif_spawn(&md->bl); } } diff --git a/src/map/npc.cpp b/src/map/npc.cpp index 06c05e96f0..7e2d824864 100644 --- a/src/map/npc.cpp +++ b/src/map/npc.cpp @@ -1026,7 +1026,7 @@ bool npc_enable_target(npc_data& nd, uint32 char_id, e_npcv_status flag) clif_changeoption_target(&nd.bl, &sd->bl); else { if (nd.sc.option&(OPTION_HIDE|OPTION_CLOAK)) - clif_clearunit_single(nd.bl.id, CLR_OUTSIGHT, sd->fd); + clif_clearunit_single( nd.bl.id, CLR_OUTSIGHT, *sd ); else clif_spawn(&nd.bl); } @@ -1053,11 +1053,11 @@ bool npc_enable_target(npc_data& nd, uint32 char_id, e_npcv_status flag) if (nd.class_ != JT_WARPNPC && nd.class_ != JT_GUILD_FLAG) { //Client won't display option changes for these classes [Toms] clif_changeoption(&nd.bl); if (nd.is_invisible) - clif_clearunit_area(&nd.bl,CLR_OUTSIGHT); // Hack to trick maya purple card [Xazax] + clif_clearunit_area( nd.bl, CLR_OUTSIGHT ); // Hack to trick maya purple card [Xazax] } else { if (nd.sc.option&(OPTION_HIDE|OPTION_CLOAK)) - clif_clearunit_area(&nd.bl,CLR_OUTSIGHT); + clif_clearunit_area( nd.bl, CLR_OUTSIGHT ); else clif_spawn(&nd.bl); } @@ -1146,7 +1146,7 @@ int npc_event_dequeue(map_session_data* sd,bool free_script_stack) if(sd->npc_id) { //Current script is aborted. if(sd->state.using_fake_npc){ - clif_clearunit_single(sd->npc_id, CLR_OUTSIGHT, sd->fd); + clif_clearunit_single( sd->npc_id, CLR_OUTSIGHT, *sd ); sd->state.using_fake_npc = 0; } if (free_script_stack&&sd->st) { @@ -2168,7 +2168,7 @@ void run_tomb(map_session_data* sd, struct npc_data* nd) snprintf( buffer, sizeof( buffer ), msg_txt( sd, 661 ), nd->u.tomb.killer_name[0] ? nd->u.tomb.killer_name : "Unknown" ); // [^EE0000%s^000000] clif_scriptmes( *sd, nd->bl.id, buffer ); - clif_scriptclose(sd, nd->bl.id); + clif_scriptclose( *sd, nd->bl.id ); } /*========================================== @@ -2206,7 +2206,7 @@ int npc_click(map_session_data* sd, struct npc_data* nd) switch(nd->subtype) { case NPCTYPE_SHOP: - clif_npcbuysell(sd,nd->bl.id); + clif_npcbuysell( *sd, *nd ); break; case NPCTYPE_CASHSHOP: case NPCTYPE_ITEMSHOP: @@ -2306,7 +2306,7 @@ bool npc_scriptcont(map_session_data* sd, int id, bool closing){ case CLOSE: sd->st->state = END; if (sd->st->clear_cutin) - clif_cutin(sd,"",255); + clif_cutin( *sd, "", 255 ); break; // close2 case STOP: @@ -2377,8 +2377,9 @@ int npc_buysellsel(map_session_data* sd, int id, int type) if (type == 0) { clif_buylist(sd,nd); } else { - clif_selllist(sd); + clif_selllist( *sd ); } + return 0; } @@ -3381,7 +3382,7 @@ int npc_remove_map(struct npc_data* nd) if (nd->subtype == NPCTYPE_SCRIPT) skill_clear_unitgroup(&nd->bl); - clif_clearunit_area(&nd->bl,CLR_RESPAWN); + clif_clearunit_area( nd->bl, CLR_RESPAWN ); npc_unsetcells(nd); map_delblock(&nd->bl); //Remove npc from map[].npc list. [Skotlex] diff --git a/src/map/packets.hpp b/src/map/packets.hpp index 0869c473f9..0324606dc8 100644 --- a/src/map/packets.hpp +++ b/src/map/packets.hpp @@ -36,6 +36,7 @@ struct PACKET_ZC_PC_PURCHASE_RESULT{ int16 packetType; uint8 result; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_PC_PURCHASE_RESULT, 0xca) struct PACKET_CZ_REQ_MAKINGARROW{ int16 packetType; @@ -45,6 +46,7 @@ struct PACKET_CZ_REQ_MAKINGARROW{ uint16 itemId; #endif } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_REQ_MAKINGARROW, 0x1ae) struct PACKET_CZ_SE_PC_BUY_CASHITEM_LIST_sub{ uint32 itemId; @@ -59,6 +61,7 @@ struct PACKET_CZ_SE_PC_BUY_CASHITEM_LIST{ uint32 kafraPoints; struct PACKET_CZ_SE_PC_BUY_CASHITEM_LIST_sub items[]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_SE_PC_BUY_CASHITEM_LIST, 0x848) struct PACKET_CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO{ int16 packetType; @@ -70,6 +73,7 @@ struct PACKET_CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO{ uint16 itemId; #endif } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ac) struct PACKET_ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO{ int16 packetType; @@ -81,6 +85,7 @@ struct PACKET_ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO{ #endif uint32 price; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO, 0x9ad) struct PACKET_CZ_REQ_APPLY_BARGAIN_SALE_ITEM{ int16 packetType; @@ -98,6 +103,7 @@ struct PACKET_CZ_REQ_APPLY_BARGAIN_SALE_ITEM{ uint8 hours; #endif } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_REQ_APPLY_BARGAIN_SALE_ITEM, 0x9ae) struct PACKET_CZ_REQ_REMOVE_BARGAIN_SALE_ITEM{ int16 packetType; @@ -108,6 +114,7 @@ struct PACKET_CZ_REQ_REMOVE_BARGAIN_SALE_ITEM{ uint16 itemId; #endif } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_REQ_REMOVE_BARGAIN_SALE_ITEM, 0x9b0) struct PACKET_ZC_NOTIFY_BARGAIN_SALE_SELLING{ int16 packetType; @@ -118,6 +125,7 @@ struct PACKET_ZC_NOTIFY_BARGAIN_SALE_SELLING{ #endif uint32 remainingTime; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_NOTIFY_BARGAIN_SALE_SELLING, 0x9b2) struct PACKET_ZC_NOTIFY_BARGAIN_SALE_CLOSE{ int16 packetType; @@ -127,6 +135,7 @@ struct PACKET_ZC_NOTIFY_BARGAIN_SALE_CLOSE{ uint16 itemId; #endif } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_NOTIFY_BARGAIN_SALE_CLOSE, 0x9b3) struct PACKET_ZC_ACK_COUNT_BARGAIN_SALE_ITEM{ int16 packetType; @@ -137,6 +146,7 @@ struct PACKET_ZC_ACK_COUNT_BARGAIN_SALE_ITEM{ #endif uint32 amount; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACK_COUNT_BARGAIN_SALE_ITEM, 0x9c4) struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub{ uint32 id; @@ -164,24 +174,28 @@ struct PACKET_ZC_ACK_GUILDSTORAGE_LOG{ uint16 amount; struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub items[]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACK_GUILDSTORAGE_LOG, 0x9da) -struct PACKET_CZ_UNCONFIRMED_TSTATUS_UP{ +struct PACKET_CZ_ADVANCED_STATUS_CHANGE{ int16 packetType; int16 type; int16 amount; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_ADVANCED_STATUS_CHANGE, 0x0b24) -struct PACKET_CZ_GUILD_EMBLEM_CHANGE2 { +struct PACKET_CZ_REQ_ADD_NEW_EMBLEM { int16 packetType; uint32 guild_id; uint32 version; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_REQ_ADD_NEW_EMBLEM, 0x0b46) struct PACKET_ZC_BROADCAST{ int16 packetType; int16 PacketLength; char message[]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_BROADCAST, 0x9a) struct PACKET_ZC_BROADCAST2{ int16 packetType; @@ -193,25 +207,30 @@ struct PACKET_ZC_BROADCAST2{ int16 fontY; char message[]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_BROADCAST2, 0x1c3) struct PACKET_ZC_SOULENERGY{ int16 PacketType; uint32 AID; uint16 num; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_SOULENERGY, 0xb73) struct PACKET_ZC_ENTRY_QUEUE_INIT { int16 packetType; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ENTRY_QUEUE_INIT, 0x90e) -struct PACKET_CZ_UNCONFIRMED_RODEX_RETURN{ +struct PACKET_CZ_RODEX_RETURN{ int16 packetType; uint32 msgId; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_RODEX_RETURN, 0xb98) struct PACKET_CZ_REQ_STYLE_CLOSE{ int16 packetType; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CLOSE, 0xa48) struct PACKET_ZC_SUMMON_HP_INIT { int16 PacketType; @@ -219,6 +238,7 @@ struct PACKET_ZC_SUMMON_HP_INIT { uint32 CurrentHP; uint32 MaxHP; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_SUMMON_HP_INIT, 0xb6b) struct PACKET_ZC_SUMMON_HP_UPDATE { int16 PacketType; @@ -226,6 +246,7 @@ struct PACKET_ZC_SUMMON_HP_UPDATE { uint16 VarId; uint32 Value; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_SUMMON_HP_UPDATE, 0xb6c) struct PACKET_ZC_REPUTE_INFO_sub{ uint64 type; @@ -238,12 +259,14 @@ struct PACKET_ZC_REPUTE_INFO{ uint8 success; struct PACKET_ZC_REPUTE_INFO_sub list[]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_REPUTE_INFO, 0x0b8d) struct PACKET_ZC_UI_OPEN_V3{ int16 packetType; uint8 type; uint64 data; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_UI_OPEN_V3, 0x0b9a) struct PACKET_ZC_TARGET_SPIRITS { int16 packetType; @@ -251,6 +274,7 @@ struct PACKET_ZC_TARGET_SPIRITS { uint32 unknown_val; uint16 amount; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_TARGET_SPIRITS, 0xb68) struct PACKET_ZC_FRIENDS_LIST_sub{ uint32 AID; @@ -265,6 +289,7 @@ struct PACKET_ZC_FRIENDS_LIST{ int16 PacketLength; struct PACKET_ZC_FRIENDS_LIST_sub friends[]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_FRIENDS_LIST, 0x201) struct PACKET_CZ_PC_SELL_ITEMLIST_sub { uint16 index; @@ -276,6 +301,7 @@ struct PACKET_CZ_PC_SELL_ITEMLIST { int16 packetLength; PACKET_CZ_PC_SELL_ITEMLIST_sub sellList[]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_PC_SELL_ITEMLIST, 0x00c9) struct PACKET_CZ_REQ_CHANGE_MEMBERPOS_sub{ uint32 AID; @@ -288,22 +314,26 @@ struct PACKET_CZ_REQ_CHANGE_MEMBERPOS{ int16 packetLength; struct PACKET_CZ_REQ_CHANGE_MEMBERPOS_sub list[]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_REQ_CHANGE_MEMBERPOS, 0x155) struct PACKET_ZC_CLEAR_DIALOG{ int16 packetType; uint32 GID; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_CLEAR_DIALOG, 0x8d6) struct PACKET_ZC_NOTIFY_BIND_ON_EQUIP{ int16 packetType; int16 index; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_NOTIFY_BIND_ON_EQUIP, 0x2d3) struct PACKET_ZC_BANKING_CHECK{ int16 packetType; int64 money; int16 reason; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_BANKING_CHECK, 0x9a6) struct PACKET_ZC_ACK_BANKING_WITHDRAW{ int16 packetType; @@ -311,6 +341,7 @@ struct PACKET_ZC_ACK_BANKING_WITHDRAW{ int64 money; int32 zeny; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACK_BANKING_WITHDRAW, 0x9aa) struct PACKET_ZC_ACK_BANKING_DEPOSIT{ int16 packetType; @@ -318,33 +349,39 @@ struct PACKET_ZC_ACK_BANKING_DEPOSIT{ int64 money; int32 zeny; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACK_BANKING_DEPOSIT, 0x9a8) struct PACKET_ZC_ACK_CLOSE_BANKING{ int16 packetType; int16 unknown; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACK_CLOSE_BANKING, 0x9b9) struct PACKET_ZC_ACK_OPEN_BANKING{ int16 packetType; int16 unknown; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACK_OPEN_BANKING, 0x9b7) struct PACKET_ZC_ACK_ADD_EXCHANGE_ITEM { int16 packetType; uint16 index; uint8 result; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACK_ADD_EXCHANGE_ITEM, 0xea) struct PACKET_ZC_COUPLENAME { int16 packetType; char name[NAME_LENGTH]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_COUPLENAME, 0x1e6); struct PACKET_CZ_PARTY_REQ_MASTER_TO_JOIN{ int16 packetType; uint32 CID; uint32 AID; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_PARTY_REQ_MASTER_TO_JOIN, 0x0ae6) struct PACKET_ZC_PARTY_REQ_MASTER_TO_JOIN{ int16 packetType; @@ -354,6 +391,7 @@ struct PACKET_ZC_PARTY_REQ_MASTER_TO_JOIN{ uint16 x; uint16 y; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_PARTY_REQ_MASTER_TO_JOIN, 0x0ae7) struct PACKET_CZ_PARTY_REQ_ACK_MASTER_TO_JOIN{ int16 packetType; @@ -361,6 +399,7 @@ struct PACKET_CZ_PARTY_REQ_ACK_MASTER_TO_JOIN{ uint32 AID; uint8 accept; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_PARTY_REQ_ACK_MASTER_TO_JOIN, 0x0af8) struct PACKET_ZC_PARTY_JOIN_REQ_ACK_FROM_MASTER{ int16 packetType; @@ -369,11 +408,13 @@ struct PACKET_ZC_PARTY_JOIN_REQ_ACK_FROM_MASTER{ uint32 AID; uint32 refused; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_PARTY_JOIN_REQ_ACK_FROM_MASTER, 0x0afa) struct PACKET_CZ_REQ_SE_CASH_TAB_CODE{ int16 packetType; int16 tab; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_REQ_SE_CASH_TAB_CODE, 0x846) struct PACKET_ZC_ACK_SE_CASH_ITEM_LIST2_sub{ #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114 @@ -391,17 +432,20 @@ struct PACKET_ZC_ACK_SE_CASH_ITEM_LIST2{ int16 count; struct PACKET_ZC_ACK_SE_CASH_ITEM_LIST2_sub items[]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACK_SE_CASH_ITEM_LIST2, 0x8c0) struct PACKET_CZ_REQ_MERGE_ITEM{ int16 packetType; int16 packetLength; uint16 indices[]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_REQ_MERGE_ITEM, 0x96e) struct PACKET_CZ_RESET_SKILL{ int16 packetType; uint8 unknown; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_RESET_SKILL, 0x0bb1) struct PACKET_ZC_BOSS_INFO{ int16 packetType; @@ -414,18 +458,21 @@ struct PACKET_ZC_BOSS_INFO{ uint16 maxMinutes; char name[51]; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_BOSS_INFO, 0x293) struct PACKET_CZ_INVENTORY_TAB{ int16 packetType; int16 index; bool favorite; } __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_INVENTORY_TAB, 0x907) struct PACKET_ZC_INVENTORY_TAB{ int16 packetType; int16 index; bool favorite; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_INVENTORY_TAB, 0x908) struct PACKET_ZC_SKILL_SELECT_REQUEST_sub{ int16 skill_id; @@ -465,88 +512,367 @@ struct PACKET_CZ_REQ_BANKING_WITHDRAW{ int32 zeny; } __attribute__((packed)); +#if PACKETVER < 20080102 +struct PACKET_ZC_ACCEPT_ENTER { + int16 packetType; + uint32 startTime; + uint8 posDir[3]; + uint8 xSize; + uint8 ySize; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACCEPT_ENTER, 0x73) +#elif PACKETVER < 20141022 || PACKETVER >= 20160330 +struct PACKET_ZC_ACCEPT_ENTER { + int16 packetType; + uint32 startTime; + uint8 posDir[3]; + uint8 xSize; + uint8 ySize; + uint16 font; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACCEPT_ENTER, 0x2eb) +#else +struct PACKET_ZC_ACCEPT_ENTER { + int16 packetType; + uint32 startTime; + uint8 posDir[3]; + uint8 xSize; + uint8 ySize; + uint16 font; + uint8 sex; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACCEPT_ENTER, 0xa18) +#endif + +struct PACKET_ZC_REFUSE_ENTER { + int16 packetType; + uint8 errorCode; +} __attribute__((packed)); +static_assert(sizeof(PACKET_ZC_REFUSE_ENTER) == 3); +DEFINE_PACKET_HEADER(ZC_REFUSE_ENTER, 0x74) + +struct PACKET_SC_NOTIFY_BAN { + int16 packetType; + uint8 errorCode; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(SC_NOTIFY_BAN, 0x81) + +struct PACKET_ZC_RESTART_ACK { + int16 packetType; + uint8 type; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_RESTART_ACK, 0xb3) + +struct PACKET_ZC_NOTIFY_VANISH { + int16 packetType; + uint32 gid; + uint8 type; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_NOTIFY_VANISH, 0x80) + +struct PACKET_ZC_ITEM_DISAPPEAR { + int16 packetType; + uint32 itemAid; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ITEM_DISAPPEAR, 0xa1) + +struct PACKET_ZC_MILLENNIUMSHIELD { + int16 packetType; + uint32 aid; + int16 num; + int16 state; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_MILLENNIUMSHIELD, 0x440) + +struct PACKET_ZC_SPIRITS_ATTRIBUTE { + int16 packetType; + uint32 aid; + int16 spiritsType; + int16 num; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_SPIRITS_ATTRIBUTE, 0x8cf) + +struct PACKET_ZC_CHANGESTATE_MER { + int16 packetType; + uint8 type; + uint8 state; + uint32 gid; + uint32 data; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_CHANGESTATE_MER, 0x230) + +struct PACKET_ZC_HOSKILLINFO_LIST_sub { + uint16 id; + uint16 inf; + uint16 unknown; + uint16 level; + uint16 sp; + uint16 range; + char name[NAME_LENGTH]; + uint8 upgradable; +} __attribute__((packed)); + +struct PACKET_ZC_HOSKILLINFO_LIST { + int16 packetType; + int16 packetLength; + PACKET_ZC_HOSKILLINFO_LIST_sub skills[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_HOSKILLINFO_LIST, 0x235) + +struct PACKET_ZC_HOSKILLINFO_UPDATE { + int16 packetType; + uint16 skill_id; + int16 Level; + int16 SP; + int16 AttackRange; + bool upgradable; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_HOSKILLINFO_UPDATE, 0x239) + +struct PACKET_ZC_NOTIFY_MOVE { + int16 packetType; + uint32 gid; + uint8 moveData[6]; + uint32 moveStartTime; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_NOTIFY_MOVE, 0x86) + +struct PACKET_ZC_NOTIFY_PLAYERMOVE { + int16 packetType; + uint32 moveStartTime; + uint8 moveData[6]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_NOTIFY_PLAYERMOVE, 0x87); + +struct PACKET_ZC_NPCACK_MAPMOVE { + int16 packetType; + char mapName[MAP_NAME_LENGTH_EXT]; + uint16 xPos; + uint16 yPos; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_NPCACK_MAPMOVE, 0x91) + +#if PACKETVER >= 20170315 +// Actually ZC_NPCACK_SERVERMOVE_DOMAIN +struct PACKET_ZC_NPCACK_SERVERMOVE { + int16 packetType; + char mapName[MAP_NAME_LENGTH_EXT]; + uint16 xPos; + uint16 yPos; + uint32 ip; + uint16 port; + char domain[128]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_NPCACK_SERVERMOVE, 0xac7) +#else +struct PACKET_ZC_NPCACK_SERVERMOVE { + int16 packetType; + char mapName[MAP_NAME_LENGTH_EXT]; + uint16 xPos; + uint16 yPos; + uint32 ip; + uint16 port; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_NPCACK_SERVERMOVE, 0x92) +#endif + +struct PACKET_ZC_STOPMOVE { + int16 packetType; + uint32 AID; + uint16 xPos; + uint16 yPos; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_STOPMOVE, 0x88) + +struct PACKET_ZC_SELECT_DEALTYPE { + int16 packetType; + uint32 npcId; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_SELECT_DEALTYPE, 0xc4) + +struct PACKET_ZC_PC_SELL_ITEMLIST_sub { + uint16 index; + uint32 price; + uint32 overcharge; +} __attribute__((packed)); + +struct PACKET_ZC_PC_SELL_ITEMLIST { + int16 packetType; + int16 packetLength; + PACKET_ZC_PC_SELL_ITEMLIST_sub items[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_PC_SELL_ITEMLIST, 0xc7) + +struct PACKET_ZC_CLOSE_DIALOG { + int16 packetType; + uint32 npcId; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_CLOSE_DIALOG, 0xb6) + +struct PACKET_ZC_NOTIFY_STANDENTRY { + int16 packetType; +#if PACKETVER >= 20071106 + uint8 objecttype; +#endif + uint32 GID; + int16 speed; + int16 bodyState; + int16 effectState; + int16 job; + int16 head; + int16 weapon; + int16 accessory; + int16 shield; + int16 accessory2; + int16 accessory3; + int16 headpalette; + int16 bodypalette; + int16 headDir; + uint32 GUID; + int16 GEmblemVer; + int16 honor; + int16 virtue; + bool isPKModeON; + uint8 sex; + uint8 PosDir[3]; + uint8 xSize; + uint8 ySize; + uint8 state; + int16 clevel; + uint16 spr_idx; + uint16 effect_idx; + unsigned char scale; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_NOTIFY_STANDENTRY, 0x78) + +struct PACKET_ZC_MENU_LIST { + int16 packetType; + int16 packetLength; + uint32 npcId; + char menu[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_MENU_LIST, 0xb7) + +struct PACKET_ZC_OPEN_EDITDLG { + int16 packetType; + uint32 npcId; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_OPEN_EDITDLG, 0x142) + +struct PACKET_ZC_OPEN_EDITDLGSTR { + int16 packetType; + uint32 npcId; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_OPEN_EDITDLGSTR, 0x1d4) + +struct PACKET_ZC_COMPASS { + int16 packetType; + uint32 npcId; + uint32 type; + uint32 xPos; + uint32 yPos; + uint8 id; + uint32 color; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_COMPASS, 0x144) + +struct PACKET_ZC_ITEM_THROW_ACK { + int16 packetType; + uint16 index; + uint16 count; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ITEM_THROW_ACK, 0xaf) + +struct PACKET_ZC_DELETE_ITEM_FROM_BODY { + int16 packetType; + int16 deleteType; + uint16 index; + int16 count; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_DELETE_ITEM_FROM_BODY, 0x7fa) + +struct PACKET_ZC_CARTOFF { + int16 packetType; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_CARTOFF, 0x12b) + +struct PACKET_ZC_NOTIFY_POSITION_TO_GUILDM { + int16 packetType; + uint32 aid; + int16 xPos; + int16 yPos; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_NOTIFY_POSITION_TO_GUILDM, 0x1eb) + +struct PACKET_ZC_STATUS { + int16 packetType; + uint16 point; + uint8 str; + uint8 standardStr; + uint8 agi; + uint8 standardAgi; + uint8 vit; + uint8 standardVit; + uint8 int_; + uint8 standardInt; + uint8 dex; + uint8 standardDex; + uint8 luk; + uint8 standardLuk; + int16 attPower; + int16 refiningPower; + int16 max_mattPower; + int16 min_mattPower; + int16 itemdefPower; + int16 plusdefPower; + int16 mdefPower; + int16 plusmdefPower; + int16 hitSuccessValue; + int16 avoidSuccessValue; + int16 plusAvoidSuccessValue; + int16 criticalSuccessValue; + int16 ASPD; + int16 plusASPD; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_STATUS, 0xbd) + // 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 ) #endif +// Other packets without struct defined in this file DEFINE_PACKET_HEADER(ZC_NOTIFY_CHAT, 0x8d) -DEFINE_PACKET_HEADER(ZC_BROADCAST, 0x9a) DEFINE_PACKET_HEADER(ZC_ITEM_ENTRY, 0x9d) -DEFINE_PACKET_HEADER(ZC_PC_PURCHASE_RESULT, 0xca) -DEFINE_PACKET_HEADER(ZC_ACK_ADD_EXCHANGE_ITEM, 0xea) DEFINE_PACKET_HEADER(ZC_MVP_GETTING_ITEM, 0x10a) -DEFINE_PACKET_HEADER(CZ_REQ_CHANGE_MEMBERPOS, 0x155) DEFINE_PACKET_HEADER(CZ_REQMAKINGITEM, 0x18e) DEFINE_PACKET_HEADER(ZC_ACK_REQMAKINGITEM, 0x18f) -DEFINE_PACKET_HEADER(CZ_REQ_MAKINGARROW, 0x1ae) -DEFINE_PACKET_HEADER(ZC_BROADCAST2, 0x1c3) #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 DEFINE_PACKET_HEADER(CZ_REQ_ITEMREPAIR, 0xb66) #else DEFINE_PACKET_HEADER(CZ_REQ_ITEMREPAIR, 0x1fd) #endif -DEFINE_PACKET_HEADER(ZC_COUPLENAME, 0x1e6); -DEFINE_PACKET_HEADER(ZC_FRIENDS_LIST, 0x201) DEFINE_PACKET_HEADER(ZC_NOTIFY_WEAPONITEMLIST, 0x221) DEFINE_PACKET_HEADER(ZC_ACK_WEAPONREFINE, 0x223) DEFINE_PACKET_HEADER(CZ_REQ_MAKINGITEM, 0x25b) DEFINE_PACKET_HEADER(ZC_PC_CASH_POINT_ITEMLIST, 0x287) -DEFINE_PACKET_HEADER(ZC_BOSS_INFO, 0x293) 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_SKILL_SELECT_REQUEST, 0x442) DEFINE_PACKET_HEADER(ZC_FAILED_TRADE_BUYING_STORE_TO_SELLER, 0x824) DEFINE_PACKET_HEADER(CZ_SSILIST_ITEM_CLICK, 0x83c) -DEFINE_PACKET_HEADER(CZ_REQ_SE_CASH_TAB_CODE, 0x846) -DEFINE_PACKET_HEADER(ZC_ACK_SE_CASH_ITEM_LIST2, 0x8c0) DEFINE_PACKET_HEADER(ZC_ACK_SCHEDULER_CASHITEM, 0x8ca) -DEFINE_PACKET_HEADER(ZC_CLEAR_DIALOG, 0x8d6) -DEFINE_PACKET_HEADER(CZ_INVENTORY_TAB, 0x907) -DEFINE_PACKET_HEADER(ZC_INVENTORY_TAB, 0x908) -DEFINE_PACKET_HEADER(ZC_ENTRY_QUEUE_INIT, 0x90e) -DEFINE_PACKET_HEADER(CZ_REQ_MERGE_ITEM, 0x96e) -DEFINE_PACKET_HEADER(ZC_BANKING_CHECK, 0x9a6) DEFINE_PACKET_HEADER(CZ_REQ_BANKING_DEPOSIT, 0x9a7) -DEFINE_PACKET_HEADER(ZC_ACK_BANKING_DEPOSIT, 0x9a8) DEFINE_PACKET_HEADER(CZ_REQ_BANKING_WITHDRAW, 0x9a9) -DEFINE_PACKET_HEADER(ZC_ACK_BANKING_WITHDRAW, 0x9aa) DEFINE_PACKET_HEADER(CZ_REQ_BANKING_CHECK, 0x9ab) -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(CZ_REQ_OPEN_BANKING, 0x9b6) -DEFINE_PACKET_HEADER(ZC_ACK_OPEN_BANKING, 0x9b7) DEFINE_PACKET_HEADER(CZ_REQ_CLOSE_BANKING, 0x9b8) -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) DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CHANGE, 0xa46) DEFINE_PACKET_HEADER(ZC_STYLE_CHANGE_RES, 0xa47) -DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CLOSE, 0xa48) DEFINE_PACKET_HEADER(ZC_GROUP_ISALIVE, 0xab2) -DEFINE_PACKET_HEADER(CZ_PARTY_REQ_MASTER_TO_JOIN, 0x0ae6) -DEFINE_PACKET_HEADER(ZC_PARTY_REQ_MASTER_TO_JOIN, 0x0ae7) -DEFINE_PACKET_HEADER(CZ_PARTY_REQ_ACK_MASTER_TO_JOIN, 0x0af8) -DEFINE_PACKET_HEADER(ZC_PARTY_JOIN_REQ_ACK_FROM_MASTER, 0x0afa) DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CHANGE2, 0xafc) DEFINE_PACKET_HEADER(ZC_REMOVE_EFFECT, 0x0b0d) -DEFINE_PACKET_HEADER(CZ_UNCONFIRMED_TSTATUS_UP, 0x0b24) -DEFINE_PACKET_HEADER(CZ_GUILD_EMBLEM_CHANGE2, 0x0b46) -DEFINE_PACKET_HEADER(ZC_TARGET_SPIRITS, 0xb68) -DEFINE_PACKET_HEADER(ZC_SOULENERGY, 0xb73) -DEFINE_PACKET_HEADER(CZ_UNCONFIRMED_RODEX_RETURN, 0xb98) -DEFINE_PACKET_HEADER(ZC_SUMMON_HP_INIT, 0xb6b) -DEFINE_PACKET_HEADER(ZC_SUMMON_HP_UPDATE, 0xb6c) -DEFINE_PACKET_HEADER(ZC_REPUTE_INFO, 0x0b8d) -DEFINE_PACKET_HEADER(ZC_UI_OPEN_V3, 0x0b9a) -DEFINE_PACKET_HEADER(CZ_RESET_SKILL, 0x0bb1) -DEFINE_PACKET_HEADER(CZ_PC_SELL_ITEMLIST, 0x00c9) const int16 MAX_INVENTORY_ITEM_PACKET_NORMAL = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_normal ) - ( sizeof( struct NORMALITEM_INFO ) * MAX_ITEMLIST) ) ) / sizeof( struct NORMALITEM_INFO ) ); const int16 MAX_INVENTORY_ITEM_PACKET_EQUIP = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_equip ) - ( sizeof( struct EQUIPITEM_INFO ) * MAX_ITEMLIST ) ) ) / sizeof( struct EQUIPITEM_INFO ) ); diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 1298a8d4a8..d6cd38b1f9 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -1682,9 +1682,9 @@ bool pc_adoption(map_session_data *p1_sd, map_session_data *p2_sd, map_session_d // Restore progress b_sd->status.job_level = joblevel; - clif_updatestatus(b_sd, SP_JOBLEVEL); + clif_updatestatus(*b_sd, SP_JOBLEVEL); b_sd->status.job_exp = jobexp; - clif_updatestatus(b_sd, SP_JOBEXP); + clif_updatestatus(*b_sd, SP_JOBEXP); // Baby Skills pc_skill(b_sd, WE_BABY, 1, ADDSKILL_PERMANENT); @@ -2204,7 +2204,7 @@ bool pc_authok(map_session_data *sd, uint32 login_id2, time_t expiration_time, i /** * Fixes login-without-aura glitch (the screen won't blink at this point, don't worry :P) **/ - clif_changemap(sd,sd->bl.m,sd->bl.x,sd->bl.y); + clif_changemap( *sd, sd->bl.m, sd->bl.x, sd->bl.y ); } pc_validate_skill(sd); @@ -2233,11 +2233,11 @@ bool pc_authok(map_session_data *sd, uint32 login_id2, time_t expiration_time, i // Check EXP overflow, since in previous revision EXP on Max Level can be more than 'official' Max EXP if (pc_is_maxbaselv(sd) && sd->status.base_exp > MAX_LEVEL_BASE_EXP) { sd->status.base_exp = MAX_LEVEL_BASE_EXP; - clif_updatestatus(sd, SP_BASEEXP); + clif_updatestatus(*sd, SP_BASEEXP); } if (pc_is_maxjoblv(sd) && sd->status.job_exp > MAX_LEVEL_JOB_EXP) { sd->status.job_exp = MAX_LEVEL_JOB_EXP; - clif_updatestatus(sd, SP_JOBEXP); + clif_updatestatus(*sd, SP_JOBEXP); } // Request all registries (auth is considered completed whence they arrive) @@ -3003,7 +3003,7 @@ int pc_disguise(map_session_data *sd, int class_) if (sd->bl.prev != nullptr) { pc_stop_walking(sd, 0); - clif_clearunit_area(&sd->bl, CLR_OUTSIGHT); + clif_clearunit_area( sd->bl, CLR_OUTSIGHT ); } if (!class_) { @@ -3020,7 +3020,7 @@ int pc_disguise(map_session_data *sd, int class_) if (class_ == sd->status.class_ && pc_iscarton(sd)) { //It seems the cart info is lost on undisguise. clif_cartlist(sd); - clif_updatestatus(sd,SP_CARTINFO); + clif_updatestatus(*sd,SP_CARTINFO); } if (sd->chatID) { struct chat_data* cd; @@ -5691,7 +5691,7 @@ char pc_payzeny(map_session_data *sd, int zeny, enum e_log_pick_type type, uint3 return 1; //Not enough. sd->status.zeny -= zeny; - clif_updatestatus(sd,SP_ZENY); + clif_updatestatus(*sd,SP_ZENY); log_zeny(*sd, type, log_charid, -zeny); if( zeny > 0 && sd->state.showzeny ) { @@ -5725,7 +5725,7 @@ char pc_getzeny(map_session_data *sd, int zeny, enum e_log_pick_type type, uint3 zeny = MAX_ZENY - sd->status.zeny; sd->status.zeny += zeny; - clif_updatestatus(sd,SP_ZENY); + clif_updatestatus(*sd,SP_ZENY); log_zeny(*sd, type, log_charid, zeny); if( zeny > 0 && sd->state.showzeny ) { @@ -5952,7 +5952,7 @@ enum e_additem_result pc_additem(map_session_data *sd,struct item *item,int amou log_pick_pc(sd, log_type, amount, &sd->inventory.u.items_inventory[i]); sd->weight += w; - clif_updatestatus(sd,SP_WEIGHT); + clif_updatestatus(*sd,SP_WEIGHT); //Auto-equip if(id->flag.autoequip) pc_equipitem(sd, i, id->equip); @@ -6003,9 +6003,9 @@ char pc_delitem(map_session_data *sd,int n,int amount,int type, short reason, e_ sd->inventory_data[n] = nullptr; } if(!(type&1)) - clif_delitem(sd,n,amount,reason); + clif_delitem( *sd, n, amount, reason ); if(!(type&2)) - clif_updatestatus(sd,SP_WEIGHT); + clif_updatestatus(*sd,SP_WEIGHT); pc_show_questinfo(sd); @@ -6057,7 +6057,8 @@ bool pc_dropitem(map_session_data *sd,int n,int amount) return false; pc_delitem(sd, n, amount, 1, 0, LOG_TYPE_PICKDROP_PLAYER); - clif_dropitem(sd, n, amount); + clif_dropitem( *sd, n, amount ); + return true; } @@ -6484,7 +6485,7 @@ enum e_additem_result pc_cart_additem(map_session_data *sd,struct item *item,int log_pick_pc(sd, log_type, amount, &sd->cart.u.items_cart[i]); sd->cart_weight += w; - clif_updatestatus(sd,SP_CARTINFO); + clif_updatestatus(*sd,SP_CARTINFO); return ADDITEM_SUCCESS; } @@ -6510,7 +6511,7 @@ void pc_cart_delitem(map_session_data *sd,int n,int amount,int type,e_log_pick_t } if(!type) { clif_cart_delitem(sd,n,amount); - clif_updatestatus(sd,SP_CARTINFO); + clif_updatestatus(*sd,SP_CARTINFO); } } @@ -6541,7 +6542,7 @@ void pc_putitemtocart(map_session_data *sd,int idx,int amount) else { clif_cart_additem_ack(sd, (flag == ADDITEM_OVERAMOUNT) ? ADDITEM_TO_CART_FAIL_COUNT : ADDITEM_TO_CART_FAIL_WEIGHT); clif_additem(sd, idx, amount, 0); - clif_delitem(sd, idx, amount, 0); + clif_delitem( *sd, idx, amount, 0 ); } } @@ -6953,7 +6954,7 @@ enum e_setpos pc_setpos(map_session_data* sd, unsigned short mapindex, int x, in if(sd->bl.prev != nullptr){ unit_remove_map_pc(sd,clrtype); - clif_changemap(sd,m,x,y); // [MouseJstr] + clif_changemap( *sd, m, x, y ); } else if(sd->state.active) //Tag player for rewarping after map-loading is done. [Skotlex] sd->state.rewarp = 1; @@ -8095,11 +8096,11 @@ int pc_checkbaselevelup(map_session_data *sd) { if (battle_config.pet_lv_rate && sd->pd) // update pet's level status_calc_pet(sd->pd,SCO_NONE); - clif_updatestatus(sd,SP_STATUSPOINT); - clif_updatestatus(sd,SP_TRAITPOINT); - clif_updatestatus(sd,SP_BASELEVEL); - clif_updatestatus(sd,SP_BASEEXP); - clif_updatestatus(sd,SP_NEXTBASEEXP); + clif_updatestatus(*sd,SP_STATUSPOINT); + clif_updatestatus(*sd,SP_TRAITPOINT); + clif_updatestatus(*sd,SP_BASELEVEL); + clif_updatestatus(*sd,SP_BASEEXP); + clif_updatestatus(*sd,SP_NEXTBASEEXP); status_calc_pc(sd,SCO_FORCE); status_percent_heal(&sd->bl,100,100); @@ -8166,10 +8167,10 @@ int pc_checkjoblevelup(map_session_data *sd) } } while ((next=pc_nextjobexp(sd)) > 0 && sd->status.job_exp >= next); - clif_updatestatus(sd,SP_JOBLEVEL); - clif_updatestatus(sd,SP_JOBEXP); - clif_updatestatus(sd,SP_NEXTJOBEXP); - clif_updatestatus(sd,SP_SKILLPOINT); + clif_updatestatus(*sd,SP_JOBLEVEL); + clif_updatestatus(*sd,SP_JOBEXP); + clif_updatestatus(*sd,SP_NEXTJOBEXP); + clif_updatestatus(*sd,SP_SKILLPOINT); status_calc_pc(sd,SCO_FORCE); clif_misceffect(&sd->bl,1); if (pc_checkskill(sd, SG_DEVIL) && ((sd->class_&MAPID_THIRDMASK) == MAPID_STAR_EMPEROR || pc_is_maxjoblv(sd)) ) @@ -8338,7 +8339,7 @@ void pc_gainexp(map_session_data *sd, struct block_list *src, t_exp base_exp, t_ sd->status.base_exp = util::safe_addition_cap(sd->status.base_exp, base_exp, MAX_EXP); if (!pc_checkbaselevelup(sd)) - clif_updatestatus(sd,SP_BASEEXP); + clif_updatestatus(*sd,SP_BASEEXP); } // Give EXP for Job Level @@ -8346,7 +8347,7 @@ void pc_gainexp(map_session_data *sd, struct block_list *src, t_exp base_exp, t_ sd->status.job_exp = util::safe_addition_cap(sd->status.job_exp, job_exp, MAX_EXP); if (!pc_checkjoblevelup(sd)) - clif_updatestatus(sd,SP_JOBEXP); + clif_updatestatus(*sd,SP_JOBEXP); } if (flag&1) @@ -8372,14 +8373,14 @@ void pc_lostexp(map_session_data *sd, t_exp base_exp, t_exp job_exp) { base_exp = u64min(sd->status.base_exp, base_exp); sd->status.base_exp -= base_exp; clif_displayexp(sd, base_exp, SP_BASEEXP, false, true); - clif_updatestatus(sd, SP_BASEEXP); + clif_updatestatus(*sd, SP_BASEEXP); } if (job_exp) { job_exp = u64min(sd->status.job_exp, job_exp); sd->status.job_exp -= job_exp; clif_displayexp(sd, job_exp, SP_JOBEXP, false, true); - clif_updatestatus(sd, SP_JOBEXP); + clif_updatestatus(*sd, SP_JOBEXP); } if (sd->state.showexp && (base_exp || job_exp)) @@ -8730,15 +8731,15 @@ bool pc_statusup(map_session_data* sd, int type, int increase) status_calc_pc(sd,SCO_NONE); // update increase cost indicator - clif_updatestatus(sd, SP_USTR + type-SP_STR); + clif_updatestatus(*sd, static_cast<_sp>( SP_USTR + type-SP_STR ) ); // update statpoint count - clif_updatestatus(sd, SP_STATUSPOINT); + clif_updatestatus(*sd, SP_STATUSPOINT); // update stat value clif_statusupack(sd, type, 1, final_value); // required if( final_value > 255 ) - clif_updatestatus(sd, type); // send after the 'ack' to override the truncated value + clif_updatestatus(*sd, static_cast<_sp>( type ) ); // send after the 'ack' to override the truncated value achievement_update_objective(sd, AG_GOAL_STATUS, 1, final_value); @@ -8777,12 +8778,12 @@ int pc_statusup2(map_session_data* sd, int type, int val) // update increase cost indicator if( need != pc_need_status_point(sd,type,1) ) - clif_updatestatus(sd, SP_USTR + type-SP_STR); + clif_updatestatus(*sd, static_cast<_sp>( SP_USTR + type-SP_STR ) ); // update stat value clif_statusupack(sd,type,1,val); // required if( val > 255 ) - clif_updatestatus(sd,type); // send after the 'ack' to override the truncated value + clif_updatestatus(*sd, static_cast<_sp>( type ) ); // send after the 'ack' to override the truncated value return val; } @@ -8893,15 +8894,15 @@ bool pc_traitstatusup(map_session_data* sd, int type, int increase) status_calc_pc(sd, SCO_NONE); // update increase cost indicator - clif_updatestatus(sd, SP_UPOW + type - SP_POW); + clif_updatestatus(*sd, static_cast<_sp>( SP_UPOW + type - SP_POW ) ); // update statpoint count - clif_updatestatus(sd, SP_TRAITPOINT); + clif_updatestatus(*sd, SP_TRAITPOINT); // update stat value clif_statusupack(sd, type, 1, final_value); // required if (final_value > 255) - clif_updatestatus(sd, type); // send after the 'ack' to override the truncated value + clif_updatestatus(*sd, static_cast<_sp>( type ) ); // send after the 'ack' to override the truncated value //achievement_update_objective(sd, AG_GOAL_STATUS, 1, final_value); @@ -8938,12 +8939,12 @@ int pc_traitstatusup2(map_session_data* sd, int type, int val) // update increase cost indicator if (need != pc_need_trait_point(sd, type, 1)) - clif_updatestatus(sd, SP_UPOW + type - SP_POW); + clif_updatestatus(*sd, static_cast<_sp>( SP_UPOW + type - SP_POW ) ); // update stat value clif_statusupack(sd, type, 1, val); // required if (val > 255) - clif_updatestatus(sd, type); // send after the 'ack' to override the truncated value + clif_updatestatus(*sd, static_cast<_sp>( type ) ); // send after the 'ack' to override the truncated value return val; } @@ -8994,9 +8995,9 @@ void pc_skillup(map_session_data *sd,uint16 skill_id) range = skill_get_range2(&sd->bl, skill_id, lv, false); upgradable = (lv < skill_tree_get_max(sd->status.skill[idx].id, sd->status.class_)) ? 1 : 0; clif_skillup(sd,skill_id,lv,range,upgradable); - clif_updatestatus(sd,SP_SKILLPOINT); + clif_updatestatus(*sd,SP_SKILLPOINT); if( skill_id == GN_REMODELING_CART ) /* cart weight info was updated by status_calc_pc */ - clif_updatestatus(sd,SP_CARTINFO); + clif_updatestatus(*sd,SP_CARTINFO); if (pc_checkskill(sd, SG_DEVIL) && ((sd->class_&MAPID_THIRDMASK) == MAPID_STAR_EMPEROR || pc_is_maxjoblv(sd))) clif_status_change(&sd->bl, EFST_DEVIL1, 1, 0, 0, 0, 1); //Permanent blind effect from SG_DEVIL. if (!pc_has_permission(sd, PC_PERM_ALL_SKILL)) // may skill everything at any time anyways, and this would cause a huge slowdown @@ -9117,41 +9118,41 @@ int pc_resetlvl(map_session_data* sd,int type) sd->status.job_exp=0; } - clif_updatestatus(sd,SP_STATUSPOINT); - clif_updatestatus(sd,SP_TRAITPOINT); - clif_updatestatus(sd,SP_STR); - clif_updatestatus(sd,SP_AGI); - clif_updatestatus(sd,SP_VIT); - clif_updatestatus(sd,SP_INT); - clif_updatestatus(sd,SP_DEX); - clif_updatestatus(sd,SP_LUK); - clif_updatestatus(sd,SP_POW); - clif_updatestatus(sd,SP_STA); - clif_updatestatus(sd,SP_WIS); - clif_updatestatus(sd,SP_SPL); - clif_updatestatus(sd,SP_CON); - clif_updatestatus(sd,SP_CRT); - clif_updatestatus(sd,SP_BASELEVEL); - clif_updatestatus(sd,SP_JOBLEVEL); - clif_updatestatus(sd,SP_STATUSPOINT); - clif_updatestatus(sd,SP_BASEEXP); - clif_updatestatus(sd,SP_JOBEXP); - clif_updatestatus(sd,SP_NEXTBASEEXP); - clif_updatestatus(sd,SP_NEXTJOBEXP); - clif_updatestatus(sd,SP_SKILLPOINT); + clif_updatestatus(*sd,SP_STATUSPOINT); + clif_updatestatus(*sd,SP_TRAITPOINT); + clif_updatestatus(*sd,SP_STR); + clif_updatestatus(*sd,SP_AGI); + clif_updatestatus(*sd,SP_VIT); + clif_updatestatus(*sd,SP_INT); + clif_updatestatus(*sd,SP_DEX); + clif_updatestatus(*sd,SP_LUK); + clif_updatestatus(*sd,SP_POW); + clif_updatestatus(*sd,SP_STA); + clif_updatestatus(*sd,SP_WIS); + clif_updatestatus(*sd,SP_SPL); + clif_updatestatus(*sd,SP_CON); + clif_updatestatus(*sd,SP_CRT); + clif_updatestatus(*sd,SP_BASELEVEL); + clif_updatestatus(*sd,SP_JOBLEVEL); + clif_updatestatus(*sd,SP_STATUSPOINT); + clif_updatestatus(*sd,SP_BASEEXP); + clif_updatestatus(*sd,SP_JOBEXP); + clif_updatestatus(*sd,SP_NEXTBASEEXP); + clif_updatestatus(*sd,SP_NEXTJOBEXP); + clif_updatestatus(*sd,SP_SKILLPOINT); - clif_updatestatus(sd,SP_USTR); // Updates needed stat points - Valaris - clif_updatestatus(sd,SP_UAGI); - clif_updatestatus(sd,SP_UVIT); - clif_updatestatus(sd,SP_UINT); - clif_updatestatus(sd,SP_UDEX); - clif_updatestatus(sd,SP_ULUK); // End Addition - clif_updatestatus(sd,SP_UPOW); - clif_updatestatus(sd,SP_USTA); - clif_updatestatus(sd,SP_UWIS); - clif_updatestatus(sd,SP_USPL); - clif_updatestatus(sd,SP_UCON); - clif_updatestatus(sd,SP_UCRT); + clif_updatestatus(*sd,SP_USTR); // Updates needed stat points - Valaris + clif_updatestatus(*sd,SP_UAGI); + clif_updatestatus(*sd,SP_UVIT); + clif_updatestatus(*sd,SP_UINT); + clif_updatestatus(*sd,SP_UDEX); + clif_updatestatus(*sd,SP_ULUK); // End Addition + clif_updatestatus(*sd,SP_UPOW); + clif_updatestatus(*sd,SP_USTA); + clif_updatestatus(*sd,SP_UWIS); + clif_updatestatus(*sd,SP_USPL); + clif_updatestatus(*sd,SP_UCON); + clif_updatestatus(*sd,SP_UCRT); for(i=0;iequip_index[i] >= 0) @@ -9179,7 +9180,7 @@ int pc_resetstate(map_session_data* sd) ShowError( "pc_resetstate: Capping the Level to %d to reset the stats of %d:%d, the base level (%d) is greater than the max level supported.\n", pc_maxbaselv( sd ), sd->status.account_id, sd->status.char_id, sd->status.base_level ); sd->status.base_level = pc_maxbaselv( sd ); - clif_updatestatus( sd, SP_BASELEVEL ); + clif_updatestatus( *sd, SP_BASELEVEL ); } sd->status.status_point = statpoint_db.get_table_point( sd->status.base_level ); @@ -9206,34 +9207,34 @@ int pc_resetstate(map_session_data* sd) pc_setstat(sd, SP_CON, 0); pc_setstat(sd, SP_CRT, 0); - clif_updatestatus(sd,SP_STR); - clif_updatestatus(sd,SP_AGI); - clif_updatestatus(sd,SP_VIT); - clif_updatestatus(sd,SP_INT); - clif_updatestatus(sd,SP_DEX); - clif_updatestatus(sd,SP_LUK); - clif_updatestatus(sd,SP_POW); - clif_updatestatus(sd,SP_STA); - clif_updatestatus(sd,SP_WIS); - clif_updatestatus(sd,SP_SPL); - clif_updatestatus(sd,SP_CON); - clif_updatestatus(sd,SP_CRT); + clif_updatestatus(*sd,SP_STR); + clif_updatestatus(*sd,SP_AGI); + clif_updatestatus(*sd,SP_VIT); + clif_updatestatus(*sd,SP_INT); + clif_updatestatus(*sd,SP_DEX); + clif_updatestatus(*sd,SP_LUK); + clif_updatestatus(*sd,SP_POW); + clif_updatestatus(*sd,SP_STA); + clif_updatestatus(*sd,SP_WIS); + clif_updatestatus(*sd,SP_SPL); + clif_updatestatus(*sd,SP_CON); + clif_updatestatus(*sd,SP_CRT); - clif_updatestatus(sd,SP_USTR); // Updates needed stat points - Valaris - clif_updatestatus(sd,SP_UAGI); - clif_updatestatus(sd,SP_UVIT); - clif_updatestatus(sd,SP_UINT); - clif_updatestatus(sd,SP_UDEX); - clif_updatestatus(sd,SP_ULUK); // End Addition - clif_updatestatus(sd,SP_UPOW); - clif_updatestatus(sd,SP_USTA); - clif_updatestatus(sd,SP_UWIS); - clif_updatestatus(sd,SP_USPL); - clif_updatestatus(sd,SP_UCON); - clif_updatestatus(sd,SP_UCRT); + clif_updatestatus(*sd,SP_USTR); // Updates needed stat points - Valaris + clif_updatestatus(*sd,SP_UAGI); + clif_updatestatus(*sd,SP_UVIT); + clif_updatestatus(*sd,SP_UINT); + clif_updatestatus(*sd,SP_UDEX); + clif_updatestatus(*sd,SP_ULUK); // End Addition + clif_updatestatus(*sd,SP_UPOW); + clif_updatestatus(*sd,SP_USTA); + clif_updatestatus(*sd,SP_UWIS); + clif_updatestatus(*sd,SP_USPL); + clif_updatestatus(*sd,SP_UCON); + clif_updatestatus(*sd,SP_UCRT); - clif_updatestatus(sd,SP_STATUSPOINT); - clif_updatestatus(sd,SP_TRAITPOINT); + clif_updatestatus(*sd,SP_STATUSPOINT); + clif_updatestatus(*sd,SP_TRAITPOINT); if( sd->mission_mobid ) { //bugreport:2200 sd->mission_mobid = 0; @@ -9356,7 +9357,7 @@ int pc_resetskill(map_session_data* sd, int flag) sd->status.skill_point += skill_point; if (flag&1) { - clif_updatestatus(sd,SP_SKILLPOINT); + clif_updatestatus(*sd,SP_SKILLPOINT); clif_skillinfoblock(sd); status_calc_pc(sd, SCO_FORCE); } @@ -9508,9 +9509,9 @@ static TIMER_FUNC(pc_respawn_timer){ *------------------------------------------*/ void pc_damage(map_session_data *sd,struct block_list *src,unsigned int hp, unsigned int sp, unsigned int ap) { - if (ap) clif_updatestatus(sd,SP_AP); - if (sp) clif_updatestatus(sd,SP_SP); - if (hp) clif_updatestatus(sd,SP_HP); + if (ap) clif_updatestatus(*sd,SP_AP); + if (sp) clif_updatestatus(*sd,SP_SP); + if (hp) clif_updatestatus(*sd,SP_HP); else return; if (!src) @@ -9552,7 +9553,7 @@ void pc_close_npc(map_session_data *sd,int flag) if (sd->npc_id || sd->npc_shopid) { if (sd->state.using_fake_npc) { - clif_clearunit_single(sd->npc_id, CLR_OUTSIGHT, sd->fd); + clif_clearunit_single( sd->npc_id, CLR_OUTSIGHT, *sd ); sd->state.using_fake_npc = 0; } @@ -9575,7 +9576,7 @@ void pc_close_npc(map_session_data *sd,int flag) #endif if (sd->st) { if (sd->st->state == CLOSE) { - clif_scriptclose(sd, sd->npc_id); + clif_scriptclose( *sd, sd->npc_id ); clif_scriptclear( *sd, sd->npc_id ); // [Ind/Hercules] sd->st->state = END; // Force to end now } @@ -9959,9 +9960,9 @@ int pc_dead(map_session_data *sd,struct block_list *src) } void pc_revive(map_session_data *sd,unsigned int hp, unsigned int sp, unsigned int ap) { - if(hp) clif_updatestatus(sd,SP_HP); - if(sp) clif_updatestatus(sd,SP_SP); - if(ap) clif_updatestatus(sd,SP_AP); + if(hp) clif_updatestatus(*sd,SP_HP); + if(sp) clif_updatestatus(*sd,SP_SP); + if(ap) clif_updatestatus(*sd,SP_AP); pc_setstand(sd, true); if(battle_config.pc_invincible_time > 0) @@ -10230,11 +10231,11 @@ bool pc_setparam(map_session_data *sd,int64 type,int64 val_tmp) } sd->status.base_level = val; sd->status.base_exp = 0; - // clif_updatestatus(sd, SP_BASELEVEL); // Gets updated at the bottom - clif_updatestatus(sd, SP_NEXTBASEEXP); - clif_updatestatus(sd, SP_STATUSPOINT); - clif_updatestatus(sd, SP_TRAITPOINT); - clif_updatestatus(sd, SP_BASEEXP); + // clif_updatestatus(*sd, SP_BASELEVEL); // Gets updated at the bottom + clif_updatestatus(*sd, SP_NEXTBASEEXP); + clif_updatestatus(*sd, SP_STATUSPOINT); + clif_updatestatus(*sd, SP_TRAITPOINT); + clif_updatestatus(*sd, SP_BASEEXP); status_calc_pc(sd, SCO_FORCE); if(sd->status.party_id) party_send_levelup(sd); @@ -10243,13 +10244,13 @@ bool pc_setparam(map_session_data *sd,int64 type,int64 val_tmp) if (val >= sd->status.job_level) { if (val > pc_maxjoblv(sd)) val = pc_maxjoblv(sd); sd->status.skill_point += val - sd->status.job_level; - clif_updatestatus(sd, SP_SKILLPOINT); + clif_updatestatus(*sd, SP_SKILLPOINT); } sd->status.job_level = val; sd->status.job_exp = 0; - // clif_updatestatus(sd, SP_JOBLEVEL); // Gets updated at the bottom - clif_updatestatus(sd, SP_NEXTJOBEXP); - clif_updatestatus(sd, SP_JOBEXP); + // clif_updatestatus(*sd, SP_JOBLEVEL); // Gets updated at the bottom + clif_updatestatus(*sd, SP_NEXTJOBEXP); + clif_updatestatus(*sd, SP_JOBEXP); status_calc_pc(sd, SCO_FORCE); break; case SP_SKILLPOINT: @@ -10304,7 +10305,7 @@ bool pc_setparam(map_session_data *sd,int64 type,int64 val_tmp) if( sd->battle_status.max_hp < sd->battle_status.hp ) { sd->battle_status.hp = sd->battle_status.max_hp; - clif_updatestatus(sd, SP_HP); + clif_updatestatus(*sd, SP_HP); } break; case SP_SP: @@ -10316,7 +10317,7 @@ bool pc_setparam(map_session_data *sd,int64 type,int64 val_tmp) if( sd->battle_status.max_sp < sd->battle_status.sp ) { sd->battle_status.sp = sd->battle_status.max_sp; - clif_updatestatus(sd, SP_SP); + clif_updatestatus(*sd, SP_SP); } break; case SP_AP: @@ -10327,7 +10328,7 @@ bool pc_setparam(map_session_data *sd,int64 type,int64 val_tmp) if (sd->battle_status.max_ap < sd->battle_status.ap) { sd->battle_status.ap = sd->battle_status.max_ap; - clif_updatestatus(sd, SP_AP); + clif_updatestatus(*sd, SP_AP); } break; case SP_STR: @@ -10456,7 +10457,7 @@ bool pc_setparam(map_session_data *sd,int64 type,int64 val_tmp) ShowError("pc_setparam: Attempted to set unknown parameter '%lld'.\n", type); return false; } - clif_updatestatus(sd,static_cast(type)); + clif_updatestatus(*sd,static_cast<_sp>(type)); return true; } @@ -10479,11 +10480,11 @@ void pc_heal(map_session_data *sd,unsigned int hp,unsigned int sp, unsigned int clif_heal(sd->fd,SP_AP,ap); } else { if(hp) - clif_updatestatus(sd,SP_HP); + clif_updatestatus(*sd,SP_HP); if(sp) - clif_updatestatus(sd,SP_SP); + clif_updatestatus(*sd,SP_SP); if (ap) - clif_updatestatus(sd,SP_AP); + clif_updatestatus(*sd,SP_AP); } return; } @@ -10739,56 +10740,56 @@ bool pc_jobchange(map_session_data *sd,int job, char upper) sd->status.base_level = pc_maxbaselv(sd); sd->status.base_exp=0; pc_resetstate(sd); - clif_updatestatus(sd,SP_STATUSPOINT); - clif_updatestatus(sd,SP_TRAITPOINT); - clif_updatestatus(sd,SP_BASELEVEL); - clif_updatestatus(sd,SP_BASEEXP); - clif_updatestatus(sd,SP_NEXTBASEEXP); + clif_updatestatus(*sd,SP_STATUSPOINT); + clif_updatestatus(*sd,SP_TRAITPOINT); + clif_updatestatus(*sd,SP_BASELEVEL); + clif_updatestatus(*sd,SP_BASEEXP); + clif_updatestatus(*sd,SP_NEXTBASEEXP); } // Give or reduce transcendent status points if( (b_class&JOBL_UPPER) && !(previous_class&JOBL_UPPER) ){ // Change from a non t class to a t class -> give points sd->status.status_point += battle_config.transcendent_status_points; - clif_updatestatus(sd,SP_STATUSPOINT); + clif_updatestatus(*sd,SP_STATUSPOINT); }else if( !(b_class&JOBL_UPPER) && (previous_class&JOBL_UPPER) ){ // Change from a t class to a non t class -> remove points if( sd->status.status_point < battle_config.transcendent_status_points ){ // The player already used his bonus points, so we have to reset his status points pc_resetstate(sd); }else{ sd->status.status_point -= battle_config.transcendent_status_points; - clif_updatestatus(sd,SP_STATUSPOINT); + clif_updatestatus(*sd,SP_STATUSPOINT); } } // Give or reduce trait status points if ((b_class & JOBL_FOURTH) && !(previous_class & JOBL_FOURTH)) {// Change to a 4th job. sd->status.trait_point += battle_config.trait_points_job_change; - clif_updatestatus(sd, SP_TRAITPOINT); - clif_updatestatus(sd, SP_UPOW); - clif_updatestatus(sd, SP_USTA); - clif_updatestatus(sd, SP_UWIS); - clif_updatestatus(sd, SP_USPL); - clif_updatestatus(sd, SP_UCON); - clif_updatestatus(sd, SP_UCRT); + clif_updatestatus(*sd, SP_TRAITPOINT); + clif_updatestatus(*sd, SP_UPOW); + clif_updatestatus(*sd, SP_USTA); + clif_updatestatus(*sd, SP_UWIS); + clif_updatestatus(*sd, SP_USPL); + clif_updatestatus(*sd, SP_UCON); + clif_updatestatus(*sd, SP_UCRT); } else if (!(b_class & JOBL_FOURTH) && (previous_class & JOBL_FOURTH)) {// Change to a non 4th job. if (sd->status.trait_point < battle_config.trait_points_job_change) { // Player may have already used the trait status points. Force a reset. pc_resetstate(sd); } else { sd->status.trait_point = 0; - clif_updatestatus(sd, SP_TRAITPOINT); - clif_updatestatus(sd, SP_UPOW); - clif_updatestatus(sd, SP_USTA); - clif_updatestatus(sd, SP_UWIS); - clif_updatestatus(sd, SP_USPL); - clif_updatestatus(sd, SP_UCON); - clif_updatestatus(sd, SP_UCRT); + clif_updatestatus(*sd, SP_TRAITPOINT); + clif_updatestatus(*sd, SP_UPOW); + clif_updatestatus(*sd, SP_USTA); + clif_updatestatus(*sd, SP_UWIS); + clif_updatestatus(*sd, SP_USPL); + clif_updatestatus(*sd, SP_UCON); + clif_updatestatus(*sd, SP_UCRT); } } - clif_updatestatus(sd,SP_JOBLEVEL); - clif_updatestatus(sd,SP_JOBEXP); - clif_updatestatus(sd,SP_NEXTJOBEXP); + clif_updatestatus(*sd,SP_JOBLEVEL); + clif_updatestatus(*sd,SP_JOBEXP); + clif_updatestatus(*sd,SP_NEXTJOBEXP); for(i=0;iequip_index[i] >= 0) @@ -11007,7 +11008,7 @@ void pc_setoption(map_session_data *sd,int type, int subtype) #ifndef NEW_CARTS if( type&OPTION_CART && !( p_type&OPTION_CART ) ) { //Cart On clif_cartlist(sd); - clif_updatestatus(sd, SP_CARTINFO); + clif_updatestatus(*sd, SP_CARTINFO); if(pc_checkskill(sd, MC_PUSHCART) < 10) status_calc_pc(sd,SCO_NONE); //Apply speed penalty. } else if( !( type&OPTION_CART ) && p_type&OPTION_CART ){ //Cart Off @@ -11090,7 +11091,7 @@ bool pc_setcart(map_session_data *sd,int type) { clif_cartlist(sd); status_calc_cart_weight(sd, (e_status_calc_weight_opt)(CALCWT_ITEM|CALCWT_MAXBONUS|CALCWT_CARTSTATE)); } - clif_updatestatus(sd, SP_CARTINFO); + clif_updatestatus(*sd, SP_CARTINFO); sc_start(&sd->bl, &sd->bl, SC_PUSH_CART, 100, type, 0); break; } diff --git a/src/map/pet.cpp b/src/map/pet.cpp index 3f5e29d188..8f8480b392 100644 --- a/src/map/pet.cpp +++ b/src/map/pet.cpp @@ -2287,7 +2287,7 @@ void pet_evolution(map_session_data *sd, int16 pet_id) { // Virtually delete the old egg log_pick_pc(sd, LOG_TYPE_OTHER, -1, &sd->inventory.u.items_inventory[idx]); - clif_delitem(sd, idx, 1, 0); + clif_delitem( *sd, idx, 1, 0 ); // Change the old egg to the new one sd->inventory.u.items_inventory[idx].nameid = new_data->EggID; diff --git a/src/map/script.cpp b/src/map/script.cpp index 40a4f1ac8f..187cc186c2 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -3674,7 +3674,7 @@ void script_free_state(struct script_state* st) if (sd && sd->st == st) { // Current script is aborted. if(sd->state.using_fake_npc) { - clif_clearunit_single(sd->npc_id, CLR_OUTSIGHT, sd->fd); + clif_clearunit_single( sd->npc_id, CLR_OUTSIGHT, *sd ); sd->state.using_fake_npc = 0; } sd->st = nullptr; @@ -4306,7 +4306,7 @@ static void script_detach_state(struct script_state* st, bool dequeue_event) if(st->rid && (sd = map_id2sd(st->rid))!=nullptr) { if( sd->state.using_fake_npc ){ - clif_clearunit_single( sd->npc_id, CLR_OUTSIGHT, sd->fd ); + clif_clearunit_single( sd->npc_id, CLR_OUTSIGHT, *sd ); sd->state.using_fake_npc = 0; } @@ -4511,7 +4511,7 @@ void run_script_main(struct script_state *st) if ((sd = map_id2sd(st->rid))!=nullptr) { //Restore previous stack and save char. if(sd->state.using_fake_npc){ - clif_clearunit_single(sd->npc_id, CLR_OUTSIGHT, sd->fd); + clif_clearunit_single( sd->npc_id, CLR_OUTSIGHT, *sd ); sd->state.using_fake_npc = 0; } //Restore previous script if any. @@ -5008,7 +5008,8 @@ BUILDIN_FUNC(close) st->clear_cutin = true; } - clif_scriptclose(sd, st->oid); + clif_scriptclose( *sd, st->oid ); + return SCRIPT_CMD_SUCCESS; } @@ -5028,7 +5029,8 @@ BUILDIN_FUNC(close2) if( st->mes_active ) st->mes_active = 0; - clif_scriptclose(sd, st->oid); + clif_scriptclose( *sd, st->oid ); + return SCRIPT_CMD_SUCCESS; } @@ -5148,10 +5150,10 @@ BUILDIN_FUNC(menu) CREATE(menu, char, 2048); safestrncpy(menu, StringBuf_Value(&buf), 2047); ShowWarning("buildin_menu: NPC Menu too long! (source:%s / length:%d)\n",nd?nd->name:"Unknown",StringBuf_Length(&buf)); - clif_scriptmenu(sd, st->oid, menu); + clif_scriptmenu( *sd, st->oid, menu ); aFree(menu); } else - clif_scriptmenu(sd, st->oid, StringBuf_Value(&buf)); + clif_scriptmenu( *sd, st->oid, StringBuf_Value( &buf ) ); StringBuf_Destroy(&buf); @@ -5252,10 +5254,10 @@ BUILDIN_FUNC(select) CREATE(menu, char, 2048); safestrncpy(menu, StringBuf_Value(&buf), 2047); ShowWarning("buildin_select: NPC Menu too long! (source:%s / length:%d)\n",nd?nd->name:"Unknown",StringBuf_Length(&buf)); - clif_scriptmenu(sd, st->oid, menu); + clif_scriptmenu( *sd, st->oid, menu ); aFree(menu); } else - clif_scriptmenu(sd, st->oid, StringBuf_Value(&buf)); + clif_scriptmenu( *sd, st->oid, StringBuf_Value( &buf ) ); StringBuf_Destroy(&buf); if( sd->npc_menu >= 0xff ) { @@ -5330,10 +5332,10 @@ BUILDIN_FUNC(prompt) CREATE(menu, char, 2048); safestrncpy(menu, StringBuf_Value(&buf), 2047); ShowWarning("buildin_prompt: NPC Menu too long! (source:%s / length:%d)\n",nd?nd->name:"Unknown",StringBuf_Length(&buf)); - clif_scriptmenu(sd, st->oid, menu); + clif_scriptmenu( *sd, st->oid, menu ); aFree(menu); } else - clif_scriptmenu(sd, st->oid, StringBuf_Value(&buf)); + clif_scriptmenu( *sd, st->oid, StringBuf_Value( &buf ) ); StringBuf_Destroy(&buf); if( sd->npc_menu >= 0xff ) @@ -6161,9 +6163,9 @@ BUILDIN_FUNC(input) sd->state.menu_or_input = 1; st->state = RERUNLINE; if( is_string_variable(name) ) - clif_scriptinputstr(sd,st->oid); + clif_scriptinputstr( *sd, st->oid ); else - clif_scriptinput(sd,st->oid); + clif_scriptinput( *sd, st->oid ); } else { // take received text/value and store it in the designated variable @@ -6909,7 +6911,8 @@ BUILDIN_FUNC(cutin) if( !script_rid2sd(sd) ) return SCRIPT_CMD_SUCCESS; - clif_cutin(sd,script_getstr(st,2),script_getnum(st,3)); + clif_cutin( *sd, script_getstr( st, 2 ), script_getnum( st, 3 ) ); + return SCRIPT_CMD_SUCCESS; } @@ -6932,7 +6935,7 @@ BUILDIN_FUNC(viewpoint) id=script_getnum(st,5); color=script_getnum(st,6); - clif_viewpoint(sd,st->oid,type,x,y,id,color); + clif_viewpoint( *sd, st->oid, type, x, y, id, color ); return SCRIPT_CMD_SUCCESS; } @@ -6947,7 +6950,8 @@ static int buildin_viewpointmap_sub(block_list *bl, va_list ap) { id = va_arg(ap, int); color = va_arg(ap, int); - clif_viewpoint((map_session_data *)bl, oid, type, x, y, id, color); + clif_viewpoint( *reinterpret_cast( bl ), oid, type, x, y, id, color ); + return 0; } @@ -8588,7 +8592,8 @@ BUILDIN_FUNC(delitem) ShowError("buildin_%s: failed to delete %d items (AID=%d item_id=%u).\n", command, it.amount, sd->status.account_id, it.nameid); st->state = END; st->mes_active = 0; - clif_scriptclose(sd, st->oid); + clif_scriptclose( *sd, st->oid ); + return SCRIPT_CMD_FAILURE; } @@ -8712,7 +8717,8 @@ BUILDIN_FUNC(delitem2) ShowError("buildin_%s: failed to delete %d items (AID=%d item_id=%u).\n", command, it.amount, sd->status.account_id, it.nameid); st->state = END; st->mes_active = 0; - clif_scriptclose(sd, st->oid); + clif_scriptclose( *sd, st->oid ); + return SCRIPT_CMD_FAILURE; } @@ -9629,7 +9635,7 @@ BUILDIN_FUNC(successrefitem) { pc_unequipitem(sd,i,2); // status calc will happen in pc_equipitem() below clif_refine(sd->fd,0,i,sd->inventory.u.items_inventory[i].refine); - clif_delitem(sd,i,1,3); + clif_delitem( *sd, i, 1, 3 ); //Logs items, got from (N)PC scripts [Lupus] log_pick_pc(sd, LOG_TYPE_SCRIPT, 1, &sd->inventory.u.items_inventory[i]); @@ -9731,7 +9737,7 @@ BUILDIN_FUNC(downrefitem) { sd->inventory.u.items_inventory[i].refine = cap_value( sd->inventory.u.items_inventory[i].refine, 0, MAX_REFINE); clif_refine(sd->fd,2,i,sd->inventory.u.items_inventory[i].refine); - clif_delitem(sd,i,1,3); + clif_delitem( *sd, i, 1, 3 ); //Logs items, got from (N)PC scripts [Lupus] log_pick_pc(sd, LOG_TYPE_SCRIPT, 1, &sd->inventory.u.items_inventory[i]); @@ -10381,9 +10387,10 @@ BUILDIN_FUNC(end) st->mes_active = 0; if (sd){ - if (sd->state.callshop == 0) - clif_scriptclose(sd, st->oid); // If a menu/select/prompt is active, close it. - else + if (sd->state.callshop == 0){ + // If a menu/select/prompt is active, close it. + clif_scriptclose( *sd, st->oid ); + }else sd->state.callshop = 0; } @@ -15846,7 +15853,9 @@ BUILDIN_FUNC(addhomintimacy) hom_increase_intimacy(hd, (uint32)value); else hom_decrease_intimacy(hd, (uint32)abs(value)); - clif_send_homdata(sd, SP_INTIMATE, hd->homunculus.intimacy / 100); + + clif_send_homdata( *hd, SP_INTIMATE ); + return SCRIPT_CMD_SUCCESS; } @@ -17890,7 +17899,7 @@ BUILDIN_FUNC(callshop) switch (flag) { case 1: npc_buysellsel(sd,nd->bl.id,0); break; //Buy window case 2: npc_buysellsel(sd,nd->bl.id,1); break; //Sell window - default: clif_npcbuysell(sd,nd->bl.id); break; //Show menu + default: clif_npcbuysell( *sd, *nd ); break; //Show menu } } #if PACKETVER >= 20131223 @@ -19273,8 +19282,8 @@ BUILDIN_FUNC(setunitdata) case UHOM_MAPID: if (mapname) value = map_mapname2mapid(mapname); unit_warp(bl, (short)value, 0, 0, CLR_TELEPORT); break; case UHOM_X: if (!unit_walktoxy(bl, (short)value, hd->bl.y, 2)) unit_movepos(bl, (short)value, hd->bl.y, 0, 0); break; case UHOM_Y: if (!unit_walktoxy(bl, hd->bl.x, (short)value, 2)) unit_movepos(bl, hd->bl.x, (short)value, 0, 0); break; - case UHOM_HUNGER: hd->homunculus.hunger = (short)value; clif_send_homdata(map_charid2sd(hd->homunculus.char_id), SP_HUNGRY, hd->homunculus.hunger); break; - case UHOM_INTIMACY: hom_increase_intimacy(hd, (unsigned int)value); clif_send_homdata(map_charid2sd(hd->homunculus.char_id), SP_INTIMATE, hd->homunculus.intimacy / 100); break; + case UHOM_HUNGER: hd->homunculus.hunger = (short)value; clif_send_homdata(*hd, SP_HUNGRY); break; + case UHOM_INTIMACY: hom_increase_intimacy(hd, (unsigned int)value); clif_send_homdata(*hd, SP_INTIMATE); break; case UHOM_SPEED: hd->base_status.speed = (unsigned short)value; status_calc_misc(bl, &hd->base_status, hd->homunculus.level); calc_status = true; break; case UHOM_LOOKDIR: unit_setdir(bl, (uint8)value); break; case UHOM_CANMOVETICK: hd->ud.canmove_tick = value > 0 ? (unsigned int)value : 0; break; @@ -19570,7 +19579,7 @@ BUILDIN_FUNC(setunitdata) // Client information updates switch (bl->type) { case BL_HOM: - clif_send_homdata(hd->master, SP_ACK, 0); + clif_send_homdata( *hd, SP_ACK ); break; case BL_PET: clif_send_petstatus(pd->master); @@ -24521,7 +24530,7 @@ BUILDIN_FUNC(setrandomoption) { sd->inventory.u.items_inventory[i].option[index].id = id; sd->inventory.u.items_inventory[i].option[index].value = value; sd->inventory.u.items_inventory[i].option[index].param = param; - clif_delitem(sd, i, 1, 3); + clif_delitem( *sd, i, 1, 3 ); log_pick_pc(sd, LOG_TYPE_SCRIPT, -1, &sd->inventory.u.items_inventory[i]); clif_additem(sd, i, 1, 0); pc_equipitem(sd, i, ep); diff --git a/src/map/skill.cpp b/src/map/skill.cpp index c8b9c1d7cb..c5d99d5ac3 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -2589,12 +2589,11 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list * break; case HFLI_SBR44: //[orn] if(src->type == BL_HOM){ - struct homun_data *hd = (struct homun_data *)src; - if (hd != nullptr) { - hd->homunculus.intimacy = hom_intimacy_grade2intimacy(HOMGRADE_HATE_WITH_PASSION); - if (hd->master) - clif_send_homdata(hd->master,SP_INTIMATE,hd->homunculus.intimacy / 100); - } + homun_data& hd = reinterpret_cast( *src ); + + hd.homunculus.intimacy = hom_intimacy_grade2intimacy(HOMGRADE_HATE_WITH_PASSION); + + clif_send_homdata( hd, SP_INTIMATE ); } break; case CR_GRANDCROSS: @@ -3211,9 +3210,8 @@ void skill_combo_toggle_inf(struct block_list* bl, uint16 skill_id, int inf){ TBL_HOM *hd = BL_CAST(BL_HOM, bl); if (idx == -1) break; - sd = hd->master; hd->homunculus.hskill[idx].flag= flag; - if(sd) clif_homskillinfoblock(sd); //refresh info //@FIXME we only want to refresh one skill + clif_homskillinfoblock( *hd ); //refresh info //@FIXME we only want to refresh one skill } break; case MO_COMBOFINISH: @@ -3498,7 +3496,8 @@ void skill_attack_blow(struct block_list *src, struct block_list *dsrc, struct b } break; } - clif_fixpos(target); + + clif_fixpos( *target ); } /* @@ -8833,12 +8832,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } status_damage(src, src, sstatus->max_hp,0,0,1, skill_id); if(skill_id == HVAN_EXPLOSION && src->type == BL_HOM) { - struct homun_data *hd = (struct homun_data *)src; - if (hd != nullptr) { - hd->homunculus.intimacy = hom_intimacy_grade2intimacy(HOMGRADE_HATE_WITH_PASSION); - if (hd->master) - clif_send_homdata(hd->master,SP_INTIMATE,hd->homunculus.intimacy / 100); - } + homun_data& hd = reinterpret_cast( *src ); + + hd.homunculus.intimacy = hom_intimacy_grade2intimacy(HOMGRADE_HATE_WITH_PASSION); + + clif_send_homdata( hd, SP_INTIMATE ); } break; case AL_ANGELUS: @@ -9001,7 +8999,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start4(src,bl,type,100,skill_lv,unit_getdir(bl),0,0,0)); if (sd) // If the client receives a skill-use packet inmediately before a walkok packet, it will discard the walk packet! [Skotlex] - clif_walkok(sd); // So aegis has to resend the walk ok. + clif_walkok(*sd); // So aegis has to resend the walk ok. break; case AS_CLOAKING: @@ -11343,7 +11341,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } if( sd && pc_isridingwug(sd) ) { clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start4(src,bl,type,100,skill_lv,unit_getdir(bl),0,0,0)); - clif_walkok(sd); + clif_walkok(*sd); } break; @@ -15685,7 +15683,7 @@ static int skill_unit_onplace(struct skill_unit *unit, struct block_list *bl, t_ if (td) sec = DIFF_TICK(td->tick, tick); map_moveblock(bl, unit->bl.x, unit->bl.y, tick); - clif_fixpos(bl); + clif_fixpos( *bl ); } else sec = 3000; //Couldn't trap it? @@ -16226,7 +16224,7 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t_t || !unit_blown_immune(bl,0x1) ) { unit_movepos(bl, unit->bl.x, unit->bl.y, 0, 0); - clif_fixpos(bl); + clif_fixpos( *bl ); } sg->val2 = bl->id; } else @@ -16255,7 +16253,7 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t_t if( bl->id != ss->id ) { if( status_change_start(ss, bl,type,10000,sg->skill_lv,sg->group_id,0,0,skill_get_time2(sg->skill_id, sg->skill_lv), SCSTART_NORATEDEF) ) { map_moveblock(bl, unit->bl.x, unit->bl.y, tick); - clif_fixpos(bl); + clif_fixpos( *bl ); } map_foreachinallrange(skill_trap_splash, &unit->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &unit->bl, tick); sg->unit_id = UNT_USED_TRAPS; //Changed ID so it does not invoke a for each in area again. @@ -16567,7 +16565,7 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t_t if( td ) sec = DIFF_TICK(td->tick, tick); ///map_moveblock(bl, src->bl.x, src->bl.y, tick); // in official server it doesn't behave like this. [malufett] - clif_fixpos(bl); + clif_fixpos( *bl ); sg->val2 = bl->id; } else sec = 3000; // Couldn't trap it? @@ -19720,7 +19718,7 @@ void skill_weaponrefine( map_session_data& sd, int idx ){ ep = item->equip; pc_unequipitem(&sd,idx,3); } - clif_delitem(&sd,idx,1,3); + clif_delitem(sd,idx,1,3); clif_upgrademessage(&sd, 0, item->nameid); clif_inventorylist(&sd); clif_refine(sd.fd,0,idx,item->refine); @@ -20455,7 +20453,7 @@ static int skill_trap_splash(struct block_list *bl, va_list ap) break; if (status_change_start(ss, bl, SC_ELECTRICSHOCKER, 10000, sg->skill_lv, sg->group_id, 0, 0, skill_get_time2(sg->skill_id, sg->skill_lv), SCSTART_NORATEDEF)) { map_moveblock(bl, unit->bl.x, unit->bl.y, tick); - clif_fixpos(bl); + clif_fixpos( *bl ); clif_skill_damage(src, bl, tick, 0, 0, -30000, 1, sg->skill_id, sg->skill_lv, DMG_SPLASH); } } @@ -22662,8 +22660,8 @@ void skill_toggle_magicpower(struct block_list *bl, uint16 skill_id) sc->getSCE(SC_MAGICPOWER)->val4 = 1; status_calc_bl_(bl, status_db.getCalcFlag(SC_MAGICPOWER)); if(bl->type == BL_PC){// update current display. - clif_updatestatus(((TBL_PC *)bl),SP_MATK1); - clif_updatestatus(((TBL_PC *)bl),SP_MATK2); + clif_updatestatus(*((map_session_data *)bl),SP_MATK1); + clif_updatestatus(*((map_session_data *)bl),SP_MATK2); } } } diff --git a/src/map/status.cpp b/src/map/status.cpp index 40917c7d3d..ab22240865 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -1665,7 +1665,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in unit_stop_attack(target); unit_stop_walking(target,1); unit_skillcastcancel(target,0); - clif_clearunit_area(target,CLR_DEAD); + clif_clearunit_area( *target, CLR_DEAD ); skill_unit_move(target,gettick(),4); skill_cleartimerskill(target); } @@ -3560,9 +3560,9 @@ bool status_calc_weight(map_session_data *sd, enum e_status_calc_weight_opt flag // Update the client if the new weight calculations don't match if (b_weight != sd->weight) - clif_updatestatus(sd, SP_WEIGHT); + clif_updatestatus(*sd, SP_WEIGHT); if (b_max_weight != sd->max_weight) { - clif_updatestatus(sd, SP_MAXWEIGHT); + clif_updatestatus(*sd, SP_MAXWEIGHT); pc_updateweightstatus(sd); } @@ -3608,7 +3608,7 @@ bool status_calc_cart_weight(map_session_data *sd, enum e_status_calc_weight_opt // Update the client if the new weight calculations don't match if (b_cart_weight_max != sd->cart_weight_max) - clif_updatestatus(sd, SP_CARTINFO); + clif_updatestatus(*sd, SP_CARTINFO); return true; } @@ -5916,7 +5916,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset flag) if( status->hp > status->max_hp ) { // !FIXME: Should perhaps a status_zap should be issued? status->hp = status->max_hp; - if( sd ) clif_updatestatus(sd,SP_HP); + if( sd ) clif_updatestatus(*sd,SP_HP); } } @@ -5934,7 +5934,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset flag) if( status->sp > status->max_sp ) { status->sp = status->max_sp; - if( sd ) clif_updatestatus(sd,SP_SP); + if( sd ) clif_updatestatus(*sd,SP_SP); } } @@ -6160,7 +6160,7 @@ void status_calc_bl_main(struct block_list *bl, std::bitset flag) if (status->ap > status->max_ap) { status->ap = status->max_ap; - if (sd) clif_updatestatus(sd, SP_AP); + if (sd) clif_updatestatus(*sd, SP_AP); } } #endif @@ -6230,37 +6230,37 @@ void status_calc_bl_(struct block_list* bl, std::bitset flag, uint8 opt TBL_PC* sd = BL_CAST(BL_PC, bl); if(b_status.str != status->str) - clif_updatestatus(sd,SP_STR); + clif_updatestatus(*sd,SP_STR); if(b_status.agi != status->agi) - clif_updatestatus(sd,SP_AGI); + clif_updatestatus(*sd,SP_AGI); if(b_status.vit != status->vit) - clif_updatestatus(sd,SP_VIT); + clif_updatestatus(*sd,SP_VIT); if(b_status.int_ != status->int_) - clif_updatestatus(sd,SP_INT); + clif_updatestatus(*sd,SP_INT); if(b_status.dex != status->dex) - clif_updatestatus(sd,SP_DEX); + clif_updatestatus(*sd,SP_DEX); if(b_status.luk != status->luk) - clif_updatestatus(sd,SP_LUK); + clif_updatestatus(*sd,SP_LUK); if(b_status.hit != status->hit) - clif_updatestatus(sd,SP_HIT); + clif_updatestatus(*sd,SP_HIT); if(b_status.flee != status->flee) - clif_updatestatus(sd,SP_FLEE1); + clif_updatestatus(*sd,SP_FLEE1); if(b_status.amotion != status->amotion) - clif_updatestatus(sd,SP_ASPD); + clif_updatestatus(*sd,SP_ASPD); if(b_status.speed != status->speed) - clif_updatestatus(sd,SP_SPEED); + clif_updatestatus(*sd,SP_SPEED); if(b_status.batk != status->batk #ifndef RENEWAL || b_status.rhw.atk != status->rhw.atk || b_status.lhw.atk != status->lhw.atk #endif ) - clif_updatestatus(sd,SP_ATK1); + clif_updatestatus(*sd,SP_ATK1); if(b_status.def != status->def) { - clif_updatestatus(sd,SP_DEF1); + clif_updatestatus(*sd,SP_DEF1); #ifdef RENEWAL - clif_updatestatus(sd,SP_DEF2); + clif_updatestatus(*sd,SP_DEF2); #endif } @@ -6271,80 +6271,80 @@ void status_calc_bl_(struct block_list* bl, std::bitset flag, uint8 opt b_status.rhw.atk2 != status->rhw.atk2 || b_status.lhw.atk2 != status->lhw.atk2 #endif ) - clif_updatestatus(sd,SP_ATK2); + clif_updatestatus(*sd,SP_ATK2); if(b_status.def2 != status->def2) { - clif_updatestatus(sd,SP_DEF2); + clif_updatestatus(*sd,SP_DEF2); #ifdef RENEWAL - clif_updatestatus(sd,SP_DEF1); + clif_updatestatus(*sd,SP_DEF1); #endif } if(b_status.flee2 != status->flee2) - clif_updatestatus(sd,SP_FLEE2); + clif_updatestatus(*sd,SP_FLEE2); if(b_status.cri != status->cri) - clif_updatestatus(sd,SP_CRITICAL); + clif_updatestatus(*sd,SP_CRITICAL); #ifndef RENEWAL if(b_status.matk_max != status->matk_max) - clif_updatestatus(sd,SP_MATK1); + clif_updatestatus(*sd,SP_MATK1); if(b_status.matk_min != status->matk_min) - clif_updatestatus(sd,SP_MATK2); + clif_updatestatus(*sd,SP_MATK2); #else if(b_status.matk_max != status->matk_max || b_status.matk_min != status->matk_min) { - clif_updatestatus(sd,SP_MATK2); - clif_updatestatus(sd,SP_MATK1); + clif_updatestatus(*sd,SP_MATK2); + clif_updatestatus(*sd,SP_MATK1); } #endif if(b_status.mdef != status->mdef) { - clif_updatestatus(sd,SP_MDEF1); + clif_updatestatus(*sd,SP_MDEF1); #ifdef RENEWAL - clif_updatestatus(sd,SP_MDEF2); + clif_updatestatus(*sd,SP_MDEF2); #endif } if(b_status.mdef2 != status->mdef2) { - clif_updatestatus(sd,SP_MDEF2); + clif_updatestatus(*sd,SP_MDEF2); #ifdef RENEWAL - clif_updatestatus(sd,SP_MDEF1); + clif_updatestatus(*sd,SP_MDEF1); #endif } if(b_status.rhw.range != status->rhw.range) - clif_updatestatus(sd,SP_ATTACKRANGE); + clif_updatestatus(*sd,SP_ATTACKRANGE); if(b_status.max_hp != status->max_hp) - clif_updatestatus(sd,SP_MAXHP); + clif_updatestatus(*sd,SP_MAXHP); if(b_status.max_sp != status->max_sp) - clif_updatestatus(sd,SP_MAXSP); + clif_updatestatus(*sd,SP_MAXSP); if(b_status.hp != status->hp) - clif_updatestatus(sd,SP_HP); + clif_updatestatus(*sd,SP_HP); if(b_status.sp != status->sp) - clif_updatestatus(sd,SP_SP); + clif_updatestatus(*sd,SP_SP); #ifdef RENEWAL if (b_status.pow != status->pow) - clif_updatestatus(sd,SP_POW); + clif_updatestatus(*sd,SP_POW); if (b_status.sta != status->sta) - clif_updatestatus(sd,SP_STA); + clif_updatestatus(*sd,SP_STA); if (b_status.wis != status->wis) - clif_updatestatus(sd,SP_WIS); + clif_updatestatus(*sd,SP_WIS); if (b_status.spl != status->spl) - clif_updatestatus(sd,SP_SPL); + clif_updatestatus(*sd,SP_SPL); if (b_status.con != status->con) - clif_updatestatus(sd,SP_CON); + clif_updatestatus(*sd,SP_CON); if (b_status.crt != status->crt) - clif_updatestatus(sd,SP_CRT); + clif_updatestatus(*sd,SP_CRT); if (b_status.patk != status->patk) - clif_updatestatus(sd, SP_PATK); + clif_updatestatus(*sd, SP_PATK); if (b_status.smatk != status->smatk) - clif_updatestatus(sd, SP_SMATK); + clif_updatestatus(*sd, SP_SMATK); if (b_status.res != status->res) - clif_updatestatus(sd, SP_RES); + clif_updatestatus(*sd, SP_RES); if (b_status.mres != status->mres) - clif_updatestatus(sd, SP_MRES); + clif_updatestatus(*sd, SP_MRES); if (b_status.hplus != status->hplus) - clif_updatestatus(sd, SP_HPLUS); + clif_updatestatus(*sd, SP_HPLUS); if (b_status.crate != status->crate) - clif_updatestatus(sd, SP_CRATE); + clif_updatestatus(*sd, SP_CRATE); if (b_status.max_ap != status->max_ap) - clif_updatestatus(sd, SP_MAXAP); + clif_updatestatus(*sd, SP_MAXAP); if (b_status.ap != status->ap) - clif_updatestatus(sd, SP_AP); + clif_updatestatus(*sd, SP_AP); #endif } else if( bl->type == BL_HOM ) { TBL_HOM* hd = BL_CAST(BL_HOM, bl); @@ -10896,7 +10896,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val1 = battle_config.manner_system; // Mute filters. if (sd) { clif_changestatus(sd,SP_MANNER,sd->status.manner); - clif_updatestatus(sd,SP_MANNER); + clif_updatestatus(*sd,SP_MANNER); } break; @@ -13400,7 +13400,7 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid) sd->status.manner = 0; if (sd && tid == INVALID_TIMER) { clif_changestatus(sd,SP_MANNER,sd->status.manner); - clif_updatestatus(sd,SP_MANNER); + clif_updatestatus(*sd,SP_MANNER); } break; case SC_SPLASHER: @@ -14221,7 +14221,7 @@ TIMER_FUNC(status_change_timer){ if(sd) { sd->status.manner++; clif_changestatus(sd,SP_MANNER,sd->status.manner); - clif_updatestatus(sd,SP_MANNER); + clif_updatestatus(*sd,SP_MANNER); if (sd->status.manner < 0) { // Every 60 seconds your manner goes up by 1 until it gets back to 0. sc_timer_next(60000+tick); return 0; @@ -14710,7 +14710,7 @@ TIMER_FUNC(status_change_timer){ if (distance_xy(x, y, bl->x, bl->y) <= skill_get_unit_range(SO_VACUUM_EXTREME, sce->val1) && unit_movepos(bl, x, y, 0, false)) { clif_slide(bl, x, y); - clif_fixpos(bl); + clif_fixpos( *bl ); } } sc_timer_next(tick + sce->val4); diff --git a/src/map/storage.cpp b/src/map/storage.cpp index edc6a642ea..ea588f3f8f 100644 --- a/src/map/storage.cpp +++ b/src/map/storage.cpp @@ -354,7 +354,7 @@ void storage_storageadd(map_session_data* sd, struct s_storage *stor, int index, } clif_storageitemremoved(sd,index,0); - clif_dropitem(sd,index,0); + clif_dropitem( *sd, index, 0 ); } /** @@ -417,7 +417,7 @@ void storage_storageaddfromcart(map_session_data *sd, struct s_storage *stor, in } clif_storageitemremoved(sd,index,0); - clif_dropitem(sd,index,0); + clif_dropitem( *sd, index, 0 ); } /** @@ -900,7 +900,7 @@ void storage_guild_storageadd(map_session_data* sd, int index, int amount) pc_delitem(sd,index,amount,0,4,LOG_TYPE_GSTORAGE); else { clif_storageitemremoved(sd,index,0); - clif_dropitem(sd,index,0); + clif_dropitem( *sd, index, 0 ); } } @@ -973,7 +973,7 @@ void storage_guild_storageaddfromcart(map_session_data* sd, int index, int amoun pc_cart_delitem(sd,index,amount,0,LOG_TYPE_GSTORAGE); else { clif_storageitemremoved(sd,index,0); - clif_dropitem(sd,index,0); + clif_dropitem( *sd, index, 0 ); } } diff --git a/src/map/trade.cpp b/src/map/trade.cpp index 0131d4ac7b..9838a25c08 100644 --- a/src/map/trade.cpp +++ b/src/map/trade.cpp @@ -523,7 +523,7 @@ void trade_tradecancel(map_session_data *sd) } if (sd->deal.zeny) { - clif_updatestatus(sd, SP_ZENY); + clif_updatestatus(*sd, SP_ZENY); sd->deal.zeny = 0; } @@ -544,7 +544,7 @@ void trade_tradecancel(map_session_data *sd) } if (target_sd->deal.zeny) { - clif_updatestatus(target_sd, SP_ZENY); + clif_updatestatus(*target_sd, SP_ZENY); target_sd->deal.zeny = 0; } diff --git a/src/map/unit.cpp b/src/map/unit.cpp index 36c4368fdd..ed9dd60fb2 100644 --- a/src/map/unit.cpp +++ b/src/map/unit.cpp @@ -131,7 +131,7 @@ int unit_walktoxy_sub(struct block_list *bl) map_session_data *sd = BL_CAST(BL_PC, bl); sd->head_dir = DIR_NORTH; - clif_walkok(sd); + clif_walkok(*sd); } #if PACKETVER >= 20170726 // If this is a walking NPC and it will use a player sprite @@ -447,7 +447,7 @@ static TIMER_FUNC(unit_walktoxy_timer) if(md && !ud->state.force_walk && md->walktoxy_fail_count < icewall_walk_block && map_getcell(bl->m,x,y,CELL_CHKICEWALL) && (dx > 0 || dy > 0)) { //Needs to be done here so that rudeattack skills are invoked md->walktoxy_fail_count++; - clif_fixpos(bl); + clif_fixpos( *bl ); // Monsters in this situation will unlock target and then attempt an idle skill // When they start chasing again, they will check for a chase skill before returning here mob_unlocktarget(md, tick); @@ -551,7 +551,8 @@ static TIMER_FUNC(unit_walktoxy_timer) && ud->skill_id != NPC_EMOTION && ud->skill_id != NPC_EMOTION_ON //NPC_EMOTION doesn't make the monster stop && md->state.skillstate != MSS_WALK) //Walk skills are supposed to be used while walking { // Skill used, abort walking - clif_fixpos(bl); // Fix position as walk has been cancelled. + // Fix position as walk has been cancelled. + clif_fixpos( *bl ); return 0; } // Resend walk packet for proper Self Destruction display. @@ -602,7 +603,7 @@ static TIMER_FUNC(unit_walktoxy_timer) if(unit_walktoxy_sub(bl)) { return 1; } else { - clif_fixpos(bl); + clif_fixpos( *bl ); return 0; } } @@ -648,7 +649,7 @@ static TIMER_FUNC(unit_walktoxy_timer) // Aegis uses one before every attack, we should // only need this one for syncing purposes. [Skotlex] ud->target_to = 0; - clif_fixpos(bl); + clif_fixpos( *bl ); unit_attack(bl, tbl->id, ud->state.attack_continue); } } else { // Update chase-path @@ -938,7 +939,7 @@ void unit_run_hit(struct block_list *bl, status_change *sc, map_session_data *sd skill_blown(bl, bl, skill_get_blewcount(TK_RUN, lv), unit_getdir(bl), BLOWN_NONE); clif_status_change(bl, EFST_TING, 0, 0, 0, 0, 0); } else if (sd) { - clif_fixpos(bl); + clif_fixpos( *bl ); skill_castend_damage_id(bl, &sd->bl, RA_WUGDASH, lv, gettick(), SD_LEVEL); } return; @@ -1444,7 +1445,7 @@ int unit_stop_walking(struct block_list *bl,int type) } if(type&USW_FIXPOS) - clif_fixpos(bl); + clif_fixpos( *bl ); ud->walkpath.path_len = 0; ud->walkpath.path_pos = 0; @@ -1562,7 +1563,7 @@ TIMER_FUNC(unit_resume_running){ clif_skill_nodamage(ud->bl,ud->bl,TK_RUN,ud->skill_lv,sc_start4(ud->bl,ud->bl,SC_RUN,100,ud->skill_lv,unit_getdir(ud->bl),0,0,0)); if (sd) - clif_walkok(sd); + clif_walkok(*sd); return 0; } @@ -2806,7 +2807,7 @@ static int unit_attack_timer_sub(struct block_list* src, int tid, t_tick tick) // Sync packet only for players. // Non-players use the sync packet on the walk timer. [Skotlex] if (tid == INVALID_TIMER && sd) - clif_fixpos(src); + clif_fixpos( *src ); if( DIFF_TICK(ud->attackabletime,tick) <= 0 ) { if (battle_config.attack_direction_change && (src->type&battle_config.attack_direction_change)) @@ -3250,7 +3251,7 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, if( pd->pet.intimate <= PET_INTIMATE_NONE && !(pd->master && !pd->master->state.active) ) { // If logging out, this is deleted on unit_free - clif_clearunit_area(bl,clrtype); + clif_clearunit_area( *bl, clrtype ); map_delblock(bl); unit_free(bl,CLR_OUTSIGHT); map_freeblock_unlock(); @@ -3267,7 +3268,7 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, if( !hd->homunculus.intimacy && !(hd->master && !hd->master->state.active) ) { // If logging out, this is deleted on unit_free clif_emotion(bl, ET_CRY); - clif_clearunit_area(bl,clrtype); + clif_clearunit_area( *bl, clrtype ); map_delblock(bl); unit_free(bl,CLR_OUTSIGHT); map_freeblock_unlock(); @@ -3282,7 +3283,7 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, ud->canact_tick = ud->canmove_tick; if( mercenary_get_lifetime(md) <= 0 && !(md->master && !md->master->state.active) ) { - clif_clearunit_area(bl,clrtype); + clif_clearunit_area( *bl, clrtype ); map_delblock(bl); unit_free(bl,CLR_OUTSIGHT); map_freeblock_unlock(); @@ -3297,7 +3298,7 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, ud->canact_tick = ud->canmove_tick; if( elemental_get_lifetime(ed) <= 0 && !(ed->master && !ed->master->state.active) ) { - clif_clearunit_area(bl,clrtype); + clif_clearunit_area( *bl, clrtype ); map_delblock(bl); unit_free(bl,CLR_OUTSIGHT); map_freeblock_unlock(); @@ -3331,7 +3332,7 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, } [[fallthrough]]; default: - clif_clearunit_area(bl, clrtype); + clif_clearunit_area( *bl, clrtype ); map_delblock(bl); break; } @@ -3356,7 +3357,7 @@ void unit_refresh(struct block_list *bl, bool walking) { // Using CLR_TRICKDEAD because other flags show effects // Probably need to use another flag or other way to refresh it if (mapdata->users) { - clif_clearunit_area(bl, CLR_TRICKDEAD); // Fade out + clif_clearunit_area( *bl, CLR_TRICKDEAD ); // Fade out clif_spawn(bl,walking); // Fade in } }