Browse Source

BETA: Fixed some effects with chance not being affected by min/maxChances, like in: Shadow Step skill and others (Reported by: H4vok, facheme). Also renamed config for consistency.

MELERIX 12 năm trước cách đây
mục cha
commit
6cb6a74b4d

+ 5 - 5
L2J_Server_BETA/dist/game/config/Character.properties

@@ -294,11 +294,11 @@ MaxMAtkSpeed = 1999
 # Default: 250
 MaxEvasion = 250
 
-# Minimum and maximum debuff land rate by default.
-# This will affect all skills except those with min and max chance defined in the skills XML
-# Default: 10% for min, 90% for max.
-MinDebuffChance = 10
-MaxDebuffChance = 90
+# Minimum and Maximum Abnormal State Success Rate.
+# This affect all skills/effects chances, except in skills where minChance or maxChance parameters are defined.
+# Default: H5 minimum of 10% and maximum of 90%.
+MinAbnormalStateSuccessRate = 10
+MaxAbnormalStateSuccessRate = 90
 
 # Maximum number of allowed subclasses for every player.
 # Default: 3

+ 4 - 4
L2J_Server_BETA/java/com/l2jserver/Config.java

@@ -159,8 +159,8 @@ public final class Config
 	public static int MAX_PATK_SPEED;
 	public static int MAX_MATK_SPEED;
 	public static int MAX_EVASION;
-	public static int MIN_DEBUFF_CHANCE;
-	public static int MAX_DEBUFF_CHANCE;
+	public static int MIN_ABNORMAL_STATE_SUCCESS_RATE;
+	public static int MAX_ABNORMAL_STATE_SUCCESS_RATE;
 	public static byte MAX_SUBCLASS;
 	public static byte BASE_SUBCLASS_LEVEL;
 	public static byte MAX_SUBCLASS_LEVEL;
@@ -1554,8 +1554,8 @@ public final class Config
 			MAX_PATK_SPEED = Integer.parseInt(Character.getProperty("MaxPAtkSpeed", "1500"));
 			MAX_MATK_SPEED = Integer.parseInt(Character.getProperty("MaxMAtkSpeed", "1999"));
 			MAX_EVASION = Integer.parseInt(Character.getProperty("MaxEvasion", "250"));
-			MIN_DEBUFF_CHANCE = Integer.parseInt(Character.getProperty("MinDebuffChance", "10"));
-			MAX_DEBUFF_CHANCE = Integer.parseInt(Character.getProperty("MaxDebuffChance", "90"));
+			MIN_ABNORMAL_STATE_SUCCESS_RATE = Integer.parseInt(Character.getProperty("MinAbnormalStateSuccessRate", "10"));
+			MAX_ABNORMAL_STATE_SUCCESS_RATE = Integer.parseInt(Character.getProperty("MaxAbnormalStateSuccessRate", "90"));
 			MAX_SUBCLASS = Byte.parseByte(Character.getProperty("MaxSubclass", "3"));
 			BASE_SUBCLASS_LEVEL = Byte.parseByte(Character.getProperty("BaseSubclassLevel", "40"));
 			MAX_SUBCLASS_LEVEL = Byte.parseByte(Character.getProperty("MaxSubclassLevel", "80"));

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/skills/L2Skill.java

@@ -413,8 +413,8 @@ public abstract class L2Skill implements IChanceSkillTrigger
 		_magicLevel = set.getInteger("magicLvl", 0);
 		_levelDepend = set.getInteger("lvlDepend", 0);
 		_ignoreResists = set.getBool("ignoreResists", false);
-		_minChance = set.getInteger("minChance", Config.MIN_DEBUFF_CHANCE);
-		_maxChance = set.getInteger("maxChance", Config.MAX_DEBUFF_CHANCE);
+		_minChance = set.getInteger("minChance", Config.MIN_ABNORMAL_STATE_SUCCESS_RATE);
+		_maxChance = set.getInteger("maxChance", Config.MAX_ABNORMAL_STATE_SUCCESS_RATE);
 		_stat = set.getEnum("stat", Stats.class, null);
 		_ignoreShield = set.getBool("ignoreShld", false);
 		_skillType = set.getEnum("skillType", L2SkillType.class, L2SkillType.DUMMY);

+ 16 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java

@@ -1956,24 +1956,31 @@ public final class Formulas
 			return true;
 		}
 		
-		final L2SkillType type = effect.effectType;
-		final int value = (int) effect.effectPower;
-		
 		if ((target.calcStat(Stats.DEBUFF_IMMUNITY, 0, null, skill) > 0) && skill.isDebuff() && !skill.ignoreResists())
 		{
 			return false;
 		}
 		
-		if (type == null)
+		final L2SkillType effectType = effect.effectType;
+		final int effectPower = (int) effect.effectPower;
+		
+		if (effectType == null)
 		{
 			if (attacker.isDebug())
 			{
 				attacker.sendDebugMessage(skill.getName() + " effect ignoring resists");
 			}
-			
-			return Rnd.get(100) < value;
+			if (effectPower > skill.getMaxChance())
+			{
+				return Rnd.get(100) < skill.getMaxChance();
+			}
+			else if (effectPower < skill.getMinChance())
+			{
+				return Rnd.get(100) < skill.getMinChance();
+			}
+			return Rnd.get(100) < effectPower;
 		}
-		else if (type.equals(L2SkillType.CANCEL))
+		else if (effectType.equals(L2SkillType.CANCEL))
 		{
 			return true;
 		}
@@ -1991,7 +1998,7 @@ public final class Formulas
 		double statModifier = calcSkillStatModifier(skill, target);
 		
 		// Calculate BaseRate.
-		int rate = (int) (value * statModifier);
+		int rate = (int) (effectPower * statModifier);
 		
 		// Add Matk/Mdef Bonus
 		double mAtkModifier = 0;
@@ -2062,7 +2069,7 @@ public final class Formulas
 		if (attacker.isDebug() || Config.DEVELOPER)
 		{
 			final StringBuilder stat = new StringBuilder(100);
-			StringUtil.append(stat, skill.getName(), " eff.type:", type.toString(), " power:", String.valueOf(value), " stat:", String.format("%1.2f", statModifier), " res:", String.format("%1.2f", resMod), "(", String.format("%1.2f", profModifier), "/", String.format("%1.2f", vulnModifier), ") elem:", String.valueOf(elementModifier), " mAtk:", String.format("%1.2f", mAtkModifier), " ss:", String.valueOf(ssModifier), " lvl:", String.valueOf(deltamod), " total:", String.valueOf(rate));
+			StringUtil.append(stat, skill.getName(), " eff.type:", effectType.toString(), " power:", String.valueOf(effectPower), " stat:", String.format("%1.2f", statModifier), " res:", String.format("%1.2f", resMod), "(", String.format("%1.2f", profModifier), "/", String.format("%1.2f", vulnModifier), ") elem:", String.valueOf(elementModifier), " mAtk:", String.format("%1.2f", mAtkModifier), " ss:", String.valueOf(ssModifier), " lvl:", String.valueOf(deltamod), " total:", String.valueOf(rate));
 			final String result = stat.toString();
 			if (attacker.isDebug())
 			{