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.