瀏覽代碼

Converted packets to structs 5 (#8393)

ZC_MONSTER_INFO
ZC_ACK_REQNAME_BYGID
ZC_PET_ACT
ZC_COMBODELAY
ZC_BLADESTOP
ZC_MVP
ZC_MVP_GETTING_SPECIAL_EXP
ZC_THROW_MVPITEM
ZC_NOTIFY_SKILL
ZC_NOTIFY_GROUNDSKILL
ZC_PROPERTY_PET
ZC_CHANGESTATE_PET

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
Atemo 3 月之前
父節點
當前提交
ea359b4aec
共有 13 個文件被更改,包括 503 次插入464 次删除
  1. 7 7
      src/map/atcommand.cpp
  2. 5 5
      src/map/battle.cpp
  3. 256 272
      src/map/clif.cpp
  4. 22 15
      src/map/clif.hpp
  5. 0 22
      src/map/clif_packetdb.hpp
  6. 7 7
      src/map/map.cpp
  7. 2 2
      src/map/mob.cpp
  8. 78 0
      src/map/packets.hpp
  9. 1 1
      src/map/pc.cpp
  10. 25 34
      src/map/pet.cpp
  11. 6 6
      src/map/script.cpp
  12. 90 89
      src/map/skill.cpp
  13. 4 4
      src/map/status.cpp

+ 7 - 7
src/map/atcommand.cpp

@@ -3270,7 +3270,7 @@ ACMD_FUNC(petfriendly) {
 	}
 
 	pet_set_intimate(pd, friendly);
-	clif_send_petstatus(sd);
+	clif_send_petstatus( *sd, *pd );
 	clif_displaymessage(fd, msg_txt(sd,182)); // Pet intimacy changed.
 	return 0;
 }
@@ -3304,7 +3304,7 @@ ACMD_FUNC(pethungry)
 	}
 
 	pd->pet.hungry = hungry;
-	clif_send_petstatus(sd);
+	clif_send_petstatus( *sd, *pd );
 	clif_displaymessage(fd, msg_txt(sd,185)); // Pet hunger changed.
 
 	return 0;
@@ -3329,7 +3329,7 @@ ACMD_FUNC(petrename)
 
 	pd->pet.rename_flag = 0;
 	intif_save_petdata(sd->status.account_id, &pd->pet);
-	clif_send_petstatus(sd);
+	clif_send_petstatus( *sd, *pd );
 	clif_displaymessage(fd, msg_txt(sd,187)); // You can now rename your pet.
 
 	return 0;
@@ -6436,13 +6436,13 @@ ACMD_FUNC(displayskill)
 	status_data* status = status_get_status_data(sd->bl);
 	tick = gettick();
 	if (type == 0 || type == 1)
-		clif_skill_damage(&sd->bl, &sd->bl, tick, status->amotion, status->dmotion, 1, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( sd->bl, sd->bl, tick, status->amotion, status->dmotion, 1, 1, skill_id, skill_lv, DMG_SINGLE );
 	if (type == 0 || type == 2)
-		clif_skill_damage(&sd->bl, &sd->bl, tick, status->amotion, status->dmotion, 1, 1, skill_id, skill_lv, DMG_SPLASH);
+		clif_skill_damage( sd->bl, sd->bl, tick, status->amotion, status->dmotion, 1, 1, skill_id, skill_lv, DMG_SPLASH );
 	if (type == 0 || type == 3)
 		clif_skill_nodamage(&sd->bl, sd->bl, skill_id, skill_lv);
 	if (type == 0 || type == 4)
-		clif_skill_poseffect(&sd->bl, skill_id, skill_lv, sd->bl.x, sd->bl.y, tick);
+		clif_skill_poseffect( sd->bl, skill_id, skill_lv, sd->bl.x, sd->bl.y, tick );
 	return 0;
 }
 
@@ -7572,7 +7572,7 @@ ACMD_FUNC(summon)
 	clif_specialeffect(&md->bl,EF_ENTRY2,AREA);
 	mob_spawn(md);
 	sc_start4(nullptr,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
-	clif_skill_poseffect(&sd->bl,AM_CALLHOMUN,1,md->bl.x,md->bl.y,tick);
+	clif_skill_poseffect( sd->bl, AM_CALLHOMUN, 1, md->bl.x, md->bl.y, tick );
 	clif_displaymessage(fd, msg_txt(sd,39));	// All monster summoned!
 
 	return 0;

+ 5 - 5
src/map/battle.cpp

@@ -7204,8 +7204,8 @@ static void battle_calc_weapon_final_atk_modifiers(struct Damage* wd, struct blo
 		rdamage = battle_calc_base_damage(target,tstatus,&tstatus->rhw,tsc,sstatus->size,0);
 		rdamage = (int64)rdamage * ratio / 100 + wd->damage * (10 + tsc->getSCE(SC_CRESCENTELBOW)->val1 * 20 / 10) / 10;
 		skill_blown(target, src, skill_get_blewcount(SR_CRESCENTELBOW_AUTOSPELL, tsc->getSCE(SC_CRESCENTELBOW)->val1), unit_getdir(src), BLOWN_NONE);
-		clif_skill_damage(target, src, gettick(), status_get_amotion(src), 0, rdamage,
-			1, SR_CRESCENTELBOW_AUTOSPELL, tsc->getSCE(SC_CRESCENTELBOW)->val1, DMG_SINGLE); // This is how official does
+		clif_skill_damage( *target, *src, gettick(), status_get_amotion(src), 0, rdamage,
+			1, SR_CRESCENTELBOW_AUTOSPELL, tsc->getSCE(SC_CRESCENTELBOW)->val1, DMG_SINGLE ); // This is how official does
 		clif_damage(*src, *target, gettick(), status_get_amotion(src)+1000, 0, rdamage/10, 1, DMG_NORMAL, 0, false);
 		battle_fix_damage(target, src, rdamage, 0, SR_CRESCENTELBOW);
 		status_damage(src, target, rdamage/10, 0, 0, 1, 0);
@@ -9916,7 +9916,7 @@ int64 battle_calc_return_damage(struct block_list* tbl, struct block_list *src,
 					int64 rd1 = i64min(damage, status_get_max_hp(tbl)) * tsc->getSCE(SC_DEATHBOUND)->val2 / 100; // Amplify damage.
 
 					*dmg = rd1 * 30 / 100; // Received damage = 30% of amplified damage.
-					clif_skill_damage(src, tbl, gettick(), status_get_amotion(src), 0, -30000, 1, RK_DEATHBOUND, tsc->getSCE(SC_DEATHBOUND)->val1, DMG_SINGLE);
+					clif_skill_damage( *src, *tbl, gettick(), status_get_amotion(src), 0, -30000, 1, RK_DEATHBOUND, tsc->getSCE(SC_DEATHBOUND)->val1, DMG_SINGLE );
 					skill_blown(tbl, src, skill_get_blewcount(RK_DEATHBOUND, tsc->getSCE(SC_DEATHBOUND)->val1), unit_getdir(src), BLOWN_NONE);
 					status_change_end(tbl, SC_DEATHBOUND);
 					rdamage += rd1 * 70 / 100; // Target receives 70% of the amplified damage. [Rytech]
@@ -10310,7 +10310,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
 		if(sc_start4(src,src, SC_BLADESTOP, 100, sd?pc_checkskill(sd, MO_BLADESTOP):5, 0, 0, target->id, duration))
 		{	//Target locked.
 			clif_damage(*src, *target, tick, sstatus->amotion, 1, 0, 1, DMG_NORMAL, 0, false); //Display MISS.
-			clif_bladestop(target, src->id, 1);
+			clif_bladestop( *target, src->id, true );
 			sc_start4(src,target, SC_BLADESTOP, 100, skill_lv, 0, 0, src->id, duration);
 			return ATK_BLOCK;
 		}
@@ -10512,7 +10512,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
 			s_elemental_data *ed = ((TBL_PC*)target)->ed;
 
 			if (ed) {
-				clif_skill_damage(&ed->bl, target, tick, status_get_amotion(src), 0, -30000, 1, EL_CIRCLE_OF_FIRE, tsc->getSCE(SC_CIRCLE_OF_FIRE_OPTION)->val1, DMG_SINGLE);
+				clif_skill_damage( ed->bl, *target, tick, status_get_amotion(src), 0, -30000, 1, EL_CIRCLE_OF_FIRE, tsc->getSCE(SC_CIRCLE_OF_FIRE_OPTION)->val1, DMG_SINGLE );
 				skill_attack(BF_WEAPON,&ed->bl,&ed->bl,src,EL_CIRCLE_OF_FIRE,tsc->getSCE(SC_CIRCLE_OF_FIRE_OPTION)->val1,tick,wd.flag);
 			}
 		}

+ 256 - 272
src/map/clif.cpp

@@ -1745,8 +1745,11 @@ int32 clif_spawn( struct block_list *bl, bool walking ){
 		}
 		break;
 	case BL_PET:
-		if (vd->head_bottom)
-			clif_pet_equip_area((TBL_PET*)bl); // needed to display pet equip properly
+		// If the pet wears equip
+		if( vd->head_bottom != 0 ){
+			pet_data& pd = *reinterpret_cast<pet_data*>( bl );
+			clif_send_petdata( nullptr, pd, CHANGESTATEPET_ACCESSORY );
+		}
 		break;
 	}
 	return 0;
@@ -2100,8 +2103,11 @@ void clif_move( struct unit_data& ud )
 		}
 	break;
 	case BL_PET:
-		if (vd->head_bottom) // needed to display pet equip properly
-			clif_pet_equip_area(BL_CAST(BL_PET, bl));
+		// If the pet wears equip
+		if( vd->head_bottom != 0 ){
+			pet_data& pd = *reinterpret_cast<pet_data*>( bl );
+			clif_send_petdata( nullptr, pd, CHANGESTATEPET_ACCESSORY );
+		}
 		break;
 	}
 
@@ -5091,8 +5097,11 @@ void clif_getareachar_unit( map_session_data* sd,struct block_list *bl ){
 		}
 		break;
 	case BL_PET:
-		if (vd->head_bottom)
-			clif_pet_equip(sd, (TBL_PET*)bl); // needed to display pet equip properly
+		// If the pet wears equip
+		if( vd->head_bottom != 0 ){
+			pet_data& pd = *reinterpret_cast<pet_data*>( bl );
+			clif_send_petdata( sd, pd, CHANGESTATEPET_ACCESSORY );
+		}
 		break;
 	}
 }
