Compare commits

...

12 Commits

Author SHA1 Message Date
Lemongrass3110
d0b5466d25 Merge branch 'master' into cleanup/packets5
# Conflicts:
#	src/map/battle.cpp
#	src/map/clif.cpp
#	src/map/clif.hpp
#	src/map/clif_packetdb.hpp
#	src/map/packets.hpp
#	src/map/pet.cpp
#	src/map/script.cpp
#	src/map/skill.cpp
2024-09-15 02:48:47 +02:00
Atemo
f0f30dcca5 ZC_THROW_MVPITEM 2024-06-01 16:45:42 +02:00
Atemo
2a731b47dd ZC_MVP_GETTING_SPECIAL_EXP 2024-06-01 16:45:41 +02:00
Atemo
44f4964114 ZC_MVP 2024-06-01 16:45:39 +02:00
Atemo
b222412b07 ZC_BLADESTOP 2024-06-01 16:45:37 +02:00
Atemo
75f0634658 ZC_PET_ACT 2024-06-01 16:45:35 +02:00
Atemo
c0c8f2527c ZC_CHANGESTATE_PET 2024-06-01 16:45:33 +02:00
Atemo
a47f868be0 ZC_PROPERTY_PET 2024-06-01 16:45:31 +02:00
Atemo
11d84fb634 ZC_ACK_REQNAME_BYGID 2024-06-01 16:45:29 +02:00
Atemo
6edc930f4a WZ_ESTIMATION 2024-06-01 16:45:27 +02:00
Atemo
420635e7af ZC_NOTIFY_GROUNDSKILL 2024-06-01 16:45:25 +02:00
Atemo
f95829581f ZC_NOTIFY_SKILL 2024-06-01 16:45:23 +02:00
13 changed files with 447 additions and 440 deletions

View File

@ -3237,7 +3237,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;
}
@ -3271,7 +3271,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;
@ -3296,7 +3296,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;
@ -6313,13 +6313,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;
}
@ -7449,7 +7449,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;

View File

@ -7006,8 +7006,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);
@ -9507,7 +9507,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]
@ -9901,7 +9901,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;
}
@ -10106,7 +10106,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);
}
}

View File

