Fixes Ensemble skills behavior (#5014)

* Fixes #4987.
* Ensemble skills apply SC_ENSEMBLEFATIGUE which should disable skill casting and reduces movement speed/ASPD by 30%.
* Applies SC_ENSEMBLEFATIGUE to both the caster and partner.
Thanks to @LordWhiplash!
This commit is contained in:
Aleos
2020-06-12 10:11:57 -04:00
committed by GitHub
parent 5d1edeb80b
commit e4e593fbbe
4 changed files with 37 additions and 18 deletions

View File

@@ -6449,12 +6449,8 @@ static int skill_castend_song(struct block_list* src, uint16 skill_id, uint16 sk
sd->skill_id_dance = skill_id;
sd->skill_lv_dance = skill_lv;
if (skill_get_inf2(skill_id, INF2_ISENSEMBLE)) {
sc_start(src, src, status_skill2sc(CG_SPECIALSINGER), 100, 1, skill_get_time(CG_SPECIALSINGER, skill_lv));
if (skill_get_inf2(skill_id, INF2_ISENSEMBLE))
skill_check_pc_partner(sd, skill_id, &skill_lv, 3, 1);
// todo, apply ensemble fatigue if it hits you + ensemble partner.. ??
// or maybe we do that in skill_check_pc_partner or something ??
}
return map_foreachinrange(skill_apply_songs, src, skill_get_splash(skill_id, skill_lv), splash_target(src), flag, src, skill_id, skill_lv, tick);
}
@@ -7836,9 +7832,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
break;
case CG_SPECIALSINGER:
if (tsc && tsc->data[SC_LONGING]) {
if (tsc && tsc->data[SC_ENSEMBLEFATIGUE]) {
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
status_change_end(bl, SC_LONGING, INVALID_TIMER);
status_change_end(bl, SC_ENSEMBLEFATIGUE, INVALID_TIMER);
}
break;
@@ -15330,6 +15326,10 @@ int skill_check_pc_partner(struct map_session_data *sd, uint16 skill_id, uint16
clif_skill_nodamage(&tsd->bl, &sd->bl, skill_id, *skill_lv, 1);
tsd->skill_id_dance = skill_id;
tsd->skill_lv_dance = *skill_lv;
#ifdef RENEWAL
sc_start(&sd->bl, &sd->bl, SC_ENSEMBLEFATIGUE, 100, 1, skill_get_time(CG_SPECIALSINGER, *skill_lv));
sc_start(&sd->bl, &tsd->bl, SC_ENSEMBLEFATIGUE, 100, 1, skill_get_time(CG_SPECIALSINGER, *skill_lv));
#endif
}
}
return c;