diff options
author | malufett <malufett.eat.my.binaries@gmail.com> | 2015-01-12 02:12:55 +0800 |
---|---|---|
committer | malufett <malufett.eat.my.binaries@gmail.com> | 2015-01-12 02:12:55 +0800 |
commit | 819bc0c5bb225c51be77e585d5e1c8af00850657 (patch) | |
tree | cd1a6b2e6b32a4d0a135edab6190cdb8a6133577 /src/map | |
parent | 670fca4c54445440c25e1114e64170e3934645f1 (diff) | |
download | hercules-819bc0c5bb225c51be77e585d5e1c8af00850657.tar.gz hercules-819bc0c5bb225c51be77e585d5e1c8af00850657.tar.bz2 hercules-819bc0c5bb225c51be77e585d5e1c8af00850657.tar.xz hercules-819bc0c5bb225c51be77e585d5e1c8af00850657.zip |
Fixed Bug where skill timer is not properly terminated/clear when the caster dies.
-Thanks to GM Nihad.
Signed-off-by: malufett <malufett.eat.my.binaries@gmail.com>
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/skill.c | 10 | ||||
-rw-r--r-- | src/map/skill.h | 2 |
2 files changed, 6 insertions, 6 deletions
diff --git a/src/map/skill.c b/src/map/skill.c index 38b9097cd..db675d7f4 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3460,9 +3460,8 @@ int skill_cleartimerskill (struct block_list *src) case SR_SKYNETBLOW: continue; default: - skill->cleartimerskill_unknown(ud->skilltimerskill[i]->skill_id); - continue; - + if(skill->cleartimerskill_exception(ud->skilltimerskill[i]->skill_id)) + continue; } timer->delete(ud->skilltimerskill[i]->timer, skill->timerskill); ers_free(skill->timer_ers, ud->skilltimerskill[i]); @@ -3472,8 +3471,9 @@ int skill_cleartimerskill (struct block_list *src) return 1; } -void skill_cleartimerskill_unknown(int skill_id) +bool skill_cleartimerskill_exception(int skill_id) { + return false; } int skill_activate_reverberation(struct block_list *bl, va_list ap) { @@ -19318,7 +19318,7 @@ void skill_defaults(void) { skill->timerskill_dead_unknown = skill_timerskill_dead_unknown; skill->timerskill_target_unknown = skill_timerskill_target_unknown; skill->timerskill_notarget_unknown = skill_timerskill_notarget_unknown; - skill->cleartimerskill_unknown = skill_cleartimerskill_unknown; + skill->cleartimerskill_exception = skill_cleartimerskill_exception; skill->castend_damage_id_unknown = skill_castend_damage_id_unknown; skill->castend_id_unknown = skill_castend_id_unknown; skill->castend_nodamage_id_dead_unknown = skill_castend_nodamage_id_dead_unknown; diff --git a/src/map/skill.h b/src/map/skill.h index fa88bce99..6cb43405f 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -2056,7 +2056,7 @@ struct skill_interface { bool (*timerskill_dead_unknown) (struct block_list *src, struct unit_data *ud, struct skill_timerskill *skl); void (*timerskill_target_unknown) (int tid, int64 tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl); void (*timerskill_notarget_unknown) (int tid, int64 tick, struct block_list *src, struct block_list *target, struct unit_data *ud, struct skill_timerskill *skl); - void (*cleartimerskill_unknown) (int skill_id); + bool (*cleartimerskill_exception) (int skill_id); bool (*castend_id_unknown) (struct unit_data *ud, struct block_list *src, struct block_list *target); bool (*castend_nodamage_id_dead_unknown) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); bool (*castend_nodamage_id_undead_unknown) (struct block_list *src, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag); |