diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index 4b4f9db1a4..0c82ef87dd 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -7026,7 +7026,7 @@ ACMD_FUNC(sound) if(strstr(sound_file, ".wav") == NULL) strcat(sound_file, ".wav"); - clif_soundeffectall(&sd->bl, sound_file, 0, AREA); + clif_soundeffect( sd->bl, sound_file, 0, AREA ); return 0; } diff --git a/src/map/battleground.cpp b/src/map/battleground.cpp index 66f78a78f5..5004b8be35 100644 --- a/src/map/battleground.cpp +++ b/src/map/battleground.cpp @@ -507,7 +507,7 @@ bool bg_team_join(int bg_id, struct map_session_data *sd, bool is_queue) for (const auto &pl_sd : bgteam->members) { if (pl_sd.sd != sd) - clif_hpmeter_single(sd->fd, pl_sd.sd->bl.id, pl_sd.sd->battle_status.hp, pl_sd.sd->battle_status.max_hp); + clif_hpmeter_single( *sd, pl_sd.sd->bl.id, pl_sd.sd->battle_status.hp, pl_sd.sd->battle_status.max_hp ); } clif_bg_hp(sd); diff --git a/src/map/buyingstore.cpp b/src/map/buyingstore.cpp index f409b9ef1a..9c768d4a1b 100644 --- a/src/map/buyingstore.cpp +++ b/src/map/buyingstore.cpp @@ -249,7 +249,7 @@ int8 buyingstore_create( struct map_session_data* sd, int zenylimit, unsigned ch StringBuf_Destroy(&buf); clif_buyingstore_myitemlist(sd); - clif_buyingstore_entry(sd); + clif_buyingstore_entry( *sd ); idb_put(buyingstore_db, sd->status.char_id, sd); return 0; @@ -276,7 +276,7 @@ void buyingstore_close(struct map_session_data* sd) { idb_remove(buyingstore_db, sd->status.char_id); // notify other players - clif_buyingstore_disappear_entry(sd); + clif_buyingstore_disappear_entry( *sd ); } } diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 6d87bc4159..ba92894132 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -1526,9 +1526,9 @@ void clif_class_change_target(struct block_list *bl,int class_,int type, enum se void clif_servantball( struct map_session_data& sd, struct block_list* target, enum send_target send_target ){ struct PACKET_ZC_SPIRITS p = {}; - p.packetType = HEADER_ZC_SPIRITS; - p.GID = sd.bl.id; - p.amount = sd.servantball; + p.PacketType = HEADER_ZC_SPIRITS; + p.AID = sd.bl.id; + p.num = sd.servantball; if( target == nullptr ){ target = &sd.bl; @@ -1540,9 +1540,9 @@ void clif_servantball( struct map_session_data& sd, struct block_list* target, e void clif_abyssball( struct map_session_data& sd, struct block_list* target, enum send_target send_target ){ struct PACKET_ZC_SPIRITS p = {}; - p.packetType = HEADER_ZC_SPIRITS; - p.GID = sd.bl.id; - p.amount = sd.abyssball; + p.PacketType = HEADER_ZC_SPIRITS; + p.AID = sd.bl.id; + p.num = sd.abyssball; if( target == nullptr ){ target = &sd.bl; @@ -2417,17 +2417,17 @@ void clif_parse_NPCMarketPurchase(int fd, struct map_session_data *sd) { /// - set npcid of dialog window (0 by default) /// - if set to clear on next mes, clear contents /// - append this text -void clif_scriptmes(struct map_session_data *sd, int npcid, const char *mes) -{ - int fd = sd->fd; - int slen = strlen(mes) + 9; +void clif_scriptmes( struct map_session_data& sd, uint32 npcid, const char *mes ){ + struct PACKET_ZC_SAY_DIALOG* p = (struct PACKET_ZC_SAY_DIALOG*)packet_buffer; - WFIFOHEAD(fd, slen); - WFIFOW(fd,0)=0xb4; - WFIFOW(fd,2)=slen; - WFIFOL(fd,4)=npcid; - memcpy(WFIFOCP(fd,8), mes, slen-8); - WFIFOSET(fd,WFIFOW(fd,2)); + int16 length = (int16)( strlen( mes ) + 1 ); + + p->PacketType = HEADER_ZC_SAY_DIALOG; + p->PacketLength = sizeof( *p ) + length; + p->NpcID = npcid; + safestrncpy( p->message, mes, length ); + + clif_send( p, p->PacketLength, &sd.bl, SELF ); } @@ -2441,17 +2441,13 @@ void clif_scriptmes(struct map_session_data *sd, int npcid, const char *mes) /// - 00B9 .L /// - set to clear on next mes /// - remove 'next' button -void clif_scriptnext(struct map_session_data *sd,int npcid) -{ - int fd; +void clif_scriptnext( struct map_session_data& sd, uint32 npcid ){ + struct PACKET_ZC_WAIT_DIALOG p = {}; - nullpo_retv(sd); + p.PacketType = HEADER_ZC_WAIT_DIALOG; + p.NpcID = npcid; - fd=sd->fd; - WFIFOHEAD(fd, packet_len(0xb5)); - WFIFOW(fd,0)=0xb5; - WFIFOL(fd,2)=npcid; - WFIFOSET(fd,packet_len(0xb5)); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); } @@ -2820,7 +2816,7 @@ void clif_additem( struct map_session_data *sd, int n, int amount, unsigned char p.favorite = sd->inventory.u.items_inventory[n].favorite; p.look = sd->inventory_data[n]->look; #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - p.enchantgrade = sd->inventory.u.items_inventory[n].enchantgrade; + p.grade = sd->inventory.u.items_inventory[n].enchantgrade; #endif #endif #endif @@ -3310,43 +3306,16 @@ void clif_guild_xy_remove(struct map_session_data *sd) /*========================================== * *------------------------------------------*/ -static int clif_hpmeter_sub(struct block_list *bl, va_list ap) -{ - struct map_session_data *sd, *tsd; -#if PACKETVER < 20100126 - const int cmd = 0x106; -#else - const int cmd = 0x80e; -#endif - - sd = va_arg(ap, struct map_session_data *); - tsd = (TBL_PC *)bl; +static int clif_hpmeter_sub( struct block_list *bl, va_list ap ){ + struct map_session_data* sd = va_arg( ap, struct map_session_data* ); + struct map_session_data* tsd = BL_CAST( BL_PC, bl ); nullpo_ret(sd); nullpo_ret(tsd); - if( !session_isActive(tsd->fd) || tsd == sd ) - return 0; - - if( !pc_has_permission(tsd, PC_PERM_VIEW_HPMETER) ) - return 0; - WFIFOHEAD(tsd->fd,packet_len(cmd)); - WFIFOW(tsd->fd,0) = cmd; - WFIFOL(tsd->fd,2) = sd->status.account_id; -#if PACKETVER < 20100126 - if( sd->battle_status.max_hp > INT16_MAX ) - { //To correctly display the %hp bar. [Skotlex] - WFIFOW(tsd->fd,6) = sd->battle_status.hp/(sd->battle_status.max_hp/100); - WFIFOW(tsd->fd,8) = 100; - } else { - WFIFOW(tsd->fd,6) = sd->battle_status.hp; - WFIFOW(tsd->fd,8) = sd->battle_status.max_hp; + if( pc_has_permission( tsd, PC_PERM_VIEW_HPMETER ) ){ + clif_hpmeter_single( *tsd, sd->status.account_id, sd->battle_status.hp, sd->battle_status.max_hp ); } -#else - WFIFOL(tsd->fd,6) = sd->battle_status.hp; - WFIFOL(tsd->fd,10) = sd->battle_status.max_hp; -#endif - WFIFOSET(tsd->fd,packet_len(cmd)); return 0; } @@ -3369,7 +3338,7 @@ void clif_update_hp(map_session_data &sd) { if (map_getmapdata(sd.bl.m)->hpmeter_visible) clif_hpmeter(&sd); if (!battle_config.party_hp_mode && sd.status.party_id) - clif_party_hp(&sd); + clif_party_hp( sd ); if (sd.bg_id) clif_bg_hp(&sd); } @@ -3740,7 +3709,7 @@ void clif_updatestatus(struct map_session_data *sd,int type) if( i < MAX_PARTY ){ p->party.member[i].lv = sd->status.base_level; - clif_party_job_and_level(sd); + clif_party_job_and_level( *sd ); } } } @@ -4716,7 +4685,7 @@ void clif_tradeadditem( struct map_session_data* sd, struct map_session_data* ts #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 p.location = pc_equippoint_sub( sd, sd->inventory_data[index] ); p.look = sd->inventory_data[index]->look; - p.enchantgrade = sd->inventory.u.items_inventory[index].enchantgrade; + p.grade = sd->inventory.u.items_inventory[index].enchantgrade; #endif #endif }else{ @@ -4907,17 +4876,17 @@ void clif_storageclose(struct map_session_data* sd) /// 0b73 .L .W void clif_soulball( struct map_session_data *sd, struct block_list* target, enum send_target send_target ){ #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - struct PACKET_ZC_UNCONFIRMED_SPIRITS3 p = {}; + struct PACKET_ZC_SOULENERGY p = {}; - p.packetType = HEADER_ZC_UNCONFIRMED_SPIRITS3; + p.PacketType = HEADER_ZC_SOULENERGY; #else struct PACKET_ZC_SPIRITS p = {}; - p.packetType = HEADER_ZC_SPIRITS; + p.PacketType = HEADER_ZC_SPIRITS; #endif - p.GID = sd->bl.id; - p.amount = sd->soulball; + p.AID = sd->bl.id; + p.num = sd->soulball; clif_send( &p, sizeof( p ), target == nullptr ? &sd->bl : target, send_target ); } @@ -4936,9 +4905,9 @@ static void clif_getareachar_pc(struct map_session_data* sd,struct map_session_d if( (cd = (struct chat_data*)map_id2bl(dstsd->chatID)) && cd->usersd[0]==dstsd) clif_dispchat(cd,sd->fd); } else if( dstsd->state.vending ) - clif_showvendingboard(&dstsd->bl,dstsd->message,sd->fd); + clif_showvendingboard( *dstsd, SELF, &sd->bl ); else if( dstsd->state.buyingstore ) - clif_buyingstore_entry_single(sd, dstsd); + clif_buyingstore_entry( *dstsd, &sd->bl ); if(dstsd->spiritball > 0) clif_spiritball( &dstsd->bl, &sd->bl, SELF ); @@ -4956,7 +4925,7 @@ static void clif_getareachar_pc(struct map_session_data* sd,struct map_session_d (sd->bg_id && sd->bg_id == dstsd->bg_id) || //BattleGround pc_has_permission(sd, PC_PERM_VIEW_HPMETER) ) - clif_hpmeter_single(sd->fd, dstsd->bl.id, dstsd->battle_status.hp, dstsd->battle_status.max_hp); + clif_hpmeter_single( *sd, dstsd->bl.id, dstsd->battle_status.hp, dstsd->battle_status.max_hp ); // display link (sd - dstsd) to sd ARR_FIND( 0, MAX_DEVOTION, i, sd->devotion[i] == dstsd->bl.id ); @@ -5553,7 +5522,7 @@ int clif_outsight(struct block_list *bl,va_list ap) if(sd->state.vending) clif_closevendingboard(bl,tsd->fd); if(sd->state.buyingstore) - clif_buyingstore_disappear_entry_single(tsd, sd); + clif_buyingstore_disappear_entry( *sd, &tsd->bl ); break; case BL_ITEM: clif_clearflooritem((struct flooritem_data*)bl,tsd->fd); @@ -7339,7 +7308,7 @@ void clif_cart_additem( struct map_session_data *sd, int n, int amount ){ #if PACKETVER >= 20150226 clif_add_random_options( p.option_data, &sd->cart.u.items_cart[n] ); #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - p.enchantgrade = sd->cart.u.items_cart[n].enchantgrade; + p.grade = sd->cart.u.items_cart[n].enchantgrade; #endif #endif @@ -7614,23 +7583,19 @@ void clif_openvendingreq(struct map_session_data* sd, int num) /// Displays a vending board to target/area (ZC_STORE_ENTRY). /// 0131 .L .80B -void clif_showvendingboard(struct block_list* bl, const char* message, int fd) -{ - unsigned char buf[128]; - - nullpo_retv(bl); - - WBUFW(buf,0) = 0x131; - WBUFL(buf,2) = bl->id; - safestrncpy(WBUFCP(buf,6), message, 80); - - if( session_isActive(fd) ) { - WFIFOHEAD(fd,packet_len(0x131)); - memcpy(WFIFOP(fd,0),buf,packet_len(0x131)); - WFIFOSET(fd,packet_len(0x131)); - } else { - clif_send(buf,packet_len(0x131),bl,AREA_WOS); +void clif_showvendingboard( struct map_session_data& sd, enum send_target target, struct block_list* tbl ){ + if( tbl == nullptr ){ + tbl = &sd.bl; + target = AREA_WOS; } + + struct PACKET_ZC_STORE_ENTRY p = {}; + + p.packetType = HEADER_ZC_STORE_ENTRY; + p.makerAID = sd.status.account_id; + safestrncpy( p.storeName, sd.message, sizeof( p.storeName ) ); + + clif_send( &p, sizeof( p ), tbl, target ); } @@ -7700,7 +7665,7 @@ void clif_vendinglist( struct map_session_data* sd, struct map_session_data* vsd p->items[i].location = pc_equippoint_sub( sd, data ); p->items[i].viewSprite = data->look; #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - p->items[i].enchantgrade = vsd->cart.u.items_cart[index].enchantgrade; + p->items[i].grade = vsd->cart.u.items_cart[index].enchantgrade; #endif #endif #endif @@ -7790,7 +7755,7 @@ void clif_openvending( struct map_session_data* sd, int id, struct s_vending* ve #if PACKETVER >= 20150226 clif_add_random_options( p->items[i].option_data, &sd->cart.u.items_cart[index] ); #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - p->items[i].enchantgrade = sd->cart.u.items_cart[index].enchantgrade; + p->items[i].grade = sd->cart.u.items_cart[index].enchantgrade; #endif #endif } @@ -7839,17 +7804,13 @@ void clif_vendingreport(struct map_session_data* sd, int index, int amount, uint /// 2 = MsgStringTable[79]="already in a party" /// 3 = cannot organize parties on this map /// ? = nothing -void clif_party_created(struct map_session_data *sd,int result) -{ - int fd; +void clif_party_created( struct map_session_data& sd, int result ){ + struct PACKET_ZC_ACK_MAKE_GROUP p = {}; - nullpo_retv(sd); + p.PacketType = HEADER_ZC_ACK_MAKE_GROUP; + p.result = result; - fd=sd->fd; - WFIFOHEAD(fd,packet_len(0xfa)); - WFIFOW(fd,0)=0xfa; - WFIFOB(fd,2)=result; - WFIFOSET(fd,packet_len(0xfa)); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); } @@ -7863,43 +7824,35 @@ void clif_party_created(struct map_session_data *sd,int result) /// state: /// 0 = connected /// 1 = disconnected -void clif_party_member_info(struct party_data *p, struct map_session_data *sd) -{ - int i; -#if PACKETVER < 20170502 - unsigned char buf[81]; - int cmd = 0x1e9; - int offset = 0; -#else - unsigned char buf[85]; - int cmd = 0xa43; - int offset = 4; -#endif +void clif_party_member_info( struct party_data& party, struct map_session_data& sd ){ + int id = party_getmemberid( &party, &sd ); - if (!sd) { //Pick any party member (this call is used when changing item share rules) - ARR_FIND( 0, MAX_PARTY, i, p->data[i].sd != 0 ); - } else { - ARR_FIND( 0, MAX_PARTY, i, p->data[i].sd == sd ); + if( id < 0 ){ + return; } - if (i >= MAX_PARTY) return; //Should never happen... - sd = p->data[i].sd; - WBUFW(buf, 0) = cmd; - WBUFL(buf, 2) = sd->status.account_id; - WBUFL(buf, 6) = (p->party.member[i].leader)?0:1; -#if PACKETVER >= 20170502 - WBUFW(buf,10) = sd->status.class_; - WBUFW(buf,12) = sd->status.base_level; + struct PACKET_ZC_ADD_MEMBER_TO_GROUP p = {}; + + p.packetType = partymemberinfo; + p.AID = sd.status.account_id; +#if PACKETVER >= 20171207 + p.GID = sd.status.char_id; #endif - WBUFW(buf,offset+10) = sd->bl.x; - WBUFW(buf,offset+12) = sd->bl.y; - WBUFB(buf,offset+14) = (p->party.member[i].online)?0:1; - safestrncpy(WBUFCP(buf,offset+15), p->party.name, NAME_LENGTH); - safestrncpy(WBUFCP(buf,offset+39), sd->status.name, NAME_LENGTH); - mapindex_getmapname_ext(map_mapid2mapname(sd->bl.m), WBUFCP(buf,offset+63)); - WBUFB(buf,offset+79) = (p->party.item&1)?1:0; - WBUFB(buf,offset+80) = (p->party.item&2)?1:0; - clif_send(buf,packet_len(cmd),&sd->bl,PARTY); + p.leader = ( party.party.member[id].leader != 0 ) ? 0 : 1; +#if PACKETVER_MAIN_NUM >= 20170524 || PACKETVER_RE_NUM >= 20170502 || defined(PACKETVER_ZERO) + p.class_ = sd.status.class_; + p.baseLevel = sd.status.base_level; +#endif + p.x = sd.bl.x; + p.y = sd.bl.y; + p.offline = ( party.party.member[id].online != 0 ) ? 0 : 1; + safestrncpy( p.partyName, party.party.name, sizeof( p.partyName ) ); + safestrncpy( p.playerName, sd.status.name, sizeof( p.playerName ) ); + mapindex_getmapname_ext( map_mapid2mapname( sd.bl.m ), p.mapName ); + p.sharePickup = ( party.party.item&1 ) ? 1 : 0; + p.shareLoot = ( party.party.item&2 )? 1 : 0; + + clif_send( &p, sizeof( p ), &sd.bl, PARTY ); } @@ -7912,57 +7865,57 @@ void clif_party_member_info(struct party_data *p, struct map_session_data *sd) /// 0 = connected /// 1 = disconnected /// 0a44 .W .24B { .L .24B .16B .B .B .W .W }* .B .B .L -void clif_party_info(struct party_data* p, struct map_session_data *sd) -{ - struct map_session_data* party_sd = NULL; - int i, c; -#if PACKETVER < 20170502 - const int M_SIZE = 46; // 4+NAME_LENGTH+MAP_NAME_LENGTH_EXT+1+1 - unsigned char buf[2+2+NAME_LENGTH+46*MAX_PARTY]; - int cmd = 0xfb; -#else - const int M_SIZE = 50; // 4+NAME_LENGTH+MAP_NAME_LENGTH_EXT+1+1+4 - unsigned char buf[2+2+NAME_LENGTH+50*MAX_PARTY+6]; - int cmd = 0xa44; +void clif_party_info( struct party_data& party, struct map_session_data* sd ){ + send_target target; + + if( sd == nullptr ){ + sd = party_getavailablesd( &party ); + + if( sd == nullptr ){ + // Nobody is online to notify + return; + } + + // Send to whole party + target = PARTY; + }else{ + // Send only to self + target = SELF; + } + + struct PACKET_ZC_GROUP_LIST* p = (struct PACKET_ZC_GROUP_LIST*)packet_buffer; + + p->packetType = partyinfo; + p->packetLen = sizeof( *p ); + safestrncpy( p->partyName, party.party.name, sizeof( p->partyName ) ); + + for( int i = 0, c = 0; i < MAX_PARTY; i++ ){ + struct party_member& m = party.party.member[i]; + + if( m.account_id == 0 ){ + continue; + } + + struct PACKET_ZC_GROUP_LIST_SUB& member = p->members[c]; + + member.AID = m.account_id; +#if PACKETVER >= 20171207 + member.GID = m.char_id; #endif - const int PRE_SIZE = 28; // cmd, actual cmd_size, party_name - - nullpo_retv(p); - - WBUFW(buf,0) = cmd; - safestrncpy(WBUFCP(buf,4), p->party.name, NAME_LENGTH); - for(i = 0, c = 0; i < MAX_PARTY; i++) - { - struct party_member* m = &p->party.member[i]; - if(!m->account_id) continue; - - if(party_sd == NULL) party_sd = p->data[i].sd; - - WBUFL(buf,PRE_SIZE+c*M_SIZE) = m->account_id; - safestrncpy(WBUFCP(buf,PRE_SIZE+c*M_SIZE+4), m->name, NAME_LENGTH); - mapindex_getmapname_ext(mapindex_id2name(m->map), WBUFCP(buf,PRE_SIZE+c*M_SIZE+PRE_SIZE)); - WBUFB(buf,PRE_SIZE+c*M_SIZE+44) = (m->leader) ? 0 : 1; - WBUFB(buf,PRE_SIZE+c*M_SIZE+45) = (m->online) ? 0 : 1; -#if PACKETVER >= 20170502 - WBUFW(buf,PRE_SIZE+c*M_SIZE+46) = m->class_; - WBUFW(buf,PRE_SIZE+c*M_SIZE+48) = m->lv; + safestrncpy( member.playerName, m.name, sizeof( member.playerName ) ); + mapindex_getmapname_ext( mapindex_id2name( m.map ), member.mapName ); + member.leader = ( m.leader ) ? 0 : 1; + member.offline = ( m.online ) ? 0 : 1; +#if PACKETVER_MAIN_NUM >= 20170524 || PACKETVER_RE_NUM >= 20170502 || defined(PACKETVER_ZERO) + member.class_ = m.class_; + member.baseLevel = m.lv; #endif + c++; + p->packetLen += sizeof( member ); } -#if PACKETVER < 20170502 - WBUFW(buf,2) = PRE_SIZE+c*M_SIZE; -#else - WBUFB(buf,PRE_SIZE+c*M_SIZE) = (p->party.item & 1) ? 1 : 0; - WBUFB(buf,PRE_SIZE+c*M_SIZE+1) = (p->party.item & 2) ? 1 : 0; - WBUFL(buf,PRE_SIZE+c*M_SIZE+2) = 0; // unknown - WBUFW(buf,2) = PRE_SIZE+c*M_SIZE+6; -#endif - if(sd) { // send only to self - clif_send(buf, WBUFW(buf,2), &sd->bl, SELF); - } else if (party_sd) { // send to whole party - clif_send(buf, WBUFW(buf,2), &party_sd->bl, PARTY); - } + clif_send( p, p->packetLen, &sd->bl, target ); } @@ -7971,77 +7924,67 @@ void clif_party_info(struct party_data* p, struct map_session_data *sd) /// flag: /// 0 = allow party invites /// 1 = auto-deny party invites -void clif_partyinvitationstate(struct map_session_data* sd) -{ - int fd; - nullpo_retv(sd); - fd = sd->fd; +void clif_partyinvitationstate( struct map_session_data& sd ){ +#if PACKETVER_MAIN_NUM >= 20070911 || defined(PACKETVER_RE) || PACKETVER_AD_NUM >= 20070911 || PACKETVER_SAK_NUM >= 20070904 || defined(PACKETVER_ZERO) + struct PACKET_ZC_PARTY_CONFIG p = {}; - WFIFOHEAD(fd, packet_len(0x2c9)); - WFIFOW(fd, 0) = 0x2c9; - WFIFOB(fd, 2) = 0; // not implemented - WFIFOSET(fd, packet_len(0x2c9)); + p.packetType = HEADER_ZC_PARTY_CONFIG; + p.denyPartyInvites = 0; // TODO: not implemented + + clif_send( &p, sizeof( p ), &sd.bl, SELF ); +#endif } /// Party invitation request. /// 00fe .L .24B (ZC_REQ_JOIN_GROUP) /// 02c6 .L .24B (ZC_PARTY_JOIN_REQ) -void clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd) -{ -#if PACKETVER < 20070821 - const int cmd = 0xfe; -#else - const int cmd = 0x2c6; -#endif - int fd; - struct party_data *p; +void clif_party_invite( struct map_session_data& sd, struct map_session_data& tsd ){ + struct party_data* party = party_search( sd.status.party_id ); - nullpo_retv(sd); - nullpo_retv(tsd); - - fd=tsd->fd; - - if( (p=party_search(sd->status.party_id))==NULL ) + if( party == nullptr ){ return; + } - WFIFOHEAD(fd,packet_len(cmd)); - WFIFOW(fd,0)=cmd; - WFIFOL(fd,2)=sd->status.party_id; - safestrncpy(WFIFOCP(fd,6),p->party.name,NAME_LENGTH); - WFIFOSET(fd,packet_len(cmd)); + struct PACKET_ZC_PARTY_JOIN_REQ p = {}; + + p.PacketType = HEADER_ZC_PARTY_JOIN_REQ; + p.GRID = party->party.party_id; + safestrncpy( p.groupName, party->party.name, sizeof( p.groupName ) ); + + clif_send( &p, sizeof( p ), &tsd.bl, SELF ); } /// Party invite result. /// 00fd .24S .B (ZC_ACK_REQ_JOIN_GROUP) /// 02c5 .24S .L (ZC_PARTY_JOIN_REQ_ACK) -void clif_party_invite_reply(struct map_session_data* sd, const char* nick, enum e_party_invite_reply reply) -{ - int fd; - nullpo_retv(sd); - fd=sd->fd; - +/// result=0 : char is already in a party -> MsgStringTable[80] +/// result=1 : party invite was rejected -> MsgStringTable[81] +/// result=2 : party invite was accepted -> MsgStringTable[82] +/// result=3 : party is full -> MsgStringTable[83] +/// result=4 : char of the same account already joined the party -> MsgStringTable[608] +/// result=5 : char blocked party invite -> MsgStringTable[1324] (since 20070904) +/// result=7 : char is not online or doesn't exist -> MsgStringTable[71] (since 20070904) +/// result=8 : (%s) are currently in restricted map to join a party. -> MsgStringTable[1388] (since 20080527) +/// result=9 : Cannot join a party in this map. -> MsgStringTable[1871] (since 20110215) +/// result=10 : You cannot invite or withdraw while in memorial dungeon -> message: MSG_ID_BD3 (since 20161130) +/// result=11 : The character is a level that can not join the party -> message: MSG_ID_C9A (since 20170412) +void clif_party_invite_reply( struct map_session_data& sd, const char* nick, enum e_party_invite_reply reply ){ #if PACKETVER < 20070904 - if( reply == PARTY_REPLY_OFFLINE ) { - clif_displaymessage(fd, msg_txt(sd,3)); + if( reply == PARTY_REPLY_OFFLINE ){ + clif_displaymessage( sd.fd, msg_txt( &sd, 3 ) ); // Character not found. return; } #endif -#if PACKETVER < 20070821 - WFIFOHEAD(fd,packet_len(0xfd)); - WFIFOW(fd,0) = 0xfd; - safestrncpy(WFIFOCP(fd,2),nick,NAME_LENGTH); - WFIFOB(fd,26) = reply; - WFIFOSET(fd,packet_len(0xfd)); -#else - WFIFOHEAD(fd,packet_len(0x2c5)); - WFIFOW(fd,0) = 0x2c5; - safestrncpy(WFIFOCP(fd,2),nick,NAME_LENGTH); - WFIFOL(fd,26) = reply; - WFIFOSET(fd,packet_len(0x2c5)); -#endif + struct PACKET_ZC_PARTY_JOIN_REQ_ACK p = {}; + + p.PacketType = HEADER_ZC_PARTY_JOIN_REQ_ACK; + safestrncpy( p.characterName, nick, sizeof( p.characterName ) ); + p.result = reply; + + clif_send( &p, sizeof( p ), &sd.bl, SELF ); } @@ -8094,171 +8037,147 @@ void clif_party_option(struct party_data *p,struct map_session_data *sd,int flag * @param result Party leave result @see PARTY_MEMBER_WITHDRAW * @param target Send target **/ -void clif_party_withdraw(struct map_session_data *sd, uint32 account_id, const char* name, enum e_party_member_withdraw result, enum send_target target) { - unsigned char buf[2+4+NAME_LENGTH+1]; +void clif_party_withdraw( struct map_session_data& sd, uint32 account_id, const char* name, enum e_party_member_withdraw result, enum send_target target ){ + struct PACKET_ZC_DELETE_MEMBER_FROM_GROUP p = {}; - if (!sd) - return; + p.PacketType = HEADER_ZC_DELETE_MEMBER_FROM_GROUP; + p.AID = account_id; + safestrncpy( p.characterName, name, sizeof( p.characterName ) ); + p.result = result; - WBUFW(buf,0) = 0x0105; - WBUFL(buf,2) = account_id; - memcpy(WBUFP(buf,6), name, NAME_LENGTH); - WBUFB(buf,6+NAME_LENGTH) = result; - - clif_send(buf, 2+4+NAME_LENGTH+1, &sd->bl, target); + clif_send( &p, sizeof( p ), &sd.bl, target ); } /// Party chat message (ZC_NOTIFY_CHAT_PARTY). /// 0109 .W .L .?B -void clif_party_message(struct party_data* p, uint32 account_id, const char* mes, int len) -{ - struct map_session_data *sd; - int i; +void clif_party_message( struct party_data& party, uint32 account_id, const char* mes, int len ){ + struct map_session_data* sd = party_getavailablesd( &party ); - nullpo_retv(p); - - ARR_FIND(0,MAX_PARTY,i,p->data[i].sd); - if(i < MAX_PARTY){ - unsigned char buf[1024]; - - if( len > sizeof(buf)-8 ) - { - ShowWarning("clif_party_message: Truncated message '%s' (len=%d, max=%" PRIuPTR ", party_id=%d).\n", mes, len, sizeof(buf)-8, p->party.party_id); - len = sizeof(buf)-8; - } - - sd = p->data[i].sd; - WBUFW(buf,0)=0x109; - WBUFW(buf,2)=len+8; - WBUFL(buf,4)=account_id; - safestrncpy(WBUFCP(buf,8), mes, len); - clif_send(buf,len+8,&sd->bl,PARTY); + if( sd == nullptr ){ + return; } + + if( len ){ + ShowWarning( "clif_party_message: Truncated message '%s' (len=%d, max=%" PRIuPTR ", party_id=%d).\n", mes, len, CHAT_SIZE_MAX, party.party.party_id ); + len = CHAT_SIZE_MAX; + } + + struct PACKET_ZC_NOTIFY_CHAT_PARTY* p = (struct PACKET_ZC_NOTIFY_CHAT_PARTY*)packet_buffer; + + p->PacketType = HEADER_ZC_NOTIFY_CHAT_PARTY; + p->PacketLength = sizeof( *p ) + len; + p->AID = account_id; + safestrncpy( p->chatMsg, mes, len ); + + clif_send( p, p->PacketLength, &sd->bl, PARTY ); } /// Updates the position of a party member on the minimap (ZC_NOTIFY_POSITION_TO_GROUPM). /// 0107 .L .W .W -void clif_party_xy(struct map_session_data *sd) -{ - unsigned char buf[16]; +void clif_party_xy( struct map_session_data& sd ){ + struct PACKET_ZC_NOTIFY_POSITION_TO_GROUPM p = {}; - nullpo_retv(sd); + p.PacketType = HEADER_ZC_NOTIFY_POSITION_TO_GROUPM; + p.AID = sd.status.account_id; + p.xPos = sd.bl.x; + p.yPos = sd.bl.y; - WBUFW(buf,0)=0x107; - WBUFL(buf,2)=sd->status.account_id; - WBUFW(buf,6)=sd->bl.x; - WBUFW(buf,8)=sd->bl.y; - clif_send(buf,packet_len(0x107),&sd->bl,PARTY_SAMEMAP_WOS); + clif_send( &p, sizeof( p ), &sd.bl, PARTY_SAMEMAP_WOS ); } - /*========================================== * Sends x/y dot to a single fd. [Skotlex] *------------------------------------------*/ -void clif_party_xy_single(int fd, struct map_session_data *sd) -{ - WFIFOHEAD(fd,packet_len(0x107)); - WFIFOW(fd,0)=0x107; - WFIFOL(fd,2)=sd->status.account_id; - WFIFOW(fd,6)=sd->bl.x; - WFIFOW(fd,8)=sd->bl.y; - WFIFOSET(fd,packet_len(0x107)); -} +void clif_party_xy_single( struct map_session_data& sd, struct map_session_data& tsd ){ + struct PACKET_ZC_NOTIFY_POSITION_TO_GROUPM p = {}; + p.PacketType = HEADER_ZC_NOTIFY_POSITION_TO_GROUPM; + p.AID = sd.status.account_id; + p.xPos = sd.bl.x; + p.yPos = sd.bl.y; + + clif_send( &p, sizeof( p ), &tsd.bl, SELF ); +} /// Updates HP bar of a party member. /// 0106 .L .W .W (ZC_NOTIFY_HP_TO_GROUPM) /// 080e .L .L .L (ZC_NOTIFY_HP_TO_GROUPM_R2) -void clif_party_hp(struct map_session_data *sd) -{ - unsigned char buf[16]; -#if PACKETVER < 20100126 - const int cmd = 0x106; -#else - const int cmd = 0x80e; -#endif +void clif_party_hp( struct map_session_data& sd ){ + struct PACKET_ZC_NOTIFY_HP_TO_GROUPM p = {}; - nullpo_retv(sd); - - WBUFW(buf,0)=cmd; - WBUFL(buf,2)=sd->status.account_id; -#if PACKETVER < 20100126 - if (sd->battle_status.max_hp > INT16_MAX) { //To correctly display the %hp bar. [Skotlex] - WBUFW(buf,6) = sd->battle_status.hp/(sd->battle_status.max_hp/100); - WBUFW(buf,8) = 100; - } else { - WBUFW(buf,6) = sd->battle_status.hp; - WBUFW(buf,8) = sd->battle_status.max_hp; + p.PacketType = HEADER_ZC_NOTIFY_HP_TO_GROUPM; + p.AID = sd.status.account_id; +#if PACKETVER < 20100119 + // To correctly display the %hp bar. [Skotlex] + if( sd.battle_status.max_hp > INT16_MAX ){ + p.hp = sd.battle_status.hp / ( sd.battle_status.max_hp / 100 ); + p.maxhp = 100; + }else{ + p.hp = sd.battle_status.hp; + p.maxhp = sd.battle_status.max_hp; } #else - WBUFL(buf,6) = sd->battle_status.hp; - WBUFL(buf,10) = sd->battle_status.max_hp; + p.hp = sd.battle_status.hp; + p.maxhp = sd.battle_status.max_hp; #endif - clif_send(buf,packet_len(cmd),&sd->bl,PARTY_AREA_WOS); + + clif_send( &p, sizeof( p ), &sd.bl, PARTY_AREA_WOS ); } /// Notifies the party members of a character's death or revival. /// 0AB2 .L .B -void clif_party_dead( struct map_session_data *sd ){ -#if PACKETVER >= 20170502 - unsigned char buf[7]; +void clif_party_dead( struct map_session_data& sd ){ +#if PACKETVER_MAIN_NUM >= 20170524 || PACKETVER_RE_NUM >= 20170502 || defined(PACKETVER_ZERO) + struct PACKET_ZC_GROUP_ISALIVE p = {}; - nullpo_retv(sd); + p.packetType = HEADER_ZC_GROUP_ISALIVE; + p.AID = sd.status.account_id; + p.isDead = pc_isdead( &sd ); - WBUFW(buf, 0) = 0xab2; - WBUFL(buf, 2) = sd->status.account_id; - WBUFB(buf, 6) = pc_isdead(sd); - - clif_send(buf, packet_len(0xab2), &sd->bl, PARTY); + clif_send( &p, sizeof( p ), &sd.bl, PARTY ); #endif } /// Updates the job and level of a party member /// 0abd .L .W .W -void clif_party_job_and_level(struct map_session_data *sd){ -#if PACKETVER >= 20170502 - unsigned char buf[10]; +void clif_party_job_and_level( struct map_session_data& sd ){ +#if PACKETVER_MAIN_NUM >= 20170502 || PACKETVER_RE_NUM >= 20170419 || defined(PACKETVER_ZERO) + struct PACKET_ZC_NOTIFY_MEMBERINFO_TO_GROUPM p = {}; - nullpo_retv(sd); + p.PacketType = HEADER_ZC_NOTIFY_MEMBERINFO_TO_GROUPM; + p.AID = sd.status.account_id; + p.job = sd.status.class_; + p.level = sd.status.base_level; - WBUFW(buf, 0) = 0xabd; - WBUFL(buf, 2) = sd->status.account_id; - WBUFW(buf, 6) = sd->status.class_; - WBUFW(buf, 8) = sd->status.base_level; - - clif_send(buf, packet_len(0xabd), &sd->bl, PARTY); + clif_send( &p, sizeof( p ), &sd.bl, PARTY ); #endif } /*========================================== * Sends HP bar to a single fd. [Skotlex] *------------------------------------------*/ -void clif_hpmeter_single(int fd, int id, unsigned int hp, unsigned int maxhp) -{ -#if PACKETVER < 20100126 - const int cmd = 0x106; -#else - const int cmd = 0x80e; -#endif - WFIFOHEAD(fd,packet_len(cmd)); - WFIFOW(fd,0) = cmd; - WFIFOL(fd,2) = id; -#if PACKETVER < 20100126 - if( maxhp > INT16_MAX ) - {// To correctly display the %hp bar. [Skotlex] - WFIFOW(fd,6) = hp/(maxhp/100); - WFIFOW(fd,8) = 100; - } else { - WFIFOW(fd,6) = hp; - WFIFOW(fd,8) = maxhp; +void clif_hpmeter_single( struct map_session_data& sd, uint32 id, uint32 hp, uint32 maxhp ){ + struct PACKET_ZC_NOTIFY_HP_TO_GROUPM p = {}; + + p.PacketType = HEADER_ZC_NOTIFY_HP_TO_GROUPM; + p.AID = id; +#if PACKETVER < 20100119 + // To correctly display the %hp bar. [Skotlex] + if( maxhp > INT16_MAX ){ + p.hp = hp / ( maxhp / 100 ); + p.maxhp = 100; + }else{ + p.hp = hp; + p.maxhp = maxhp; } #else - WFIFOL(fd,6) = hp; - WFIFOL(fd,10) = maxhp; + p.hp = hp; + p.maxhp = maxhp; #endif - WFIFOSET(fd, packet_len(cmd)); + + clif_send( &p, sizeof( p ), &sd.bl, SELF ); } /// Notifies the client, that it's attack target is too far (ZC_ATTACK_FAILURE_FOR_DISTANCE). @@ -8601,15 +8520,15 @@ void clif_spiritball( struct block_list *bl, struct block_list* target, enum sen struct PACKET_ZC_SPIRITS p = {}; - p.packetType = HEADER_ZC_SPIRITS; - p.GID = bl->id; + p.PacketType = HEADER_ZC_SPIRITS; + p.AID = bl->id; switch( bl->type ){ case BL_PC: - p.amount = ( (struct map_session_data*)bl )->spiritball; + p.num = ( (struct map_session_data*)bl )->spiritball; break; case BL_HOM: - p.amount = ( (struct homun_data*)bl )->homunculus.spiritball; + p.num = ( (struct homun_data*)bl )->homunculus.spiritball; break; } @@ -8741,25 +8660,32 @@ void clif_guild_created(struct map_session_data *sd,int flag) /// mode: /// &0x01 = allow invite /// &0x10 = allow expel -void clif_guild_belonginfo(struct map_session_data *sd) -{ - int ps,fd; - struct guild* g; +void clif_guild_belonginfo( struct map_session_data& sd ){ + if( sd.guild == nullptr ){ + return; + } - nullpo_retv(sd); - nullpo_retv(g = sd->guild); + struct guild& guild = *sd.guild; + int position = guild_getposition( &sd ); - fd=sd->fd; - ps=guild_getposition(sd); - WFIFOHEAD(fd,packet_len(0x16c)); - WFIFOW(fd,0)=0x16c; - WFIFOL(fd,2)=g->guild_id; - WFIFOL(fd,6)=g->emblem_id; - WFIFOL(fd,10)=g->position[ps].mode; - WFIFOB(fd,14)=(bool)(sd->state.gmaster_flag==1); - WFIFOL(fd,15)=0; // InterSID (unknown purpose) - safestrncpy(WFIFOCP(fd,19),g->name,NAME_LENGTH); - WFIFOSET(fd,packet_len(0x16c)); + if( position < 0 ){ + return; + } + + struct PACKET_ZC_UPDATE_GDID p = {}; + + p.PacketType = HEADER_ZC_UPDATE_GDID; + p.guildId = guild.guild_id; + p.emblemVersion = guild.emblem_id; + p.mode = guild.position[position].mode; + p.isMaster = ( sd.state.gmaster_flag == 1 ); + p.interSid = 0; // InterSID (unknown purpose) + safestrncpy( p.guildName, guild.name, sizeof( p.guildName ) ); +#if PACKETVER_MAIN_NUM >= 20220216 + p.masterGID = guild.member[0].char_id; +#endif + + clif_send( &p, sizeof( p ), &sd.bl, SELF ); } @@ -8864,47 +8790,39 @@ void clif_guild_masterormember(struct map_session_data *sd) /// 0150 .L .L .L .L .L .L .L .L .L .L .24B .24B .16B (ZC_GUILD_INFO) /// 01b6 .L .L .L .L .L .L .L .L .L .L .24B .24B .16B .L (ZC_GUILD_INFO2) /// 0a84 .L .L .L .L .L .L .L .L .L .L .24B .16B .L .L (ZC_GUILD_INFO3) -void clif_guild_basicinfo(struct map_session_data *sd) { - int fd; - struct guild *g; -#if PACKETVER < 20160622 - int cmd = 0x1b6; - int offset = NAME_LENGTH; -#else - int cmd = 0xa84; - int offset = 0; -#endif - - nullpo_retv(sd); - fd = sd->fd; - - if( (g = sd->guild) == NULL ) +void clif_guild_basicinfo( struct map_session_data& sd ){ + if( sd.guild == nullptr ){ return; + } - WFIFOHEAD(fd,packet_len(cmd)); - WFIFOW(fd, 0)=cmd; - WFIFOL(fd, 2)=g->guild_id; - WFIFOL(fd, 6)=g->guild_lv; - WFIFOL(fd,10)=g->connect_member; - WFIFOL(fd,14)=g->max_member; - WFIFOL(fd,18)=g->average_lv; - WFIFOL(fd,22)=(uint32)cap_value(g->exp, 0, MAX_GUILD_EXP); - WFIFOL(fd,26)=(uint32)cap_value(g->next_exp, 0, MAX_GUILD_EXP); - WFIFOL(fd,30)=0; // Tax Points - WFIFOL(fd,34)=0; // Honor: (left) Vulgar [-100,100] Famed (right) - WFIFOL(fd,38)=0; // Virtue: (down) Wicked [-100,100] Righteous (up) - WFIFOL(fd,42)=g->emblem_id; - safestrncpy(WFIFOCP(fd,46),g->name, NAME_LENGTH); -#if PACKETVER < 20160622 - safestrncpy(WFIFOCP(fd,70),g->master, NAME_LENGTH); -#endif - safestrncpy(WFIFOCP(fd,70+offset),msg_txt(sd,300+guild_checkcastles(g)),16); // "'N' castles" - WFIFOL(fd,70+offset+16) = 0; // zeny -#if PACKETVER >= 20160622 - WFIFOL(fd,70+offset+20) = g->member[0].char_id; // leader + struct guild& guild = *sd.guild; + struct PACKET_ZC_GUILD_INFO p = {}; + + p.PacketType = HEADER_ZC_GUILD_INFO; + p.GDID = guild.guild_id; + p.level = guild.guild_lv; + p.userNum = guild.connect_member; + p.maxUserNum = guild.max_member; + p.userAverageLevel = guild.average_lv; + p.exp = (uint32)cap_value( guild.exp, 0, MAX_GUILD_EXP ); + p.maxExp = (uint32)cap_value( guild.next_exp, 0, MAX_GUILD_EXP ); + p.point = 0; // Tax Points + p.honor = 0; // Honor: (left) Vulgar [-100,100] Famed (right) + p.virtue = 0; // Virtue: (down) Wicked [-100,100] Righteous (up) + p.emblemVersion = guild.emblem_id; + safestrncpy( p.guildname, guild.name, sizeof( p.guildname ) ); + safestrncpy( p.manageLand, msg_txt( &sd, 300 + guild_checkcastles( &guild ) ), sizeof( p.manageLand ) ); + p.zeny = 0; +#if PACKETVER >= 20200902 + p.masterGID = guild.member[0].char_id; // leader + safestrncpy( p.masterName, guild.master, sizeof( p.masterName ) ); +#elif PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO) + p.masterGID = guild.member[0].char_id; // leader +#else + safestrncpy( p.masterName, guild.master, sizeof( p.masterName ) ); #endif - WFIFOSET(fd,packet_len(cmd)); + clif_send( &p, sizeof( p ), &sd.bl, SELF ); } @@ -8944,52 +8862,51 @@ void clif_guild_allianceinfo(struct map_session_data *sd) /// memo: /// probably member's self-introduction (unused, no client UI/packets for editing it) /// 0aa5 .W { .L .L .W .W .W .W .W .L .L .L .L }* (ZC_MEMBERMGR_INFO2) -void clif_guild_memberlist(struct map_session_data *sd) -{ - int fd; - int i,c; - struct guild *g; -#if PACKETVER < 20161026 - int cmd = 0x154; - int size = 104; -#else - int cmd = 0xaa5; - int size = 34; -#endif - - nullpo_retv(sd); - - if( !session_isActive(fd = sd->fd) ) +void clif_guild_memberlist( struct map_session_data& sd ){ + if( sd.guild == nullptr ){ return; - if( (g = sd->guild) == NULL ) - return; - - WFIFOHEAD(fd, g->max_member * size + 4); - WFIFOW(fd, 0)=cmd; - for(i=0,c=0;imax_member;i++){ - struct guild_member *m=&g->member[i]; - if(m->account_id==0) - continue; - WFIFOL(fd,c*size+ 4)=m->account_id; - WFIFOL(fd,c*size+ 8)=m->char_id; - WFIFOW(fd,c*size+12)=m->hair; - WFIFOW(fd,c*size+14)=m->hair_color; - WFIFOW(fd,c*size+16)=m->gender; - WFIFOW(fd,c*size+18)=m->class_; - WFIFOW(fd,c*size+20)=m->lv; - WFIFOL(fd,c*size+22)=(int)cap_value(m->exp,0,INT32_MAX); - WFIFOL(fd,c*size+26)=m->online; - WFIFOL(fd,c*size+30)=m->position; -#if PACKETVER < 20161026 - memset(WFIFOP(fd,c*size+34),0,50); //[Ind] - This is displayed in the 'note' column but being you can't edit it it's sent empty. - safestrncpy(WFIFOCP(fd,c*size+84),m->name,NAME_LENGTH); -#else - WFIFOL(fd,c*size+34)=m->last_login; -#endif - c++; } - WFIFOW(fd, 2)=c*size+4; - WFIFOSET(fd,WFIFOW(fd,2)); + + struct guild& guild = *sd.guild; + struct PACKET_ZC_MEMBERMGR_INFO* p = (struct PACKET_ZC_MEMBERMGR_INFO*)packet_buffer; + + p->PacketType = HEADER_ZC_MEMBERMGR_INFO; + p->packetLength = sizeof( *p ); + + for( int i = 0, c = 0; i < guild.max_member; i++ ){ + struct guild_member& member = guild.member[i]; + + if( member.account_id == 0 ){ + continue; + } + + struct GUILD_MEMBER_INFO& member_info = p->guildMemberInfo[c]; + + member_info.AID = member.account_id; + member_info.GID = member.char_id; + member_info.head = member.hair; + member_info.headPalette = member.hair_color; + member_info.sex = member.gender; + member_info.job = member.class_; + member_info.level = member.lv; + member_info.contributionExp = (uint32)cap_value( member.exp, 0, MAX_GUILD_EXP ); + member_info.currentState = member.online; + member_info.positionID = member.position; +#if PACKETVER >= 20200902 + member_info.lastLoginTime = member.last_login; + safestrncpy( member_info.char_name, member.name, sizeof( member_info.char_name ) ); +#elif PACKETVER_MAIN_NUM >= 20161214 || PACKETVER_RE_NUM >= 20161130 || defined(PACKETVER_ZERO) + member_info.lastLoginTime = member.last_login; +#else + memset( member_info.intro, 0, sizeof( member_info.intro ) ); //[Ind] - This is displayed in the 'note' column but being you can't edit it it's sent empty. + safestrncpy( member_info.char_name, member.name, sizeof( member_info.char_name ) ); +#endif + + c++; + p->packetLength += sizeof( member_info ); + } + + clif_send( p, p->packetLength, &sd.bl, SELF ); } @@ -9740,23 +9657,29 @@ void clif_wisall(struct map_session_data *sd,int type,int flag) WFIFOSET(fd,packet_len(0xd2)); } - /// Play a BGM! [Rikter/Yommy] (ZC_PLAY_NPC_BGM). /// 07fe .24B -void clif_playBGM(struct map_session_data* sd, const char* name) -{ - int fd; +void clif_playBGM( struct map_session_data& sd, const char* name ){ +#if PACKETVER_MAIN_NUM >= 20220504 + struct PACKET_ZC_PLAY_NPC_BGM* p = (struct PACKET_ZC_PLAY_NPC_BGM*)packet_buffer; + int16 length = (int16)( strlen( name ) + 1 ); - nullpo_retv(sd); + p->PacketType = HEADER_ZC_PLAY_NPC_BGM; + p->PacketLength = sizeof( *p ) + length; + p->playType = 0; // TODO: implement, send loop for the time being + safestrncpy( p->bgm, name, length ); - fd = sd->fd; - WFIFOHEAD(fd,packet_len(0x7fe)); - WFIFOW(fd,0) = 0x7fe; - safestrncpy(WFIFOCP(fd,2), name, NAME_LENGTH); - WFIFOSET(fd,packet_len(0x7fe)); + clif_send( p, p->PacketLength, &sd.bl, SELF ); +#elif PACKETVER >= 20091201 + struct PACKET_ZC_PLAY_NPC_BGM p = {}; + + p.PacketType = HEADER_ZC_PLAY_NPC_BGM; + safestrncpy( p.bgm, name, sizeof( p.bgm ) ); + + clif_send( &p, sizeof( p ), &sd.bl, SELF ); +#endif } - /// Plays/stops a wave sound (ZC_SOUND). /// 01d3 .24B .B .L .L /// file name: @@ -9770,38 +9693,18 @@ void clif_playBGM(struct map_session_data* sd, const char* name) /// npc id: /// The accustic direction of the sound is determined by the /// relative position of the NPC to the player (3D sound). -void clif_soundeffect(struct map_session_data* sd, struct block_list* bl, const char* name, int type) -{ - int fd; +void clif_soundeffect( struct block_list& bl, const char* name, int type, enum send_target target ){ + struct PACKET_ZC_SOUND p = {}; - nullpo_retv(sd); - nullpo_retv(bl); + p.PacketType = HEADER_ZC_SOUND; + safestrncpy( p.name, name, sizeof( p.name ) ); + p.act = type; + p.term = 0; // TODO: implement + p.AID = bl.id; - fd = sd->fd; - WFIFOHEAD(fd,packet_len(0x1d3)); - WFIFOW(fd,0) = 0x1d3; - safestrncpy(WFIFOCP(fd,2), name, NAME_LENGTH); - WFIFOB(fd,26) = type; - WFIFOL(fd,27) = 0; - WFIFOL(fd,31) = bl->id; - WFIFOSET(fd,packet_len(0x1d3)); + clif_send( &p, sizeof( p ), &bl, target ); } -void clif_soundeffectall(struct block_list* bl, const char* name, int type, enum send_target coverage) -{ - unsigned char buf[40]; - - nullpo_retv(bl); - - WBUFW(buf,0) = 0x1d3; - safestrncpy(WBUFCP(buf,2), name, NAME_LENGTH); - WBUFB(buf,26) = type; - WBUFL(buf,27) = 0; - WBUFL(buf,31) = bl->id; - clif_send(buf, packet_len(0x1d3), bl, coverage); -} - - /// Displays special effects (npcs, weather, etc) [Valaris] (ZC_NOTIFY_EFFECT2). /// 01f3 .L .L /// effect id: @@ -10931,7 +10834,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) // (needs to go after clif_spawn() to show hp bars correctly) if(sd->status.party_id) { party_send_movemap(sd); - clif_party_hp(sd); // Show hp after displacement [LuzZza] + clif_party_hp( *sd ); // Show hp after displacement [LuzZza] } if( sd->bg_id ) clif_bg_hp(sd); // BattleGround System @@ -11005,7 +10908,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) clif_spawn(&sd->ed->bl); clif_elemental_info(sd); clif_elemental_updatestatus(sd,SP_HP); - clif_hpmeter_single(sd->fd,sd->ed->bl.id,sd->ed->battle_status.hp,sd->ed->battle_status.max_hp); + clif_hpmeter_single( *sd, sd->ed->bl.id, sd->ed->battle_status.hp, sd->ed->battle_status.max_hp ); clif_elemental_updatestatus(sd,SP_SP); status_calc_bl(&sd->ed->bl, { SCB_SPEED }); //Elemental mimic their master's speed on each map change } @@ -11094,8 +10997,8 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) } if( sd->state.changemap ) {// restore information that gets lost on map-change + clif_partyinvitationstate( *sd ); #if PACKETVER >= 20070918 - clif_partyinvitationstate(sd); clif_equipcheckbox(sd); #endif clif_pet_autofeed_status(sd,false); @@ -11201,7 +11104,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) if( sd->state.vending ) { /* show we have a vending */ clif_openvending(sd,sd->bl.id,sd->vending); - clif_showvendingboard(&sd->bl,sd->message,0); + clif_showvendingboard( *sd ); } // Don't trigger NPC event or opening vending/buyingstore will be failed @@ -12629,16 +12532,17 @@ void clif_parse_StopAttack(int fd,struct map_session_data *sd) /// Request to move an item from inventory to cart (CZ_MOVE_ITEM_FROM_BODY_TO_CART). /// 0126 .W .L -void clif_parse_PutItemToCart(int fd,struct map_session_data *sd) -{ - struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; +void clif_parse_PutItemToCart( int fd, struct map_session_data *sd ){ if (pc_istrading(sd)) return; if (!pc_iscarton(sd)) return; if (map_getmapflag(sd->bl.m, MF_NOUSECART)) return; - pc_putitemtocart(sd,RFIFOW(fd,info->pos[0])-2,RFIFOL(fd,info->pos[1])); + + struct PACKET_CZ_MOVE_ITEM_FROM_BODY_TO_CART* p = (struct PACKET_CZ_MOVE_ITEM_FROM_BODY_TO_CART*)RFIFOP( fd, 0 ); + + pc_putitemtocart( sd, server_index( p->index ), p->count); } @@ -14110,12 +14014,9 @@ void clif_parse_VendingListReq(int fd, struct map_session_data* sd) /// Shop item(s) purchase request (CZ_PC_PURCHASE_ITEMLIST_FROMMC). /// 0134 .W .L { .W .W }* void clif_parse_PurchaseReq(int fd, struct map_session_data* sd){ - struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; - int len = (int)RFIFOW(fd,info->pos[0]) - 8; - int id = (int)RFIFOL(fd,info->pos[1]); - const uint8* data = (uint8*)RFIFOP(fd,info->pos[2]); + struct PACKET_CZ_PC_PURCHASE_ITEMLIST_FROMMC* p = (struct PACKET_CZ_PC_PURCHASE_ITEMLIST_FROMMC*)RFIFOP( fd, 0 ); - vending_purchasereq(sd, id, sd->vended_id, data, len/4); + vending_purchasereq( sd, p->AID, sd->vended_id, (uint8*)p->list, ( p->packetLength - sizeof( *p ) ) / sizeof( struct CZ_PURCHASE_ITEM_FROMMC ) ); // whether it fails or not, the buy window is closed sd->vended_id = 0; @@ -14125,16 +14026,14 @@ void clif_parse_PurchaseReq(int fd, struct map_session_data* sd){ /// Shop item(s) purchase request (CZ_PC_PURCHASE_ITEMLIST_FROMMC2). /// 0801 .W .L .L { .W .W }* void clif_parse_PurchaseReq2(int fd, struct map_session_data* sd){ - struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; - int len = (int)RFIFOW(fd,info->pos[0]) - 12; - int aid = (int)RFIFOL(fd,info->pos[1]); - int uid = (int)RFIFOL(fd,info->pos[2]); - const uint8* data = (uint8*)RFIFOP(fd,info->pos[3]); +#if PACKETVER >= 20100105 + struct PACKET_CZ_PC_PURCHASE_ITEMLIST_FROMMC2* p = (struct PACKET_CZ_PC_PURCHASE_ITEMLIST_FROMMC2*)RFIFOP( fd, 0 ); - vending_purchasereq(sd, aid, uid, data, len/4); + vending_purchasereq( sd, p->AID, p->UniqueID, (uint8*)p->list, ( p->packetLength - sizeof( *p ) ) / sizeof( struct CZ_PURCHASE_ITEM_FROMMC ) ); // whether it fails or not, the buy window is closed sd->vended_id = 0; +#endif } @@ -14231,12 +14130,12 @@ void clif_parse_GuildRequestInfo(int fd, struct map_session_data *sd) switch( type ) { case 0: // Basic Information Guild, hostile alliance information - clif_guild_basicinfo(sd); + clif_guild_basicinfo( *sd ); clif_guild_allianceinfo(sd); break; case 1: // Members list, list job title clif_guild_positionnamelist(sd); - clif_guild_memberlist(sd); + clif_guild_memberlist( *sd ); break; case 2: // List job title, title information list clif_guild_positionnamelist(sd); @@ -15261,34 +15160,32 @@ int clif_friendslist_toggle_sub(struct map_session_data *sd,va_list ap) /// Sends the whole friends list (ZC_FRIENDS_LIST). /// 0201 .W { .L .L .24B }* /// 0201 .W { .L .L }* >= 20180221 -void clif_friendslist_send(struct map_session_data *sd) -{ - int i = 0, n, fd = sd->fd; -#if PACKETVER < 20180221 || PACKETVER_RE_NUM >= 20200902 - const int size = 8 + NAME_LENGTH; -#else - const int size = 8; +void clif_friendslist_send( struct map_session_data& sd ){ + struct PACKET_ZC_FRIENDS_LIST* p = (struct PACKET_ZC_FRIENDS_LIST*)packet_buffer; + + p->packetType = HEADER_ZC_FRIENDS_LIST; + p->PacketLength = sizeof( *p ); + + for( int i = 0, c = 0; i < MAX_FRIENDS && sd.status.friends[i].char_id; i++ ){ + struct PACKET_ZC_FRIENDS_LIST_sub& f = p->friends[c]; + + f.AID = sd.status.friends[i].account_id; + f.CID = sd.status.friends[i].char_id; +#if !( PACKETVER_MAIN_NUM >= 20180307 || PACKETVER_RE_NUM >= 20180221 || PACKETVER_ZERO_NUM >= 20180328 ) || PACKETVER >= 20200902 + safestrncpy( f.name, sd.status.friends[i].name, sizeof( f.name ) ); #endif - // Send friends list - WFIFOHEAD(fd, MAX_FRIENDS * size + 4); - WFIFOW(fd, 0) = 0x201; - for(i = 0; i < MAX_FRIENDS && sd->status.friends[i].char_id; i++) { - WFIFOL(fd, 4 + size * i + 0) = sd->status.friends[i].account_id; - WFIFOL(fd, 4 + size * i + 4) = sd->status.friends[i].char_id; -#if PACKETVER < 20180221 || PACKETVER_RE_NUM >= 20200902 - safestrncpy(WFIFOCP(fd, 4 + size * i + 8), sd->status.friends[i].name, NAME_LENGTH); -#endif + c++; + p->PacketLength += sizeof( f ); } - if (i) { - WFIFOW(fd,2) = 4 + size * i; - WFIFOSET(fd, WFIFOW(fd,2)); - } + clif_send( p, p->PacketLength, &sd.bl, SELF ); - for (n = 0; n < i; n++) { //Sending the online players - if (map_charid2sd(sd->status.friends[n].char_id)) - clif_friendslist_toggle(sd, sd->status.friends[n].account_id, sd->status.friends[n].char_id, 1); + // Sending the online players + for( int i = 0; i < MAX_FRIENDS && sd.status.friends[i].char_id; i++ ){ + if( map_charid2sd( sd.status.friends[i].char_id ) ){ + clif_friendslist_toggle( &sd, sd.status.friends[i].account_id, sd.status.friends[i].char_id, 1 ); + } } } @@ -15805,7 +15702,7 @@ void clif_Mail_setattachment( struct map_session_data* sd, int index, int amount p.favorite = item->favorite; p.location = pc_equippoint( sd, server_index( index ) ); #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - p.enchantgrade = item->enchantgrade; + p.grade = item->enchantgrade; #endif } @@ -16315,7 +16212,7 @@ void clif_Mail_read( struct map_session_data *sd, int mail_id ){ clif_addcards( &mailitem->slot, item ); clif_add_random_options( mailitem->option_data, item ); #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - mailitem->enchantgrade = item->enchantgrade; + mailitem->grade = item->enchantgrade; #endif p->PacketLength += sizeof( *mailitem ); @@ -18809,7 +18706,7 @@ void clif_party_show_picker( struct map_session_data* sd, struct item* item_data p.location = id->equip; // equip location p.itemType = itemtype( id->nameid ); // item type #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - p.enchantgrade = item_data->enchantgrade; + p.grade = item_data->enchantgrade; #endif clif_send( &p, sizeof( p ), &sd->bl, PARTY_SAMEMAP_WOS ); @@ -19093,27 +18990,26 @@ void clif_buyingstore_myitemlist( struct map_session_data* sd ){ /// Notifies clients in area of a buying store (ZC_BUYING_STORE_ENTRY). /// 0814 .L .80B -void clif_buyingstore_entry(struct map_session_data* sd) -{ - uint8 buf[MESSAGE_SIZE+6]; +void clif_buyingstore_entry( struct map_session_data& sd, struct block_list* tbl ){ +#if PACKETVER >= 20100420 + enum send_target target; - WBUFW(buf,0) = 0x814; - WBUFL(buf,2) = sd->bl.id; - safestrncpy(WBUFCP(buf,6), sd->message, MESSAGE_SIZE); + if( tbl == nullptr ){ + tbl = &sd.bl; + target = AREA_WOS; + }else{ + target = SELF; + } - clif_send(buf, packet_len(0x814), &sd->bl, AREA_WOS); + struct PACKET_ZC_BUYING_STORE_ENTRY p = {}; + + p.packetType = HEADER_ZC_BUYING_STORE_ENTRY; + p.makerAID = sd.status.account_id; + safestrncpy( p.storeName, sd.message, sizeof( p.storeName ) ); + + clif_send( &p, sizeof( p ), tbl, target ); +#endif } -void clif_buyingstore_entry_single(struct map_session_data* sd, struct map_session_data* pl_sd) -{ - int fd = sd->fd; - - WFIFOHEAD(fd,packet_len(0x814)); - WFIFOW(fd,0) = 0x814; - WFIFOL(fd,2) = pl_sd->bl.id; - safestrncpy(WFIFOCP(fd,6), pl_sd->message, MESSAGE_SIZE); - WFIFOSET(fd,packet_len(0x814)); -} - /// Request to close own buying store (CZ_REQ_CLOSE_BUYING_STORE). /// 0815 @@ -19125,25 +19021,25 @@ static void clif_parse_ReqCloseBuyingStore(int fd, struct map_session_data* sd) /// Notifies clients in area that a buying store was closed (ZC_DISAPPEAR_BUYING_STORE_ENTRY). /// 0816 .L -void clif_buyingstore_disappear_entry(struct map_session_data* sd) -{ - uint8 buf[6]; +void clif_buyingstore_disappear_entry( struct map_session_data& sd, struct block_list* tbl ){ +#if PACKETVER >= 20100309 + enum send_target target; - WBUFW(buf,0) = 0x816; - WBUFL(buf,2) = sd->bl.id; + if( tbl == nullptr ){ + tbl = &sd.bl; + target = AREA_WOS; + }else{ + target = SELF; + } - clif_send(buf, packet_len(0x816), &sd->bl, AREA_WOS); + struct PACKET_ZC_DISAPPEAR_BUYING_STORE_ENTRY p = {}; + + p.packetType = HEADER_ZC_DISAPPEAR_BUYING_STORE_ENTRY; + p.makerAID = sd.status.account_id; + + clif_send( &p, sizeof( p ), tbl, target ); +#endif } -void clif_buyingstore_disappear_entry_single(struct map_session_data* sd, struct map_session_data* pl_sd) -{ - int fd = sd->fd; - - WFIFOHEAD(fd,packet_len(0x816)); - WFIFOW(fd,0) = 0x816; - WFIFOL(fd,2) = pl_sd->bl.id; - WFIFOSET(fd,packet_len(0x816)); -} - /// Request to open someone else's buying store (CZ_REQ_CLICK_TO_BUYING_STORE). /// 0817 .L @@ -19383,7 +19279,7 @@ void clif_search_store_info_ack( struct map_session_data* sd ){ #if PACKETVER >= 20150226 clif_add_random_options( p->items[i].option_data, &it ); #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 - p->items[i].enchantgrade = ssitem->enchantgrade; + p->items[i].grade = ssitem->enchantgrade; #endif #endif } @@ -21004,25 +20900,26 @@ void clif_broadcast_obtain_special_item( const char *char_name, t_itemid nameid, switch( type ){ case ITEMOBTAIN_TYPE_BOXITEM: +#if PACKETVER >= 20091201 { - struct packet_package_item_announce p; + struct PACKET_ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN_item p = {}; p.PacketType = package_item_announceType; + p.PacketLength = sizeof( p ); p.type = type; p.ItemID = client_nameid( nameid ); p.len = NAME_LENGTH; safestrncpy( p.Name, name, sizeof( p.Name ) ); - p.unknown = 0x2; // some strange byte, IDA shows.. BYTE3(BoxItemIDLength) = 2; + p.boxItemID_len = (int8)sizeof( p.BoxItemID ); p.BoxItemID = client_nameid( container ); - -#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114 - p.PacketLength = 15 + p.len; -#else - p.PacketLength = 11 + p.len; +#if PACKETVER_MAIN_NUM >= 20220518 || PACKETVER_ZERO_NUM >= 20220518 + p.refineLevel_len = (int8)sizeof( p.refineLevel ); + p.refineLevel = 0; // TODO: implement #endif - clif_send( &p, p.PacketLength, NULL, ALL_CLIENT ); + clif_send( &p, p.PacketLength, nullptr, ALL_CLIENT ); } +#endif break; case ITEMOBTAIN_TYPE_MONSTER_ITEM: @@ -23367,7 +23264,7 @@ static void clif_item_preview( struct map_session_data *sd, int16 index ){ #endif p.refiningLevel = item->refine; #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723 - p.enchantgrade = item->enchantgrade; + p.grade = item->enchantgrade; #endif clif_addcards( &p.slot, item ); clif_add_random_options( p.option_data, item ); @@ -23646,7 +23543,7 @@ void clif_enchantgrade_result( struct map_session_data& sd, uint16 index, e_ench p.PacketType = HEADER_ZC_GRADE_ENCHANT_ACK; p.index = client_index( index ); - p.enchantgrade = sd.inventory.u.items_inventory[index].enchantgrade; + p.grade = sd.inventory.u.items_inventory[index].enchantgrade; p.result = result; clif_send( &p, sizeof( p ), &sd.bl, SELF ); @@ -23660,7 +23557,7 @@ void clif_enchantgrade_announce( struct map_session_data& sd, struct item& item, p.packetType = HEADER_ZC_GRADE_ENCHANT_BROADCAST_RESULT; safestrncpy( p.name, sd.status.name, sizeof( p.name ) ); p.itemId = client_nameid( item.nameid ); - p.enchantgrade = item.enchantgrade; + p.grade = item.enchantgrade; p.status = success; clif_send( &p, sizeof( p ), nullptr, ALL_CLIENT ); diff --git a/src/map/clif.hpp b/src/map/clif.hpp index 2a8d1e34b8..71be9d3af0 100644 --- a/src/map/clif.hpp +++ b/src/map/clif.hpp @@ -638,8 +638,8 @@ void clif_selllist(struct map_session_data *sd); //self void clif_npc_market_open(struct map_session_data *sd, struct npc_data *nd); void clif_parse_NPCMarketClosed(int fd, struct map_session_data *sd); void clif_parse_NPCMarketPurchase(int fd, struct map_session_data *sd); -void clif_scriptmes(struct map_session_data *sd, int npcid, const char *mes); //self -void clif_scriptnext(struct map_session_data *sd,int npcid); //self +void clif_scriptmes( struct map_session_data& sd, uint32 npcid, const char *mes ); +void clif_scriptnext( struct map_session_data& sd, uint32 npcid ); void clif_scriptclose(struct map_session_data *sd, int npcid); //self void clif_scriptclear(struct map_session_data *sd, int npcid); //self void clif_scriptmenu(struct map_session_data* sd, int npcid, const char* mes); //self @@ -690,9 +690,8 @@ void clif_talkiebox(struct block_list* bl, const char* talkie); void clif_wedding_effect(struct block_list *bl); void clif_divorced(struct map_session_data* sd, const char* name); void clif_callpartner(struct map_session_data *sd); -void clif_playBGM(struct map_session_data* sd, const char* name); -void clif_soundeffect(struct map_session_data* sd, struct block_list* bl, const char* name, int type); -void clif_soundeffectall(struct block_list* bl, const char* name, int type, enum send_target coverage); +void clif_playBGM( struct map_session_data& sd, const char* name ); +void clif_soundeffect( struct block_list& bl, const char* name, int type, enum send_target target ); void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, int target_id, t_tick tick); void clif_parse_LoadEndAck(int fd,struct map_session_data *sd); void clif_hotkeys_send(struct map_session_data *sd, int tab); @@ -804,7 +803,7 @@ void clif_changed_dir(struct block_list *bl, enum send_target target); // vending void clif_openvendingreq(struct map_session_data* sd, int num); -void clif_showvendingboard(struct block_list* bl, const char* message, int fd); +void clif_showvendingboard( struct map_session_data& sd, enum send_target target = AREA_WOS, struct block_list* tbl = nullptr ); void clif_closevendingboard(struct block_list* bl, int fd); void clif_vendinglist( struct map_session_data* sd, struct map_session_data* vsd ); void clif_buyvending(struct map_session_data* sd, int index, int amount, int fail); @@ -814,28 +813,28 @@ void clif_vendingreport(struct map_session_data* sd, int index, int amount, uint void clif_movetoattack(struct map_session_data *sd,struct block_list *bl); // party -void clif_party_created(struct map_session_data *sd,int result); -void clif_party_member_info(struct party_data *p, struct map_session_data *sd); -void clif_party_info(struct party_data* p, struct map_session_data *sd); -void clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd); -void clif_party_invite_reply(struct map_session_data* sd, const char* nick, enum e_party_invite_reply reply); +void clif_party_created( struct map_session_data& sd, int result ); +void clif_party_member_info( struct party_data& party, struct map_session_data& sd ); +void clif_party_info( struct party_data& party, struct map_session_data *sd = nullptr ); +void clif_party_invite( struct map_session_data& sd, struct map_session_data& tsd ); +void clif_party_invite_reply( struct map_session_data& sd, const char* nick, enum e_party_invite_reply reply ); void clif_party_option(struct party_data *p,struct map_session_data *sd,int flag); -void clif_party_withdraw(struct map_session_data *sd, uint32 account_id, const char* name, enum e_party_member_withdraw result, enum send_target target); -void clif_party_message(struct party_data* p, uint32 account_id, const char* mes, int len); -void clif_party_xy(struct map_session_data *sd); -void clif_party_xy_single(int fd, struct map_session_data *sd); -void clif_party_hp(struct map_session_data *sd); -void clif_hpmeter_single(int fd, int id, unsigned int hp, unsigned int maxhp); -void clif_party_job_and_level(struct map_session_data *sd); -void clif_party_dead( struct map_session_data *sd ); +void clif_party_withdraw( struct map_session_data& sd, uint32 account_id, const char* name, enum e_party_member_withdraw result, enum send_target target ); +void clif_party_message( struct party_data& party, uint32 account_id, const char* mes, int len ); +void clif_party_xy( struct map_session_data& sd ); +void clif_party_xy_single( struct map_session_data& sd, struct map_session_data& tsd ); +void clif_party_hp( struct map_session_data& sd ); +void clif_hpmeter_single( struct map_session_data& sd, uint32 id, uint32 hp, uint32 maxhp ); +void clif_party_job_and_level( struct map_session_data& sd ); +void clif_party_dead( struct map_session_data& sd ); // guild void clif_guild_created(struct map_session_data *sd,int flag); -void clif_guild_belonginfo(struct map_session_data *sd); +void clif_guild_belonginfo( struct map_session_data& sd ); void clif_guild_masterormember(struct map_session_data *sd); -void clif_guild_basicinfo(struct map_session_data *sd); +void clif_guild_basicinfo( struct map_session_data& sd ); void clif_guild_allianceinfo(struct map_session_data *sd); -void clif_guild_memberlist(struct map_session_data *sd); +void clif_guild_memberlist( struct map_session_data& sd ); void clif_guild_skillinfo(struct map_session_data* sd); void clif_guild_send_onlineinfo(struct map_session_data *sd); //[LuzZza] void clif_guild_memberlogin_notice(struct guild *g,int idx,int flag); @@ -914,7 +913,7 @@ void clif_pet_autofeed_status(struct map_session_data* sd, bool force); //friends list int clif_friendslist_toggle_sub(struct map_session_data *sd,va_list ap); -void clif_friendslist_send(struct map_session_data *sd); +void clif_friendslist_send( struct map_session_data& sd ); void clif_friendslist_reqack(struct map_session_data *sd, struct map_session_data *f_sd, int type); void clif_weather(int16 m); // [Valaris] @@ -1052,10 +1051,8 @@ void clif_showdigit(struct map_session_data* sd, unsigned char type, int value); void clif_buyingstore_open(struct map_session_data* sd); void clif_buyingstore_open_failed(struct map_session_data* sd, unsigned short result, unsigned int weight); void clif_buyingstore_myitemlist(struct map_session_data* sd); -void clif_buyingstore_entry(struct map_session_data* sd); -void clif_buyingstore_entry_single(struct map_session_data* sd, struct map_session_data* pl_sd); -void clif_buyingstore_disappear_entry(struct map_session_data* sd); -void clif_buyingstore_disappear_entry_single(struct map_session_data* sd, struct map_session_data* pl_sd); +void clif_buyingstore_entry( struct map_session_data& sd, struct block_list* tbl = nullptr ); +void clif_buyingstore_disappear_entry( struct map_session_data& sd, struct block_list* tbl = nullptr ); void clif_buyingstore_itemlist(struct map_session_data* sd, struct map_session_data* pl_sd); void clif_buyingstore_trade_failed_buyer(struct map_session_data* sd, short result); void clif_buyingstore_update_item(struct map_session_data* sd, t_itemid nameid, unsigned short amount, uint32 char_id, int zeny); diff --git a/src/map/clif_packetdb.hpp b/src/map/clif_packetdb.hpp index 554ab64adf..3f9081a1ba 100644 --- a/src/map/clif_packetdb.hpp +++ b/src/map/clif_packetdb.hpp @@ -88,8 +88,6 @@ packet(0x00b1,8); parseable_packet(0x00b2,3,clif_parse_Restart,2); packet(0x00b3,3); - packet(0x00b4,-1); - packet(0x00b5,6); packet(0x00b6,6); packet(0x00b7,-1); parseable_packet(0x00b8,7,clif_parse_NpcSelectMenu,2,6); @@ -156,20 +154,15 @@ parseable_packet(0x00f7,2,clif_parse_CloseKafra,0); packet(0x00f8,2); parseable_packet(0x00f9,26,clif_parse_CreateParty,2); - packet(0x00fa,3); packet(0x00fb,-1); parseable_packet(0x00fc,6,clif_parse_PartyInvite,2); packet(0x00fd,27); - packet(0x00fe,30); parseable_packet(0x00ff,10,clif_parse_ReplyPartyInvite,2,6); parseable_packet(0x0100,2,clif_parse_LeaveParty,0); packet(0x0101,6); parseable_packet(0x0102,6,clif_parse_PartyChangeOption,2); parseable_packet(0x0103,30,clif_parse_RemovePartyMember,2,6); packet(0x0104,79); - packet(0x0105,31); - packet(0x0106,10); - packet(0x0107,10); parseable_packet(0x0108,-1,clif_parse_PartyMessage,2,4); packet(0x0109,-1); packet( HEADER_ZC_MVP_GETTING_ITEM, sizeof( struct PACKET_ZC_MVP_GETTING_ITEM ) ); @@ -199,7 +192,7 @@ packet( cartlistequipType, -1 ); packet( cartlistnormalType, -1 ); packet(0x0125,8); - parseable_packet(0x0126,8,clif_parse_PutItemToCart,2,4); + parseable_packet( HEADER_CZ_MOVE_ITEM_FROM_BODY_TO_CART, sizeof( PACKET_CZ_MOVE_ITEM_FROM_BODY_TO_CART ), clif_parse_PutItemToCart, 0 ); parseable_packet(0x0127,8,clif_parse_GetItemFromCart,2,4); parseable_packet(0x0128,8,clif_parse_MoveFromKafraToCart,2,4); parseable_packet(0x0129,8,clif_parse_MoveToKafraFromCart,2,4); @@ -210,9 +203,8 @@ parseable_packet(0x012e,2,clif_parse_CloseVending,0); parseable_packet(0x012f,-1,clif_parse_OpenVending,2,4,0,84); parseable_packet(0x0130,6,clif_parse_VendingListReq,2); - packet(0x0131,86); packet(0x0132,6); - parseable_packet(0x0134,-1,clif_parse_PurchaseReq,2,4,8); + parseable_packet( HEADER_CZ_PC_PURCHASE_ITEMLIST_FROMMC, -1, clif_parse_PurchaseReq, 0 ); packet(0x0135,7); packet(0x0137,6); packet(0x0138,3); @@ -367,7 +359,6 @@ packet(0x01d0,8); packet(0x01d1,14); packet(0x01d2,10); - packet(0x01d3,35); packet(0x01d4,6); parseable_packet(0x01d5,-1,clif_parse_NpcStringInput,2,4,8); packet(0x01d6,4); @@ -389,7 +380,6 @@ packet(0x01e6,26); parseable_packet(0x01e7,2,clif_parse_NoviceDoriDori,0); parseable_packet(0x01e8,28,clif_parse_CreateParty2,2,26,27); - packet(0x01e9,81); packet(0x01ea,6); packet(0x01eb,10); packet(0x01ec,26); @@ -1084,10 +1074,8 @@ packet(0x02c2,-1); parseable_packet(0x02c4,26,clif_parse_PartyInvite2,2); packet(0x02c5,30); - packet(0x02c6,30); parseable_packet(0x02c7,7,clif_parse_ReplyPartyInvite2,2,6); parseable_packet(0x02c8,3,clif_parse_PartyTick,2); - packet(0x02c9,3); packet(0x02ca,3); packet(0x02cb,20); packet(0x02cc,4); @@ -1595,15 +1583,9 @@ #if PACKETVER >= 20091201 packet(0x07fc,10); ack_packet(ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN,0x07fd,-1,0); - packet(0x07fe,26); //packet(0x07ff,-1); #endif -// 2009-12-15aRagexeRE -#if PACKETVER >= 20091215 - //packet(0x0801,-1); -#endif - // 2009-12-22aRagexeRE #if PACKETVER >= 2009122 parseable_packet(0x0802,18,clif_parse_PartyBookingRegisterReq,2,4,6); // Booking System @@ -1632,14 +1614,13 @@ // 2010-01-05aRagexeRE #if PACKETVER >= 20100105 - parseable_packet(0x0801,-1,clif_parse_PurchaseReq2,2,4,8,12); + parseable_packet( HEADER_CZ_PC_PURCHASE_ITEMLIST_FROMMC2, -1, clif_parse_PurchaseReq2, 0 ); #endif // 2010-01-26aRagexeRE #if PACKETVER >= 20100126 //packet(0x080C,2); //packet(0x080D,3); - packet(0x080E,14); #endif // 2010-02-09aRagexeRE @@ -1653,7 +1634,6 @@ parseable_packet(0x0811,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89); //packet(0x0812,86); //packet(0x0813,6); - //packet(0x0814,6); //packet(0x0815,-1); //packet(0x0817,-1); //packet(0x0818,6); @@ -1663,9 +1643,7 @@ // 2010-03-09aRagexeRE #if PACKETVER >= 20100309 packet(0x0813,-1); - //packet(0x0814,2); //packet(0x0815,6); - packet(0x0816,6); packet(0x0818,-1); //packet(0x0819,10); //packet(0x081A,4); @@ -1702,7 +1680,6 @@ // 2010-04-20aRagexeRE #if PACKETVER >= 20100420 packet(0x0812,8); - packet(0x0814,86); parseable_packet(0x0815,2,clif_parse_ReqCloseBuyingStore,0); parseable_packet(0x0817,6,clif_parse_ReqClickBuyingStore,2); parseable_packet(0x0819,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12); @@ -2331,10 +2308,7 @@ // 2017-05-02dRagexeRE #if PACKETVER >= 20170502 - packet(0x0A43,85); packet(0x0A44,-1); - packet(0x0AB2,7); - packet(0x0ABD,10); packet(0x0A98,10); parseable_packet(0x0A99,4,clif_parse_equipswitch_remove,2,4); parseable_packet(0x0ACE,4,clif_parse_equipswitch_request_single,0); @@ -2465,6 +2439,10 @@ parseable_packet( HEADER_CZ_CLOSE_UI_ENCHANT, sizeof( struct PACKET_CZ_CLOSE_UI_ENCHANT ), clif_parse_enchantwindow_close, 0 ); #endif +#if PACKETVER_MAIN_NUM >= 20220216 + parseable_packet( HEADER_CZ_APPROXIMATE_ACTOR, sizeof( struct PACKET_CZ_APPROXIMATE_ACTOR ), clif_parse_dull, 0 ); +#endif + #if PACKETVER_MAIN_NUM >= 20220216 || PACKETVER_ZERO_NUM >= 20220316 parseable_packet( HEADER_CZ_USE_PACKAGEITEM, sizeof( struct PACKET_CZ_USE_PACKAGEITEM ), clif_parse_itempackage_select, 0 ); #endif diff --git a/src/map/elemental.cpp b/src/map/elemental.cpp index 1589fe77a0..5a784470f4 100644 --- a/src/map/elemental.cpp +++ b/src/map/elemental.cpp @@ -284,7 +284,7 @@ int elemental_data_received(s_elemental *ele, bool flag) { clif_spawn(&ed->bl); clif_elemental_info(sd); clif_elemental_updatestatus(sd,SP_HP); - clif_hpmeter_single(sd->fd,ed->bl.id,ed->battle_status.hp,ed->battle_status.max_hp); + clif_hpmeter_single( *sd, ed->bl.id, ed->battle_status.hp, ed->battle_status.max_hp ); clif_elemental_updatestatus(sd,SP_SP); } diff --git a/src/map/guild.cpp b/src/map/guild.cpp index d739e99abd..a53e3f0e53 100644 --- a/src/map/guild.cpp +++ b/src/map/guild.cpp @@ -692,19 +692,19 @@ int guild_recv_info(struct guild *sg) { if (before.guild_lv != g->guild_lv || bm != m || before.max_member != g->max_member) { - clif_guild_basicinfo(sd); //Submit basic information + clif_guild_basicinfo( *sd ); //Submit basic information clif_guild_emblem(sd, g); //Submit emblem } if (bm != m) { //Send members information - clif_guild_memberlist(g->member[i].sd); + clif_guild_memberlist( *sd ); } if (before.skill_point != g->skill_point) clif_guild_skillinfo(sd); //Submit information skills if (guild_new) { // Send information and affiliation if unsent - clif_guild_belonginfo(sd); + clif_guild_belonginfo( *sd ); clif_guild_notice(sd); sd->guild_emblem_id = g->emblem_id; } @@ -894,7 +894,7 @@ int guild_member_added(int guild_id,uint32 account_id,uint32 char_id,int flag) { sd->guild_emblem_id = g->emblem_id; sd->guild = g; //Packets which were sent in the previous 'guild_sent' implementation. - clif_guild_belonginfo(sd); + clif_guild_belonginfo( *sd ); clif_guild_notice(sd); //TODO: send new emblem info to others @@ -1011,7 +1011,7 @@ int guild_member_withdraw(int guild_id, uint32 account_id, uint32 char_id, int f // remove member from guild memset(&g->member[i],0,sizeof(struct guild_member)); - clif_guild_memberlist(online_member_sd); + clif_guild_memberlist( *online_member_sd ); // update char, if online if(sd != NULL && sd->status.guild_id == guild_id) { @@ -1118,7 +1118,7 @@ int guild_send_memberinfoshort(struct map_session_data *sd,int online) { // clea } if(sd->state.connect_new) { //Note that this works because it is invoked in parse_LoadEndAck before connect_new is cleared. - clif_guild_belonginfo(sd); + clif_guild_belonginfo( *sd ); sd->guild_emblem_id = g->emblem_id; } return 0; @@ -1359,7 +1359,7 @@ int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data) { for(i=0;imax_member;i++){ if((sd=g->member[i].sd)!=NULL){ sd->guild_emblem_id=emblem_id; - clif_guild_belonginfo(sd); + clif_guild_belonginfo( *sd ); clif_guild_emblem(sd,g); clif_guild_emblem_area(&sd->bl); } @@ -2009,10 +2009,10 @@ int guild_gm_changed(int guild_id, uint32 account_id, uint32 char_id, time_t tim // announce the change to all guild members for( i = 0; i < g->max_member; i++ ) { - if( g->member[i].sd && g->member[i].sd->fd ) { - clif_guild_basicinfo(g->member[i].sd); - clif_guild_memberlist(g->member[i].sd); - clif_guild_belonginfo(g->member[i].sd); // Update clientside guildmaster flag + if( g->member[i].sd ){ + clif_guild_basicinfo( *g->member[i].sd ); + clif_guild_memberlist( *g->member[i].sd ); + clif_guild_belonginfo( *g->member[i].sd ); // Update clientside guildmaster flag } } diff --git a/src/map/npc.cpp b/src/map/npc.cpp index 2874423953..a63d16c4b9 100644 --- a/src/map/npc.cpp +++ b/src/map/npc.cpp @@ -2113,18 +2113,18 @@ void run_tomb(struct map_session_data* sd, struct npc_data* nd) strftime(time, sizeof(time), "%H:%M", localtime(&nd->u.tomb.kill_time)); // TODO: Find exact color? - snprintf(buffer, sizeof(buffer), msg_txt(sd,657), nd->u.tomb.md->db->name.c_str()); - clif_scriptmes(sd, nd->bl.id, buffer); + snprintf( buffer, sizeof( buffer ), msg_txt( sd, 657 ), nd->u.tomb.md->db->name.c_str() ); // [ ^EE0000%s^000000 ] + clif_scriptmes( *sd, nd->bl.id, buffer ); - clif_scriptmes(sd, nd->bl.id, msg_txt(sd,658)); + clif_scriptmes( *sd, nd->bl.id, msg_txt( sd, 658 ) ); // Has met its demise - snprintf(buffer, sizeof(buffer), msg_txt(sd,659), time); - clif_scriptmes(sd, nd->bl.id, buffer); + snprintf( buffer, sizeof( buffer ), msg_txt( sd, 659 ), time ); // Time of death : ^EE0000%s^000000 + clif_scriptmes( *sd, nd->bl.id, buffer ); - clif_scriptmes(sd, nd->bl.id, msg_txt(sd,660)); + clif_scriptmes( *sd, nd->bl.id, msg_txt( sd, 660 ) ); // Defeated by - snprintf(buffer, sizeof(buffer), msg_txt(sd,661), nd->u.tomb.killer_name[0] ? nd->u.tomb.killer_name : "Unknown"); - clif_scriptmes(sd, nd->bl.id, buffer); + 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); } diff --git a/src/map/packets.hpp b/src/map/packets.hpp index 40eecf64a7..b6498f627d 100644 --- a/src/map/packets.hpp +++ b/src/map/packets.hpp @@ -207,16 +207,10 @@ struct PACKET_ZC_BROADCAST2{ char message[]; } __attribute__((packed)); -struct PACKET_ZC_SPIRITS{ - int16 packetType; - uint32 GID; - uint16 amount; -} __attribute__((packed)); - -struct PACKET_ZC_UNCONFIRMED_SPIRITS3{ - int16 packetType; - uint32 GID; - uint16 amount; +struct PACKET_ZC_SOULENERGY{ + int16 PacketType; + uint32 AID; + uint16 num; } __attribute__((packed)); struct PACKET_ZC_ENTRY_QUEUE_INIT { @@ -336,6 +330,20 @@ struct PACKET_CZ_USE_PACKAGEITEM{ uint32 BoxIndex; } __attribute__((packed)); +struct PACKET_ZC_FRIENDS_LIST_sub{ + uint32 AID; + uint32 CID; +#if !( PACKETVER_MAIN_NUM >= 20180307 || PACKETVER_RE_NUM >= 20180221 || PACKETVER_ZERO_NUM >= 20180328 ) || PACKETVER >= 20200902 + char name[NAME_LENGTH]; +#endif +} __attribute__((packed)); + +struct PACKET_ZC_FRIENDS_LIST{ + int16 packetType; + int16 PacketLength; + struct PACKET_ZC_FRIENDS_LIST_sub friends[]; +} __attribute__((packed)); + // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute #if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 ) #pragma pack( pop ) @@ -346,12 +354,10 @@ 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_MVP_GETTING_ITEM, 0x10a) -DEFINE_PACKET_HEADER(ZC_ACK_TOUSESKILL, 0x110) 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) -DEFINE_PACKET_HEADER(ZC_SPIRITS, 0x1d0) #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724 DEFINE_PACKET_HEADER(CZ_REQ_ITEMREPAIR, 0xb66) #else @@ -362,6 +368,7 @@ DEFINE_PACKET_HEADER(ZC_SPIRITS, 0x1d0) #else DEFINE_PACKET_HEADER(ZC_CHANGE_GUILD, 0x1b4) #endif +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) @@ -382,12 +389,13 @@ 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_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_UNCONFIRMED_SPIRITS3, 0xb73) +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) diff --git a/src/map/packets_struct.hpp b/src/map/packets_struct.hpp index 21fcc2b3e0..bf32c2e7c0 100644 --- a/src/map/packets_struct.hpp +++ b/src/map/packets_struct.hpp @@ -212,6 +212,14 @@ enum packet_headers { #else cartlistequipType = 0x122, #endif +#if PACKETVER < 20100105 + vendinglistType = 0x133, +#elif !(PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723) + vendinglistType = 0x800, +#else + vendinglistType = 0xb3d, +#endif + openvendingType = 0x136, #if PACKETVER >= 20120925 equipitemType = 0x998, #else @@ -573,7 +581,7 @@ struct PACKET_ZC_ITEM_PICKUP_ACK { #endif #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723 uint8 refiningLevel; - uint8 enchantgrade; + uint8 grade; #endif // PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723 } __attribute__((packed)); @@ -1011,8 +1019,8 @@ struct packet_script_clear { uint32 NpcID; } __attribute__((packed)); -/* made possible thanks to Yommy!! */ -struct packet_package_item_announce { +#if PACKETVER_MAIN_NUM >= 20220518 || PACKETVER_ZERO_NUM >= 20220518 +struct PACKET_ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN_item { int16 PacketType; int16 PacketLength; uint8 type; @@ -1023,13 +1031,42 @@ struct packet_package_item_announce { #endif int8 len; char Name[NAME_LENGTH]; - int8 unknown; // probably unused + int8 boxItemID_len; +#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114 + uint32 BoxItemID; +#else + uint16 BoxItemID; +#endif + int8 refineLevel_len; +#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114 + uint32 refineLevel; +#else + uint16 refineLevel; +#endif +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN_item, 0x0bba) +#elif PACKETVER >= 20091201 +/* made possible thanks to Yommy!! */ +struct PACKET_ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN_item { + int16 PacketType; + int16 PacketLength; + uint8 type; +#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114 + uint32 ItemID; +#else + uint16 ItemID; +#endif + int8 len; + char Name[NAME_LENGTH]; + int8 boxItemID_len; #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114 uint32 BoxItemID; #else uint16 BoxItemID; #endif } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN_item, 0x07fd) +#endif /* made possible thanks to Yommy!! */ struct packet_item_drop_announce { @@ -1724,7 +1761,7 @@ struct PACKET_ZC_ACK_ADD_ITEM_RODEX { uint8 favorite; uint32 location; int8 refiningLevel; - uint8 enchantgrade; + int8 grade; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_ACK_ADD_ITEM_RODEX, 0x0b3f); #elif PACKETVER >= 20141119 @@ -1904,7 +1941,7 @@ struct PACKET_ZC_ACK_READ_RODEX_SUB { uint16 bindOnEquip; struct ItemOptions option_data[MAX_ITEM_OPTIONS]; int8 refiningLevel; - int8 enchantgrade; + int8 grade; } __attribute__((packed)); struct PACKET_ZC_ACK_READ_RODEX { @@ -2428,6 +2465,7 @@ struct PACKET_ZC_ACK_TOUSESKILL { uint8 flag; uint8 cause; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ACK_TOUSESKILL, 0x0110) #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723 struct PACKET_ZC_ADD_ITEM_TO_CART { @@ -2445,7 +2483,7 @@ struct PACKET_ZC_ADD_ITEM_TO_CART { struct EQUIPSLOTINFO slot; struct ItemOptions option_data[MAX_ITEM_OPTIONS]; uint8 refine; - uint8 enchantgrade; + uint8 grade; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_ADD_ITEM_TO_CART, 0x0b45); #elif PACKETVER_MAIN_NUM >= 20140813 || PACKETVER_RE_NUM >= 20140402 || defined(PACKETVER_ZERO) @@ -2603,7 +2641,7 @@ struct PACKET_ZC_ADD_EXCHANGE_ITEM { #endif // PACKETVER_MAIN_NUM >= 20161102 || PACKETVER_RE_NUM >= 20161026 || defined(PACKETVER_ZERO) #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723 uint8 refine; - uint8 enchantgrade; + uint8 grade; #endif // PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723 } __attribute__((packed)); @@ -2654,7 +2692,7 @@ struct PACKET_ZC_ITEM_PICKUP_PARTY { uint16 location; uint8 itemType; uint8 refine; - uint8 enchantgrade; + uint8 grade; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_ITEM_PICKUP_PARTY, 0x0b67); #elif PACKETVER >= 20070731 @@ -2876,7 +2914,7 @@ struct REPAIRITEM_INFO2 { #endif struct EQUIPSLOTINFO slot; // unused? uint8 refine; // unused? - uint8 enchantgrade; // unused? + uint8 grade; // unused? } __attribute__((packed)); #elif PACKETVER >= 20191106 struct REPAIRITEM_INFO2 { @@ -2974,7 +3012,7 @@ struct PACKET_ZC_PC_PURCHASE_MYITEMLIST_sub { struct EQUIPSLOTINFO slot; struct ItemOptions option_data[MAX_ITEM_OPTIONS]; uint8 refine; - uint8 enchantgrade; + uint8 grade; } __attribute__((packed)); struct PACKET_ZC_PC_PURCHASE_MYITEMLIST { int16 packetType; @@ -3120,7 +3158,7 @@ struct PACKET_ZC_PC_PURCHASE_ITEMLIST_FROMMC_sub { uint32 location; uint16 viewSprite; uint8 refine; - uint8 enchantgrade; + uint8 grade; } __attribute__((packed)); struct PACKET_ZC_PC_PURCHASE_ITEMLIST_FROMMC { @@ -3158,7 +3196,7 @@ struct PACKET_ZC_PC_PURCHASE_ITEMLIST_FROMMC_sub { #endif #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723 uint8 refine; - uint8 enchantgrade; + uint8 grade; #endif } __attribute__((packed)); @@ -3406,7 +3444,7 @@ struct PACKET_ZC_SEARCH_STORE_INFO_ACK_sub { struct EQUIPSLOTINFO slot; struct ItemOptions option_data[MAX_ITEM_OPTIONS]; uint8 refine; - uint8 enchantgrade; + uint8 grade; } __attribute__((packed)); struct PACKET_ZC_SEARCH_STORE_INFO_ACK { @@ -3568,11 +3606,14 @@ struct PACKET_ZC_GUILD_POSITION { char position[]; } __attribute__((packed)); -struct PACKET_ZC_INVENTORY_MOVE_FAILED { +#if PACKETVER_MAIN_NUM >= 20161214 || PACKETVER_RE_NUM >= 20161130 || defined(PACKETVER_ZERO) +struct PACKET_ZC_MOVE_ITEM_FAILED { int16 packetType; - int16 index; - int16 unknown; + int16 itemIndex; + int16 itemCount; } __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_MOVE_ITEM_FAILED, 0x0aa7); +#endif // PACKETVER_MAIN_NUM >= 20161214 || PACKETVER_RE_NUM >= 20161130 || defined(PACKETVER_ZERO) #if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO) #define PACKET_ZC_ACK_BAN_GUILD PACKET_ZC_ACK_BAN_GUILD3 @@ -3677,7 +3718,7 @@ struct PACKET_ZC_CHANGE_ITEM_OPTION { struct EQUIPSLOTINFO slot; struct ItemOptions option_data[MAX_ITEM_OPTIONS]; uint8 refiningLevel; - uint8 enchantgrade; + uint8 grade; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_CHANGE_ITEM_OPTION, 0x0b43); #elif PACKETVER_MAIN_NUM >= 20181017 || PACKETVER_RE_NUM >= 20181017 || PACKETVER_ZERO_NUM >= 20181024 @@ -5345,7 +5386,7 @@ DEFINE_PACKET_HEADER(CZ_GRADE_ENCHANT_CLOSE_UI, 0x0b5c); struct PACKET_ZC_GRADE_ENCHANT_ACK { int16 PacketType; int16 index; - int16 enchantgrade; + int16 grade; int result; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_GRADE_ENCHANT_ACK, 0x0b5d); @@ -5356,7 +5397,7 @@ struct PACKET_ZC_GRADE_ENCHANT_BROADCAST_RESULT { int16 packetType; char name[NAME_LENGTH]; uint32 itemId; - int16 enchantgrade; + int16 grade; int8 status; } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_GRADE_ENCHANT_BROADCAST_RESULT, 0x0b5e); @@ -5425,16 +5466,15 @@ DEFINE_PACKET_HEADER(ZC_UPDATE_GDID, 0x016c) #endif // PACKETVER_MAIN_NUM >= 20220216 #if PACKETVER_MAIN_NUM >= 20220216 -struct PACKET_CZ_SEE_GUILD_MEMBERS { +struct PACKET_CZ_APPROXIMATE_ACTOR { int16 PacketType; uint32 masterGID; uint16 unused1; uint8 unused2; } __attribute__((packed)); -DEFINE_PACKET_HEADER(CZ_SEE_GUILD_MEMBERS, 0x0bb0) +DEFINE_PACKET_HEADER(CZ_APPROXIMATE_ACTOR, 0x0bb0) #endif // PACKETVER_MAIN_NUM >= 20220216 - struct PACKET_CZ_CONTACTNPC { int16 PacketType; uint32 AID; @@ -5486,6 +5526,166 @@ struct PACKET_ZC_CHANGESTATE_PET { } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_CHANGESTATE_PET, 0x01a4) +struct PACKET_ZC_SPIRITS { + int16 PacketType; + uint32 AID; + int16 num; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_SPIRITS, 0x01d0) + +struct PACKET_ZC_SAY_DIALOG { + int16 PacketType; + int16 PacketLength; + uint32 NpcID; + char message[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_SAY_DIALOG, 0x00b4) + +#if PACKETVER_MAIN_NUM >= 20220504 +struct PACKET_ZC_SAY_DIALOG2 { + int16 PacketType; + int16 PacketLength; + uint32 NpcID; + uint8 type; + char message[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_SAY_DIALOG2, 0x0972) +#else // PACKETVER_MAIN_NUM >= 20220504 +struct PACKET_ZC_SAY_DIALOG2 { + int16 PacketType; + int16 PacketLength; + uint32 NpcID; + char message[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_SAY_DIALOG2, 0x00b4) +#endif // PACKETVER_MAIN_NUM >= 20220504 + +struct PACKET_ZC_WAIT_DIALOG { + int16 PacketType; + uint32 NpcID; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_WAIT_DIALOG, 0x00b5) + +#if PACKETVER_MAIN_NUM >= 20220504 +struct PACKET_ZC_WAIT_DIALOG2 { + int16 PacketType; + uint32 NpcID; + uint8 type; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_WAIT_DIALOG2, 0x0973) +#else // PACKETVER_MAIN_NUM >= 20220504 +struct PACKET_ZC_WAIT_DIALOG2 { + int16 PacketType; + uint32 NpcID; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_WAIT_DIALOG2, 0x00b5) +#endif // PACKETVER_MAIN_NUM >= 20220504 + +#if PACKETVER_MAIN_NUM >= 20220504 +struct PACKET_ZC_DIALOG_WINDOW_SIZE { + int16 PacketType; + int height; + int width; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_DIALOG_WINDOW_SIZE, 0x0ba2) +#endif // PACKETVER_MAIN_NUM >= 20220504 + +#if PACKETVER_MAIN_NUM >= 20220504 +struct PACKET_ZC_DIALOG_WINDOW_POS { + int16 PacketType; + int x; + int y; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_DIALOG_WINDOW_POS, 0x0ba3) +#endif // PACKETVER_MAIN_NUM >= 20220504 + +#if PACKETVER_MAIN_NUM >= 20220504 +struct PACKET_ZC_DIALOG_WINDOW_POS2 { + int16 PacketType; + int x; + int y; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_DIALOG_WINDOW_POS2, 0x0bb5) +#endif // PACKETVER_MAIN_NUM >= 20220504 + +#if PACKETVER_MAIN_NUM >= 20220504 +struct PACKET_ZC_PLAY_NPC_BGM { + int16 PacketType; + int16 PacketLength; + uint8 playType; + char bgm[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_PLAY_NPC_BGM, 0x0b8c) +#elif PACKETVER >= 20091201 +struct PACKET_ZC_PLAY_NPC_BGM { + int16 PacketType; + char bgm[NAME_LENGTH]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_PLAY_NPC_BGM, 0x07fe) +#endif // PACKETVER >= 20091201 + +struct PACKET_CZ_MOVE_ITEM_FROM_BODY_TO_CART { + int16 PacketType; + int16 index; + int count; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_MOVE_ITEM_FROM_BODY_TO_CART, 0x0126) + +struct PACKET_ZC_SOUND { + int16 PacketType; + char name[NAME_LENGTH]; + uint8 act; + uint32 term; + uint32 AID; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_SOUND, 0x01d3) + +#if PACKETVER >= 20100420 +struct PACKET_ZC_BUYING_STORE_ENTRY { + int16 packetType; + uint32 makerAID; + char storeName[MESSAGE_SIZE]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_BUYING_STORE_ENTRY, 0x0814); +#endif + +struct PACKET_ZC_STORE_ENTRY { + int16 packetType; + uint32 makerAID; + char storeName[MESSAGE_SIZE]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_STORE_ENTRY, 0x0131); + +struct CZ_PURCHASE_ITEM_FROMMC { + int16 count; + int16 index; +} __attribute__((packed)); + +struct PACKET_CZ_PC_PURCHASE_ITEMLIST_FROMMC { + int16 packetType; + int16 packetLength; + uint32 AID; + struct CZ_PURCHASE_ITEM_FROMMC list[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_PC_PURCHASE_ITEMLIST_FROMMC, 0x0134); + +struct PACKET_CZ_PC_PURCHASE_ITEMLIST_FROMMC2 { + int16 packetType; + int16 packetLength; + uint32 AID; + uint32 UniqueID; + struct CZ_PURCHASE_ITEM_FROMMC list[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(CZ_PC_PURCHASE_ITEMLIST_FROMMC2, 0x0801); + +#if PACKETVER >= 20100309 +struct PACKET_ZC_DISAPPEAR_BUYING_STORE_ENTRY { + int16 packetType; + uint32 makerAID; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_DISAPPEAR_BUYING_STORE_ENTRY, 0x0816); +#endif + #if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute #pragma pack(pop) #endif // not NetBSD < 6 / Solaris diff --git a/src/map/party.cpp b/src/map/party.cpp index 9c2330c2c7..bd5e2fac4d 100644 --- a/src/map/party.cpp +++ b/src/map/party.cpp @@ -153,7 +153,7 @@ int party_create(struct map_session_data *sd,char *name,int item,int item2) return 0; if( sd->status.party_id > 0 || sd->party_joining || sd->party_creating ) { // already associated with a party - clif_party_created(sd,2); + clif_party_created( *sd, 2 ); return -2; } @@ -179,7 +179,7 @@ void party_created(uint32 account_id,uint32 char_id,int fail,int party_id,char * if( !fail ) { sd->status.party_id = party_id; - clif_party_created(sd,0); // Success message + clif_party_created( *sd, 0 ); // Success message achievement_update_objective(sd, AG_PARTY, 1, 1); @@ -189,7 +189,7 @@ void party_created(uint32 account_id,uint32 char_id,int fail,int party_id,char * party_create_byscript = 0; } } else - clif_party_created(sd,1); // "party name already exists" + clif_party_created( *sd, 1 ); // "party name already exists" } int party_request_info(int party_id, uint32 char_id) @@ -355,12 +355,13 @@ int party_recv_info(struct party* sp, uint32 char_id) continue;// not online clif_name_area(&sd->bl); //Update other people's display. [Skotlex] - clif_party_member_info(p,sd); + clif_party_member_info( *p, *sd ); // Only send this on party creation, otherwise it will be sent by party_send_movemap [Lemongrass] if( sd->party_creating ){ clif_party_option(p,sd,0x100); } - clif_party_info(p,NULL); + + clif_party_info( *p ); if (p->instance_id > 0) instance_reqinfo(sd, p->instance_id); @@ -368,7 +369,7 @@ int party_recv_info(struct party* sp, uint32 char_id) // If a player was renamed, make sure to resend the party information if( rename ){ - clif_party_info(p,NULL); + clif_party_info( *p ); } if( char_id != 0 ) { // requester @@ -402,7 +403,7 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd) if (tsd && battle_config.block_account_in_same_party) { ARR_FIND(0, MAX_PARTY, i, p->party.member[i].account_id == tsd->status.account_id); if (i < MAX_PARTY) { - clif_party_invite_reply(sd, tsd->status.name, PARTY_REPLY_DUAL); + clif_party_invite_reply( *sd, tsd->status.name, PARTY_REPLY_DUAL ); return 0; } } @@ -411,7 +412,7 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd) ARR_FIND(0, MAX_PARTY, i, p->party.member[i].account_id == 0); if( i == MAX_PARTY ) { - clif_party_invite_reply(sd, (tsd?tsd->status.name:""), PARTY_REPLY_FULL); + clif_party_invite_reply( *sd, ( tsd ? tsd->status.name : "" ), PARTY_REPLY_FULL ); return 0; } @@ -422,32 +423,32 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd) } if( tsd == NULL) { - clif_party_invite_reply(sd, "", PARTY_REPLY_OFFLINE); + clif_party_invite_reply( *sd, "", PARTY_REPLY_OFFLINE ); return 0; } if(!battle_config.invite_request_check) { if (tsd->guild_invite>0 || tsd->trade_partner || tsd->adopt_invite) { - clif_party_invite_reply(sd,tsd->status.name,PARTY_REPLY_JOIN_OTHER_PARTY); + clif_party_invite_reply( *sd, tsd->status.name, PARTY_REPLY_JOIN_OTHER_PARTY ); return 0; } } if (!tsd->fd) { //You can't invite someone who has already disconnected. - clif_party_invite_reply(sd,tsd->status.name,PARTY_REPLY_REJECTED); + clif_party_invite_reply( *sd, tsd->status.name, PARTY_REPLY_REJECTED ); return 0; } if( tsd->status.party_id > 0 || tsd->party_invite > 0 ) {// already associated with a party - clif_party_invite_reply(sd,tsd->status.name,PARTY_REPLY_JOIN_OTHER_PARTY); + clif_party_invite_reply( *sd, tsd->status.name, PARTY_REPLY_JOIN_OTHER_PARTY ); return 0; } tsd->party_invite=sd->status.party_id; tsd->party_invite_account=sd->status.account_id; - clif_party_invite(sd,tsd); + clif_party_invite( *sd, *tsd ); return 1; } @@ -482,7 +483,7 @@ int party_reply_invite(struct map_session_data *sd,int party_id,int flag) sd->party_invite_account = 0; if( tsd != NULL ) - clif_party_invite_reply(tsd,sd->status.name,PARTY_REPLY_REJECTED); + clif_party_invite_reply( *tsd, sd->status.name, PARTY_REPLY_REJECTED ); } return 0; @@ -538,28 +539,28 @@ int party_member_added(int party_id,uint32 account_id,uint32 char_id, int flag) if( flag ) { // failed if( sd2 != NULL ) - clif_party_invite_reply(sd2,sd->status.name,PARTY_REPLY_FULL); + clif_party_invite_reply( *sd2, sd->status.name, PARTY_REPLY_FULL ); return 0; } sd->status.party_id = party_id; - clif_party_member_info(p,sd); + clif_party_member_info( *p, *sd ); clif_party_option(p,sd,0x100); - clif_party_info(p,sd); + clif_party_info( *p, sd ); if( sd2 != NULL ) - clif_party_invite_reply(sd2,sd->status.name,PARTY_REPLY_ACCEPTED); + clif_party_invite_reply( *sd2, sd->status.name, PARTY_REPLY_ACCEPTED ); for( i = 0; i < ARRAYLENGTH(p->data); ++i ) { // hp of the other party members sd2 = p->data[i].sd; if( sd2 && sd2->status.account_id != account_id && sd2->status.char_id != char_id ) - clif_hpmeter_single(sd->fd, sd2->bl.id, sd2->battle_status.hp, sd2->battle_status.max_hp); + clif_hpmeter_single( *sd, sd2->bl.id, sd2->battle_status.hp, sd2->battle_status.max_hp ); } - clif_party_hp(sd); - clif_party_xy(sd); + clif_party_hp( *sd ); + clif_party_xy( *sd ); clif_name_area(&sd->bl); //Update char name's display [Skotlex] if (p->instance_id > 0) @@ -647,8 +648,13 @@ int party_member_withdraw(int party_id, uint32 account_id, uint32 char_id, char struct party_data* p = party_search(party_id); if( p ) { + struct map_session_data* party_sd = party_getavailablesd( p ); + + if( party_sd != nullptr ){ + clif_party_withdraw( *party_sd, account_id, name, type, PARTY ); + } + int i; - clif_party_withdraw(party_getavailablesd(p), account_id, name, type, PARTY); ARR_FIND( 0, MAX_PARTY, i, p->party.member[i].account_id == account_id && p->party.member[i].char_id == char_id ); if( i < MAX_PARTY ) { memset(&p->party.member[i], 0, sizeof(p->party.member[0])); @@ -704,8 +710,8 @@ int party_broken(int party_id) instance_destroy( p->instance_id ); for( i = 0; i < MAX_PARTY; i++ ) { - if( p->data[i].sd != NULL ) { - clif_party_withdraw(p->data[i].sd,p->party.member[i].account_id,p->party.member[i].name,PARTY_MEMBER_WITHDRAW_EXPEL,SELF); + if( p->data[i].sd != nullptr ) { + clif_party_withdraw( *p->data[i].sd, p->party.member[i].account_id, p->party.member[i].name, PARTY_MEMBER_WITHDRAW_EXPEL, SELF ); p->data[i].sd->status.party_id=0; } } @@ -838,7 +844,7 @@ int party_changeleader(struct map_session_data *sd, struct map_session_data *tsd // Update info. intif_party_leaderchange(p->party.party_id,p->party.member[tmi].account_id,p->party.member[tmi].char_id); - clif_party_info(p,NULL); + clif_party_info( *p ); return 1; } @@ -871,7 +877,7 @@ int party_recv_movemap(int party_id,uint32 account_id,uint32 char_id, unsigned s //Check if they still exist on this map server p->data[i].sd = party_sd_check(party_id, account_id, char_id); - clif_party_info(p,NULL); + clif_party_info( *p ); return 0; } @@ -891,8 +897,8 @@ void party_send_movemap(struct map_session_data *sd) if(sd->state.connect_new) { //Note that this works because this function is invoked before connect_new is cleared. clif_party_option(p,sd,0x100); - clif_party_info(p,sd); - clif_party_member_info(p,sd); + clif_party_info( *p, sd ); + clif_party_member_info( *p, *sd ); } if (sd->fd) { // synchronize minimap positions with the rest of the party @@ -902,8 +908,8 @@ void party_send_movemap(struct map_session_data *sd) p->data[i].sd != sd && p->data[i].sd->bl.m == sd->bl.m) { - clif_party_xy_single(sd->fd, p->data[i].sd); - clif_party_xy_single(p->data[i].sd->fd, sd); + clif_party_xy_single( *sd, *p->data[i].sd ); + clif_party_xy_single( *p->data[i].sd, *sd ); } } } @@ -954,7 +960,7 @@ int party_recv_message(int party_id,uint32 account_id,const char *mes,int len) struct party_data *p; if( (p=party_search(party_id))==NULL) return 0; - clif_party_message(p,account_id,mes,len); + clif_party_message( *p, account_id, mes, len ); return 0; } @@ -1033,13 +1039,13 @@ TIMER_FUNC(party_send_xy_timer){ continue; if( p->data[i].x != sd->bl.x || p->data[i].y != sd->bl.y ) { // perform position update - clif_party_xy(sd); + clif_party_xy( *sd ); p->data[i].x = sd->bl.x; p->data[i].y = sd->bl.y; } if (battle_config.party_hp_mode && p->data[i].hp != sd->battle_status.hp) { // perform hp update - clif_party_hp(sd); + clif_party_hp( *sd ); p->data[i].hp = sd->battle_status.hp; } } diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 34b1c79fc4..8c427ab1dc 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -1863,7 +1863,7 @@ bool pc_authok(struct map_session_data *sd, uint32 login_id2, time_t expiration_ sd->status.name, sd->status.account_id, sd->status.char_id, CONVIP(ip), sd->group_id); // Send friends list - clif_friendslist_send(sd); + clif_friendslist_send( *sd ); if( !changing_mapservers ) { @@ -9292,7 +9292,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) pc_setdead(sd); - clif_party_dead( sd ); + clif_party_dead( *sd ); pc_setparam(sd, SP_PCDIECOUNTER, sd->die_counter+1); pc_setparam(sd, SP_KILLERRID, src?src->id:0); @@ -10483,7 +10483,7 @@ bool pc_jobchange(struct map_session_data *sd,int job, char upper) if( i < MAX_PARTY ){ p->party.member[i].class_ = sd->status.class_; - clif_party_job_and_level(sd); + clif_party_job_and_level( *sd ); } } } @@ -12517,7 +12517,7 @@ bool pc_setstand(struct map_session_data *sd, bool force){ sd->ssregen.tick.hp = sd->ssregen.tick.sp = 0; if( pc_isdead( sd ) ){ sd->state.dead_sit = sd->vd.dead_sit = 0; - clif_party_dead( sd ); + clif_party_dead( *sd ); }else{ sd->state.dead_sit = sd->vd.dead_sit = 0; } diff --git a/src/map/script.cpp b/src/map/script.cpp index bcbb263f0c..a6fa4b9830 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -4906,13 +4906,13 @@ void script_reload(void) { /// mes ""; BUILDIN_FUNC(mes) { - TBL_PC* sd; + struct map_session_data* sd; if( !script_rid2sd(sd) ) return SCRIPT_CMD_SUCCESS; if( !script_hasdata(st, 3) ) {// only a single line detected in the script - clif_scriptmes(sd, st->oid, script_getstr(st, 2)); + clif_scriptmes( *sd, st->oid, script_getstr( st, 2 ) ); } else {// parse multiple lines as they exist @@ -4921,7 +4921,7 @@ BUILDIN_FUNC(mes) for( i = 2; script_hasdata(st, i); i++ ) { // send the message to the client - clif_scriptmes(sd, st->oid, script_getstr(st, i)); + clif_scriptmes( *sd, st->oid, script_getstr( st, i ) ); } } @@ -4935,7 +4935,7 @@ BUILDIN_FUNC(mes) /// next; BUILDIN_FUNC(next) { - TBL_PC* sd; + struct map_session_data* sd; if (!st->mes_active) { ShowWarning("buildin_next: There is no mes active.\n"); @@ -4948,7 +4948,7 @@ BUILDIN_FUNC(next) sd->npc_idle_type = NPCT_WAIT; #endif st->state = STOP; - clif_scriptnext(sd, st->oid); + clif_scriptnext( *sd, st->oid ); return SCRIPT_CMD_SUCCESS; } @@ -14951,7 +14951,7 @@ BUILDIN_FUNC(playBGM) struct map_session_data* sd; if( script_rid2sd(sd) ) { - clif_playBGM(sd, script_getstr(st,2)); + clif_playBGM( *sd, script_getstr( st, 2 ) ); } return SCRIPT_CMD_SUCCESS; } @@ -14959,14 +14959,14 @@ BUILDIN_FUNC(playBGM) static int playBGM_sub(struct block_list* bl,va_list ap) { const char* name = va_arg(ap,const char*); - clif_playBGM(BL_CAST(BL_PC, bl), name); + clif_playBGM( *BL_CAST( BL_PC, bl ), name ); return 0; } static int playBGM_foreachpc_sub(struct map_session_data* sd, va_list args) { const char* name = va_arg(args, const char*); - clif_playBGM(sd, name); + clif_playBGM( *sd, name ); return 0; } @@ -15003,13 +15003,13 @@ BUILDIN_FUNC(playBGMall) *------------------------------------------*/ BUILDIN_FUNC(soundeffect) { - TBL_PC* sd; + struct map_session_data* sd; if(script_rid2sd(sd)){ const char* name = script_getstr(st,2); int type = script_getnum(st,3); - clif_soundeffect(sd,&sd->bl,name,type); + clif_soundeffect( sd->bl, name, type, SELF ); } return SCRIPT_CMD_SUCCESS; } @@ -15019,7 +15019,7 @@ int soundeffect_sub(struct block_list* bl,va_list ap) char* name = va_arg(ap,char*); int type = va_arg(ap,int); - clif_soundeffect((TBL_PC *)bl, bl, name, type); + clif_soundeffect( *bl, name, type, SELF ); return 0; } @@ -15050,7 +15050,7 @@ BUILDIN_FUNC(soundeffectall) if(!script_hasdata(st,4)) { // area around - clif_soundeffectall(bl, name, type, AREA); + clif_soundeffect( *bl, name, type, AREA ); } else if(!script_hasdata(st,5)) diff --git a/src/map/vending.cpp b/src/map/vending.cpp index 1e0a5cc7a7..cd66519846 100755 --- a/src/map/vending.cpp +++ b/src/map/vending.cpp @@ -388,7 +388,7 @@ int8 vending_openvending(struct map_session_data* sd, const char* message, const StringBuf_Destroy(&buf); clif_openvending(sd,sd->bl.id,sd->vending); - clif_showvendingboard(&sd->bl,message,0); + clif_showvendingboard( *sd ); idb_put(vending_db, sd->status.char_id, sd);