@@ -5128,8 +5137,25 @@ static int32 clif_calc_walkdelay(struct block_list *bl,int32 delay, char type, i
 /*========================================== [Playtester]
 * Returns hallucination damage the client displays
 *------------------------------------------*/
-static int32 clif_hallucination_damage()
-{
+static int64 clif_hallucination_damage( block_list& bl, int64 damage ){
+	status_change* sc = status_get_sc( &bl );
+
+	if( sc == nullptr ){
+		return damage;
+	}
+
+	if( sc->empty() ){
+		return damage;
+	}
+
+	if( sc->getSCE( SC_HALLUCINATION ) == nullptr ){
+		return damage;
+	}
+
+	if( damage == 0 ){
+		return damage;
+	}
+
 	int32 digit = rnd() % 5 + 1;
 	switch (digit)
 	{
@@ -5173,15 +5199,8 @@ int32 clif_damage(block_list& src, block_list& dst, t_tick tick, int32 sdelay, i
 	if (type != DMG_MULTI_HIT_CRITICAL)
 		type = clif_calc_delay(type,div,damage+damage2,ddelay);
 
-	status_change *sc = status_get_sc(&dst);
-
-	if(sc != nullptr && !sc->empty()) {
-		if(sc->getSCE(SC_HALLUCINATION)) {
-			damage = clif_hallucination_damage();
-			if(damage2)
-				damage2 = clif_hallucination_damage();
-		}
-	}
+	damage = static_cast<decltype(damage)>(clif_hallucination_damage(dst, damage));
+	damage2 = static_cast<decltype(damage2)>(clif_hallucination_damage(dst, damage2));
 
 	// Calculate what sdelay to send to the client so it applies damage at the same time as the server
 	if (battle_config.synchronize_damage && src.type == BL_MOB) {
@@ -5965,97 +5984,61 @@ void clif_skill_cooldown( map_session_data &sd, uint16 skill_id, t_tick tick ){
 /// Skill attack effect and damage.
 /// 0114 <skill id>.W <src id>.L <dst id>.L <tick>.L <src delay>.L <dst delay>.L <damage>.W <level>.W <div>.W <type>.B (ZC_NOTIFY_SKILL)
 /// 01de <skill id>.W <src id>.L <dst id>.L <tick>.L <src delay>.L <dst delay>.L <damage>.L <level>.W <div>.W <type>.B (ZC_NOTIFY_SKILL2)
-int32 clif_skill_damage(struct block_list *src,struct block_list *dst,t_tick tick,int32 sdelay,int32 ddelay,int64 sdamage,int32 div,uint16 skill_id,uint16 skill_lv,enum e_damage_type type)
-{
-	unsigned char buf[64];
-	int32 damage = (int32)cap_value(sdamage,INT_MIN,INT_MAX);
+int32 clif_skill_damage( block_list& src, block_list& dst, t_tick tick, int32 sdelay, int32 ddelay, int64 sdamage, int32 div, uint16 skill_id, uint16 skill_lv, e_damage_type type ){
+	type = clif_calc_delay( type, div, sdamage, ddelay );
+	sdamage = clif_hallucination_damage( dst, sdamage );
 
-	nullpo_ret(src);
-	nullpo_ret(dst);
-
-	type = clif_calc_delay(type,div,damage,ddelay);
+	PACKET_ZC_NOTIFY_SKILL packet{};
 
-	status_change* sc = status_get_sc( dst );
+	packet.PacketType = HEADER_ZC_NOTIFY_SKILL;
+	packet.SKID = skill_id;
+	packet.AID = src.id;
+	packet.targetID = dst.id;
+	packet.startTime = client_tick( tick );
+	packet.attackMT = sdelay;
+	packet.attackedMT = ddelay;
 
-	if( sc != nullptr && !sc->empty() ) {
-		if(sc->getSCE(SC_HALLUCINATION) && damage)
-			damage = clif_hallucination_damage();
-	}
+	auto damage = std::min( static_cast<decltype(packet.damage)>( sdamage ), std::numeric_limits<decltype(packet.damage)>::max() );
 
-#if PACKETVER < 3
-	WBUFW(buf,0)=0x114;
-	WBUFW(buf,2)=skill_id;
-	WBUFL(buf,4)=src->id;
-	WBUFL(buf,8)=dst->id;
-	WBUFL(buf,12)=client_tick(tick);
-	WBUFL(buf,16)=sdelay;
-	WBUFL(buf,20)=ddelay;
-	if (battle_config.hide_woe_damage && map_flag_gvg(src->m)) {
-		WBUFW(buf,24)=damage?div:0;
+	if (battle_config.hide_woe_damage && map_flag_gvg(src.m)) {
+		packet.damage = static_cast<decltype(packet.damage)>(damage ? div : 0);
 	} else {
-		WBUFW(buf,24)=damage;
+		packet.damage = damage;
 	}
-	WBUFW(buf,26)=skill_lv;
-	WBUFW(buf,28)=div;
-	WBUFB(buf,30)=type;
-	if (disguised(dst)) {
-		clif_send(buf,packet_len(0x114),dst,AREA_WOS);
-		WBUFL(buf,8)=disguised_bl_id(dst->id);
-		clif_send(buf,packet_len(0x114),dst,SELF);
-	} else
-		clif_send(buf,packet_len(0x114),dst,AREA);
+	packet.level = skill_lv;
+	packet.count = static_cast<decltype(packet.count)>(div);
 
-	if(disguised(src)) {
-		WBUFL(buf,4)=disguised_bl_id(src->id);
-		if (disguised(dst))
-			WBUFL(buf,8)=dst->id;
-		if(damage > 0)
-			WBUFW(buf,24)=-1;
-		clif_send(buf,packet_len(0x114),src,SELF);
-	}
-#else
-	WBUFW(buf,0)=0x1de;
-	WBUFW(buf,2)=skill_id;
-	WBUFL(buf,4)=src->id;
-	WBUFL(buf,8)=dst->id;
-	WBUFL(buf,12)=client_tick(tick);
-	WBUFL(buf,16)=sdelay;
-	WBUFL(buf,20)=ddelay;
-	if (battle_config.hide_woe_damage && map_flag_gvg(src->m)) {
-		WBUFL(buf,24)=damage?div:0;
-	} else {
-		WBUFL(buf,24)=damage;
-	}
-	WBUFW(buf,28)=skill_lv;
-	WBUFW(buf,30)=div;
 	// For some reason, late 2013 and newer clients have
 	// a issue that causes players and monsters to endure
 	// type 6 (ACTION_SKILL) skills. So we have to do a small
 	// hack to set all type 6 to be sent as type 8 ACTION_ATTACK_MULTIPLE
 #if PACKETVER < 20131223
-	WBUFB(buf,32)=type;
+	packet.action = static_cast<decltype(packet.action)>(type);
 #else
-	WBUFB(buf,32)=( type == DMG_SINGLE ) ? DMG_MULTI_HIT : type;
+	packet.action = static_cast<decltype(packet.action)>(( type == DMG_SINGLE ) ? DMG_MULTI_HIT : type);
 #endif
-	if (disguised(dst)) {
-		clif_send(buf,packet_len(0x1de),dst,AREA_WOS);
-		WBUFL(buf,8)=disguised_bl_id(dst->id);
-		clif_send(buf,packet_len(0x1de),dst,SELF);
-	} else
-		clif_send(buf,packet_len(0x1de),dst,AREA);
 
-	if(disguised(src)) {
-		WBUFL(buf,4)=disguised_bl_id(src->id);
-		if (disguised(dst))
-			WBUFL(buf,8)=dst->id;
-		if(damage > 0)
-			WBUFL(buf,24)=-1;
-		clif_send(buf,packet_len(0x1de),src,SELF);
+	if (disguised(&dst)) {
+		clif_send( &packet, sizeof( packet ), &dst, AREA_WOS );
+		packet.targetID = disguised_bl_id( dst.id );
+		clif_send( &packet, sizeof( packet ), &dst, SELF );
+	} else {
+		clif_send( &packet, sizeof( packet ), &dst, AREA );
+	}
+	
+	if (disguised(&src)) {
+		packet.AID = disguised_bl_id( src.id );
+		if (disguised(&dst)) {
+			packet.targetID = dst.id;
+		}
+		if (damage > 0) {
+			packet.damage = -1;
+		}
+		clif_send( &packet, sizeof( packet ), &src, SELF );
 	}
-#endif
 
 	//Because the damage delay must be synced with the client, here is where the can-walk tick must be updated. [Skotlex]
-	return clif_calc_walkdelay(dst,ddelay,type,damage,div);
+	return clif_calc_walkdelay( &dst, ddelay, type, damage, div );
 }
 
 
@@ -6065,19 +6048,14 @@ int32 clif_skill_damage(struct block_list *src,struct block_list *dst,t_tick tic
 int32 clif_skill_damage2(struct block_list *src,struct block_list *dst,t_tick tick,int32 sdelay,int32 ddelay,int32 damage,int32 div,uint16 skill_id,uint16 skill_lv,enum e_damage_type type)
 {
 	unsigned char buf[64];
-	status_change *sc;
 
 	nullpo_ret(src);
 	nullpo_ret(dst);
 
 	type = (type>DMG_NORMAL)?type:skill_get_hit(skill_id);
 	type = clif_calc_delay(type,div,damage,ddelay);
-	sc = status_get_sc(dst);
 
-	if(sc && sc->count) {
-		if(sc->getSCE(SC_HALLUCINATION) && damage)
-			damage = clif_hallucination_damage();
-	}
+	damage = clif_hallucination_damage( *dst, damage );
 
 	WBUFW(buf,0)=0x115;
 	WBUFW(buf,2)=skill_id;
@@ -6153,28 +6131,27 @@ bool clif_skill_nodamage( block_list* src, block_list& dst, uint16 skill_id, int
 	return success;
 }
 
+/// Non-damaging ground skill effect.
+/// 0117 <skill id>.W <src id>.L <level>.W <x>.W <y>.W <tick>.L (ZC_NOTIFY_GROUNDSKILL)
+void clif_skill_poseffect( block_list& bl, uint16 skill_id, uint16 skill_lv, uint16 x, uint16 y, t_tick tick ){
+	PACKET_ZC_NOTIFY_GROUNDSKILL packet{};
 
-/// Non-damaging ground skill effect (ZC_NOTIFY_GROUNDSKILL).
-/// 0117 <skill id>.W <src id>.L <level>.W <x>.W <y>.W <tick>.L
-void clif_skill_poseffect(struct block_list *src,uint16 skill_id,int32 val,int32 x,int32 y,t_tick tick)
-{
-	unsigned char buf[32];
-
-	nullpo_retv(src);
+	packet.PacketType = HEADER_ZC_NOTIFY_GROUNDSKILL;
+	packet.SKID = skill_id;
+	packet.AID = bl.id;
+	packet.level = skill_lv;
+	packet.xPos = x;
+	packet.yPos = y;
+	packet.startTime = client_tick( tick );
 
-	WBUFW(buf,0)=0x117;
-	WBUFW(buf,2)=skill_id;
-	WBUFL(buf,4)=src->id;
-	WBUFW(buf,8)=val;
-	WBUFW(buf,10)=x;
-	WBUFW(buf,12)=y;
-	WBUFL(buf,14)=client_tick(tick);
-	if(disguised(src)) {
-		clif_send(buf,packet_len(0x117),src,AREA_WOS);
-		WBUFL(buf,4)=disguised_bl_id(src->id);
-		clif_send(buf,packet_len(0x117),src,SELF);
-	} else
-		clif_send(buf,packet_len(0x117),src,AREA);
+	if (disguised(&bl)) {
+		clif_send( &packet, sizeof( packet ), &bl, AREA_WOS );
+		
+		packet.AID = disguised_bl_id( bl.id );
+		clif_send( &packet, sizeof( packet ), &bl, SELF );
+	} else {
+		clif_send( &packet, sizeof( packet ), &bl, AREA );
+	}
 }
 
 /// Presents a list of available warp destinations.
@@ -6284,38 +6261,33 @@ void clif_skill_teleportmessage( map_session_data& sd, e_notify_mapinfo_result r
 }
 
 
-/// Displays Sense (WZ_ESTIMATION) information window (ZC_MONSTER_INFO).
+/// Displays Sense (WZ_ESTIMATION) information window.
 /// 018c <class>.W <level>.W <size>.W <hp>.L <def>.W <race>.W <mdef>.W <element>.W
-///     <water%>.B <earth%>.B <fire%>.B <wind%>.B <poison%>.B <holy%>.B <shadow%>.B <ghost%>.B <undead%>.B
-void clif_skill_estimation(map_session_data *sd,struct block_list *dst)
-{
-	unsigned char buf[64];
-	int32 i, fix;
-
-	nullpo_retv(sd);
-	nullpo_retv(dst);
-
-	if( dst->type != BL_MOB )
-		return;
-
-	status_data* status = status_get_status_data(*dst);
-
-	WBUFW(buf, 0)=0x18c;
-	WBUFW(buf, 2)=status_get_class(dst);
-	WBUFW(buf, 4)=status_get_lv(dst);
-	WBUFW(buf, 6)=status->size;
-	WBUFL(buf, 8)=status->hp;
-	WBUFW(buf,12)= (battle_config.estimation_type&1?status->def:0)
-		+(battle_config.estimation_type&2?status->def2:0);
-	WBUFW(buf,14)=status->race;
-	WBUFW(buf,16)= (battle_config.estimation_type&1?status->mdef:0)
-		+(battle_config.estimation_type&2?status->mdef2:0);
-	WBUFW(buf,18)= status->def_ele;
-	for(i=0;i<9;i++)
-//		The following caps negative attributes to 0 since the client displays them as 255-fix. [Skotlex]
-		WBUFB(buf,20+i)= (unsigned char)((fix=elemental_attribute_db.getAttribute(status->ele_lv, i+1, status->def_ele))<0?0:fix);
-
-	clif_send(buf,packet_len(0x18c),&sd->bl,sd->status.party_id>0?PARTY_SAMEMAP:SELF);
+///     <water%>.B <earth%>.B <fire%>.B <wind%>.B <poison%>.B <holy%>.B <shadow%>.B <ghost%>.B <undead%>.B (ZC_MONSTER_INFO)
+void clif_skill_estimation( map_session_data& sd, mob_data& md ){
+	PACKET_ZC_MONSTER_INFO packet{};
+
+	packet.packetType = HEADER_ZC_MONSTER_INFO;
+	packet.class_ = md.vd->class_;
+	packet.level = static_cast<decltype(packet.level)>( md.level );
+	packet.size = md.status.size;
+	packet.hp = md.status.hp;
+	packet.def = static_cast<decltype(packet.def)>( ((battle_config.estimation_type&1) ? md.status.def : 0 ) + ((battle_config.estimation_type&2) ? md.status.def2 : 0 ) );
+	packet.race = md.status.race;
+	packet.mdef = static_cast<decltype(packet.mdef)>( ((battle_config.estimation_type&1) ? md.status.mdef : 0 ) + ((battle_config.estimation_type&2) ? md.status.mdef2 : 0 ) );
+	packet.element = md.status.def_ele;
+	// The following caps negative attributes to 0 since the client displays them as 255-fix. [Skotlex]
+	packet.water = static_cast<decltype(packet.water)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, ELE_WATER, md.status.def_ele), (int16)0 ) );
+	packet.earth = static_cast<decltype(packet.earth)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, ELE_EARTH, md.status.def_ele), (int16)0 ) );
+	packet.fire = static_cast<decltype(packet.fire)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, ELE_FIRE, md.status.def_ele), (int16)0 ) );
+	packet.wind = static_cast<decltype(packet.wind)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, ELE_WIND, md.status.def_ele), (int16)0 ) );
+	packet.poison = static_cast<decltype(packet.poison)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, ELE_POISON, md.status.def_ele), (int16)0 ) );
+	packet.holy = static_cast<decltype(packet.holy)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, ELE_HOLY, md.status.def_ele), (int16)0 ) );
+	packet.shadow = static_cast<decltype(packet.shadow)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, ELE_DARK, md.status.def_ele), (int16)0 ) );
+	packet.ghost = static_cast<decltype(packet.ghost)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, ELE_GHOST, md.status.def_ele), (int16)0 ) );
+	packet.undead = static_cast<decltype(packet.undead)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, ELE_UNDEAD, md.status.def_ele), (int16)0 ) );
+
+	clif_send( &packet, sizeof( packet ), &sd.bl, (sd.status.party_id > 0) ? PARTY_SAMEMAP : SELF );
 }
 
 
@@ -7030,25 +7002,20 @@ void clif_wis_end( map_session_data& sd, e_ack_whisper result ){
 }
 
 