@ -1741,8 +1741,10 @@ int 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 (vd->head_bottom) { // needed to display pet equip properly
pet_data* pd = BL_CAST( BL_PET, bl );
clif_pet_equip_area( *pd );
}
break;
}
return 0;
@ -2036,8 +2038,10 @@ 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 (vd->head_bottom) { // needed to display pet equip properly
pet_data* pd = reinterpret_cast<pet_data*>( bl );
clif_pet_equip_area( *pd );
}
break;
}
@ -5049,8 +5053,10 @@ 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 (vd->head_bottom) { // needed to display pet equip properly
pet_data* pd = BL_CAST( BL_PET, bl );
clif_pet_equip( sd, *pd );
}
break;
}
}
@ -5086,8 +5092,13 @@ static int clif_calc_walkdelay(struct block_list *bl,int delay, char type, int64
/*========================================== [Playtester]
* Returns hallucination damage the client displays
*------------------------------------------*/
static int clif_hallucination_damage()
{
static int64 clif_hallucination_damage( block_list& bl, int64 damage ){
status_change *sc;
if (!((sc = status_get_sc(&bl)) && sc->count && sc->getSCE(SC_HALLUCINATION) && damage)) {
return damage;
}
int digit = rnd() % 5 + 1;
switch (digit)
{
@ -5131,15 +5142,9 @@ int clif_damage(block_list& src, block_list& dst, t_tick tick, int sdelay, int d
if (type != DMG_MULTI_HIT_CRITICAL)
type = clif_calc_delay(type,div,damage+damage2,ddelay);
status_change *sc = status_get_sc(&dst);
if(sc && sc->count) {
if(sc->getSCE(SC_HALLUCINATION)) {
damage = clif_hallucination_damage();
if(damage2)
damage2 = clif_hallucination_damage();
}
}
damage = static_cast<int32>(clif_hallucination_damage( dst, damage ));
if (damage2)
damage2 = static_cast<int32>(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) {
@ -5923,96 +5928,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)
int clif_skill_damage(struct block_list *src,struct block_list *dst,t_tick tick,int sdelay,int ddelay,int64 sdamage,int div,uint16 skill_id,uint16 skill_lv,enum e_damage_type type)
{
unsigned char buf[64];
status_change *sc;
int damage = (int)cap_value(sdamage,INT_MIN,INT_MAX);
int 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);
PACKET_ZC_NOTIFY_SKILL packet{};
type = clif_calc_delay(type,div,damage,ddelay);
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 = status_get_sc(dst) ) && sc->count ) {
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 );
}
@ -6022,19 +5992,14 @@ int clif_skill_damage(struct block_list *src,struct block_list *dst,t_tick tick,
int clif_skill_damage2(struct block_list *src,struct block_list *dst,t_tick tick,int sdelay,int ddelay,int damage,int 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;
@ -6110,28 +6075,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, int32 x, int32 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,int val,int x,int y,t_tick tick)
{
unsigned char buf[32];
packet.PacketType = HEADER_ZC_NOTIFY_GROUNDSKILL;
packet.SKID = skill_id;
packet.AID = bl.id;
packet.level = skill_lv;
packet.xPos = static_cast<decltype(packet.xPos)>( x );
packet.yPos = static_cast<decltype(packet.yPos)>( y );
packet.startTime = client_tick( tick );
nullpo_retv(src);
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.
@ -6241,38 +6205,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];
int i, fix;
/// <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{};
nullpo_retv(sd);
nullpo_retv(dst);
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, 1, md.status.def_ele), (int16)0 ) );
packet.earth = static_cast<decltype(packet.earth)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, 2, md.status.def_ele), (int16)0 ) );
packet.fire = static_cast<decltype(packet.fire)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, 3, md.status.def_ele), (int16)0 ) );
packet.wind = static_cast<decltype(packet.wind)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, 4, md.status.def_ele), (int16)0 ) );
packet.poison = static_cast<decltype(packet.poison)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, 5, md.status.def_ele), (int16)0 ) );
packet.holy = static_cast<decltype(packet.holy)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, 6, md.status.def_ele), (int16)0 ) );
packet.shadow = static_cast<decltype(packet.shadow)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, 7, md.status.def_ele), (int16)0 ) );
packet.ghost = static_cast<decltype(packet.ghost)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, 8, md.status.def_ele), (int16)0 ) );
packet.undead = static_cast<decltype(packet.undead)>( std::max( elemental_attribute_db.getAttribute(md.status.ele_lv, 9, md.status.def_ele), (int16)0 ) );
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);
clif_send( &packet, sizeof( packet ), &sd.bl, (sd.status.party_id > 0) ? PARTY_SAMEMAP : SELF );
}
@ -6987,25 +6946,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(int fd, int 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 );
}
@ -8139,7 +8093,7 @@ void clif_movetoattack( map_session_data& sd, block_list& bl ){
void clif_produceeffect(map_session_data* sd,int flag, t_itemid nameid){
nullpo_retv( sd );
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 = {};
@ -8207,8 +8161,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)
@ -8219,66 +8173,53 @@ 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, int type, int 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 ){
PACKET_ZC_CHANGESTATE_PET packet{};
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);
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)
{
int fd;
struct s_pet *pet;
/// 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{};
nullpo_retv(sd);
nullpo_retv(sd->pd);
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,int param)
{
unsigned char buf[16];
void clif_pet_emotion( pet_data& pd, int32 param ){
PACKET_ZC_PET_ACT packet{};
nullpo_retv(pd);
packet.packetType = HEADER_ZC_PET_ACT;
packet.GID = pd.bl.id;
packet.data = param;
memset(buf,0,packet_len(0x1aa));
WBUFW(buf,0)=0x1aa;
WBUFL(buf,2)=pd->bl.id;
WBUFL(buf,6)=param;
clif_send(buf,packet_len(0x1aa),&pd->bl,AREA);
clif_send( &packet, sizeof( packet ), &pd.bl, AREA );
}
@ -8453,52 +8394,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, int dst_id, int active)
{
unsigned char buf[32];
void clif_bladestop( block_list& src, uint32 target_id, bool active ){
PACKET_ZC_BLADESTOP packet{};
nullpo_retv(src);
packet.packetType = HEADER_ZC_BLADESTOP;
packet.srcId = src.id;
packet.targetId = target_id;
packet.flag = active;
WBUFW(buf,0)=0x1d1;
WBUFL(buf,2)=src->id;
WBUFL(buf,6)=dst_id;
WBUFL(buf,10)=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 );
}
@ -8514,41 +8449,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);
clif_messagecolor( &sd.bl, color_table[COLOR_CYAN], e_msg, false, SELF ); // Congratulations! You are the MVP! Your reward EXP Points are %u !!
}
#else
int 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)
{
int 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 );
}
@ -10771,8 +10701,8 @@ void clif_parse_LoadEndAck(int 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, 0 );
clif_send_petstatus( *sd, *sd->pd );
// skill_unit_move(&sd->pd->bl,gettick(),1);
}
}
@ -10847,7 +10777,7 @@ void clif_parse_LoadEndAck(int 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);
@ -14540,7 +14470,7 @@ void clif_parse_SelectEgg(int fd, map_session_data *sd){
void clif_parse_SendEmotion(int 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]) );
}

