From ba0872fe48a8b9d78358e58f52483740d17de7c7 Mon Sep 17 00:00:00 2001 From: skotlex Date: Mon, 18 Sep 2006 15:36:00 +0000 Subject: - Moved the equipment/card resistances to status ailments outside of status_get_sc_def, so that they are applied only to rate, not duration. - Due to this, the max sc resistance settings (battle/status.conf) no longer apply to equipment/card-granted resistances. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@8795 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/battle.c | 4 ++-- src/map/status.c | 23 +++++++++++++---------- 2 files changed, 15 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/map/battle.c b/src/map/battle.c index f44493cb3..9d7bf7514 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1654,7 +1654,7 @@ static struct Damage battle_calc_weapon_attack( (target->type == BL_MOB && sd->right_weapon.ignore_def_mob & (is_boss(target)?2:1)) || sd->right_weapon.ignore_def_ele & (1<def_ele) || sd->right_weapon.ignore_def_race & (1<race) || - sd->right_weapon.ignore_def_race & (is_boss(target)?1<<10:1<<11) + sd->right_weapon.ignore_def_race & (is_boss(target)?1<type == BL_MOB && sd->left_weapon.ignore_def_mob & (is_boss(target)?2:1)) || sd->left_weapon.ignore_def_ele & (1<def_ele) || sd->left_weapon.ignore_def_race & (1<race) || - sd->left_weapon.ignore_def_race & (is_boss(target)?1<<10:1<<11) + sd->left_weapon.ignore_def_race & (is_boss(target)?1<reseff[type-SC_COMMON_MIN] > 0) - sc_def+= sd->reseff[type-SC_COMMON_MIN]; - if (sc_def < battle_config.pc_max_sc_def) sc_def += (battle_config.pc_max_sc_def - sc_def)* status->luk/battle_config.pc_luk_sc_def; @@ -4459,18 +4455,25 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val if (!(flag&(1|4))) { int def = status_get_sc_def(bl, type); - if (def && !(flag&8)) - rate -= rate*def/10000; - - if (!(rand()%10000 < rate)) - return 0; - if (def && tick && !(flag&2)) { tick -= tick*def/10000; if (tick <= 0) return 0; } + + //Item defenses do not reduce duration, so they go out of the function. + if(sd && SC_COMMON_MIN<=type && type<=SC_COMMON_MAX + && sd->reseff[type-SC_COMMON_MIN] > 0) + def += sd->reseff[type-SC_COMMON_MIN]; + + if (def && !(flag&8)) + rate -= rate*def/10000; + + if (!(rand()%10000 < rate)) + return 0; + + } undead_flag=battle_check_undead(status->race,status->def_ele); -- cgit v1.2.3-70-g09d2