-/// Returns character name requested by char_id (ZC_ACK_REQNAME_BYGID).
-/// 0194 <char id>.L <name>.24B
-/// 0af7 <flag>.W <char id>.L <name>.24B
-void clif_solved_charname(int32 fd, int32 charid, const char* name)
-{
+/// Returns character name requested by char_id.
+/// 0194 <char id>.L <name>.24B (ZC_ACK_REQNAME_BYGID)
+/// 0af7 <flag>.W <char id>.L <name>.24B (ZC_ACK_REQNAME_BYGID)
+void clif_solved_charname( map_session_data& sd, uint32 charid, const char* name ){
+	PACKET_ZC_ACK_REQNAME_BYGID packet{};
+
+	packet.packetType = HEADER_ZC_ACK_REQNAME_BYGID;
 #if PACKETVER >= 20180221
-	WFIFOHEAD(fd,packet_len(0xaf7));
-	WFIFOW(fd,0) = 0xaf7;
-	WFIFOW(fd,2) = name[0] ? 3 : 2;
-	WFIFOL(fd,4) = charid;
-	safestrncpy(WFIFOCP(fd, 8), name, NAME_LENGTH);
-	WFIFOSET(fd,packet_len(0x0af7));
-#else
-	WFIFOHEAD(fd,packet_len(0x194));
-	WFIFOW(fd,0)=0x194;
-	WFIFOL(fd,2)=charid;
-	safestrncpy(WFIFOCP(fd,6), name, NAME_LENGTH);
-	WFIFOSET(fd,packet_len(0x194));
+	packet.flag = name[0] ? 3 : 2;
 #endif
+	packet.CID = charid;
+	safestrncpy( packet.name, name, NAME_LENGTH );
+
+	clif_send( &packet, sizeof( packet ), &sd.bl, SELF );
 }
 
 
@@ -8172,17 +8139,19 @@ void clif_movetoattack( map_session_data& sd, block_list& bl ){
 }
 
 
-/// Notifies the client about the result of an item produce request (ZC_ACK_REQMAKINGITEM).
-/// 018f <result>.W <name id>.W
+/// Notifies the client about the result of an item produce request.
+/// 018f <result>.W <name id>.W (ZC_ACK_REQMAKINGITEM)
 /// result:
 ///     0 = success
 ///     1 = failure
 ///     2 = success (alchemist)
 ///     3 = failure (alchemist)
 void clif_produceeffect(map_session_data* sd,int32 flag, t_itemid nameid){
-	nullpo_retv( sd );
+	if( sd == nullptr ){
+		return;
+	}
 
-	clif_solved_charname( sd->fd, sd->status.char_id, sd->status.name );
+	clif_solved_charname( *sd, sd->status.char_id, sd->status.name );
 
 	PACKET_ZC_ACK_REQMAKINGITEM p = {};
 
@@ -8250,8 +8219,8 @@ void clif_sendegg(map_session_data *sd)
 }
 
 
-/// Sends a specific pet data update (ZC_CHANGESTATE_PET).
-/// 01a4 <type>.B <id>.L <data>.L
+/// Sends a specific pet data update.
+/// 01a4 <type>.B <id>.L <data>.L (ZC_CHANGESTATE_PET)
 /// type:
 ///     0 = pre-init (data = 0)
 ///     1 = intimacy (data = 0~4)
@@ -8262,66 +8231,92 @@ void clif_sendegg(map_session_data *sd)
 ///     6 = close egg selection ui and update egg in inventory (PACKETVER >= 20180704)
 ///
 /// If sd is null, the update is sent to nearby objects, otherwise it is sent only to that player.
-void clif_send_petdata(map_session_data* sd, struct pet_data* pd, int32 type, int32 param)
-{
-	uint8 buf[16];
-	nullpo_retv(pd);
+void clif_send_petdata( map_session_data* sd, pet_data& pd, e_changestate_pet data_type ){
+	int32 value;
 
-	WBUFW(buf,0) = 0x1a4;
-	WBUFB(buf,2) = type;
-	WBUFL(buf,3) = pd->bl.id;
-	WBUFL(buf,7) = param;
-	if (sd)
-		clif_send(buf, packet_len(0x1a4), &sd->bl, SELF);
+	switch( data_type ) {
+		case CHANGESTATEPET_INIT:
+			value = 0;
+			break;
+		case CHANGESTATEPET_INTIMACY:
+			value = pd.pet.intimate;
+			break;
+		case CHANGESTATEPET_HUNGER:
+			value = pd.pet.hungry;
+			break;
+		case CHANGESTATEPET_ACCESSORY:
+			value = pd.vd.head_bottom;
+			break;
+		case CHANGESTATEPET_PERFORMANCE: {
+			int32 num;
+
+			// data = 1~3: normal, 4: special
+			if (pd.pet.intimate > PET_INTIMATE_LOYAL)
+				num = pd.get_pet_db()->s_perfor ? 4 : 3;
+			else if (pd.pet.intimate > PET_INTIMATE_CORDIAL) //TODO: this is way too high
+				num = 2;
+			else
+				num = 1;
+
+			value = rnd_value(1, num);
+			break;
+		}
+		case CHANGESTATEPET_HAIRSTYLE:
+			value = battle_config.pet_hair_style;
+			break;
+		case CHANGESTATEPET_UPDATE_EGG:
+			value = ( pd.pet.intimate == 1 ) ? 0 : 1;
+			break;
+		default:	// shouldn't happen
+			return;
+	}
+
+	PACKET_ZC_CHANGESTATE_PET packet{};
+
+	packet.PacketType = HEADER_ZC_CHANGESTATE_PET;
+	packet.type = static_cast<decltype(packet.type)>( data_type );
+	packet.GID = pd.bl.id;
+	packet.data = value;
+
+	if (sd != nullptr)
+		clif_send( &packet, sizeof( packet ), &sd->bl, SELF );
 	else
-		clif_send(buf, packet_len(0x1a4), &pd->bl, AREA);
+		clif_send( &packet, sizeof( packet ), &pd.bl, AREA );
 }
 
 
-/// Pet's base data (ZC_PROPERTY_PET).
-/// 01a2 <name>.24B <renamed>.B <level>.W <hunger>.W <intimacy>.W <accessory id>.W <class>.W
-void clif_send_petstatus(map_session_data *sd)
-{
-	int32 fd;
-	struct s_pet *pet;
-
-	nullpo_retv(sd);
-	nullpo_retv(sd->pd);
+/// Pet's base data.
+/// 01a2 <name>.24B <renamed>.B <level>.W <hunger>.W <intimacy>.W <accessory id>.W <class>.W (ZC_PROPERTY_PET)
+void clif_send_petstatus( map_session_data& sd, pet_data& pd ){
+	PACKET_ZC_PROPERTY_PET packet{};
 
-	fd=sd->fd;
-	pet = &sd->pd->pet;
-	WFIFOHEAD(fd,packet_len(0x1a2));
-	WFIFOW(fd,0)=0x1a2;
-	safestrncpy(WFIFOCP(fd,2),pet->name,NAME_LENGTH);
-	WFIFOB(fd,26)=battle_config.pet_rename?0:pet->rename_flag;
-	WFIFOW(fd,27)=pet->level;
-	WFIFOW(fd,29)=pet->hungry;
-	WFIFOW(fd,31)=pet->intimate;
-	WFIFOW(fd,33)=pet->equip;
+	packet.PacketType = HEADER_ZC_PROPERTY_PET;
+	safestrncpy( packet.szName, pd.pet.name, NAME_LENGTH );
+	packet.bModified = battle_config.pet_rename ? 0 : pd.pet.rename_flag;
+	packet.nLevel = pd.pet.level;
+	packet.nFullness = pd.pet.hungry;
+	packet.nRelationship = pd.pet.intimate;
+	packet.ITID = static_cast<decltype(packet.ITID)>( pd.pet.equip );
 #if PACKETVER >= 20081126
-	WFIFOW(fd,35)=pet->class_;
+	packet.job = pd.pet.class_;
 #endif
-	WFIFOSET(fd,packet_len(0x1a2));
+
+	clif_send( &packet, sizeof( packet ), &sd.bl, SELF );
 }
 
 
-/// Notification about a pet's emotion/talk (ZC_PET_ACT).
-/// 01aa <id>.L <data>.L
+/// Notification about a pet's emotion/talk.
+/// 01aa <id>.L <data>.L (ZC_PET_ACT)
 /// data:
 ///     @see CZ_PET_ACT.
-void clif_pet_emotion(struct pet_data *pd,int32 param)
-{
-	unsigned char buf[16];
-
-	nullpo_retv(pd);
-
-	memset(buf,0,packet_len(0x1aa));
+void clif_pet_emotion( pet_data& pd, int32 param ){
+	PACKET_ZC_PET_ACT packet{};
 
-	WBUFW(buf,0)=0x1aa;
-	WBUFL(buf,2)=pd->bl.id;
-	WBUFL(buf,6)=param;
+	packet.packetType = HEADER_ZC_PET_ACT;
+	packet.GID = pd.bl.id;
+	packet.data = param;
 
-	clif_send(buf,packet_len(0x1aa),&pd->bl,AREA);
+	clif_send( &packet, sizeof( packet ), &pd.bl, AREA );
 }
 
 
@@ -8496,52 +8491,46 @@ void clif_spiritball( struct block_list *bl, struct block_list* target, enum sen
 	clif_send( &p, sizeof( p ), target == nullptr ? bl : target, send_target );
 }
 
-/// Notifies clients in area of a character's combo delay (ZC_COMBODELAY).
-/// 01d2 <account id>.L <delay>.L
-void clif_combo_delay(struct block_list *bl,t_tick wait)
-{
-	unsigned char buf[32];
 
-	nullpo_retv(bl);
+/// Notifies clients in area of a character's combo delay.
+/// 01d2 <account id>.L <delay>.L (ZC_COMBODELAY)
+void clif_combo_delay( block_list& bl, t_tick wait ){
+	PACKET_ZC_COMBODELAY packet{};
 
-	WBUFW(buf,0)=0x1d2;
-	WBUFL(buf,2)=bl->id;
-	WBUFL(buf,6)=client_tick(wait);
-	clif_send(buf,packet_len(0x1d2),bl,AREA);
+	packet.packetType = HEADER_ZC_COMBODELAY;
+	packet.AID = bl.id;
+	packet.delay = client_tick( wait );
+
+	clif_send( &packet, sizeof( packet ), &bl, AREA );
 }
 
 
-/// Notifies clients in area that a character has blade-stopped another (ZC_BLADESTOP).
-/// 01d1 <src id>.L <dst id>.L <flag>.L
+/// Notifies clients in area that a character has blade-stopped another.
+/// 01d1 <src id>.L <dst id>.L <flag>.L (ZC_BLADESTOP)
 /// flag:
 ///     0 = inactive
 ///     1 = active
-void clif_bladestop(struct block_list *src, int32 dst_id, int32 active)
-{
-	unsigned char buf[32];
+void clif_bladestop( block_list& src, uint32 target_id, bool active ){
+	PACKET_ZC_BLADESTOP packet{};
 
-	nullpo_retv(src);
-
-	WBUFW(buf,0)=0x1d1;
-	WBUFL(buf,2)=src->id;
-	WBUFL(buf,6)=dst_id;
-	WBUFL(buf,10)=active;
+	packet.packetType = HEADER_ZC_BLADESTOP;
+	packet.srcId = src.id;
+	packet.targetId = target_id;
+	packet.flag = active;
 
-	clif_send(buf,packet_len(0x1d1),src,AREA);
+	clif_send( &packet, sizeof( packet ), &src, AREA );
 }
 
 
-/// MVP effect (ZC_MVP).
-/// 010c <account id>.L
-void clif_mvp_effect(map_session_data *sd)
-{
-	unsigned char buf[16];
+/// MVP effect.
+/// 010c <account id>.L (ZC_MVP)
+void clif_mvp_effect( map_session_data& sd ){
+	PACKET_ZC_MVP packet{};
 
-	nullpo_retv(sd);
+	packet.packetType = HEADER_ZC_MVP;
+	packet.AID = sd.bl.id;
 
-	WBUFW(buf,0)=0x10c;
-	WBUFL(buf,2)=sd->bl.id;
-	clif_send(buf,packet_len(0x10c),&sd->bl,AREA);
+	clif_send( &packet, sizeof( packet ), &sd.bl, AREA );
 }
 
 
@@ -8557,41 +8546,36 @@ void clif_mvp_item( map_session_data *sd, t_itemid nameid ){
 }
 
 
-/// MVP EXP reward message (ZC_MVP_GETTING_SPECIAL_EXP).
-/// 010b <exp>.L
-void clif_mvp_exp(map_session_data *sd, t_exp exp) {
+/// MVP EXP reward message.
+/// 010b <exp>.L (ZC_MVP_GETTING_SPECIAL_EXP)
+void clif_mvp_exp( map_session_data& sd, t_exp exp ){
 #if PACKETVER >= 20131223		// Kro remove this packet [Napster]
 	if (battle_config.mvp_exp_reward_message) {
 		char e_msg[CHAT_SIZE_MAX];
-		sprintf(e_msg, msg_txt(sd, 717), exp);
-		clif_messagecolor(&sd->bl, color_table[COLOR_CYAN], e_msg, false, SELF);		// Congratulations! You are the MVP! Your reward EXP Points are %u !!
+		sprintf(e_msg, msg_txt(&sd, 717), exp); // Congratulations! You are the MVP! Your reward EXP Points are %u !!
+		clif_messagecolor( &sd.bl, color_table[COLOR_CYAN], e_msg, false, SELF );
 	}
 #else
-	int32 fd;
+	PACKET_ZC_MVP_GETTING_SPECIAL_EXP packet{};
 
-	nullpo_retv(sd);
+	packet.packetType = HEADER_ZC_MVP_GETTING_SPECIAL_EXP;
+	packet.exp = std::min( static_cast<decltype(packet.exp)>( exp ), MAX_EXP );
 
-	fd = sd->fd;
-	WFIFOHEAD(fd, packet_len(0x10b));
-	WFIFOW(fd,0) = 0x10b;
-	WFIFOL(fd,2) = (uint32)u64min( exp, MAX_EXP );
-	WFIFOSET(fd, packet_len(0x10b));
+	clif_send( &packet, sizeof( packet ), &sd.bl, SELF );
 #endif
 }
 
 
-/// Dropped MVP item reward message (ZC_THROW_MVPITEM).
-/// 010d
+/// Dropped MVP item reward message.
+/// 010d (ZC_THROW_MVPITEM)
 ///
-/// "You are the MVP, but cannot obtain the reward because
-///     you are overweight."
-void clif_mvp_noitem(map_session_data* sd)
-{
-	int32 fd = sd->fd;
+/// "You are the MVP, but cannot obtain the reward because you are overweight."
+void clif_mvp_noitem( map_session_data& sd ){
+	PACKET_ZC_THROW_MVPITEM packet{};
 
-	WFIFOHEAD(fd,packet_len(0x10d));
-	WFIFOW(fd,0) = 0x10d;
-	WFIFOSET(fd,packet_len(0x10d));
+	packet.packetType = HEADER_ZC_THROW_MVPITEM;
+
+	clif_send( &packet, sizeof( packet ), &sd.bl, SELF );
 }
 
 
@@ -10839,8 +10823,8 @@ void clif_parse_LoadEndAck(int32 fd,map_session_data *sd)
 			if(map_addblock(&sd->pd->bl))
 				return;
 			clif_spawn(&sd->pd->bl);
-			clif_send_petdata(sd,sd->pd,0,0);
-			clif_send_petstatus(sd);
+			clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_INIT );
+			clif_send_petstatus( *sd, *sd->pd );
 //			skill_unit_move(&sd->pd->bl,gettick(),1);
 		}
 	}
@@ -10918,7 +10902,7 @@ void clif_parse_LoadEndAck(int32 fd,map_session_data *sd)
 		}
 
 		if(sd->pd && sd->pd->pet.intimate > 900)
-			clif_pet_emotion(sd->pd,(sd->pd->pet.class_ - 100)*100 + 50 + pet_hungry_val(sd->pd));
+			clif_pet_emotion( *sd->pd, (sd->pd->pet.class_ - 100)*100 + 50 + pet_hungry_val(sd->pd) );
 
 		if(hom_is_active(sd->hd))
 			hom_init_timers(sd->hd);
@@ -14616,7 +14600,7 @@ void clif_parse_SelectEgg(int32 fd, map_session_data *sd){
 void clif_parse_SendEmotion(int32 fd, map_session_data *sd)
 {
 	if(sd->pd)
-		clif_pet_emotion(sd->pd,RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]));
+		clif_pet_emotion( *sd->pd, RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]) );
 }
 
 

+ 22 - 15
src/map/clif.hpp

@@ -846,6 +846,16 @@ enum e_ack_additem_to_cart : uint8 {
 	ADDITEM_TO_CART_FAIL_COUNT = 1
 };
 
+enum e_changestate_pet : uint8 {
+	CHANGESTATEPET_INIT = 0,
+	CHANGESTATEPET_INTIMACY = 1,
+	CHANGESTATEPET_HUNGER = 2,
+	CHANGESTATEPET_ACCESSORY = 3,
+	CHANGESTATEPET_PERFORMANCE = 4,
+	CHANGESTATEPET_HAIRSTYLE = 5,
+	CHANGESTATEPET_UPDATE_EGG = 6,
+};
+
 int32 clif_setip(const char* ip);
 void clif_setbindip(const char* ip);
 void clif_setport(uint16 port);
@@ -968,11 +978,11 @@ void clif_skillcasting(struct block_list* bl, int32 src_id, int32 dst_id, int32
 void clif_skillcastcancel( block_list& bl );
 void clif_skill_fail( map_session_data& sd, uint16 skill_id, enum useskill_fail_cause cause = USESKILL_FAIL_LEVEL, int32 btype = 0, t_itemid itemId = 0 );
 void clif_skill_cooldown( map_session_data &sd, uint16 skill_id, t_tick tick );
-int32 clif_skill_damage(struct block_list *src,struct block_list *dst,t_tick tick,int32 sdelay,int32 ddelay,int64 sdamage,int32 div,uint16 skill_id,uint16 skill_lv,enum e_damage_type type);
+int32 clif_skill_damage( block_list& src, block_list& dst, t_tick tick, int32 sdelay, int32 ddelay, int64 sdamage, int32 div, uint16 skill_id, uint16 skill_lv, e_damage_type type );
 //int32 clif_skill_damage2(struct block_list *src,struct block_list *dst,t_tick tick,int32 sdelay,int32 ddelay,int32 damage,int32 div,uint16 skill_id,uint16 skill_lv,enum e_damage_type type);
 bool clif_skill_nodamage( block_list* src, block_list& dst, uint16 skill_id, int32 heal, bool success = true );
-void clif_skill_poseffect(struct block_list *src,uint16 skill_id,int32 val,int32 x,int32 y,t_tick tick);
-void clif_skill_estimation(map_session_data *sd,struct block_list *dst);
+void clif_skill_poseffect( block_list& bl, uint16 skill_id, uint16 skill_lv, uint16 x, uint16 y, t_tick tick );
+void clif_skill_estimation( map_session_data& sd, mob_data& md );
 void clif_skill_warppoint( map_session_data& sd, uint16 skill_id, uint16 skill_lv, std::vector<std::string>& maps );
 void clif_skill_memomessage( map_session_data& sd, e_ack_remember_warppoint_result result );
 void clif_skill_teleportmessage( map_session_data& sd, e_notify_mapinfo_result result );
@@ -993,8 +1003,8 @@ void clif_spiritball( struct block_list *bl, struct block_list* target = nullptr
 void clif_soulball( map_session_data *sd, struct block_list* target = nullptr, enum send_target send_target = AREA );
 void clif_servantball( map_session_data& sd, struct block_list* target = nullptr, enum send_target send_target = AREA );
 void clif_abyssball( map_session_data& sd, struct block_list* target = nullptr, enum send_target send_target = AREA );
-void clif_combo_delay(struct block_list *bl,t_tick wait);
-void clif_bladestop(struct block_list *src, int32 dst_id, int32 active);
+void clif_combo_delay( block_list& bl, t_tick wait );
+void clif_bladestop( block_list& src, uint32 target_id, bool active );
 void clif_changemapcell(int32 fd, int16 m, int32 x, int32 y, int32 type, enum send_target target);
 
 #define clif_status_load(bl, type, flag) clif_status_change((bl), (type), (flag), 0, 0, 0, 0)
@@ -1005,7 +1015,7 @@ void clif_efst_status_change_sub(struct block_list *tbl, struct block_list *bl,
 void clif_wis_message(map_session_data* sd, const char* nick, const char* mes, size_t mes_len, int32 gmlvl);
 void clif_wis_end( map_session_data& sd, e_ack_whisper result );
 
-void clif_solved_charname(int32 fd, int32 charid, const char* name);
+void clif_solved_charname( map_session_data& sd, uint32 charid, const char* name );
 void clif_name( struct block_list* src, struct block_list *bl, send_target target );
 #define clif_name_self(bl) clif_name( (bl), (bl), SELF )
 #define clif_name_area(bl) clif_name( (bl), (bl), AREA )
@@ -1033,10 +1043,10 @@ void clif_hat_effect_single( map_session_data& sd, uint16 effectId, bool enable
 
 void clif_item_skill(map_session_data *sd,uint16 skill_id,uint16 skill_lv);
 
-void clif_mvp_effect(map_session_data *sd);
+void clif_mvp_effect( map_session_data& sd );
 void clif_mvp_item(map_session_data *sd, t_itemid nameid);
-void clif_mvp_exp(map_session_data *sd, t_exp exp);
-void clif_mvp_noitem(map_session_data* sd);
+void clif_mvp_exp( map_session_data& sd, t_exp exp );
+void clif_mvp_noitem( map_session_data& sd );
 void clif_changed_dir(block_list& bl, enum send_target target);
 
 // vending
@@ -1144,12 +1154,9 @@ void clif_upgrademessage( map_session_data* sd, int32 result, t_itemid item_id )
 void clif_catch_process( map_session_data& sd );
 void clif_pet_roulette( map_session_data& sd, bool success );
 void clif_sendegg(map_session_data *sd);
-void clif_send_petstatus(map_session_data *sd);
-void clif_send_petdata(map_session_data* sd, struct pet_data* pd, int32 type, int32 param);
-#define clif_pet_equip(sd, pd) clif_send_petdata(sd, pd, 3, (pd)->vd.head_bottom)
-#define clif_pet_equip_area(pd) clif_send_petdata(nullptr, pd, 3, (pd)->vd.head_bottom)
-#define clif_pet_performance(pd, param) clif_send_petdata(nullptr, pd, 4, param)
-void clif_pet_emotion(struct pet_data *pd,int32 param);
+void clif_send_petstatus( map_session_data& sd, pet_data& pd );
+void clif_send_petdata( map_session_data* sd, pet_data& pd, e_changestate_pet data_type );
+void clif_pet_emotion( pet_data& pd, int32 param );
 void clif_pet_food( map_session_data& sd, int32 foodid, bool success );
 void clif_pet_autofeed_status(map_session_data* sd, bool force);
 

+ 0 - 22
src/map/clif_packetdb.hpp

@@ -114,9 +114,6 @@
 	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 ) );
-	packet(0x010b,6);
-	packet(0x010c,6);
-	packet(0x010d,2);
 	packet(0x010e,11);
 	packet(0x010f,-1);
 	packet( HEADER_ZC_ACK_TOUSESKILL, sizeof( PACKET_ZC_ACK_TOUSESKILL ) );
@@ -125,7 +122,6 @@
 	packet(0x0114,31);
 	packet(0x0115,35);
 	parseable_packet(0x0116,10,clif_parse_UseSkillToPos,2,4,6,8);
-	packet(0x0117,18);
 	parseable_packet(0x0118,2,clif_parse_StopAttack,0);
 	packet(0x0119,13);
 	parseable_packet(0x011b,20,clif_parse_UseSkillMap,2,4);
@@ -196,14 +192,12 @@
 	packet(0x0187,6);
 	parseable_packet(0x018a,4,clif_parse_QuitGame,2);
 	packet(0x018b,4);
-	packet(0x018c,29);
 	parseable_packet( HEADER_CZ_REQMAKINGITEM, sizeof( struct PACKET_CZ_REQMAKINGITEM ), clif_parse_ProduceMix, 0 );
 	packet( HEADER_ZC_ACK_REQMAKINGITEM, sizeof( PACKET_ZC_ACK_REQMAKINGITEM ) );
 	parseable_packet(0x0190,90,clif_parse_UseSkillToPosMoreInfo,2,4,6,8,10);
 	packet( HEADER_ZC_TALKBOX_CHATCONTENTS, sizeof( struct PACKET_ZC_TALKBOX_CHATCONTENTS ) );
 	packet(0x0192,24);
 	parseable_packet(0x0193,6,clif_parse_SolveCharName,2);
-	packet(0x0194,30);
 	packet( HEADER_ZC_ACK_REQNAMEALL, sizeof( struct PACKET_ZC_ACK_REQNAMEALL ) );
 	packet(0x0196,9);
 	parseable_packet(0x0197,4,clif_parse_ResetChar,2);
@@ -214,15 +208,12 @@
 	parseable_packet(0x019d,6,clif_parse_GMHide,2);
 	parseable_packet(0x019f,6,clif_parse_CatchPet,2);
 	parseable_packet(0x01a1,3,clif_parse_PetMenu,2);
-	packet(0x01a2,35);
 	packet(0x01a3,5);
-	packet(0x01a4,11);
 	parseable_packet(0x01a5,26,clif_parse_ChangePetName,2);
 	packet(0x01a6,-1);
 	parseable_packet(0x01a7,4,clif_parse_SelectEgg,2);
 	packet(0x01a8,4);
 	parseable_packet(0x01a9,6,clif_parse_SendEmotion,2);
-	packet(0x01aa,10);
 	packet(0x01ac,6);
 	packet(0x01ad,-1);
 	parseable_packet( HEADER_CZ_REQ_MAKINGARROW, sizeof( PACKET_CZ_REQ_MAKINGARROW ), clif_parse_SelectArrow, 0 );
@@ -252,8 +243,6 @@
 	parseable_packet(0x01ce,6,clif_parse_AutoSpell,2);
 	packet(0x01cf,28);
 	packet(0x01d0,8);
-	packet(0x01d1,14);
-	packet(0x01d2,10);
 	parseable_packet(0x01d5,-1,clif_parse_NpcStringInput,2,4,8);
 	packet(0x01d7,11);
 	packet(0x01d8,54);
@@ -1200,11 +1189,6 @@
 	packet(0x043f,8);
 #endif
 
-// 2008-11-26aSakexe
-#if PACKETVER >= 20081126
-	packet(0x01a2,37);
-#endif
-
 // 2008-12-10aSakexe
 #if PACKETVER >= 20081210
 	parseable_packet( HEADER_CZ_SKILL_SELECT_RESPONSE, sizeof( PACKET_CZ_SKILL_SELECT_RESPONSE ), clif_parse_SkillSelectMenu, 0 );
@@ -1277,11 +1261,6 @@
 	packet(0x043f,8);
 #endif
 
-// 2008-12-17aRagexeRE
-#if PACKETVER >= 20081217
-	packet(0x01a2,37);
-#endif
-
 // 2008-12-17bRagexeRE
 #if PACKETVER >= 20081217
 	packet(0x006d,114);
@@ -1979,7 +1958,6 @@
 // 2018-02-21aRagexeRE or 2018-02-21bRagexeRE
 #if PACKETVER >= 20180221
 	packet(0x0206,35); // ZC_FRIENDS_STATE
-	packet(0x0af7,32);
 #endif
 
 // 2018-03-07bRagexeRE

+ 7 - 7
src/map/map.cpp

@@ -1979,8 +1979,8 @@ void map_addnickdb(int32 charid, const char* nick)
 		req = p->requests;
 		p->requests = req->next;
 		sd = map_charid2sd(req->charid);
-		if( sd )
-			clif_solved_charname(sd->fd, charid, p->nick);
+		if( sd != nullptr )
+			clif_solved_charname( *sd, charid, p->nick );
 		aFree(req);
 	}
 }
@@ -2001,8 +2001,8 @@ void map_delnickdb(int32 charid, const char* name)
 		req = p->requests;
 		p->requests = req->next;
 		sd = map_charid2sd(req->charid);
-		if( sd )
-			clif_solved_charname(sd->fd, charid, name);
+		if( sd != nullptr )
+			clif_solved_charname( *sd, charid, name );
 		aFree(req);
 	}
 	aFree(p);
@@ -2020,16 +2020,16 @@ void map_reqnickdb(map_session_data * sd, int32 charid)
 	nullpo_retv(sd);
 
 	tsd = map_charid2sd(charid);
-	if( tsd )
+	if( tsd != nullptr )
 	{
-		clif_solved_charname(sd->fd, charid, tsd->status.name);
+		clif_solved_charname( *sd, charid, tsd->status.name );
 		return;
 	}
 
 	p = (struct charid2nick*)idb_ensure(nick_db, charid, create_charid2nick);
 	if( *p->nick )
 	{
-		clif_solved_charname(sd->fd, charid, p->nick);
+		clif_solved_charname( *sd, charid, p->nick );
 		return;
 	}
 	// not in cache, request it

+ 2 - 2
src/map/mob.cpp

@@ -3094,7 +3094,7 @@ int32 mob_dead(struct mob_data *md, struct block_list *src, int32 type)
 		t_itemid log_mvp_nameid = 0;
 		t_exp log_mvp_exp = 0;
 
-		clif_mvp_effect( mvp_sd );
+		clif_mvp_effect( *mvp_sd );
 
 		//mapflag: noexp check [Lorky]
 		if( md->db->mexp > 0 && !( map_getmapflag( m, MF_NOBASEEXP ) || type&2 ) ){
@@ -3116,7 +3116,7 @@ int32 mob_dead(struct mob_data *md, struct block_list *src, int32 type)
 
 			log_mvp_exp = cap_value( log_mvp_exp, 1, MAX_EXP );
 
-			clif_mvp_exp( mvp_sd, log_mvp_exp );
+			clif_mvp_exp( *mvp_sd, log_mvp_exp );
 			pc_gainexp( mvp_sd, &md->bl, log_mvp_exp, 0, 0 );
 		}
 

+ 78 - 0
src/map/packets.hpp

@@ -1634,6 +1634,84 @@ struct PACKET_ZC_ROOM_NEWENTRY {
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_ROOM_NEWENTRY, 0xd7);
 
+struct PACKET_ZC_MONSTER_INFO {
+	int16 packetType;
+	uint16 class_;
+	uint16 level;
+	uint16 size;
+	uint32 hp;
+	int16 def;
+	uint16 race;
+	int16 mdef;
+	uint16 element;
+	uint8 water;
+	uint8 earth;
+	uint8 fire;
+	uint8 wind;
+	uint8 poison;
+	uint8 holy;
+	uint8 shadow;
+	uint8 ghost;
+	uint8 undead;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_MONSTER_INFO, 0x18c);
+
+#if PACKETVER >= 20180221
+struct PACKET_ZC_ACK_REQNAME_BYGID {
+	int16 packetType;
+	uint16 flag;
+	uint32 CID;
+	char name[NAME_LENGTH];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_ACK_REQNAME_BYGID, 0xaf7);
+#else
+struct PACKET_ZC_ACK_REQNAME_BYGID {
+	int16 packetType;
+	uint32 CID;
+	char name[NAME_LENGTH];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_ACK_REQNAME_BYGID, 0x194);
+#endif
+
+struct PACKET_ZC_PET_ACT {
+	int16 packetType;
+	uint32 GID;
+	int32 data;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_PET_ACT, 0x1aa);
+
+struct PACKET_ZC_COMBODELAY {
+	int16 packetType;
+	uint32 AID;
+	uint32 delay;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_COMBODELAY, 0x1d2);
+
+struct PACKET_ZC_BLADESTOP {
+	int16 packetType;
+	uint32 srcId;
+	uint32 targetId;
+	uint32 flag;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_BLADESTOP, 0x1d1);
+
+struct PACKET_ZC_MVP {
+	int16 packetType;
+	uint32 AID;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_MVP, 0x10c);
+
+struct PACKET_ZC_MVP_GETTING_SPECIAL_EXP {
+	int16 packetType;
+	uint32 exp;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_MVP_GETTING_SPECIAL_EXP, 0x10b);
+
+struct PACKET_ZC_THROW_MVPITEM {
+	int16 packetType;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_THROW_MVPITEM, 0x10d);
+
 // 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 )

+ 1 - 1
src/map/pc.cpp

@@ -9703,7 +9703,7 @@ int32 pc_dead(map_session_data *sd,struct block_list *src)
 		struct pet_data *pd = sd->pd;
 		if( !mapdata->getMapFlag(MF_NOEXPPENALTY) ) {
 			pet_set_intimate(pd, pd->pet.intimate + pd->get_pet_db()->die);
-			clif_send_petdata(sd,sd->pd,1,pd->pet.intimate);
+			clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_INTIMACY );
 		}
 		if( sd->pd->target_id ) // Unlock all targets...
 			pet_unlocktarget(sd->pd);

