Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Reduce RateXp and RateSp before Lv40

Iniciado por Swarlog, Sep 01, 2022, 12:50 AM

Tema anterior - Siguiente tema

Swarlog

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 @Zoey76