浏览代码

BETA: Vuln-Prof Fixes...
* Fixed "ValakasVuln/Prof" for the "Valakas Items" to work properly (is based in the existent support, so just some things renamed/changed to use the right values).
* Fixed "DebuffVuln/Prof" for the "Debuff Skills" to work properly (now is based on isDebuff boolean and skillType, so it should solve the issues of some Debuff skills not being resisted properly, like DISARM and some others).

also removed isToggle check from "oncast_skill" condition, because there is no Toggle Magic Skills.

MELERIX 13 年之前
父节点
当前提交
254921d259

+ 1 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/model/items/L2Weapon.java

@@ -429,12 +429,7 @@ public final class L2Weapon extends L2Item
 		{
 			return _emptyEffectSet;
 		}
-		// No Trigger if Toggle Skill
-		if (trigger.isToggle() && _skillsOnCast.getSkill().isToggle())
-		{
-			return _emptyEffectSet;
-		}
-		// No Trigger if not Magic skill
+		// No Trigger if not Magic Skill
 		if (!trigger.isMagic() && !_skillsOnCast.getSkill().isMagic())
 		{
 			return _emptyEffectSet;

+ 30 - 34
L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Formulas.java

@@ -698,7 +698,7 @@ public final class Formulas
 			proximityBonus = 1.1; // +10% crit dmg when side stabbed
 		}
 		
-		damage += Formulas.calcValakasAttribute(attacker, target, skill);
+		damage += calcValakasTrait(attacker, target, skill);
 		
 		double element = calcElemental(attacker, target, skill);
 		
@@ -755,7 +755,7 @@ public final class Formulas
 		final boolean isPvE = (attacker instanceof L2Playable) && (target instanceof L2Attackable);
 		double damage = attacker.getPAtk(target);
 		double defence = target.getPDef(attacker);
-		damage += calcValakasAttribute(attacker, target, skill);
+		damage += calcValakasTrait(attacker, target, skill);
 		if (attacker instanceof L2Npc)
 		{
 			if (((L2Npc) attacker)._soulshotcharged)
@@ -1855,25 +1855,23 @@ public final class Formulas
 				case SLEEP:
 					multiplier = target.calcStat(Stats.SLEEP_VULN, multiplier, target, null);
 					break;
-			// case VALAKAS:
+				case VALAKAS:
+					multiplier = target.calcStat(Stats.VALAKAS_VULN, multiplier, target, null);
+					break;
 			}
 		}
 		else
 		{
-			// Since not all traits are handled by skill parameter
-			// rest is checked by skilltype
+			// Since not all traits are handled by trait parameter
+			// rest is checked by skillType or isDebuff Boolean.
 			final L2SkillType type = skill.getSkillType();
-			if (type != null)
+			if (type == L2SkillType.BUFF)
 			{
-				switch (type)
-				{
-					case DEBUFF:
-						multiplier = target.calcStat(Stats.DEBUFF_VULN, multiplier, target, null);
-						break;
-					case BUFF:
-						multiplier = target.calcStat(Stats.BUFF_VULN, multiplier, target, null);
-						break;
-				}
+				multiplier = target.calcStat(Stats.BUFF_VULN, multiplier, target, null);
+			}
+			else if ((type == L2SkillType.DEBUFF) || (skill.isDebuff()))
+			{
+				multiplier = target.calcStat(Stats.DEBUFF_VULN, multiplier, target, null);
 			}
 		}
 		return multiplier;
@@ -1932,25 +1930,23 @@ public final class Formulas
 				case SLEEP:
 					multiplier = attacker.calcStat(Stats.SLEEP_PROF, multiplier, target, null);
 					break;