View File

@ -815,6 +815,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,
};
int clif_setip(const char* ip);
void clif_setbindip(const char* ip);
void clif_setport(uint16 port);
@ -939,11 +949,11 @@ void clif_skillcasting(struct block_list* bl, int src_id, int dst_id, int dst_x,
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, int btype = 0, t_itemid itemId = 0 );
void clif_skill_cooldown( map_session_data &sd, uint16 skill_id, t_tick tick );
int clif_skill_damage(struct block_list *src,struct block_list *dst,t_tick tick,int sdelay,int ddelay,int64 sdamage,int div,uint16 skill_id,uint16 skill_lv,enum e_damage_type type);
int 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 );
//int clif_skill_damage2(struct block_list *src,struct block_list *dst,t_tick tick,int sdelay,int ddelay,int damage,int 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,int val,int x,int 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, int32 x, int32 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 );
@ -964,8 +974,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, int dst_id, int 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(int fd, int16 m, int x, int y, int type, enum send_target target);
#define clif_status_load(bl, type, flag) clif_status_change((bl), (type), (flag), 0, 0, 0, 0)
@ -976,7 +986,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, int gmlvl);
void clif_wis_end( map_session_data& sd, e_ack_whisper result );
void clif_solved_charname(int fd, int 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 )
@ -1004,10 +1014,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
@ -1114,12 +1124,11 @@ void clif_upgrademessage( map_session_data* sd, int 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, int type, int 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,int 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, int32 value );
#define clif_pet_equip(sd, pd) clif_send_petdata(sd, pd, CHANGESTATEPET_ACCESSORY, (pd).vd.head_bottom)
#define clif_pet_equip_area(pd) clif_send_petdata(nullptr, pd, CHANGESTATEPET_ACCESSORY, (pd).vd.head_bottom)
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);

View File

@ -118,9 +118,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 ) );
@ -130,7 +127,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);
@ -201,14 +197,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);
@ -219,15 +213,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 );
@ -257,8 +248,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);
@ -1208,7 +1197,6 @@
// 2008-11-26aSakexe
#if PACKETVER >= 20081126
packet(0x01a2,37);
packet(0x0441,4);
#endif
@ -1286,7 +1274,6 @@
// 2008-12-17aRagexeRE
#if PACKETVER >= 20081217
packet(0x01a2,37);
#endif
// 2008-12-17bRagexeRE
@ -1999,7 +1986,6 @@
// 2018-02-21aRagexeRE or 2018-02-21bRagexeRE
#if PACKETVER >= 20180221
packet(0x0206,35); // ZC_FRIENDS_STATE
packet(0x0af7,32);
#endif
// 2018-03-07bRagexeRE

View File

@ -1979,8 +1979,8 @@ void map_addnickdb(int 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(int 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, int 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

View File

@ -3052,7 +3052,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int 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 ) ){
@ -3074,7 +3074,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int 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 );
}

View File

@ -1356,6 +1356,87 @@ struct PACKET_ZC_NOTIFY_ACT{
DEFINE_PACKET_HEADER(ZC_NOTIFY_ACT, 0x8a);
#endif
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);
// Kro remove this packet [Napster]
#if PACKETVER < 20131223
struct PACKET_ZC_MVP_GETTING_SPECIAL_EXP {
int16 packetType;
uint32 exp;
} __attribute__((packed));
DEFINE_PACKET_HEADER(ZC_MVP_GETTING_SPECIAL_EXP, 0x10b);
#endif
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 )

