if (id == 0)
{
final List<NpcTemplate> monsters = NpcHolder.getInstance().getAllOfLevel(player.getLevel());
if ((monsters == null) || monsters.isEmpty())
{
show(new CustomMessage("scripts.events.bountyhunters.NoTargets", player), player);
return;
}
final List<NpcTemplate> targets = new ArrayList<>();
for (NpcTemplate npc : monsters)
{
if (checkTarget(npc))
{
targets.add(npc);
}
}
if (targets.isEmpty())
{
show(new CustomMessage("scripts.events.bountyhunters.NoTargets", player), player);
return;
}
target = targets.get(Rnd.get(targets.size()));
}
else
{
target = NpcHolder.getInstance().getTemplate(id);
if ((target == null) || !checkTarget(target))
{
show(new CustomMessage("scripts.events.bountyhunters.WrongTarget", player), player);
return;
}
if ((player.getLevel() - target.level) > 5)
{
show(new CustomMessage("scripts.events.bountyhunters.TooEasy", player), player);
return;
}
mod = (0.5 * ((10 + target.level) - player.getLevel())) / 10.;
}
final int mobcount = target.level + Rnd.get(25, 50);
player.setVar("bhMonstersId", String.valueOf(target.getNpcId()), -1);
player.setVar("bhMonstersNeeded", String.valueOf(mobcount), -1);
player.setVar("bhMonstersKilled", "0", -1);
final int fails = (player.getVar("bhfails") == null) ? 0 : Integer.parseInt(player.getVar("bhfails")) * 5;
final int success = (player.getVar("bhsuccess") == null) ? 0 : Integer.parseInt(player.getVar("bhsuccess")) * 5;
final double reputation = Math.min(Math.max(((100 + success) - fails) / 100., .25), 2.) * mod;
final long adenarewardvalue = Math.round(((target.level * Math.max(Math.log(target.level), 1) * 10) + Math.max((target.level - 60) * 33, 0) + Math.max((target.level - 65) * 50, 0)) * target.rateHp * mobcount * (Config.RATE_DROP_ADENA + player.getVitalityBonus()) * player.getRateAdena() * reputation * .15);
if (Rnd.chance(30))
{
player.setVar("bhRewardId", "57", -1);
player.setVar("bhRewardCount", String.valueOf(adenarewardvalue), -1);
}
else
{
int crystal = 0;
if (target.level <= 39)
{
crystal = 1458;
}
else if (target.level <= 51)
{
crystal = 1459;
}
else if (target.level <= 60)
{
crystal = 1460;
}
else if (target.level <= 75)
{
crystal = 1461;
}
else
{
crystal = 1462;
}
player.setVar("bhRewardId", String.valueOf(crystal), -1);
player.setVar("bhRewardCount", String.valueOf(adenarewardvalue / ItemHolder.getInstance().getTemplate(crystal).getReferencePrice()), -1);
}
show(new CustomMessage("scripts.events.bountyhunters.TaskGiven", player).addNumber(mobcount).addString(target.name), player);
}