Proper party experience distribution.
This commit is contained in:
@ -944,72 +944,72 @@ public class L2Party extends AbstractPlayerGroup
|
||||
private List<L2PcInstance> getValidMembers(List<L2PcInstance> members, int topLvl)
|
||||
{
|
||||
final List<L2PcInstance> validMembers = new ArrayList<>();
|
||||
|
||||
// Fixed LevelDiff cutoff point
|
||||
if (Config.PARTY_XP_CUTOFF_METHOD.equalsIgnoreCase("level"))
|
||||
switch (Config.PARTY_XP_CUTOFF_METHOD)
|
||||
{
|
||||
for (L2PcInstance member : members)
|
||||
case "level":
|
||||
{
|
||||
if ((topLvl - member.getLevel()) <= Config.PARTY_XP_CUTOFF_LEVEL)
|
||||
for (L2PcInstance member : members)
|
||||
{
|
||||
validMembers.add(member);
|
||||
if ((topLvl - member.getLevel()) <= Config.PARTY_XP_CUTOFF_LEVEL)
|
||||
{
|
||||
validMembers.add(member);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Fixed MinPercentage cutoff point
|
||||
else if (Config.PARTY_XP_CUTOFF_METHOD.equalsIgnoreCase("percentage"))
|
||||
{
|
||||
int sqLevelSum = 0;
|
||||
for (L2PcInstance member : members)
|
||||
case "percentage":
|
||||
{
|
||||
sqLevelSum += (member.getLevel() * member.getLevel());
|
||||
}
|
||||
|
||||
for (L2PcInstance member : members)
|
||||
{
|
||||
final int sqLevel = member.getLevel() * member.getLevel();
|
||||
if ((sqLevel * 100) >= (sqLevelSum * Config.PARTY_XP_CUTOFF_PERCENT))
|
||||
int sqLevelSum = 0;
|
||||
for (L2PcInstance member : members)
|
||||
{
|
||||
validMembers.add(member);
|
||||
sqLevelSum += (member.getLevel() * member.getLevel());
|
||||
}
|
||||
}
|
||||
}
|
||||
// Automatic cutoff method
|
||||
else if (Config.PARTY_XP_CUTOFF_METHOD.equalsIgnoreCase("auto"))
|
||||
{
|
||||
int sqLevelSum = 0;
|
||||
for (L2PcInstance member : members)
|
||||
{
|
||||
sqLevelSum += (member.getLevel() * member.getLevel());
|
||||
}
|
||||
|
||||
int i = members.size() - 1;
|
||||
if (i < 1)
|
||||
{
|
||||
return members;
|
||||
}
|
||||
if (i >= BONUS_EXP_SP.length)
|
||||
{
|
||||
i = BONUS_EXP_SP.length - 1;
|
||||
}
|
||||
|
||||
for (L2PcInstance member : members)
|
||||
{
|
||||
final int sqLevel = member.getLevel() * member.getLevel();
|
||||
if (sqLevel >= (sqLevelSum / (members.size() * members.size())))
|
||||
for (L2PcInstance member : members)
|
||||
{
|
||||
validMembers.add(member);
|
||||
final int sqLevel = member.getLevel() * member.getLevel();
|
||||
if ((sqLevel * 100) >= (sqLevelSum * Config.PARTY_XP_CUTOFF_PERCENT))
|
||||
{
|
||||
validMembers.add(member);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "auto":
|
||||
{
|
||||
int sqLevelSum = 0;
|
||||
for (L2PcInstance member : members)
|
||||
{
|
||||
sqLevelSum += (member.getLevel() * member.getLevel());
|
||||
}
|
||||
int i = members.size() - 1;
|
||||
if (i < 1)
|
||||
{
|
||||
return members;
|
||||
}
|
||||
if (i >= BONUS_EXP_SP.length)
|
||||
{
|
||||
i = BONUS_EXP_SP.length - 1;
|
||||
}
|
||||
for (L2PcInstance member : members)
|
||||
{
|
||||
final int sqLevel = member.getLevel() * member.getLevel();
|
||||
if (sqLevel >= (sqLevelSum / (members.size() * members.size())))
|
||||
{
|
||||
validMembers.add(member);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "highfive":
|
||||
{
|
||||
validMembers.addAll(members);
|
||||
break;
|
||||
}
|
||||
case "none":
|
||||
{
|
||||
validMembers.addAll(members);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// High Five cutoff method
|
||||
else if (Config.PARTY_XP_CUTOFF_METHOD.equalsIgnoreCase("highfive"))
|
||||
{
|
||||
validMembers.addAll(members);
|
||||
}
|
||||
else if (Config.PARTY_XP_CUTOFF_METHOD.equalsIgnoreCase("none"))
|
||||
{
|
||||
validMembers.addAll(members);
|
||||
}
|
||||
return validMembers;
|
||||
}
|
||||
|
@ -586,11 +586,8 @@ public class L2Attackable extends L2Npc
|
||||
partyMul = ((float) partyDmg / totalDamage);
|
||||
}
|
||||
|
||||
// Calculate the level difference between Party and L2Attackable
|
||||
final int levelDiff = partyLvl - getLevel();
|
||||
|
||||
// Calculate Exp and SP rewards
|
||||
final int[] expSp = calculateExpAndSp(levelDiff, partyDmg, totalDamage);
|
||||
final int[] expSp = calculateExpAndSp(partyLvl, partyDmg, totalDamage);
|
||||
long exp = expSp[0];
|
||||
int sp = expSp[1];
|
||||
|
||||
@ -1274,70 +1271,67 @@ public class L2Attackable extends L2Npc
|
||||
*/
|
||||
private int[] calculateExpAndSp(int charLevel, int damage, long totalDamage)
|
||||
{
|
||||
final int levelDiff = charLevel - getLevel();
|
||||
double xp = 0;
|
||||
double sp = 0;
|
||||
|
||||
if ((levelDiff < 11) && (levelDiff > -11))
|
||||
final int levelDiff = Math.abs(charLevel - getLevel());
|
||||
double xp = Math.max(0, ((double) getExpReward() * damage) / totalDamage);
|
||||
double sp = Math.max(0, ((double) getSpReward() * damage) / totalDamage);
|
||||
double mul;
|
||||
switch (levelDiff)
|
||||
{
|
||||
xp = Math.max(0, ((double) getExpReward() * damage) / totalDamage);
|
||||
sp = Math.max(0, ((double) getSpReward() * damage) / totalDamage);
|
||||
|
||||
if ((charLevel > 84) && (levelDiff <= -3))
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
{
|
||||
double mul;
|
||||
switch (levelDiff)
|
||||
{
|
||||
case -3:
|
||||
{
|
||||
mul = 0.97;
|
||||
break;
|
||||
}
|
||||
case -4:
|
||||
{
|
||||
mul = 0.67;
|
||||
break;
|
||||
}
|
||||
case -5:
|
||||
{
|
||||
mul = 0.42;
|
||||
break;
|
||||
}
|
||||
case -6:
|
||||
{
|
||||
mul = 0.25;
|
||||
break;
|
||||
}
|
||||
case -7:
|
||||
{
|
||||
mul = 0.15;
|
||||
break;
|
||||
}
|
||||
case -8:
|
||||
{
|
||||
mul = 0.09;
|
||||
break;
|
||||
}
|
||||
case -9:
|
||||
{
|
||||
mul = 0.05;
|
||||
break;
|
||||
}
|
||||
case -10:
|
||||
{
|
||||
mul = 0.03;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
mul = 1.;
|
||||
break;
|
||||
}
|
||||
}
|
||||
xp *= mul;
|
||||
sp *= mul;
|
||||
mul = 1.;
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
mul = 0.97;
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
mul = 0.67;
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
mul = 0.42;
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
mul = 0.25;
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
mul = 0.15;
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
{
|
||||
mul = 0.09;
|
||||
break;
|
||||
}
|
||||
case 9:
|
||||
{
|
||||
mul = 0.05;
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
{
|
||||
mul = 0.03;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
mul = 0.;
|
||||
break;
|
||||
}
|
||||
}
|
||||
xp *= mul;
|
||||
sp *= mul;
|
||||
|
||||
return new int[]
|
||||
{
|
||||
|
Reference in New Issue
Block a user