-			// case VALAKAS:
+				case VALAKAS:
+					multiplier = attacker.calcStat(Stats.VALAKAS_PROF, multiplier, target, null);
+					break;
 			}
 		}
 		else
 		{
 			// Since not all traits are handled by skill parameter
-			// rest is checked by skilltype
+			// rest is checked by skillType or isDebuff Boolean.
 			final L2SkillType type = skill.getSkillType();
-			if (type != null)
+			if (type == L2SkillType.CANCEL)
 			{
-				switch (type)
-				{
-					case DEBUFF:
-						multiplier = attacker.calcStat(Stats.DEBUFF_PROF, multiplier, target, null);
-						break;
-					case CANCEL:
-						multiplier = attacker.calcStat(Stats.CANCEL_PROF, multiplier, target, null);
-						break;
-				}
+				multiplier = attacker.calcStat(Stats.CANCEL_PROF, multiplier, target, null);
+			}
+			else if ((type == L2SkillType.DEBUFF) || (skill.isDebuff()))
+			{
+				multiplier = target.calcStat(Stats.DEBUFF_PROF, multiplier, target, null);
 			}
 		}
 		return multiplier;
@@ -2518,23 +2514,23 @@ public final class Formulas
 		return Rnd.get(100) < val;
 	}
 	
-	public static double calcValakasAttribute(L2Character attacker, L2Character target, L2Skill skill)
+	public static double calcValakasTrait(L2Character attacker, L2Character target, L2Skill skill)
 	{
 		double calcPower = 0;
 		double calcDefen = 0;
 		
-		if ((skill != null) && skill.getAttributeName().contains("valakas"))
+		if ((skill != null) && (skill.getTraitType() == L2TraitType.VALAKAS))
 		{
-			calcPower = attacker.calcStat(Stats.VALAKAS, calcPower, target, skill);
-			calcDefen = target.calcStat(Stats.VALAKAS_RES, calcDefen, target, skill);
+			calcPower = attacker.calcStat(Stats.VALAKAS_PROF, calcPower, target, skill);
+			calcDefen = target.calcStat(Stats.VALAKAS_VULN, calcDefen, target, skill);
 		}
 		else
 		{
-			calcPower = attacker.calcStat(Stats.VALAKAS, calcPower, target, skill);
+			calcPower = attacker.calcStat(Stats.VALAKAS_PROF, calcPower, target, skill);
 			if (calcPower > 0)
 			{
-				calcPower = attacker.calcStat(Stats.VALAKAS, calcPower, target, skill);
-				calcDefen = target.calcStat(Stats.VALAKAS_RES, calcDefen, target, skill);
+				calcPower = attacker.calcStat(Stats.VALAKAS_PROF, calcPower, target, skill);
+				calcDefen = target.calcStat(Stats.VALAKAS_VULN, calcDefen, target, skill);
 			}
 		}
 		return calcPower - calcDefen;

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/stats/Stats.java

@@ -119,7 +119,6 @@ public enum Stats
 	MOVEMENT("movement"), // slowdown movement, debuff
 	CONFUSION("confusion"), // mob changes target, opposite to aggression/hate
 	SLEEP("sleep"), // sleep (don't move/ATTACK) until attacked
-	VALAKAS("valakas"),
 
 	// VULNERABILITIES
 	AGGRESSION_VULN("aggressionVuln"),
@@ -141,6 +140,7 @@ public enum Stats
 	CRIT_VULN("critVuln"), // Resistence to Crit DMG in percent.
 	CRIT_ADD_VULN("critAddVuln"), // Resistence to Crit DMG in value (ex: +100 will be 100 more crit dmg, NOT 100% more).
 	MAGIC_DAMAGE_VULN("magicDamVul"),
+	VALAKAS_VULN("valakasVuln"),
 	
 	// RESISTANCES
 	FIRE_RES("fireRes"),
@@ -149,7 +149,6 @@ public enum Stats
 	EARTH_RES("earthRes"),
 	HOLY_RES("holyRes"),
 	DARK_RES("darkRes"),
-	VALAKAS_RES("valakasRes"),
 	MAGIC_SUCCESS_RES("magicSuccRes"),
 	//BUFF_IMMUNITY("buffImmunity"), //TODO: Implement me
 	DEBUFF_IMMUNITY("debuffImmunity"),
@@ -175,6 +174,7 @@ public enum Stats
 	DERANGEMENT_PROF("derangementProf"),
 	DEBUFF_PROF("debuffProf"),
 	CRIT_PROF("critProf"),
+	VALAKAS_PROF("valakasProf"),
 	
 	// WEAPONS VULNERABILITIES
 	NONE_WPN_VULN("noneWpnVuln"), // Shields!!!