Converted ZC_USE_SKILL to struct (#8599)

Co-authored-by: Atemo <Atemo@users.noreply.github.com>
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
This commit is contained in:
AoShinHo 2024-09-14 20:42:12 -03:00 committed by GitHub
parent d382b3f55a
commit 61b3f4a34d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 470 additions and 482 deletions

View File

@ -1286,7 +1286,7 @@ ACMD_FUNC(alive)
clif_displaymessage(fd, msg_txt(sd,667)); // You're not dead.
return -1;
}
clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,4,1);
clif_skill_nodamage(&sd->bl,sd->bl,ALL_RESURRECTION,4);
clif_displaymessage(fd, msg_txt(sd,16)); // You've been revived! It's a miracle!
return 0;
}
@ -3592,7 +3592,7 @@ static void atcommand_raise_sub(map_session_data* sd) {
status_revive(&sd->bl, 100, 100);
clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,4,1);
clif_skill_nodamage(&sd->bl,sd->bl,ALL_RESURRECTION,4);
clif_displaymessage(sd->fd, msg_txt(sd,63)); // Mercy has been shown.
}
@ -6317,7 +6317,7 @@ ACMD_FUNC(displayskill)
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);
if (type == 0 || type == 3)
clif_skill_nodamage(&sd->bl, &sd->bl, skill_id, skill_lv, 1);
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);
return 0;

View File

