浏览代码

BETA: Fixed '''!ResMod''' Formula.

MELERIX 12 年之前
父节点
当前提交
60fdc9ce3c
共有 1 个文件被更改,包括 62 次插入71 次删除
  1. 62 71
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java

+ 62 - 71
L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java

@@ -1805,33 +1805,30 @@ public final class Formulas
 		double statMod = calcSkillStatMod(skill, target);
 		double rate = (baseRate / statMod);
 		
-		// Resists
-		double vulnModifier = calcSkillTraitVulnerability(0, target, skill);
-		double profModifier = calcSkillTraitProficiency(0, attacker, target, skill);
-		double res = vulnModifier + profModifier;
-		double resMod = 1;
-		if (res != 0)
+		// Resists.
+		double vuln = calcSkillTraitVulnerability(0, target, skill);
+		double prof = calcSkillTraitProficiency(0, attacker, target, skill);
+		double resMod = 1 + ((vuln + prof) / 100);
+		
+		// Check ResMod Limits.
+		if (resMod > 1.9)
 		{
-			if (res < 0)
-			{
-				resMod = 1 - (0.075 * res);
-				resMod = 1 / resMod;
-			}
-			else
-			{
-				resMod = 1 + (0.02 * res);
-			}
-			
-			rate *= resMod;
+			resMod = 1.9;
 		}
-		
-		int elementModifier = calcElementModifier(attacker, target, skill);
-		rate += elementModifier;
+		else if (resMod < 0.1)
+		{
+			resMod = 0.1;
+		}
+		rate *= resMod;
 		
 		// Lvl Bonus Modifier.
 		double lvlBonusMod = calcLvlBonusMod(attacker, target, skill);
 		rate *= lvlBonusMod;
 		
+		// Element Bonus.
+		int elementModifier = calcElementModifier(attacker, target, skill);
+		rate += elementModifier;
+		
 		// Add Matk/Mdef Bonus
 		double mAtkModifier = 0;
 		int ssModifier = 0;
@@ -1862,7 +1859,7 @@ public final class Formulas
 			rate = (int) (rate * mAtkModifier);
 		}
 		
