mego4el, я тут порылся в сборке овера (авторы надеюсь не против) ибо ничего другого у меня нет. Сначала вбил в поиск Party. Нашлось Party.java.
Внутри сделал поиск по exp. Вот что нашлось:
Код:
public void distributeXpAndSp(double xpReward, double spReward, List<Player> rewardedMembers, Creature lastAttacker, MonsterInstance monster)
{
recalculatePartyData();
List<Player> mtr = new ArrayList<Player>();
int partyLevel = lastAttacker.getLevel();
int partyLvlSum = 0;
// считаем минимальный/максимальный уровень
for(Player member : rewardedMembers)
{
if(!monster.isInRangeZ(member, Config.ALT_PARTY_DISTRIBUTION_RANGE))
continue;
partyLevel = Math.max(partyLevel, member.getLevel());
}
// составляем список игроков, удовлетворяющих требованиям
for(Player member : rewardedMembers)
{
if(!monster.isInRangeZ(member, Config.ALT_PARTY_DISTRIBUTION_RANGE))
continue;
if(member.getLevel() <= partyLevel - 15)
continue;
partyLvlSum += member.getLevel();
mtr.add(member);
}
if(mtr.isEmpty())
return;
// бонус за пати
double bonus = Config.ALT_PARTY_BONUS[mtr.size() - 1];
// количество эксп и сп для раздачи на всех
double XP = xpReward * bonus;
double SP = spReward * bonus;
for(Player member : mtr)
{
double lvlPenalty = Experience.penaltyModifier(monster.calculateLevelDiffForDrop(member.getLevel()), 9);
int lvlDiff = partyLevel - member.getLevel();
if(lvlDiff >= 10 && lvlDiff <= 14)
lvlPenalty *= 0.3D;
// отдаем его часть с учетом пенальти
double memberXp = XP * lvlPenalty * member.getLevel() / partyLvlSum;
double memberSp = SP * lvlPenalty * member.getLevel() / partyLvlSum;
// больше чем соло не дадут
memberXp = Math.min(memberXp, xpReward);
memberSp = Math.min(memberSp, spReward);
member.addExpAndCheckBonus(monster, (long) memberXp, (long) memberSp, memberXp / xpReward);
}
recalculatePartyData();
}
Добавлено через 48 секунд
Правда
Age: 15. Но дерзай, я думаю сможешь найти.