Przeglądaj źródła

Fix for Cubics ignored lvl depend by Didldak

nBd 16 lat temu
rodzic
commit
669b164cd0

+ 45 - 5
L2_GameServer/java/net/sf/l2j/gameserver/skills/Formulas.java

@@ -2245,15 +2245,57 @@ public final class Formulas
 
 		// TODO: Temporary fix for NPC skills with MagicLevel not set
 		// int lvlmodifier = (skill.getMagicLevel() - target.getLevel()) * lvlDepend;
-		int lvlmodifier = ((skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getOwner().getLevel()) - target.getLevel())
-		* lvlDepend;
+		//int lvlmodifier = ((skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getOwner().getLevel()) - target.getLevel())
+		//* lvlDepend;
 		double statmodifier = calcSkillStatModifier(type, target);
 		double resmodifier = calcSkillVulnerability(target, skill);
 		
-		int rate = (int) ((value * statmodifier + lvlmodifier) * resmodifier);
+		int rate = (int) ((value * statmodifier) * resmodifier);
 		if (skill.isMagic())
 			rate += (int) (Math.pow((double) attacker.getMAtk() / (target.getMDef(attacker.getOwner(), skill) + (shld == 1 ? target.getShldDef() : 0)), 0.2) * 100) - 100;
 		
+		//lvl modifier.
+		if (lvlDepend > 0)
+		{
+			double delta = 0;
+			int attackerLvlmod = attacker.getOwner().getLevel();
+			int targetLvlmod = target.getLevel();
+			
+			if (attackerLvlmod >= 70)
+				attackerLvlmod = ((attackerLvlmod - 69) * 2) + 70;
+			if (targetLvlmod >= 70)
+				targetLvlmod = ((targetLvlmod - 69) * 2) + 70;
+			
+			if (skill.getMagicLevel() == 0)
+				delta = attackerLvlmod - targetLvlmod;
+			else
+				delta = ((skill.getMagicLevel() + attackerLvlmod) / 2) - targetLvlmod;
+			
+			//double delta = ((skill.getMagicLevel() > 0 ? skill.getMagicLevel() : 0)+attacker.getLevel() )/2 - target.getLevel();
+			double deltamod = 1;
+			
+			if (delta + 3 < 0)
+			{
+				if (delta <= -20)
+					deltamod = 0.05;
+				else
+				{
+					deltamod = 1 - ((-1) * (delta / 20));
+					if (deltamod >= 1)
+						deltamod = 0.05;
+				}
+			}
+			else
+				deltamod = 1 + ((delta + 3) / 75); //(double) attacker.getLevel()/target.getLevel();
+				
+			if (deltamod < 0)
+				deltamod *= -1;
+			
+			rate *= deltamod;
+		}
+		        
+		      
+		
 		if (rate > 99) 
 			rate = 99;
 		else 
@@ -2267,8 +2309,6 @@ public final class Formulas
 				+ ", "
 				+ statmodifier
 				+ ", "
-				+ lvlmodifier
-				+ ", "
 				+ resmodifier
 				+ ", "
 				+ ((int) (Math.pow((double) attacker.getMAtk()