+ 25 - 34
src/map/pet.cpp

@@ -871,11 +871,11 @@ static TIMER_FUNC(pet_hungry){
 		}
 
 		status_calc_pet(pd,SCO_NONE);
-		clif_send_petdata(sd,pd,1,pd->pet.intimate);
+		clif_send_petdata( sd, *pd, CHANGESTATEPET_INTIMACY );
 		interval = 20000; // While starving, it's every 20 seconds
 	}
 
-	clif_send_petdata(sd,pd,2,pd->pet.hungry);
+	clif_send_petdata( sd, *pd, CHANGESTATEPET_HUNGER );
 
 	if( battle_config.feature_pet_autofeed && pd->pet.autofeed && pd->pet.hungry <= battle_config.feature_pet_autofeed_rate ){
 		pet_food( sd, pd );
@@ -936,17 +936,8 @@ int32 pet_hungry_timer_delete(struct pet_data *pd)
  */
 static int32 pet_performance(map_session_data *sd, struct pet_data *pd)
 {
-	int32 val;
-
-	if (pd->pet.intimate > PET_INTIMATE_LOYAL)
-		val = pd->get_pet_db()->s_perfor ? 4 : 3;
-	else if(pd->pet.intimate > PET_INTIMATE_CORDIAL) //TODO: this is way too high
-		val = 2;
-	else
-		val = 1;
-
 	pet_stop_walking(pd,2000<<8);
-	clif_pet_performance(pd, rnd_value(1, val));
+	clif_send_petdata( nullptr, *pd, CHANGESTATEPET_PERFORMANCE );
 	pet_lootitem_drop( *pd, nullptr );
 
 	return 1;
@@ -972,7 +963,7 @@ bool pet_return_egg( map_session_data *sd, struct pet_data *pd ){
 	pd->pet.incubate = 1;
 #if PACKETVER >= 20180704
 	clif_inventorylist(sd);
-	clif_send_petdata(sd, pd, 6, 0);
+	clif_send_petdata( sd, *pd, CHANGESTATEPET_UPDATE_EGG );
 #endif
 	unit_free(&pd->bl,CLR_OUTSIGHT);
 
@@ -1114,13 +1105,13 @@ int32 pet_birth_process(map_session_data *sd, struct s_pet *pet)
 			return 1;
 
 		clif_spawn(&sd->pd->bl);
-		clif_send_petdata(sd,sd->pd, 0,0);
-		clif_send_petdata(sd,sd->pd, 5,battle_config.pet_hair_style);
+		clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_INIT );
+		clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_HAIRSTYLE );
 #if PACKETVER >= 20180704
-		clif_send_petdata(sd, sd->pd, 6, 1);
+		clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_UPDATE_EGG );
 #endif
