summaryrefslogtreecommitdiff
path: root/src/map/battle.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/battle.c')
-rw-r--r--src/map/battle.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index d6328c951..06f41856c 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -5979,19 +5979,23 @@ int battle_damage_area(struct block_list *bl, va_list ap) {
amotion=va_arg(ap,int);
dmotion=va_arg(ap,int);
damage=va_arg(ap,int);
- if (bl->type == BL_MOB && ((struct mob_data *)bl)->class_ == MOBID_EMPELIUM)
+ if (bl->type == BL_MOB && BL_UCCAST(BL_MOB, bl)->class_ == MOBID_EMPELIUM)
return 0;
if( bl != src && battle->check_target(src,bl,BCT_ENEMY) > 0 ) {
+ struct map_session_data *sd = NULL;
nullpo_ret(src);
+
map->freeblock_lock();
- if( src->type == BL_PC )
- battle->drain((struct map_session_data *)src, bl, damage, damage, status_get_race(bl), is_boss(bl));
+ sd = BL_CAST(BL_PC, src);
+
+ if (src->type == BL_PC)
+ battle->drain(sd, bl, damage, damage, status_get_race(bl), is_boss(bl));
if( amotion )
battle->delay_damage(tick, amotion,src,bl,0,CR_REFLECTSHIELD,0,damage,ATK_DEF,0,true);
else
status_fix_damage(src,bl,damage,0);
clif->damage(bl,bl,amotion,dmotion,damage,1,BDT_ENDURE,0);
- if (!(src->type == BL_PC && ((struct map_session_data *)src)->state.autocast))
+ if (src->type != BL_PC || !sd->state.autocast)
skill->additional_effect(src, bl, CR_REFLECTSHIELD, 1, BF_WEAPON|BF_SHORT|BF_NORMAL,ATK_DEF,tick);
map->freeblock_unlock();
}