|
@@ -226,7 +226,6 @@ int battle_attr_fix(struct block_list *src, struct block_list *target, int damag
|
|
int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag)
|
|
int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag)
|
|
{
|
|
{
|
|
struct map_session_data *sd = NULL;
|
|
struct map_session_data *sd = NULL;
|
|
- struct mob_data *md = NULL;
|
|
|
|
struct status_change *sc;
|
|
struct status_change *sc;
|
|
struct status_change_entry *sci;
|
|
struct status_change_entry *sci;
|
|
|
|
|
|
@@ -235,9 +234,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
|
|
if (!damage)
|
|
if (!damage)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- if (bl->type == BL_MOB) {
|
|
|
|
- md=(struct mob_data *)bl;
|
|
|
|
- } else if (bl->type == BL_PC) {
|
|
|
|
|
|
+ if (bl->type == BL_PC) {
|
|
sd=(struct map_session_data *)bl;
|
|
sd=(struct map_session_data *)bl;
|
|
//Special no damage states
|
|
//Special no damage states
|
|
if(flag&BF_WEAPON && sd->special_state.no_weapon_damage)
|
|
if(flag&BF_WEAPON && sd->special_state.no_weapon_damage)
|
|
@@ -246,8 +243,14 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
|
|
if(flag&BF_MAGIC && sd->special_state.no_magic_damage)
|
|
if(flag&BF_MAGIC && sd->special_state.no_magic_damage)
|
|
damage -= damage*sd->special_state.no_magic_damage/100;
|
|
damage -= damage*sd->special_state.no_magic_damage/100;
|
|
|
|
|
|
|
|
+ if(flag&BF_MISC && sd->special_state.no_misc_damage)
|
|
|
|
+ damage -= damage*sd->special_state.no_misc_damage/100;
|
|
|
|
+
|
|
if(!damage) return 0;
|
|
if(!damage) return 0;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if (skill_num == PA_PRESSURE || skill_num == NJ_ZENYNAGE)
|
|
|
|
+ return damage; //These two bypass everything else.
|
|
|
|
|
|
sc = status_get_sc(bl);
|
|
sc = status_get_sc(bl);
|
|
|
|
|
|
@@ -271,9 +274,6 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
|
|
status_change_end(bl,SC_SAFETYWALL,-1);
|
|
status_change_end(bl,SC_SAFETYWALL,-1);
|
|
}
|
|
}
|
|
|
|
|
|
- if(sc->data[SC_LANDPROTECTOR].timer!=-1 && flag&BF_MAGIC)
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
if(sc->data[SC_AUTOGUARD].timer != -1 && flag&BF_WEAPON &&
|
|
if(sc->data[SC_AUTOGUARD].timer != -1 && flag&BF_WEAPON &&
|
|
rand()%100 < sc->data[SC_AUTOGUARD].val2) {
|
|
rand()%100 < sc->data[SC_AUTOGUARD].val2) {
|
|
int delay;
|
|
int delay;
|
|
@@ -438,11 +438,11 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
|
|
damage = div_;
|
|
damage = div_;
|
|
}
|
|
}
|
|
|
|
|
|
- if( md && !status_isdead(bl) && src != bl) {
|
|
|
|
|
|
+ if( bl->type == BL_MOB && !status_isdead(bl) && src != bl) {
|
|
if (damage > 0 )
|
|
if (damage > 0 )
|
|
- mobskill_event(md,src,gettick(),flag);
|
|
|
|
|
|
+ mobskill_event((TBL_MOB*)bl,src,gettick(),flag);
|
|
if (skill_num)
|
|
if (skill_num)
|
|
- mobskill_event(md,src,gettick(),MSC_SKILLUSED|(skill_num<<16));
|
|
|
|
|
|
+ mobskill_event((TBL_MOB*)bl,src,gettick(),MSC_SKILLUSED|(skill_num<<16));
|
|
}
|
|
}
|
|
|
|
|
|
return damage;
|
|
return damage;
|
|
@@ -2691,8 +2691,7 @@ struct Damage battle_calc_misc_attack(
|
|
|
|
|
|
md.damage=battle_attr_fix(src, target, md.damage, s_ele, tstatus->def_ele, tstatus->ele_lv);
|
|
md.damage=battle_attr_fix(src, target, md.damage, s_ele, tstatus->def_ele, tstatus->ele_lv);
|
|
|
|
|
|
- if (skill_num != PA_PRESSURE && skill_num != NJ_ZENYNAGE) //Pressure ignores all these things... and Throw Money ?
|
|
|
|
- md.damage=battle_calc_damage(src,target,md.damage,md.div_,skill_num,skill_lv,md.flag);
|
|
|
|
|
|
+ md.damage=battle_calc_damage(src,target,md.damage,md.div_,skill_num,skill_lv,md.flag);
|
|
if (map_flag_gvg(target->m))
|
|
if (map_flag_gvg(target->m))
|
|
md.damage=battle_calc_gvg_damage(src,target,md.damage,md.div_,skill_num,skill_lv,md.flag);
|
|
md.damage=battle_calc_gvg_damage(src,target,md.damage,md.div_,skill_num,skill_lv,md.flag);
|
|
|
|
|