-		clif_pet_equip_area(sd->pd);
-		clif_send_petstatus(sd);
+		clif_send_petdata( nullptr, *sd->pd, CHANGESTATEPET_ACCESSORY );
+		clif_send_petstatus( *sd, *sd->pd );
 		clif_pet_autofeed_status(sd,true);
 	}
 
@@ -1175,10 +1166,10 @@ int32 pet_recv_petdata(uint32 account_id,struct s_pet *p,int32 flag)
 				return 1;
 
 			clif_spawn(&sd->pd->bl);
-			clif_send_petdata(sd,sd->pd,0,0);
-			clif_send_petdata(sd,sd->pd,5,battle_config.pet_hair_style);
-			clif_pet_equip_area(sd->pd);
-			clif_send_petstatus(sd);
+			clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_INIT );
+			clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_HAIRSTYLE );
+			clif_send_petdata( nullptr, *sd->pd, CHANGESTATEPET_ACCESSORY );
+			clif_send_petstatus( *sd, *sd->pd );
 		}
 	}
 
@@ -1441,7 +1432,7 @@ int32 pet_menu(map_session_data *sd,int32 menunum)
 
 	switch(menunum) {
 		case 0:
-			clif_send_petstatus(sd);
+			clif_send_petstatus( *sd, *sd->pd );
 			break;
 		case 1:
 			pet_food(sd, sd->pd);
@@ -1504,15 +1495,15 @@ int32 pet_change_name_ack(map_session_data *sd, char* name, int32 flag)
 
 	if ( !flag || !strlen(name) ) {
 		clif_displaymessage(sd->fd, msg_txt(sd,280)); // You cannot use this name for your pet.
-		clif_send_petstatus(sd); //Send status so client knows pet name change got rejected.
+		clif_send_petstatus( *sd, *pd ); //Send status so client knows pet name change got rejected.
 		return 0;
 	}
 
 	safestrncpy(pd->pet.name, name, NAME_LENGTH);
 	clif_name_area(&pd->bl);
 	pd->pet.rename_flag = 1;
-	clif_pet_equip_area(pd);
-	clif_send_petstatus(sd);
+	clif_send_petdata( nullptr, *pd, CHANGESTATEPET_ACCESSORY );
+	clif_send_petstatus( *sd, *pd );
 
 	int32 index = pet_egg_search( sd, pd->pet.pet_id );
 
@@ -1556,7 +1547,7 @@ int32 pet_equipitem(map_session_data *sd,int32 index)
 	pc_delitem(sd,index,1,0,0,LOG_TYPE_OTHER);
 	pd->pet.equip = nameid;
 	status_set_viewdata(&pd->bl, pd->pet.class_); //Updates view_data.
-	clif_pet_equip_area(pd);
+	clif_send_petdata( nullptr, *pd, CHANGESTATEPET_ACCESSORY );
 
 	if (battle_config.pet_equip_required) { // Skotlex: start support timers if need
 		t_tick tick = gettick();
@@ -1609,7 +1600,7 @@ static int32 pet_unequipitem(map_session_data *sd, struct pet_data *pd)
 
 	pd->pet.equip = 0;
 	status_set_viewdata(&pd->bl, pd->pet.class_);
-	clif_pet_equip_area(pd);
+	clif_send_petdata( nullptr, *pd, CHANGESTATEPET_ACCESSORY );
 
 	if( battle_config.pet_equip_required ) { // Skotlex: halt support timers if needed
 		if( pd->state.skillbonus ) {
@@ -1687,8 +1678,8 @@ int32 pet_food(map_session_data *sd, struct pet_data *pd)
 
 	log_feeding(sd, LOG_FEED_PET, pet_db_ptr->FoodID);
 
-	clif_send_petdata(sd,pd,2,pd->pet.hungry);
-	clif_send_petdata(sd,pd,1,pd->pet.intimate);
+	clif_send_petdata( sd, *pd, CHANGESTATEPET_HUNGER );
+	clif_send_petdata( sd, *pd, CHANGESTATEPET_INTIMACY );
 	clif_pet_food( *sd, pet_db_ptr->FoodID, 1 );
 
 	return 0;
@@ -2351,10 +2342,10 @@ void pet_evolution(map_session_data *sd, int16 pet_id) {
 		return;
 
 	clif_spawn(&sd->pd->bl);
-	clif_send_petdata(sd, sd->pd, 0, 0);
-	clif_send_petdata(sd, sd->pd, 5, battle_config.pet_hair_style);
-	clif_pet_equip_area(sd->pd);
-	clif_send_petstatus(sd);
+	clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_INIT );
+	clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_HAIRSTYLE );
+	clif_send_petdata( nullptr, *sd->pd, CHANGESTATEPET_ACCESSORY );
+	clif_send_petstatus( *sd, *sd->pd );
 	clif_emotion(&sd->bl, ET_BEST);
 	clif_specialeffect(&sd->pd->bl, EF_HO_UP, AREA);
 

+ 6 - 6
src/map/script.cpp

@@ -15390,13 +15390,13 @@ BUILDIN_FUNC(petskillsupport)
 static inline void script_skill_effect( block_list& bl, uint16 skill_id, uint16 skill_lv, int16 x, int16 y ) {
 	switch (skill_get_casttype(skill_id)) {
 		case CAST_GROUND:
-			clif_skill_poseffect(&bl, skill_id, skill_lv, x, y, gettick());
+			clif_skill_poseffect( bl, skill_id, skill_lv, x, y, gettick() );
 			break;
 		case CAST_NODAMAGE:
 			clif_skill_nodamage(&bl, bl, skill_id, skill_lv);
 			break;
 		case CAST_DAMAGE:
-			clif_skill_damage(&bl, &bl, gettick(), status_get_amotion(&bl), status_get_dmotion(&bl), 0, 1, skill_id, skill_lv, skill_get_hit(skill_id));
+			clif_skill_damage( bl, bl, gettick(), status_get_amotion(&bl), status_get_dmotion(&bl), 0, 1, skill_id, skill_lv, skill_get_hit(skill_id) );
 			break;
 	}
 }
@@ -16555,7 +16555,7 @@ BUILDIN_FUNC(summon)
 		return SCRIPT_CMD_FAILURE;
 	}
 
-	clif_skill_poseffect( &sd->bl, AM_CALLHOMUN, 1, sd->bl.x, sd->bl.y, tick );
+	clif_skill_poseffect( sd->bl, AM_CALLHOMUN, 1, sd->bl.x, sd->bl.y, tick );
 
 	md->master_id = sd->bl.id;
 	md->special_state.ai = AI_ATTACK;
@@ -19454,8 +19454,8 @@ BUILDIN_FUNC(setunitdata)
 			case UPET_MAPID: if (mapname) value = map_mapname2mapid(mapname); unit_warp(bl, (short)value, 0, 0, CLR_TELEPORT); break;
 			case UPET_X: if (!unit_walktoxy(bl, (short)value, pd->bl.y, 2)) unit_movepos(bl, (short)value, pd->bl.y, 0, 0); break;
 			case UPET_Y: if (!unit_walktoxy(bl, pd->bl.x, (short)value, 2)) unit_movepos(bl, pd->bl.x, (short)value, 0, 0); break;
-			case UPET_HUNGER: pd->pet.hungry = cap_value((short)value, 0, 100); clif_send_petdata(map_id2sd(pd->pet.account_id), pd, 2, pd->pet.hungry); break;
-			case UPET_INTIMACY: pet_set_intimate(pd, (uint32)value); clif_send_petdata(map_id2sd(pd->pet.account_id), pd, 1, pd->pet.intimate); break;
+			case UPET_HUNGER: pd->pet.hungry = cap_value((short)value, 0, 100); clif_send_petdata( map_id2sd(pd->pet.account_id), *pd, CHANGESTATEPET_HUNGER ); break;
+			case UPET_INTIMACY: pet_set_intimate(pd, (uint32)value); clif_send_petdata( map_id2sd(pd->pet.account_id), *pd, CHANGESTATEPET_INTIMACY ); break;
 			case UPET_SPEED: pd->status.speed = (uint16)value; status_calc_misc(bl, &pd->status, pd->pet.level); break;
 			case UPET_LOOKDIR: unit_setdir(bl, (uint8)value); break;
 			case UPET_CANMOVETICK: pd->ud.canmove_tick = value > 0 ? (uint32)value : 0; break;
@@ -19490,7 +19490,7 @@ BUILDIN_FUNC(setunitdata)
 			}
 
 			// Client information update
-			clif_send_petstatus( pd->master );
+			clif_send_petstatus( *pd->master, *pd );
 		} break;
 
 	case BL_MER: {

+ 90 - 89
src/map/skill.cpp

@@ -3346,7 +3346,7 @@ void skill_combo(struct block_list* src,struct block_list *dsrc, struct block_li
 		if(sd && duration==1) duration = DIFF_TICK(sd->ud.canact_tick, tick); //Auto calc duration
 		duration = i64max(status_get_amotion(src),duration); //Never less than aMotion
 		sc_start4(src,src,SC_COMBO,100,skill_id,target_id,nodelay,0,duration);
-		clif_combo_delay(src, duration);
+		clif_combo_delay( *src, duration );
 	}
 }
 