View File

@ -9713,7 +9713,7 @@ int 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, pd->pet.intimate );
}
if( sd->pd->target_id ) // Unlock all targets...
pet_unlocktarget(sd->pd);

View File

@ -865,11 +865,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, pd->pet.intimate );
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, pd->pet.hungry );
if( battle_config.feature_pet_autofeed && pd->pet.autofeed && pd->pet.hungry <= battle_config.feature_pet_autofeed_rate ){
pet_food( sd, pd );
@ -940,7 +940,7 @@ static int pet_performance(map_session_data *sd, struct pet_data *pd)
val = 1;
pet_stop_walking(pd,2000<<8);
clif_pet_performance(pd, rnd_value(1, val));
clif_send_petdata( nullptr, *pd, CHANGESTATEPET_PERFORMANCE, rnd_value(1, val) );
pet_lootitem_drop( *pd, nullptr );
return 1;
@ -966,7 +966,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, 0 );
#endif
unit_free(&pd->bl,CLR_OUTSIGHT);
@ -1108,13 +1108,13 @@ int 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, 0 );
clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_HAIRSTYLE, battle_config.pet_hair_style );
#if PACKETVER >= 20180704
clif_send_petdata(sd, sd->pd, 6, 1);
clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_UPDATE_EGG, 1 );
#endif
clif_pet_equip_area(sd->pd);
clif_send_petstatus(sd);
clif_pet_equip_area( *sd->pd );
clif_send_petstatus( *sd, *sd->pd );
clif_pet_autofeed_status(sd,true);
}
@ -1169,10 +1169,10 @@ int pet_recv_petdata(uint32 account_id,struct s_pet *p,int 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, 0 );
clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_HAIRSTYLE, battle_config.pet_hair_style );
clif_pet_equip_area( *sd->pd );
clif_send_petstatus( *sd, *sd->pd );
}
}
@ -1414,7 +1414,7 @@ int pet_menu(map_session_data *sd,int menunum)
switch(menunum) {
case 0:
clif_send_petstatus(sd);
clif_send_petstatus( *sd, *sd->pd );
break;
case 1:
pet_food(sd, sd->pd);
@ -1477,15 +1477,15 @@ int pet_change_name_ack(map_session_data *sd, char* name, int 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_pet_equip_area( *pd );
clif_send_petstatus( *sd, *pd );
int index = pet_egg_search( sd, pd->pet.pet_id );
@ -1529,7 +1529,7 @@ int pet_equipitem(map_session_data *sd,int 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_pet_equip_area( *pd );
if (battle_config.pet_equip_required) { // Skotlex: start support timers if need
t_tick tick = gettick();
@ -1582,7 +1582,7 @@ static int 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_pet_equip_area(*pd);
if( battle_config.pet_equip_required ) { // Skotlex: halt support timers if needed
if( pd->state.skillbonus ) {
@ -1660,8 +1660,8 @@ int 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, pd->pet.hungry );
clif_send_petdata( sd, *pd, CHANGESTATEPET_INTIMACY, pd->pet.intimate );
clif_pet_food( *sd, pet_db_ptr->FoodID, 1 );
return 0;
@ -2324,10 +2324,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, 0 );
clif_send_petdata( sd, *sd->pd, CHANGESTATEPET_HAIRSTYLE, battle_config.pet_hair_style );
clif_pet_equip_area( *sd->pd );
clif_send_petstatus( *sd, *sd->pd );
clif_emotion(&sd->bl, ET_BEST);
clif_specialeffect(&sd->pd->bl, EF_HO_UP, AREA);

View File

@ -15340,13 +15340,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;
}
}
@ -16488,7 +16488,7 @@ BUILDIN_FUNC(summon)
check_event(st, event);
}
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 = mob_once_spawn_sub(&sd->bl, sd->bl.m, sd->bl.x, sd->bl.y, str, _class, event, SZ_SMALL, AI_NONE);
if (md) {
@ -19386,8 +19386,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, (unsigned int)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, pd->pet.hungry ); break;
case UPET_INTIMACY: pet_set_intimate(pd, (unsigned int)value); clif_send_petdata( map_id2sd(pd->pet.account_id), *pd, CHANGESTATEPET_INTIMACY, pd->pet.intimate ); break;
case UPET_SPEED: pd->status.speed = (unsigned short)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 ? (unsigned int)value : 0; break;
@ -19422,7 +19422,7 @@ BUILDIN_FUNC(setunitdata)
}
// Client information update
clif_send_petstatus( pd->master );
clif_send_petstatus( *pd->master, *pd );
} break;
case BL_MER: {

View File

@ -3361,7 +3361,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 );
}
}
@ -3736,7 +3736,7 @@ int64 skill_attack (int 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 );
}
}
@ -3809,7 +3809,7 @@ int64 skill_attack (int 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 HVAN_EXPLOSION:
@ -3827,12 +3827,12 @@ int64 skill_attack (int 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:
@ -3841,19 +3841,19 @@ int64 skill_attack (int 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:
@ -3875,19 +3875,19 @@ int64 skill_attack (int 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:
@ -3896,20 +3896,20 @@ int64 skill_attack (int 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:
@ -3922,31 +3922,31 @@ int64 skill_attack (int 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:
@ -3958,11 +3958,11 @@ int64 skill_attack (int 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;
}
@ -4076,10 +4076,10 @@ int64 skill_attack (int 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);
}
}
@ -4185,7 +4185,7 @@ int 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]++;
@ -4544,7 +4544,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;
@ -4804,7 +4804,7 @@ static TIMER_FUNC(skill_timerskill){
int 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));
}
@ -5128,7 +5128,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
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;
}
@ -5814,7 +5814,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
#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:
@ -6688,7 +6688,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
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;
@ -6697,7 +6697,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
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;
@ -6712,7 +6712,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
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;
@ -6762,7 +6762,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
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;
@ -6828,7 +6828,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
else {
int 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
@ -6838,7 +6838,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
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
@ -6851,7 +6851,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
else {
int 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
@ -6864,7 +6864,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
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;
@ -6875,7 +6875,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
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);
@ -6927,7 +6927,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
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;
@ -6987,7 +6987,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
}
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);
@ -7144,9 +7144,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
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;
}
@ -7806,7 +7806,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
}
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
@ -8036,7 +8036,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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.
@ -8660,7 +8660,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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;
@ -8744,7 +8744,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
#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;
@ -9262,7 +9262,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
}
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;
break;
@ -10865,7 +10866,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case LG_EARTHDRIVE: {
int 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);
@ -10979,7 +10980,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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);
@ -11321,7 +11322,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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;
@ -11362,7 +11363,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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;
@ -11404,7 +11405,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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;
@ -11415,7 +11416,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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;
@ -11535,7 +11536,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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);
@ -11566,13 +11567,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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 {
int 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);
@ -11588,13 +11589,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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 {
int 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);
@ -11630,7 +11631,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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;
@ -11918,7 +11919,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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;
@ -12178,7 +12179,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
} 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));
@ -12191,7 +12192,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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: {
@ -12206,7 +12207,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
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));
}
@ -12311,7 +12312,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
clif_skill_nodamage(src,*bl,skill_id,skill_lv,
sc_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 ){
@ -12331,7 +12332,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
}
}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;
@ -13520,7 +13521,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 );
}
}
@ -13742,7 +13743,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
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)
@ -13962,14 +13963,14 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
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
@ -14073,7 +14074,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
#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);
@ -14173,7 +14174,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
case HW_GANBANTEIN:
if (rnd()%100 < 80) {
int 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 {
@ -14198,7 +14199,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
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 {
@ -14260,7 +14261,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
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:
@ -14308,7 +14309,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
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;
@ -14340,7 +14341,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
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:
@ -16706,9 +16707,9 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t_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:
@ -20465,7 +20466,7 @@ static int 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;
@ -21489,9 +21490,9 @@ static int 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;
}
}

View File

@ -3038,7 +3038,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);
@ -13448,7 +13448,7 @@ int status_change_end(struct block_list* bl, enum sc_type type, int 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:
@ -13697,7 +13697,7 @@ int status_change_end(struct block_list* bl, enum sc_type type, int 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);
}
}
@ -15090,7 +15090,7 @@ int 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;