@ -1290,7 +1290,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
// Weapon Blocking can be triggered while the above statuses are active.
if ((sce = sc->getSCE(SC_WEAPONBLOCKING)) && flag & (BF_SHORT | BF_WEAPON) && rnd() % 100 < sce->val2) {
clif_skill_nodamage(target, src, GC_WEAPONBLOCKING, sce->val1, 1);
clif_skill_nodamage(target, *src, GC_WEAPONBLOCKING, sce->val1);
sc_start(src, target, SC_WEAPONBLOCK_ON, 100, src->id, skill_get_time2(GC_WEAPONBLOCKING, sce->val1));
d->dmg_lv = ATK_BLOCK;
return false;
@ -1407,12 +1407,12 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
(d_bl->type == BL_PC && ((TBL_PC*)d_bl)->devotion[sce_d->val2] == target->id)) &&
check_distance_bl(target, d_bl, sce_d->val3))
{ //If player is target of devotion, show guard effect on the devotion caster rather than the target
clif_skill_nodamage(d_bl, d_bl, CR_AUTOGUARD, sce->val1, 1);
clif_skill_nodamage(d_bl, *d_bl, CR_AUTOGUARD, sce->val1);
unit_set_walkdelay(d_bl, gettick(), delay, 1);
d->dmg_lv = ATK_MISS;
return false;
} else {
clif_skill_nodamage(target, target, CR_AUTOGUARD, sce->val1, 1);
clif_skill_nodamage(target, *target, CR_AUTOGUARD, sce->val1);
unit_set_walkdelay(target, gettick(), delay, 1);
#ifdef RENEWAL
if (sc->getSCE(SC_SHRINK))
@ -1455,7 +1455,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
return false;
if ((sce = sc->getSCE(SC_PARRYING)) && flag&BF_WEAPON && skill_id != WS_CARTTERMINATION && rnd() % 100 < sce->val2) {
clif_skill_nodamage(target, target, LK_PARRYING, sce->val1, 1);
clif_skill_nodamage(target, *target, LK_PARRYING, sce->val1);
if (skill_id == LK_PARRYING) {
unit_data *ud = unit_bl2ud(target);
@ -1471,7 +1471,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
if (sd && pc_issit(sd))
pc_setstand(sd, true); //Stand it to dodge.
clif_skill_nodamage(target, target, TK_DODGE, 1, 1);
clif_skill_nodamage(target, *target, TK_DODGE, 1);
sc_start4(src, target, SC_COMBO, 100, TK_JUMPKICK, src->id, 1, 0, 2000);
return false;
}
@ -6990,7 +6990,7 @@ static void battle_calc_weapon_final_atk_modifiers(struct Damage* wd, struct blo
)
{
ATK_RATER(wd->damage, 50)
clif_skill_nodamage(target,target,ST_REJECTSWORD, tsc->getSCE(SC_REJECTSWORD)->val1,1);
clif_skill_nodamage(target, *target,ST_REJECTSWORD, tsc->getSCE(SC_REJECTSWORD)->val1);
battle_fix_damage(target,src,wd->damage,clif_damage(*target,*src,gettick(),0,0,wd->damage,0,DMG_NORMAL,0,false),ST_REJECTSWORD);
if (status_isdead(*target))
return;
@ -9434,7 +9434,7 @@ struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct bl
status_change_entry *tsce = tsc->getSCE(SC_WEAPONBLOCKING);
if (attack_type == BF_WEAPON && rnd() % 100 < tsce->val2) {
clif_skill_nodamage(target, bl, GC_WEAPONBLOCKING, tsce->val1, 1);
clif_skill_nodamage(target, *bl, GC_WEAPONBLOCKING, tsce->val1);
sc_start(bl, target, SC_WEAPONBLOCK_ON, 100, bl->id, skill_get_time2(GC_WEAPONBLOCKING, tsce->val1));
}
}
@ -9973,7 +9973,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
}
if (tsc && tsc->getSCE(SC_MTF_MLEATKED) && rnd()%100 < tsc->getSCE(SC_MTF_MLEATKED)->val2)
clif_skill_nodamage(target, target, SM_ENDURE, tsc->getSCE(SC_MTF_MLEATKED)->val1, sc_start(src, target, SC_ENDURE, 100, tsc->getSCE(SC_MTF_MLEATKED)->val1, skill_get_time(SM_ENDURE, tsc->getSCE(SC_MTF_MLEATKED)->val1)));
clif_skill_nodamage(target, *target, SM_ENDURE, tsc->getSCE(SC_MTF_MLEATKED)->val1, sc_start(src, target, SC_ENDURE, 100, tsc->getSCE(SC_MTF_MLEATKED)->val1, skill_get_time(SM_ENDURE, tsc->getSCE(SC_MTF_MLEATKED)->val1)));
if(tsc && tsc->getSCE(SC_KAAHI) && tstatus->hp < tstatus->max_hp && status_charge(target, 0, tsc->getSCE(SC_KAAHI)->val3)) {
int hp_heal = tstatus->max_hp - tstatus->hp;

View File

@ -6076,45 +6076,35 @@ int clif_skill_damage2(struct block_list *src,struct block_list *dst,t_tick tick
/// Non-damaging skill effect
/// 011a <skill id>.W <heal>.W <dst id>.L <src id>.L <result>.B (ZC_USE_SKILL).
/// 09cb <skill id>.W <heal>.L <dst id>.L <src id>.L <result>.B (ZC_USE_SKILL2).
bool clif_skill_nodamage(struct block_list *src,struct block_list *dst, uint16 skill_id, int heal, t_tick tick)
{
unsigned char buf[17];
#if PACKETVER < 20130731
const int cmd = 0x11a;
#else
const int cmd = 0x9cb;
#endif
int offset = 0;
bool success = ( tick != 0 );
/// 011a <skill id>.W <heal>.W <dst id>.L <src id>.L <result>.B (ZC_USE_SKILL)
/// 09cb <skill id>.W <heal>.L <dst id>.L <src id>.L <result>.B (ZC_USE_SKILL2)
bool clif_skill_nodamage( block_list* src, block_list& dst, uint16 skill_id, int32 heal, bool success ){
PACKET_ZC_USE_SKILL p{};
nullpo_ret(dst);
WBUFW(buf,0) = cmd;
WBUFW(buf,2) = skill_id;
#if PACKETVER < 20130731
WBUFW(buf,4) = min(heal, INT16_MAX);
#else
WBUFL(buf,4) = min(heal, INT32_MAX);
offset += 2;
#endif
WBUFL(buf,6+offset) = dst->id;
WBUFL(buf,10+offset) = src ? src->id : 0;
WBUFB(buf,14+offset) = success;
if (disguised(dst)) {
clif_send(buf, packet_len(cmd), dst, AREA_WOS);
WBUFL(buf,6+offset) = disguised_bl_id(dst->id);
clif_send(buf, packet_len(cmd), dst, SELF);
p.PacketType = HEADER_ZC_USE_SKILL;
p.SKID = skill_id;
p.level = std::min( static_cast<decltype(p.level)>( heal ), std::numeric_limits<decltype(p.level)>::max() );
p.targetAID = dst.id;
p.result = success;
if(src != nullptr){
p.srcAID = src->id;
}else{
p.srcAID = 0;
}
if (disguised(&dst)) {
clif_send(&p, sizeof(p), &dst, AREA_WOS);
p.targetAID = disguised_bl_id(dst.id);
clif_send(&p, sizeof(p), &dst, SELF);
} else
clif_send(buf, packet_len(cmd), dst, AREA);
clif_send(&p, sizeof(p), &dst, AREA);
if(src && disguised(src)) {
WBUFL(buf,10+offset) = disguised_bl_id(src->id);
if (disguised(dst))
WBUFL(buf,6+offset) = dst->id;
clif_send(buf, packet_len(cmd), src, SELF);
if(src != nullptr && disguised(src)) {
p.srcAID = disguised_bl_id(src->id);
if (disguised(&dst)){
// It is necessary to revert the changes done above for the disguised target
p.targetAID = dst.id;
}
clif_send(&p, sizeof(p), src, SELF);
}
return success;
@ -15063,7 +15053,7 @@ void clif_parse_NoviceExplosionSpirits(int fd, map_session_data *sd)
if( percent && ( percent%100 ) == 0 ) {// 10.0%, 20.0%, ..., 90.0%
sc_start(&sd->bl,&sd->bl, SC_EXPLOSIONSPIRITS, 100, 17, skill_get_time(MO_EXPLOSIONSPIRITS, 5)); //Lv17-> +50 critical (noted by Poki) [Skotlex]
clif_skill_nodamage(&sd->bl, &sd->bl, MO_EXPLOSIONSPIRITS, 5, 1); // prayer always shows successful Lv5 cast and disregards noskill restrictions
clif_skill_nodamage(&sd->bl, sd->bl, MO_EXPLOSIONSPIRITS, 5); // prayer always shows successful Lv5 cast and disregards noskill restrictions
}
}
}

View File

@ -941,7 +941,7 @@ void clif_skill_fail( map_session_data& sd, uint16 skill_id, enum useskill_fail_
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_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(struct block_list *src,struct block_list *dst,uint16 skill_id,int heal,t_tick tick);
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_warppoint( map_session_data& sd, uint16 skill_id, uint16 skill_lv, std::vector<std::string>& maps );

View File

@ -133,7 +133,6 @@
packet(0x0117,18);
parseable_packet(0x0118,2,clif_parse_StopAttack,0);
packet(0x0119,13);
packet(0x011a,15);
parseable_packet(0x011b,20,clif_parse_UseSkillMap,2,4);
parseable_packet(0x011d,2,clif_parse_RequestMemo,0);
packet(0x011f,16);
@ -1746,7 +1745,6 @@
// 2013-07-31cRagexe
#if PACKETVER >= 20130731
packet(0x09ca,23); // ZC_SKILL_ENTRY5
packet(0x09cb,17); // ZC_USE_SKILL2
#endif
// 2013-08-07Ragexe

View File

@ -3682,7 +3682,7 @@ int mob_summonslave(struct mob_data *md2,int *value,int amount,uint16 skill_id)
if (md2->state.copy_master_mode)
md->status.mode = md2->status.mode;
clif_skill_nodamage(&md->bl,&md->bl,skill_id,amount,1);
clif_skill_nodamage(&md->bl,md->bl,skill_id,amount);
}
return 0;

View File

@ -10053,7 +10053,7 @@ bool pc_revive_item(map_session_data *sd) {
else
pc_delitem(sd, item_position, 1, 0, 1, LOG_TYPE_CONSUME);
clif_skill_nodamage(&sd->bl, &sd->bl, ALL_RESURRECTION, 4, 1);
clif_skill_nodamage(&sd->bl, sd->bl, ALL_RESURRECTION, 4);
return true;
}

View File

@ -2073,7 +2073,7 @@ TIMER_FUNC(pet_recovery_timer){
if(sd->sc.getSCE(pd->recovery->type)) {
//Display a heal animation?
//Detoxify is chosen for now.
clif_skill_nodamage(&pd->bl,&sd->bl,TF_DETOXIFY,1,1);
clif_skill_nodamage(&pd->bl,sd->bl,TF_DETOXIFY,1);
status_change_end(&sd->bl, pd->recovery->type);
clif_emotion(&pd->bl, ET_OK);
}
@ -2116,7 +2116,7 @@ TIMER_FUNC(pet_heal_timer){
pet_stop_attack(pd);
pet_stop_walking(pd,1);
clif_skill_nodamage(&pd->bl,&sd->bl,AL_HEAL,pd->s_skill->lv,1);
clif_skill_nodamage(&pd->bl,sd->bl,AL_HEAL,pd->s_skill->lv);
status_heal(&sd->bl, pd->s_skill->lv,0, 0);
pd->s_skill->timer = add_timer(tick+pd->s_skill->delay*1000,pet_heal_timer,sd->bl.id,0);
return 0;

View File

@ -15343,7 +15343,7 @@ static inline void script_skill_effect( block_list& bl, uint16 skill_id, uint16
clif_skill_poseffect(&bl, skill_id, skill_lv, x, y, gettick());
break;
case CAST_NODAMAGE:
clif_skill_nodamage(&bl, &bl, skill_id, skill_lv, 1);
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));

File diff suppressed because it is too large Load Diff

View File

@ -1647,7 +1647,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in
else
status_revive(target, sc->getSCE(SC_KAIZEL)->val2, 0);
status_change_clear(target,0);
clif_skill_nodamage(target,target,ALL_RESURRECTION,1,1);
clif_skill_nodamage(target,*target,ALL_RESURRECTION,1);
sc_start(src,target,SC_KYRIE,100,10,time);
if( target->type == BL_MOB )
@ -1660,7 +1660,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 dhp, in
if (sc && sc->getSCE(SC_ULTIMATE_S) && !map_flag_gvg2(target->m)) {
status_revive(target, 100, 100);
status_change_clear(target, 0);
clif_skill_nodamage(target, target, ALL_RESURRECTION, 1, 1);
clif_skill_nodamage(target, *target, ALL_RESURRECTION, 1);
if (target->type == BL_MOB)
((TBL_MOB*)target)->state.rebirth = 1;
@ -13137,19 +13137,19 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
switch(sce->val1) {
case TK_STORMKICK:
skill_combo_toggle_inf(bl, TK_JUMPKICK, 0);
clif_skill_nodamage(bl,bl,TK_READYSTORM,1,1);
clif_skill_nodamage(bl,*bl,TK_READYSTORM,1);
break;
case TK_DOWNKICK:
skill_combo_toggle_inf(bl, TK_JUMPKICK, 0);
clif_skill_nodamage(bl,bl,TK_READYDOWN,1,1);
clif_skill_nodamage(bl,*bl,TK_READYDOWN,1);
break;
case TK_TURNKICK:
skill_combo_toggle_inf(bl, TK_JUMPKICK, 0);
clif_skill_nodamage(bl,bl,TK_READYTURN,1,1);
clif_skill_nodamage(bl,*bl,TK_READYTURN,1);
break;
case TK_COUNTER:
skill_combo_toggle_inf(bl, TK_JUMPKICK, 0);
clif_skill_nodamage(bl,bl,TK_READYCOUNTER,1,1);
clif_skill_nodamage(bl,*bl,TK_READYCOUNTER,1);
break;
default: // Rest just toggle inf to enable autotarget
skill_combo_toggle_inf(bl,sce->val1,INF_SELF_SKILL);

View File

@ -1639,9 +1639,9 @@ TIMER_FUNC(unit_resume_running){
TBL_PC *sd = map_id2sd(id);
if (sd && pc_isridingwug(sd))
clif_skill_nodamage(ud->bl,ud->bl,RA_WUGDASH,ud->skill_lv,sc_start4(ud->bl,ud->bl,SC_WUGDASH,100,ud->skill_lv,unit_getdir(ud->bl),0,0,0));
clif_skill_nodamage(ud->bl,*ud->bl,RA_WUGDASH,ud->skill_lv,sc_start4(ud->bl,ud->bl,SC_WUGDASH,100,ud->skill_lv,unit_getdir(ud->bl),0,0,0));
else
clif_skill_nodamage(ud->bl,ud->bl,TK_RUN,ud->skill_lv,sc_start4(ud->bl,ud->bl,SC_RUN,100,ud->skill_lv,unit_getdir(ud->bl),0,0,0));
clif_skill_nodamage(ud->bl,*ud->bl,TK_RUN,ud->skill_lv,sc_start4(ud->bl,ud->bl,SC_RUN,100,ud->skill_lv,unit_getdir(ud->bl),0,0,0));
if (sd)
clif_walkok(*sd);