From 19a06cae9a03ae7c390db18ca95b74bd6033dc4e Mon Sep 17 00:00:00 2001 From: Haru Date: Tue, 13 Sep 2016 12:34:58 +0200 Subject: Corrected a wrong check that allowed walking while casting guild skills - The check was originally meant to have guild skills ignore SA_FREECAST (and always block movements) - Since 8953417 - Fixes #1428 Signed-off-by: Haru --- src/map/unit.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/map') diff --git a/src/map/unit.c b/src/map/unit.c index c52683444..b919934c7 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1053,9 +1053,17 @@ int unit_can_move(struct block_list *bl) { if (!ud) return 0; - if (ud->skilltimer != INVALID_TIMER && ud->skill_id != LG_EXEEDBREAK && - (!sd || (!pc->checkskill(sd, SA_FREECAST) && (skill->get_inf2(ud->skill_id) & (INF2_GUILD_SKILL | INF2_FREE_CAST_REDUCED | INF2_FREE_CAST_NORMAL)) == 0))) { - return 0; // prevent moving while casting + if (ud->skilltimer != INVALID_TIMER && ud->skill_id != LG_EXEEDBREAK) { + // Prevent moving while casting + if (sd == NULL) + return 0; // Only players are affected by SA_FREECAST and similar + if ((skill->get_inf2(ud->skill_id) & (INF2_FREE_CAST_REDUCED | INF2_FREE_CAST_NORMAL)) != 0) { + // Skills with an explicit free cast setting always allow walking + if ((skill->get_inf2(ud->skill_id) & INF2_GUILD_SKILL) != 0) + return 0; // SA_FREECAST doesn't affect guild skills + if (pc->checkskill(sd, SA_FREECAST) == 0) + return 0; // SA_FREECAST not available + } } if (DIFF_TICK(ud->canmove_tick, timer->gettick()) > 0) -- cgit v1.2.3-70-g09d2