-		// Check the rate limits.
+		// Check the Rate Limits.
 		if (rate > skill.getMaxChance())
 		{
 			rate = skill.getMaxChance();
@@ -1875,7 +1872,7 @@ public final class Formulas
 		if (attacker.isDebug() || Config.DEVELOPER)
 		{
 			final StringBuilder stat = new StringBuilder(100);
-			StringUtil.append(stat, skill.getName(), " eff.type:", effectType.toString(), " power:", String.valueOf(baseRate), " stat:", String.format("%1.2f", statMod), " 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.format("%1.2f", lvlBonusMod), " total:", String.valueOf(rate));
+			StringUtil.append(stat, skill.getName(), " eff.type:", effectType.toString(), " power:", String.valueOf(baseRate), " stat:", String.format("%1.2f", statMod), " res:", String.format("%1.2f", resMod), "(", String.format("%1.2f", prof), "/", String.format("%1.2f", vuln), ") elem:", String.valueOf(elementModifier), " mAtk:", String.format("%1.2f", mAtkModifier), " ss:", String.valueOf(ssModifier), " lvl:", String.format("%1.2f", lvlBonusMod), " total:", String.valueOf(rate));
 			final String result = stat.toString();
 			if (attacker.isDebug())
 			{
@@ -1923,33 +1920,30 @@ public final class Formulas
 		double statMod = calcSkillStatMod(skill, target);
 		double rate = (baseRate / statMod);
 		
-		// Resists
-		double vulnModifier = calcSkillVulnerability(attacker, target, skill);
-		double profModifier = calcSkillProficiency(skill, attacker, target);
-		double res = vulnModifier + profModifier;
-		double resMod = 1;
-		if (res != 0)
+		// Resists.
+		double vuln = calcSkillVulnerability(attacker, target, skill);
+		double prof = calcSkillProficiency(skill, attacker, target);
+		double resMod = 1 + ((vuln + prof) / 100);
+		
+		// Check ResMod Limits.
+		if (resMod > 1.9)
 		{
-			if (res < 0)
-			{
-				resMod = 1 - (0.075 * res);
-				resMod = 1 / resMod;
-			}
-			else
-			{
-				resMod = 1 + (0.02 * res);
-			}
-			
-			rate *= resMod;
+			resMod = 1.9;
 		}
-		
-		int elementModifier = calcElementModifier(attacker, target, skill);
-		rate += elementModifier;
+		else if (resMod < 0.1)
+		{
+			resMod = 0.1;
+		}
+		rate *= resMod;
 		
 		// Lvl Bonus Modifier.
 		double lvlBonusMod = calcLvlBonusMod(attacker, target, skill);
 		rate *= lvlBonusMod;
 		
+		// Element Bonus.
+		int elementModifier = calcElementModifier(attacker, target, skill);
+		rate += elementModifier;
+		
 		// Add Matk/Mdef Bonus
 		double mAtkModifier = 0;
 		int ssModifier = 0;
@@ -1980,7 +1974,7 @@ public final class Formulas
 			rate = (int) (rate * mAtkModifier);
 		}
 		
-		// Check the rate limits.
+		// Check the Rate Limits.
 		if (rate > skill.getMaxChance())
 		{
 			rate = skill.getMaxChance();
@@ -1993,7 +1987,7 @@ public final class Formulas
 		if (attacker.isDebug() || Config.DEVELOPER)
 		{
 			final StringBuilder stat = new StringBuilder(100);
-			StringUtil.append(stat, skill.getName(), " type:", skill.getSkillType().toString(), " power:", String.valueOf(baseRate), " stat:", String.format("%1.2f", statMod), " 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.format("%1.2f", lvlBonusMod), " total:", String.valueOf(rate));
+			StringUtil.append(stat, skill.getName(), " type:", skill.getSkillType().toString(), " power:", String.valueOf(baseRate), " stat:", String.format("%1.2f", statMod), " res:", String.format("%1.2f", resMod), "(", String.format("%1.2f", prof), "/", String.format("%1.2f", vuln), ") elem:", String.valueOf(elementModifier), " mAtk:", String.format("%1.2f", mAtkModifier), " ss:", String.valueOf(ssModifier), " lvl:", String.format("%1.2f", lvlBonusMod), " total:", String.valueOf(rate));
 			final String result = stat.toString();
 			if (attacker.isDebug())
 			{
@@ -2038,33 +2032,30 @@ public final class Formulas
 		double statMod = calcSkillStatMod(skill, target);
 		double rate = (baseRate / statMod);
 		
-		// Resists
-		double vulnModifier = calcSkillVulnerability(attacker.getOwner(), target, skill);
-		double profModifier = calcSkillProficiency(skill, attacker.getOwner(), target);
-		double res = vulnModifier + profModifier;
-		double resMod = 1;
-		if (res != 0)
+		// Resists.
+		double vuln = calcSkillVulnerability(attacker.getOwner(), target, skill);
+		double prof = calcSkillProficiency(skill, attacker.getOwner(), target);
+		double resMod = 1 + ((vuln + prof) / 100);
+		
+		// Check ResMod Limits.
+		if (resMod > 1.9)
 		{
-			if (res < 0)
-			{
-				resMod = 1 - (0.075 * res);
-				resMod = 1 / resMod;
-			}
-			else
-			{
-				resMod = 1 + (0.02 * res);
-			}
-			
-			rate *= resMod;
+			resMod = 1.9;
 		}
-		
-		int elementModifier = calcElementModifier(attacker.getOwner(), target, skill);
-		rate += elementModifier;
+		else if (resMod < 0.1)
+		{
+			resMod = 0.1;
+		}
+		rate *= resMod;
 		
 		// Lvl Bonus Modifier.
 		double lvlBonusMod = calcLvlBonusMod(attacker.getOwner(), target, skill);
 		rate *= lvlBonusMod;
 		
+		// Element Bonus.
+		int elementModifier = calcElementModifier(attacker.getOwner(), target, skill);
+		rate += elementModifier;
+		
 		// Add Matk/Mdef Bonus
 		double mAtkModifier = 0;
 		if (skill.isMagic())
@@ -2080,7 +2071,7 @@ public final class Formulas
 			rate += (int) (mAtkModifier * 100) - 100;
 		}
 		
-		// Check the rate limits.
+		// Check the Rate Limits.
 		if (rate > skill.getMaxChance())
 		{
 			rate = skill.getMaxChance();
@@ -2093,7 +2084,7 @@ public final class Formulas
 		if (attacker.getOwner().isDebug() || Config.DEVELOPER)
 		{
 			final StringBuilder stat = new StringBuilder(100);
-			StringUtil.append(stat, skill.getName(), " type:", skill.getSkillType().toString(), " power:", String.valueOf(baseRate), " stat:", String.format("%1.2f", statMod), " 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), " lvl:", String.format("%1.2f", lvlBonusMod), " total:", String.valueOf(rate));
+			StringUtil.append(stat, skill.getName(), " type:", skill.getSkillType().toString(), " power:", String.valueOf(baseRate), " stat:", String.format("%1.2f", statMod), " res:", String.format("%1.2f", resMod), "(", String.format("%1.2f", prof), "/", String.format("%1.2f", vuln), ") elem:", String.valueOf(elementModifier), " mAtk:", String.format("%1.2f", mAtkModifier), " lvl:", String.format("%1.2f", lvlBonusMod), " total:", String.valueOf(rate));
 			final String result = stat.toString();
 			if (attacker.getOwner().isDebug())
 			{
@@ -2555,15 +2546,15 @@ public final class Formulas
 	{
 		int cancelMagicLvl = skill.getMagicLevel();
 		int count = skill.getMaxNegatedEffects();
-		final double vulnMod = target.calcStat(Stats.CANCEL_VULN, 0, target, null);
-		final double profMod = activeChar.calcStat(Stats.CANCEL_PROF, 0, target, null);
-		double resMod = 1 + (((vulnMod + profMod) * -1) / 100);
+		final double vuln = target.calcStat(Stats.CANCEL_VULN, 0, target, null);
+		final double prof = activeChar.calcStat(Stats.CANCEL_PROF, 0, target, null);
+		double resMod = 1 + (((vuln + prof) * -1) / 100);
 		double rate = power / resMod;
 		
 		if (activeChar.isDebug() || Config.DEVELOPER)
 		{
 			final StringBuilder stat = new StringBuilder(100);
-			StringUtil.append(stat, skill.getName(), " Base Rate:", String.valueOf((int) power), " Magiclvl:", String.valueOf(cancelMagicLvl), " resMod:", String.format("%1.2f", resMod), "(", String.format("%1.2f", profMod), "/", String.format("%1.2f", vulnMod), ") Rate:", String.valueOf(rate));
+			StringUtil.append(stat, skill.getName(), " Base Rate:", String.valueOf((int) power), " Magiclvl:", String.valueOf(cancelMagicLvl), " resMod:", String.format("%1.2f", resMod), "(", String.format("%1.2f", prof), "/", String.format("%1.2f", vuln), ") Rate:", String.valueOf(rate));
 			final String result = stat.toString();
 			if (activeChar.isDebug())
 			{
@@ -2669,6 +2660,7 @@ public final class Formulas
 	{
 		rate *= (eff.getSkill().getMagicLevel() > 0) ? (cancelMagicLvl / eff.getSkill().getMagicLevel()) : 1;
 		
+		// Check the Rate Limits.
 		if (rate > skill.getMaxChance())
 		{
 			rate = skill.getMaxChance();
@@ -2677,7 +2669,6 @@ public final class Formulas
 		{
 			rate = skill.getMinChance();
 		}
-		
 		return Rnd.get(100) < rate;
 	}
 }