@@ -3721,7 +3721,7 @@ int64 skill_attack (int32 attack_type, struct block_list* src, struct block_list
 		nbl = battle_getenemyarea(bl,bl->x,bl->y,2,BL_CHAR,bl->id);
 		if( nbl ){ // Only one target is chosen.
 			damage = damage / 2; // Deflect half of the damage to a target nearby
-			clif_skill_damage(bl, nbl, tick, status_get_amotion(src), 0, battle_fix_damage(bl,nbl,damage,0,0), dmg.div_, OB_OBOROGENSOU_TRANSITION_ATK, -1, DMG_SINGLE);
+			clif_skill_damage( *bl, *nbl, tick, status_get_amotion(src), 0, battle_fix_damage(bl,nbl,damage,0,0), dmg.div_, OB_OBOROGENSOU_TRANSITION_ATK, -1, DMG_SINGLE );
 		}
 	}
 
@@ -3794,7 +3794,7 @@ int64 skill_attack (int32 attack_type, struct block_list* src, struct block_list
 	//Display damage.
 	switch( skill_id ) {
 		case PA_GOSPEL: //Should look like Holy Cross [Skotlex]
-			dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, CR_HOLYCROSS, -1, DMG_SPLASH);
+			dmg.dmotion = clif_skill_damage( *src, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, CR_HOLYCROSS, -1, DMG_SPLASH );
 			break;
 		//Skills that need be passed as a normal attack for the client to display correctly.
 		case NPC_SELFDESTRUCTION:
@@ -3812,12 +3812,12 @@ int64 skill_attack (int32 attack_type, struct block_list* src, struct block_list
 
 		case AS_SPLASHER:
 			if( flag&SD_ANIMATION ) // the surrounding targets
-				dmg.dmotion = clif_skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_SPLASH); // needs -1 as skill level
+				dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_SPLASH ); // needs -1 as skill level
 			else // the central target doesn't display an animation
-				dmg.dmotion = clif_skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -2, DMG_SPLASH); // needs -2(!) as skill level
+				dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -2, DMG_SPLASH ); // needs -2(!) as skill level
 			break;
 		case SR_EARTHSHAKER:
-			dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,1,skill_id,-2,DMG_SINGLE);
+			dmg.dmotion = clif_skill_damage( *src, *bl, tick, dmg.amotion, dmg.dmotion, damage, 1, skill_id, -2, DMG_SINGLE );
 			break;
 		case WL_SOULEXPANSION:
 		case WL_COMET:
@@ -3826,19 +3826,19 @@ int64 skill_attack (int32 attack_type, struct block_list* src, struct block_list
 #ifndef RENEWAL
 		case NJ_HUUMA:
 #endif
-			dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,skill_id,skill_lv,DMG_MULTI_HIT);
+			dmg.dmotion = clif_skill_damage( *src, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, skill_lv, DMG_MULTI_HIT );
 			break;
 		case WL_CHAINLIGHTNING_ATK:
-			dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,1,WL_CHAINLIGHTNING_ATK,-2,DMG_SINGLE);
+			dmg.dmotion = clif_skill_damage( *src, *bl, tick, dmg.amotion, dmg.dmotion, damage, 1, WL_CHAINLIGHTNING_ATK, -2, DMG_SINGLE );
 			break;
 		case WL_TETRAVORTEX_FIRE:
-			dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, WL_TETRAVORTEX_WIND, -1, DMG_SPLASH);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, WL_TETRAVORTEX_WIND, -1, DMG_SPLASH );
 			break;
 		case LG_SHIELDPRESS:
-			dmg.dmotion = clif_skill_damage(dsrc, bl, tick, status_get_amotion(src), dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_SINGLE);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, status_get_amotion(src), dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_SINGLE );
 			break;
 		case NPC_EARTHQUAKE:
-			dmg.dmotion = clif_skill_damage(src, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_ENDURE);
+			dmg.dmotion = clif_skill_damage( *src, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_ENDURE );
 			break;
 		case NPC_DARKPIERCING:
 		case EL_FIRE_BOMB:
@@ -3860,19 +3860,19 @@ int64 skill_attack (int32 attack_type, struct block_list* src, struct block_list
 		case KO_BAKURETSU:
 		case GN_HELLS_PLANT_ATK:
 		case SU_SV_ROOTTWIST_ATK:
-			dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,skill_id,-1,DMG_SPLASH);
+			dmg.dmotion = clif_skill_damage( *src, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_SPLASH );
 			break;
 		case GN_FIRE_EXPANSION_ACID:
-			dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, CR_ACIDDEMONSTRATION, skill_lv, DMG_MULTI_HIT);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, CR_ACIDDEMONSTRATION, skill_lv, DMG_MULTI_HIT );
 			break;
 		case GN_SLINGITEM_RANGEMELEEATK:
-			dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,GN_SLINGITEM,-2,DMG_SINGLE);
+			dmg.dmotion = clif_skill_damage( *src, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, GN_SLINGITEM, -2, DMG_SINGLE );
 			break;
 		case EL_STONE_RAIN:
-			dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,skill_id,-1,(flag&1)?DMG_MULTI_HIT:DMG_SPLASH);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, (flag&1) ? DMG_MULTI_HIT : DMG_SPLASH );
 			break;
 		case WM_SEVERE_RAINSTORM_MELEE:
-			dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,WM_SEVERE_RAINSTORM,-2,DMG_SPLASH);
+			dmg.dmotion = clif_skill_damage( *src, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, WM_SEVERE_RAINSTORM, -2, DMG_SPLASH );
 			break;
 		case HT_CLAYMORETRAP:
 		case HT_BLASTMINE:
@@ -3881,20 +3881,20 @@ int64 skill_attack (int32 attack_type, struct block_list* src, struct block_list
 		case RA_CLUSTERBOMB:
 		case RA_FIRINGTRAP:
 		case RA_ICEBOUNDTRAP:
-			dmg.dmotion = clif_skill_damage(src, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, (flag&SD_LEVEL) ? -1 : skill_lv, DMG_SPLASH);
+			dmg.dmotion = clif_skill_damage( *src, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, (flag&SD_LEVEL) ? -1 : skill_lv, DMG_SPLASH );
 			if( dsrc != src ) // avoid damage display redundancy
 				break;
 			[[fallthrough]];
 		case HT_LANDMINE:
-			dmg.dmotion = clif_skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, dmg_type);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, dmg_type );
 			break;
 		case WZ_SIGHTBLASTER:
 			//Sightblaster should never call clif_skill_damage twice
-			dmg.dmotion = clif_skill_damage(src, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, (flag&SD_LEVEL) ? -1 : skill_lv, DMG_SPLASH);
+			dmg.dmotion = clif_skill_damage( *src, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, (flag&SD_LEVEL) ? -1 : skill_lv, DMG_SPLASH );
 			break;
 		case RL_R_TRIP_PLUSATK:
 		case RL_S_STORM:
-			dmg.dmotion = clif_skill_damage(dsrc,bl,tick,status_get_amotion(src),dmg.dmotion,damage,dmg.div_,skill_id,-1,DMG_SPLASH);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, status_get_amotion(src), dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_SPLASH );
 			break;
 		case SU_LUNATICCARROTBEAT:
 		case SU_LUNATICCARROTBEAT2:
@@ -3907,31 +3907,31 @@ int64 skill_attack (int32 attack_type, struct block_list* src, struct block_list
 				clif_skill_nodamage(dsrc, *bl, skill_id, skill_lv);
 			[[fallthrough]];
 		case WM_REVERBERATION:
-			dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -2, dmg_type);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -2, dmg_type );
 			break;
 		case SJ_FALLINGSTAR_ATK:
 		case SJ_FALLINGSTAR_ATK2:
-			dmg.dmotion = clif_skill_damage(src,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -2, DMG_MULTI_HIT);
+			dmg.dmotion = clif_skill_damage( *src, *bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -2, DMG_MULTI_HIT );
 			break;
 		case SJ_NOVAEXPLOSING:
-			dmg.dmotion = clif_skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -2, DMG_SINGLE);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -2, DMG_SINGLE );
 			break;
 		case DK_HACKANDSLASHER_ATK:
-			dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, dmg_type);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, dmg_type );
 			break;
 		case AG_STORM_CANNON:
 		case AG_CRIMSON_ARROW:
-			dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, skill_lv, DMG_SPLASH);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, skill_lv, DMG_SPLASH );
 			break;
 		case TR_ROSEBLOSSOM_ATK:
 		case ABC_FROM_THE_ABYSS_ATK:
-			dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_SPLASH);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_SPLASH );
 			break;
 		case TR_SOUNDBLEND:
 			if (flag&SD_ANIMATION)// For some reason the caster reacts on the splash flag. Best reduce amotion to minimize it for now. [Rytech]
-				dmg.dmotion = clif_skill_damage(dsrc, bl, tick, 10, dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_SPLASH);
+				dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, 10, dmg.dmotion, damage, dmg.div_, skill_id, -1, DMG_SPLASH );
 			else
-				dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, skill_lv, dmg_type);
+				dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, skill_lv, dmg_type );
 			break;
 		case AB_DUPLELIGHT_MELEE:
 		case AB_DUPLELIGHT_MAGIC:
