- 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://svn.code.sf.net/p/rathena/svn/trunk@8795 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
skotlex 2006-09-18 15:36:00 +00:00
parent 77dd0bb951
commit 0c181dc424
5 changed files with 23 additions and 14 deletions

View File

@ -5,6 +5,9 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/09/18 2006/09/18
* Moved the equipment/card resistances to status ailments outside of
status_get_sc_def, so that they are applied only to rate, not duration.
[Skotlex]
* Modified the Asura code (again), hopefully movement sprite issues are * Modified the Asura code (again), hopefully movement sprite issues are
fixed now [Skotlex] fixed now [Skotlex]
* @reloadscript scripts will no longer eliminate mobs with no respawn data. * @reloadscript scripts will no longer eliminate mobs with no respawn data.

View File

@ -1,5 +1,9 @@
Date Added Date Added
2006/09/18
* Due to a recent update of how cards/equipment status change defense
works, the max sc resistance settings (battle/status.conf) no longer apply
to them. [Skotlex]
2006/09/16 2006/09/16
* Added monster_ai&256. When set, a monster will pick a random starting * Added monster_ai&256. When set, a monster will pick a random starting
position to begin checking versus it's skills, otherwise, it will always position to begin checking versus it's skills, otherwise, it will always

View File

@ -56,7 +56,6 @@ pc_luk_status_def: 300
mob_luk_status_def: 300 mob_luk_status_def: 300
// Maximum resistance to status changes. (10000 = 100%) // Maximum resistance to status changes. (10000 = 100%)
// NOTE: This is applied after cards and equipment, so inmunity cards are // NOTE: Cards and equipment can go over this limit, so it only applies to natural resist.
// capped to this.
pc_max_status_def: 10000 pc_max_status_def: 10000
mob_max_status_def: 10000 mob_max_status_def: 10000

View File

@ -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)) || (target->type == BL_MOB && sd->right_weapon.ignore_def_mob & (is_boss(target)?2:1)) ||
sd->right_weapon.ignore_def_ele & (1<<tstatus->def_ele) || sd->right_weapon.ignore_def_ele & (1<<tstatus->def_ele) ||
sd->right_weapon.ignore_def_race & (1<<tstatus->race) || sd->right_weapon.ignore_def_race & (1<<tstatus->race) ||
sd->right_weapon.ignore_def_race & (is_boss(target)?1<<10:1<<11) sd->right_weapon.ignore_def_race & (is_boss(target)?1<<RC_BOSS:1<<RC_NONBOSS)
)) ))
flag.idef = 1; flag.idef = 1;
@ -1662,7 +1662,7 @@ static struct Damage battle_calc_weapon_attack(
(target->type == BL_MOB && sd->left_weapon.ignore_def_mob & (is_boss(target)?2:1)) || (target->type == BL_MOB && sd->left_weapon.ignore_def_mob & (is_boss(target)?2:1)) ||
sd->left_weapon.ignore_def_ele & (1<<tstatus->def_ele) || sd->left_weapon.ignore_def_ele & (1<<tstatus->def_ele) ||
sd->left_weapon.ignore_def_race & (1<<tstatus->race) || sd->left_weapon.ignore_def_race & (1<<tstatus->race) ||
sd->left_weapon.ignore_def_race & (is_boss(target)?1<<10:1<<11) sd->left_weapon.ignore_def_race & (is_boss(target)?1<<RC_BOSS:1<<RC_NONBOSS)
)) { )) {
if(battle_config.left_cardfix_to_right && flag.rh) //Move effect to right hand. [Skotlex] if(battle_config.left_cardfix_to_right && flag.rh) //Move effect to right hand. [Skotlex]
flag.idef = 1; flag.idef = 1;

View File

@ -4376,10 +4376,6 @@ int status_get_sc_def(struct block_list *bl, int type)
if (battle_config.pc_sc_def_rate != 100) if (battle_config.pc_sc_def_rate != 100)
sc_def = sc_def*battle_config.pc_sc_def_rate/100; sc_def = sc_def*battle_config.pc_sc_def_rate/100;
if(SC_COMMON_MIN<=type && type<=SC_COMMON_MAX
&& sd->reseff[type-SC_COMMON_MIN] > 0)
sc_def+= sd->reseff[type-SC_COMMON_MIN];
if (sc_def < battle_config.pc_max_sc_def) if (sc_def < battle_config.pc_max_sc_def)
sc_def += (battle_config.pc_max_sc_def - sc_def)* sc_def += (battle_config.pc_max_sc_def - sc_def)*
status->luk/battle_config.pc_luk_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))) { if (!(flag&(1|4))) {
int def = status_get_sc_def(bl, type); 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)) if (def && tick && !(flag&2))
{ {
tick -= tick*def/10000; tick -= tick*def/10000;
if (tick <= 0) if (tick <= 0)
return 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); undead_flag=battle_check_undead(status->race,status->def_ele);