Compare commits
12 Commits
master
...
cleanup/pa
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d0b5466d25 | ||
![]() |
f0f30dcca5 | ||
![]() |
2a731b47dd | ||
![]() |
44f4964114 | ||
![]() |
b222412b07 | ||
![]() |
75f0634658 | ||
![]() |
c0c8f2527c | ||
![]() |
a47f868be0 | ||
![]() |
11d84fb634 | ||
![]() |
6edc930f4a | ||
![]() |
420635e7af | ||
![]() |
f95829581f |
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
462
src/map/clif.cpp
462
src/map/clif.cpp
@ -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]) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 );
|
||||
}
|
||||
|
||||
|
@ -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 )
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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: {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user