@@ -3943,11 +3943,11 @@ int64 skill_attack (int32 attack_type, struct block_list* src, struct block_list
 			if (src->type == BL_SKILL) {
 				TBL_SKILL *su = (TBL_SKILL*)src;
 				if (su->group && skill_get_inf2(su->group->skill_id, INF2_ISTRAP)) { // show damage on trap targets
-					clif_skill_damage(src, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, flag&SD_LEVEL ? -1 : skill_lv, DMG_SPLASH);
+					clif_skill_damage( *src, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, flag&SD_LEVEL ? -1 : skill_lv, DMG_SPLASH );
 					break;
 				}
 			}
-			dmg.dmotion = clif_skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, flag&SD_LEVEL?-1:skill_lv, dmg_type);
+			dmg.dmotion = clif_skill_damage( *dsrc, *bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, (flag&SD_LEVEL) ? -1 : skill_lv, dmg_type );
 			break;
 	}
 
@@ -4061,10 +4061,10 @@ int64 skill_attack (int32 attack_type, struct block_list* src, struct block_list
 
 			if (e_bl) {
 				if (!rmdamage) {
-					clif_skill_damage(e_bl, e_bl, gettick(), 0, 0, damage, dmg.div_, skill_id, -1, skill_get_hit(skill_id));
+					clif_skill_damage( *e_bl, *e_bl, gettick(), 0, 0, damage, dmg.div_, skill_id, -1, skill_get_hit(skill_id) );
 					battle_fix_damage(src, e_bl, damage, 0, 0);
 				} else {
-					clif_skill_damage(bl, bl, gettick(), 0, 0, damage, dmg.div_, skill_id, -1, skill_get_hit(skill_id));
+					clif_skill_damage( *bl, *bl, gettick(), 0, 0, damage, dmg.div_, skill_id, -1, skill_get_hit(skill_id) );
 					battle_fix_damage(bl, bl, damage, 0, 0);
 				}
 			}
@@ -4170,7 +4170,7 @@ int32 skill_area_sub(struct block_list *bl, va_list ap)
 	if(battle_check_target(src,bl,flag) > 0) {
 		// several splash skills need this initial dummy packet to display correctly
 		if (flag&SD_PREAMBLE && skill_area_temp[2] == 0)
-			clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 
 		if (flag&(SD_SPLASH|SD_PREAMBLE))
 			skill_area_temp[2]++;
@@ -4529,7 +4529,7 @@ static TIMER_FUNC(skill_timerskill){
 
 			if (skl->skill_id == SR_SKYNETBLOW) {
 				skill_area_temp[1] = 0;
-				clif_skill_damage(src,src,tick,status_get_amotion(src),0,-30000,1,skl->skill_id,skl->skill_lv,DMG_SINGLE);
+				clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skl->skill_id, skl->skill_lv, DMG_SINGLE );
 				map_foreachinallrange(skill_area_sub,src,skill_get_splash(skl->skill_id,skl->skill_lv),BL_CHAR|BL_SKILL,src,
 					skl->skill_id,skl->skill_lv,tick,skl->flag|BCT_ENEMY|SD_SPLASH|1,skill_castend_damage_id);
 				break;
@@ -4798,7 +4798,7 @@ static TIMER_FUNC(skill_timerskill){
 
 						int32 splash = skill_get_splash(skl->skill_id, skl->skill_lv);
 
-						clif_skill_poseffect(src, skl->skill_id, skl->skill_lv, tmpx, tmpy, tick);
+						clif_skill_poseffect( *src, skl->skill_id, skl->skill_lv, tmpx, tmpy, tick );
 						map_foreachinarea(skill_area_sub, src->m, tmpx - splash, tmpy - splash, tmpx + splash, tmpy + splash, BL_CHAR, src, skl->skill_id, skl->skill_lv, tick, skl->flag | BCT_ENEMY | SD_SPLASH | SKILL_ALTDMG_FLAG | 1, skill_castend_damage_id);
 						skill_unitsetting(src, skl->skill_id, skl->skill_lv, tmpx, tmpy, skill_get_unit_interval(skl->skill_id));
 					}
@@ -5143,7 +5143,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 		sc_type sct = skill_get_sc(skill_id);
 		if(sct != SC_NONE)
 			status_change_end(bl, sct);
-		clif_skill_damage(src, bl, tick, status_get_amotion(src), status_get_dmotion(bl), 0, 1, skill_id, skill_lv, skill_get_hit(skill_id));
+		clif_skill_damage( *src, *bl, tick, status_get_amotion(src), status_get_dmotion(bl), 0, 1, skill_id, skill_lv, skill_get_hit(skill_id));
 		return 1;
 	}
 
@@ -5853,7 +5853,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 #endif
 				case LG_MOONSLASHER:
 				case MH_XENO_SLASHER:
-					clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+					clif_skill_damage( *src, *bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 					break;
 				case NPC_REVERBERATION_ATK:
 				case NC_ARMSCANNON:
@@ -6831,7 +6831,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 				status_change_end(bl, SC__SHADOWFORM);
 			sc_start(src,bl, SC_INFRAREDSCAN, 10000, skill_lv, skill_get_time(skill_id, skill_lv));
 		} else {
-			clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 			map_foreachinallrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
 		}
 		break;
@@ -6840,7 +6840,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 			skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
 		else {
 			map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_damage_id);
-			clif_skill_damage(src,src,tick,status_get_amotion(src),0,-30000,1,skill_id,skill_lv,DMG_SINGLE);
+			clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		}
 		break;
 	
@@ -6855,7 +6855,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 			skill_area_temp[5] = y;
 			map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_damage_id);
 			skill_addtimerskill(src,tick + 800,src->id,x,y,skill_id,skill_lv,0,flag); // To teleport Self
-			clif_skill_damage(src,src,tick,status_get_amotion(src),0,-30000,1,skill_id,skill_lv,DMG_SINGLE);
+			clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		}
 		break;
 	
@@ -6905,7 +6905,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 				status_change_end(bl, SC__SHADOWFORM);
 		} else {
 			map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR|BL_SKILL, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
-			clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		}
 		break;
 
@@ -6971,7 +6971,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 		else {
 			int32 i = skill_get_splash(skill_id,skill_lv);
 			clif_skill_nodamage(src,*battle_get_master(src),skill_id,skill_lv);
-			clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 			if( rnd()%100 < 30 )
 				map_foreachinrange(skill_area_sub,bl,i,BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
 			else
@@ -6981,7 +6981,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 
 	case EL_ROCK_CRUSHER:
 		clif_skill_nodamage(src,*battle_get_master(src),skill_id,skill_lv);
-		clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		if( rnd()%100 < 50 )
 			skill_attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);
 		else
@@ -6994,7 +6994,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 		else {
 			int32 i = skill_get_splash(skill_id,skill_lv);
 			clif_skill_nodamage(src,*battle_get_master(src),skill_id,skill_lv);
-			clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 			if( rnd()%100 < 30 )
 				map_foreachinrange(skill_area_sub,bl,i,BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
 			else
@@ -7007,7 +7007,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 	case EL_WIND_SLASH:
 	case EL_STONE_HAMMER:
 		clif_skill_nodamage(src,*battle_get_master(src),skill_id,skill_lv);
-		clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		skill_attack(skill_get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag);
 		break;
 
@@ -7018,7 +7018,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 			sc_type type = SC_TIDAL_WEAPON_OPTION, type2 = SC_TIDAL_WEAPON;
 
 			clif_skill_nodamage(src,*battle_get_master(src),skill_id,skill_lv);
-			clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 			if( (tsc_ele && tsc_ele->getSCE(type2)) || (tsc && tsc->getSCE(type)) ) {
 				status_change_end(battle_get_master(src),type);
 				status_change_end(src,type2);
@@ -7070,7 +7070,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 				type = SC_TINDER_BREAKER2;
 				if( unit_movepos(src, bl->x, bl->y, 1, 1) ){
 					clif_blown(src);
-					clif_skill_poseffect(src,skill_id,skill_lv,bl->x,bl->y,tick);
+					clif_skill_poseffect( *src, skill_id, skill_lv, bl->x, bl->y, tick );
 				}
 			}else if( skill_id == MH_CBC ){
 				type = SC_CBC;
@@ -7130,7 +7130,7 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 			}
 
 			if (skill_id == RL_HAMMER_OF_GOD)
-				clif_skill_poseffect(src, skill_id, 1, bl->x, bl->y, gettick());
+				clif_skill_poseffect( *src, skill_id, 1, bl->x, bl->y, gettick() );
 			else
 				clif_skill_nodamage(src, *bl, skill_id, skill_lv);
 
@@ -7303,9 +7303,9 @@ int32 skill_castend_damage_id (struct block_list* src, struct block_list *bl, ui
 
 	default:
 		ShowWarning("skill_castend_damage_id: Unknown skill used:%d\n",skill_id);
-		clif_skill_damage(src, bl, tick, status_get_amotion(src), tstatus->dmotion,
+		clif_skill_damage( *src, *bl, tick, status_get_amotion(src), tstatus->dmotion,
 			0, abs(skill_get_num(skill_id, skill_lv)),
-			skill_id, skill_lv, skill_get_hit(skill_id));
+			skill_id, skill_lv, skill_get_hit(skill_id) );
 		map_freeblock_unlock();
 		return 1;
 	}
@@ -7965,7 +7965,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 			}
 
 			clif_skill_nodamage(src, *bl, skill_id, skill_lv);
-			clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 			clif_blown(bl);
 
 			// If caster is not a boss, switch coordinates with the target
@@ -8197,7 +8197,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 	case NPC_ALL_STAT_DOWN: 
 		status_change_start(src, bl, type, 10000, skill_lv, 0, 0, 0, skill_get_time(skill_id, skill_lv), SCSTART_NOAVOID|SCSTART_NOTICKDEF|SCSTART_NORATEDEF);
 		clif_skill_nodamage(src, *bl, skill_id, skill_lv);
-		clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		break;
 
 	// EDP also give +25% WATK poison pseudo element to user.
@@ -8857,7 +8857,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 		i = map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), starget,
 				src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
 		if( !i && ( skill_id == RK_WINDCUTTER || skill_id == NC_AXETORNADO || skill_id == LG_CANNONSPEAR || skill_id == SR_SKYNETBLOW || skill_id == KO_HAPPOKUNAI ) )
-			clif_skill_damage(src,src,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 	}
 		break;
 
@@ -8941,7 +8941,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 #if PACKETVER >= 20180207
 		clif_skill_nodamage(src,*bl,skill_id,skill_lv);
 #else
-		clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 #endif
 		map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR|BL_SKILL, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
 		break;
@@ -9468,10 +9468,11 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 			break;
 		}
 
-		clif_skill_nodamage(src, *bl, skill_id, skill_lv);
-		clif_skill_estimation(sd, bl);
+		if (dstmd != nullptr)
+			clif_skill_estimation( *sd, *dstmd );
 		if( skill_id == MER_ESTIMATION )
 			sd = nullptr;
+		clif_skill_nodamage(src, *bl, skill_id, skill_lv);
 		break;
 
 	case BS_REPAIRWEAPON:
@@ -11106,7 +11107,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 	case LG_EARTHDRIVE: {
 			int32 dummy = 1;
 
-			clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 			i = skill_get_splash(skill_id,skill_lv);
 			map_foreachinallarea(skill_cell_overlap, src->m, src->x-i, src->y-i, src->x+i, src->y+i, BL_SKILL, LG_EARTHDRIVE, &dummy, src);
 			map_foreachinrange(skill_area_sub, bl,i,BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
@@ -11220,7 +11221,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 		break;
 
 	case GC_PHANTOMMENACE:
-		clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		clif_skill_nodamage(src,*bl,skill_id,skill_lv);
 		map_foreachinrange(skill_area_sub,src,skill_get_splash(skill_id,skill_lv),BL_CHAR,
 			src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
@@ -11562,7 +11563,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 		break;
 
 	case RA_FEARBREEZE:
-		clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		clif_skill_nodamage(src, *bl, skill_id, skill_lv, sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)));
 		break;
 
@@ -11603,7 +11604,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 
 	case RA_SENSITIVEKEEN:
 		clif_skill_nodamage(src,*bl,skill_id,skill_lv);
-		clif_skill_damage(src,src,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		map_foreachinrange(skill_area_sub,src,skill_get_splash(skill_id,skill_lv),BL_CHAR|BL_SKILL,src,skill_id,skill_lv,tick,flag|BCT_ENEMY,skill_castend_damage_id);
 		break;
 
@@ -11645,7 +11646,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 		break;
 
 	case NC_ANALYZE:
-		clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		sc_start(src,bl,type, 30 + 12 * skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
 		break;
 
@@ -11656,7 +11657,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 			if (map_flag_vs(src->m)) // Doesn't affect the caster in non-PVP maps [exneval]
 				sc_start2(src, bl, type, 100, skill_lv, src->id, skill_get_time(skill_id, skill_lv));
 			map_foreachinallrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), splash_target(src), src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | 1, skill_castend_nodamage_id);
-			clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		}
 		break;
 
@@ -11776,7 +11777,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 		break;
 
 	case LG_TRAMPLE:
-		clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		if (rnd()%100 < (25 + 25 * skill_lv))
 			map_foreachinallrange(skill_destroy_trap,bl,skill_get_splash(skill_id,skill_lv),BL_SKILL,tick);
 		status_change_end(bl, SC_SV_ROOTTWIST);
