فهرست منبع

Fixed bugreport:8514, http://rathena.org/board/tracker/issue-8514-map-server-crash/

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
Cydh Ramdh 11 سال پیش
والد
کامیت
5a2849d9ff
2فایلهای تغییر یافته به همراه14 افزوده شده و 6 حذف شده
  1. 13 5
      src/map/skill.c
  2. 1 1
      src/map/skill.h

+ 13 - 5
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;

+ 1 - 1
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
  **/