From 5a2849d9ffcc84f50b84f96f15c618ce57d35b49 Mon Sep 17 00:00:00 2001 From: Cydh Ramdh Date: Sun, 19 Jan 2014 21:00:54 +0700 Subject: [PATCH] Fixed bugreport:8514, http://rathena.org/board/tracker/issue-8514-map-server-crash/ Signed-off-by: Cydh Ramdh --- src/map/skill.c | 18 +++++++++++++----- src/map/skill.h | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index bc4a9f32e1..2e1170ba99 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -16078,16 +16078,24 @@ bool skill_check_cloaking(struct block_list *bl, struct status_change_entry *sce return wall; } -int skill_check_shadowform(struct block_list *bl, int64 damage, int hit) { +/** Check Shadow Form on the target +* @param bl: Target +* @param damage: Damage amount +* @param hit +* @return val +*/ +char skill_check_shadowform(struct block_list *bl, int64 damage, int hit) { struct status_change *sc; - struct block_list *src; nullpo_retr(0, bl); + if (!damage) + return 0; + sc = status_get_sc(bl); - if( sc && sc->data[SC__SHADOWFORM] && damage ) { - src = map_id2bl(sc->data[SC__SHADOWFORM]->val2); + if( sc && sc->data[SC__SHADOWFORM] ) { + struct block_list *src = map_id2bl(sc->data[SC__SHADOWFORM]->val2); if( !src || src->m != bl->m ) { status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER); @@ -16102,7 +16110,7 @@ int skill_check_shadowform(struct block_list *bl, int64 damage, int hit) { } status_damage(bl, src, damage, 0, clif_damage(src, src, gettick(), 500, 500, damage, hit, (hit > 1 ? 8 : 0), 0), 0); - if( (--sc->data[SC__SHADOWFORM]->val3) <= 0 ) { + if( sc && sc->data[SC__SHADOWFORM] && (--sc->data[SC__SHADOWFORM]->val3) <= 0 ) { status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER); if( src->type == BL_PC ) ((TBL_PC*)src)->shadowform_id = 0; diff --git a/src/map/skill.h b/src/map/skill.h index 5153495414..819228b791 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -1966,7 +1966,7 @@ struct s_skill_magicmushroom_db { }; extern struct s_skill_magicmushroom_db skill_magicmushroom_db[MAX_SKILL_MAGICMUSHROOM_DB]; int skill_maelstrom_suction(struct block_list *bl, va_list ap); -int skill_check_shadowform(struct block_list *bl, int64 damage, int hit); +char skill_check_shadowform(struct block_list *bl, int64 damage, int hit); /** * Ranger **/