Bläddra i källkod

- 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

skotlex 18 år sedan
förälder
incheckning
0c181dc424
5 ändrade filer med 23 tillägg och 14 borttagningar
  1. 3 0
      Changelog-Trunk.txt
  2. 4 0
      conf-tmpl/Changelog.txt
  3. 1 2
      conf-tmpl/battle/status.conf
  4. 2 2
      src/map/battle.c
  5. 13 10
      src/map/status.c

+ 3 - 0
Changelog-Trunk.txt

@@ -5,6 +5,9 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 
 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
 	  fixed now [Skotlex]
 	* @reloadscript scripts will no longer eliminate mobs with no respawn data.

+ 4 - 0
conf-tmpl/Changelog.txt

@@ -1,5 +1,9 @@
 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
 	* 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

+ 1 - 2
conf-tmpl/battle/status.conf

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

+ 2 - 2
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<<tstatus->def_ele) ||
 					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;
 
@@ -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)) ||
 					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 & (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]
 							flag.idef = 1;

+ 13 - 10
src/map/status.c

@@ -4376,10 +4376,6 @@ int status_get_sc_def(struct block_list *bl, int type)
 		if (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)
 			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);