Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Reduce RateXp and RateSp before Lv40

Iniciado por Zoey76, Ago 03, 2025, 01:31 AM

Tema anterior - Siguiente tema

Zoey76

diff --git a/src/main/java/com/l2jserver/gameserver/model/actor/L2Attackable.java b/src/main/java/com/l2jserver/gameserver/model/actor/L2Attackable.java
index c6bd29d..f38276f 100644
--- a/src/main/java/com/l2jserver/gameserver/model/actor/L2Attackable.java
+++ b/src/main/java/com/l2jserver/gameserver/model/actor/L2Attackable.java
@@ -468,7 +468,7 @@
 							// mob = 24, atk = 50, diff = 26 (no xp)
 							final int levelDiff = attacker.getLevel() - getLevel();
 							
-							final int[] expSp = calculateExpAndSp(levelDiff, damage, totalDamage);
+							final int[] expSp = calculateExpAndSp(attacker.getLevel(), levelDiff, damage, totalDamage);
 							long exp = expSp[0];
 							int sp = expSp[1];
 							
@@ -574,7 +574,7 @@
 						final int levelDiff = partyLvl - getLevel();
 						
 						// Calculate Exp and SP rewards
-						final int[] expSp = calculateExpAndSp(levelDiff, partyDmg, totalDamage);
+						final int[] expSp = calculateExpAndSp(partyLvl, levelDiff, partyDmg, totalDamage);
 						long exp = expSp[0];
 						int sp = expSp[1];
 						
@@ -1306,7 +1306,7 @@
 	 * @param totalDamage The total damage done
 	 * @return
 	 */
-	private int[] calculateExpAndSp(int diff, int damage, long totalDamage)
+	private int[] calculateExpAndSp(int level, int diff, int damage, long totalDamage)
 	{
 		double xp;
 		double sp;
@@ -1316,13 +1316,13 @@
 			diff = -5; // makes possible to use ALT_GAME_EXPONENT configuration
 		}
 		
-		xp = ((double) getExpReward() * damage) / totalDamage;
+		xp = ((double) getExpReward(level) * damage) / totalDamage;
 		if (Config.ALT_GAME_EXPONENT_XP != 0)
 		{
 			xp *= Math.pow(2., -diff / Config.ALT_GAME_EXPONENT_XP);
 		}
 		
-		sp = ((double) getSpReward() * damage) / totalDamage;
+		sp = ((double) getSpReward(level) * damage) / totalDamage;
 		if (Config.ALT_GAME_EXPONENT_SP != 0)
 		{
 			sp *= Math.pow(2., -diff / Config.ALT_GAME_EXPONENT_SP);
@@ -1611,7 +1611,7 @@
 			return 0;
 		}
 		
-		final float divider = (getLevel() > 0) && (getExpReward() > 0) ? (getTemplate().getBaseHpMax() * 9 * getLevel() * getLevel()) / (100 * getExpReward()) : 0;
+		final float divider = (getLevel() > 0) && (getExpReward(0) > 0) ? (getTemplate().getBaseHpMax() * 9 * getLevel() * getLevel()) / (100 * getExpReward(0)) : 0;
 		if (divider == 0)
 		{
 			return 0;
diff --git a/src/main/java/com/l2jserver/gameserver/model/actor/L2Npc.java b/src/main/java/com/l2jserver/gameserver/model/actor/L2Npc.java
index 8c49792..4760fe9 100644
--- a/src/main/java/com/l2jserver/gameserver/model/actor/L2Npc.java
+++ b/src/main/java/com/l2jserver/gameserver/model/actor/L2Npc.java
@@ -1168,17 +1168,17 @@
 	/**
 	 * @return the Exp Reward of this L2Npc (modified by RATE_XP).
 	 */
-	public long getExpReward()
+	public long getExpReward(int level)
 	{
-		return (long) (getLevel() * getLevel() * getTemplate().getExpRate() * Config.RATE_XP);
+		return (long) (getLevel() * getLevel() * getTemplate().getExpRate() * (Config.RATE_XP / ((level < 40) ? 2 : 1)));
 	}
 	
 	/**
 	 * @return the SP Reward of this L2Npc (modified by RATE_SP).
 	 */
-	public int getSpReward()
+	public int getSpReward(int level)
 	{
-		return (int) (getTemplate().getSP() * Config.RATE_SP);
+		return (int) (getTemplate().getSP() * (Config.RATE_SP / (level < 40 ? 2 : 1)));
 	}
 	
 	/**
@@ -1499,7 +1499,7 @@
 			{
 				deleteMe();
 			}
-		} , delay);
+		}, delay);
 		return this;
 	}
 

Example by No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.