@@ -11807,13 +11808,13 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 			if( sc_start2(src,bl, type, 100, skill_lv, src->id, skill_get_time(skill_id, skill_lv))) {
 				if( bl->type == BL_MOB )
 					mob_unlocktarget((TBL_MOB*)bl,gettick());
-				clif_bladestop(src, bl->id, 1);
+				clif_bladestop( *src, bl->id, true );
 				map_freeblock_unlock();
 				return 1;
 			}
 		} else {
 			int32 count = 0;
-			clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 			count = map_forcountinrange(skill_area_sub, src, skill_get_splash(skill_id,skill_lv), (sd)?sd->spiritball_old:15, // Assume 15 spiritballs in non-charactors
 				BL_CHAR, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id);
 			if( sd ) pc_delspiritball(sd, count, 0);
@@ -11829,13 +11830,13 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 			if( sc_start2(src,bl, type, 50, skill_lv, src->id, skill_get_time(skill_id, skill_lv))) {
 				if( bl->type == BL_MOB )
 					mob_unlocktarget((TBL_MOB*)bl,gettick());
-				clif_bladestop(src, bl->id, 1);
+				clif_bladestop( *src, bl->id, true );
 				map_freeblock_unlock();
 				return 1;
 			}
 		} else {
 			int32 count = 0;
-			clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 			count = map_forcountinrange(skill_area_sub, src, skill_get_splash(skill_id,skill_lv), (sd)?sd->spiritball_old:15, // Assume 15 spiritballs in non-charactors
 				BL_CHAR, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id);
 			if( sd ) pc_delspiritball(sd, count, 0);
@@ -11871,7 +11872,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 				status_percent_heal(src, 0, i);
 			clif_skill_nodamage(src, *bl, skill_id, skill_lv, i != 0);
 		} else {
-			clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 			map_foreachinallrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|BCT_SELF|SD_SPLASH|1, skill_castend_nodamage_id);
 		}
 		break;
@@ -12169,7 +12170,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 			status_change_end(bl, SC_DECREASEAGI);
 			break;
 		}
-		clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, 1, DMG_SINGLE);
+		clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, 1, DMG_SINGLE );
 		clif_skill_nodamage(src,*bl,skill_id,skill_lv);
 		break;
 
@@ -12429,7 +12430,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 				} else {
 					clif_skill_nodamage(src,*src,skill_id,skill_lv);
 					if (!(skill_id >= EM_EL_FLAMETECHNIC && skill_id <= EM_EL_DEADLY_POISON))
-						clif_skill_damage(src, ( skill_id == EL_GUST || skill_id == EL_BLAST || skill_id == EL_WILD_STORM )?src:bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+						clif_skill_damage( *src, ( skill_id == EL_GUST || skill_id == EL_BLAST || skill_id == EL_WILD_STORM ) ? *src : *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 					if( skill_id == EL_WIND_STEP )	// There aren't teleport, just push the master away.
 						skill_blown(src,bl,(rnd()%skill_get_blewcount(skill_id,skill_lv))+1,rnd()%8,BLOWN_NONE);
 					sc_start(src,src,type2,100,skill_lv,skill_get_time(skill_id,skill_lv));
@@ -12442,7 +12443,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 	case EL_WATER_BARRIER:
 	case EL_ZEPHYR:
 	case EL_POWER_OF_GAIA:
-		clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		skill_unitsetting(src,skill_id,skill_lv,bl->x,bl->y,0);
 		break;
 	case EL_WATER_SCREEN: {
@@ -12457,7 +12458,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 					status_change_end(src,type2);
 				} else {
 					// This not heals at the end.
-					clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+					clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 					sc_start(src,src,type2,100,skill_lv,skill_get_time(skill_id,skill_lv));
 					sc_start(src,bl,type,100,src->id,skill_get_time(skill_id,skill_lv));
 				}
@@ -12562,7 +12563,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 
 		clif_skill_nodamage(src,*bl,skill_id,skill_lv,
 			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
-		clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		break;
 	case KG_KAGEHUMI:
 		if( flag&1 ){
@@ -12582,7 +12583,7 @@ int32 skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
 			}
 		}else{
 			map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR|BL_SKILL, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id);
-			clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+			clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 			clif_skill_nodamage(src, *bl, skill_id, skill_lv);
 		}
 		break;
@@ -14010,7 +14011,7 @@ TIMER_FUNC(skill_castend_id){
 				clif_blown(src);
 				clif_spiritball(src);
 			}
-			clif_skill_damage(src,target,tick,sd->battle_status.amotion,0,0,1,ud->skill_id,ud->skill_lv,DMG_SPLASH);
+			clif_skill_damage( *src, *target, tick, sd->battle_status.amotion, 0, 0, 1, ud->skill_id, ud->skill_lv, DMG_SPLASH );
 		}
 	}
 
@@ -14232,7 +14233,7 @@ int32 skill_castend_pos2(struct block_list* src, int32 x, int32 y, uint16 skill_
 			if(skill_get_inf(skill_id)&INF_SELF_SKILL)
 				clif_skill_nodamage(src,*src,skill_id,skill_lv);
 			else
-				clif_skill_poseffect(src,skill_id,skill_lv,x,y,tick);
+				clif_skill_poseffect( *src, skill_id, skill_lv, x, y, tick );
 	}
 
 	switch(skill_id)
@@ -14454,14 +14455,14 @@ int32 skill_castend_pos2(struct block_list* src, int32 x, int32 y, uint16 skill_
 	case NPC_CANE_OF_EVIL_EYE:
 		flag|=1;
 		if(skill_unitsetting(src,skill_id,skill_lv,x,y,0))
-			clif_skill_poseffect(src,skill_id,skill_lv,x,y,tick);
+			clif_skill_poseffect( *src, skill_id, skill_lv, x, y, tick );
 		break;
 	case RG_GRAFFITI:			/* Graffiti [Valaris] */
 		skill_unitsetting(src,skill_id,skill_lv,x,y,0);
 		flag|=1;
 		break;
 	case NPC_EARTHQUAKE:
-		clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		skill_unitsetting(src, skill_id, skill_lv, x, y, 0);
 		break;
 #ifndef RENEWAL
@@ -14565,7 +14566,7 @@ int32 skill_castend_pos2(struct block_list* src, int32 x, int32 y, uint16 skill_
 #if PACKETVER >= 20111005
 			clif_snap(src, src->x, src->y);
 #else
-			clif_skill_poseffect(src,skill_id,skill_lv,src->x,src->y,tick);
+			clif_skill_poseffect( *src, skill_id, skill_lv, src->x, src->y, tick );
 #endif
 			if (sd)
 				skill_blockpc_start (*sd, MO_EXTREMITYFIST, 2000);
@@ -14665,7 +14666,7 @@ int32 skill_castend_pos2(struct block_list* src, int32 x, int32 y, uint16 skill_
 	case HW_GANBANTEIN:
 		if (rnd()%100 < 80) {
 			int32 dummy = 1;
-			clif_skill_poseffect(src,skill_id,skill_lv,x,y,tick);
+			clif_skill_poseffect( *src, skill_id, skill_lv, x, y, tick );
 			i = skill_get_splash(skill_id, skill_lv);
 			map_foreachinallarea(skill_cell_overlap, src->m, x-i, y-i, x+i, y+i, BL_SKILL, HW_GANBANTEIN, &dummy, src);
 		} else {
@@ -14690,7 +14691,7 @@ int32 skill_castend_pos2(struct block_list* src, int32 x, int32 y, uint16 skill_
 				clif_skill_fail( *sd, skill_id );
 				return 1;
 			}
-			clif_skill_poseffect(src,skill_id,skill_lv,x,y,tick);
+			clif_skill_poseffect( *src, skill_id, skill_lv, x, y, tick );
 			if (rnd()%100 < 50) {
 				clif_skill_fail( *sd, skill_id );
 			} else {
@@ -14752,7 +14753,7 @@ int32 skill_castend_pos2(struct block_list* src, int32 x, int32 y, uint16 skill_
 			if (sce)
 				status_change_end(src, type); //Was under someone else's Gospel. [Skotlex]
 			sc_start4(src,src,type,100,skill_lv,0,sg->group_id,BCT_SELF,skill_get_time(skill_id,skill_lv));
-			clif_skill_poseffect(src, skill_id, skill_lv, 0, 0, tick); // PA_GOSPEL music packet
+			clif_skill_poseffect( *src, skill_id, skill_lv, 0, 0, tick ); // PA_GOSPEL music packet
 		}
 		break;
 	case NJ_TATAMIGAESHI:
@@ -14800,7 +14801,7 @@ int32 skill_castend_pos2(struct block_list* src, int32 x, int32 y, uint16 skill_
 				clif_skill_fail( *sd, skill_id, USESKILL_FAIL_GC_POISONINGWEAPON );
 			return 0;
 		}
-		clif_skill_damage(src,src,tick,status_get_amotion(src),0,-30000,1,skill_id,skill_lv,DMG_SINGLE);
+		clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		skill_unitsetting(src, skill_id, skill_lv, x, y, flag);
 		break;
 
@@ -14832,7 +14833,7 @@ int32 skill_castend_pos2(struct block_list* src, int32 x, int32 y, uint16 skill_
 	case RA_DETONATOR:
 		i = skill_get_splash(skill_id, skill_lv);
 		map_foreachinallarea(skill_detonator, src->m, x-i, y-i, x+i, y+i, BL_SKILL, src);
-		clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
+		clif_skill_damage( *src, *src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE );
 		break;
 
 	case NC_NEUTRALBARRIER:
@@ -17275,9 +17276,9 @@ int32 skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t
 			break;
 
 		case UNT_FIRE_RAIN:
-			clif_skill_damage(ss,bl,tick,status_get_amotion(ss),0,
+			clif_skill_damage( *ss, *bl, tick, status_get_amotion(ss), 0,
 				skill_attack(skill_get_type(sg->skill_id),ss,&unit->bl,bl,sg->skill_id,sg->skill_lv,tick,SD_ANIMATION|SD_SPLASH),
-				1,sg->skill_id,sg->skill_lv,DMG_SINGLE);
+				1, sg->skill_id, sg->skill_lv, DMG_SINGLE );
 			break;
 
 		case UNT_MAGMA_ERUPTION:
@@ -21115,7 +21116,7 @@ static int32 skill_trap_splash(struct block_list *bl, va_list ap)
 				if (status_change_start(ss, bl, SC_ELECTRICSHOCKER, 10000, sg->skill_lv, sg->group_id, 0, 0, skill_get_time2(sg->skill_id, sg->skill_lv), SCSTART_NORATEDEF)) {
 					map_moveblock(bl, unit->bl.x, unit->bl.y, tick);
 					clif_fixpos( *bl );
-					clif_skill_damage(src, bl, tick, 0, 0, -30000, 1, sg->skill_id, sg->skill_lv, DMG_SPLASH);
+					clif_skill_damage( *src, *bl, tick, 0, 0, -30000, 1, sg->skill_id, sg->skill_lv, DMG_SPLASH );
 				}
 			}
 			break;
@@ -22138,9 +22139,9 @@ static int32 skill_unit_timer_sub(DBKey key, DBData *data, va_list ap)
 
 						if (src != nullptr) {
 							if (group->skill_id == AG_VIOLENT_QUAKE_ATK || group->skill_id == AG_ALL_BLOOM_ATK || group->skill_id == AG_ALL_BLOOM_ATK2)
-								clif_skill_poseffect(src, group->skill_id, -1, bl->x, bl->y, tick); // Don't yell a blank skill name.
+								clif_skill_poseffect( *src, group->skill_id, -1, bl->x, bl->y, tick ); // Don't yell a blank skill name.
 							else
-								clif_skill_poseffect(src, group->skill_id, group->skill_lv, bl->x, bl->y, tick);
+								clif_skill_poseffect( *src, group->skill_id, group->skill_lv, bl->x, bl->y, tick );
 							group->val2 = 1;
 						}
 					}

+ 4 - 4
src/map/status.cpp

@@ -3063,7 +3063,7 @@ void status_calc_pet_(struct pet_data *pd, uint8 opt)
 			status_calc_misc(&pd->bl, &pd->status, lv);
 
 			if (!(opt&SCO_FIRST)) // Not done the first time because the pet is not visible yet
-				clif_send_petstatus(sd);
+				clif_send_petstatus( *sd, *pd );
 		}
 	} else if (opt&SCO_FIRST) {
 		status_calc_misc(&pd->bl, &pd->status, pd->db->lv);
@@ -13159,7 +13159,7 @@ int32 status_change_end(struct block_list* bl, enum sc_type type, int32 tid)
 					tsc->getSCE(SC_BLADESTOP)->val4 = 0;
 					status_change_end(tbl, SC_BLADESTOP);
 				}
-				clif_bladestop(bl, tid2, 0);
+				clif_bladestop( *bl, tid2, false );
 			}
 			break;
 		case SC_DANCING:
@@ -13408,7 +13408,7 @@ int32 status_change_end(struct block_list* bl, enum sc_type type, int32 tid)
 				status_change *sc2 = status_get_sc(src);
 
 				if( sc2 && sc2->getSCE(SC_CURSEDCIRCLE_ATKER) && --(sc2->getSCE(SC_CURSEDCIRCLE_ATKER)->val2) == 0 ) {
-					clif_bladestop(bl, sce->val2, 0);
+					clif_bladestop( *bl, sce->val2, false );
 					status_change_end(src, SC_CURSEDCIRCLE_ATKER);
 				}
 			}
@@ -14803,7 +14803,7 @@ int32 status_change_timer_sub(struct block_list* bl, va_list ap)
 		break;
 	case SC_CURSEDCIRCLE_TARGET:
 		if( tsc && tsc->getSCE(SC_CURSEDCIRCLE_TARGET) && tsc->getSCE(SC_CURSEDCIRCLE_TARGET)->val2 == src->id ) {
-			clif_bladestop(bl, tsc->getSCE(SC_CURSEDCIRCLE_TARGET)->val2, 0);
+			clif_bladestop( *bl, tsc->getSCE(SC_CURSEDCIRCLE_TARGET)->val2, false );
 			status_change_end(bl, type);
 		}
 		break;