Code:
package services;
import l2.gameserver.listener.actor.OnKillListener;
import l2.gameserver.listener.actor.player.OnPlayerEnterListener;
import l2.gameserver.model.Creature;
import l2.gameserver.model.Player;
import l2.gameserver.model.Skill;
import l2.gameserver.model.actor.listener.PlayerListenerList;
import l2.gameserver.network.l2.s2c.SkillList;
import l2.gameserver.scripts.Functions;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.tables.SkillTable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class PVPBonus extends Functions implements ScriptFile, OnKillListener, OnPlayerEnterListener
{
private static final String MESSAGE_ON_REWARD = "PVP бонус: %RANK%";
private static final List<Rank> ranks = new ArrayList<Rank>();
@Override
public void onLoad()
{
// ранги добавлять по воз врастающей мин. кол-ва пвп
// шаблон: Имя ранга, мин.пвп, скилл, уровень скилла
ranks.add(new Rank("1%", 100, 5650, 1));
ranks.add(new Rank("2%", 200, 5650, 2));
ranks.add(new Rank("3%", 300, 5650, 3));
ranks.add(new Rank("4%", 400, 5650, 4));
ranks.add(new Rank("5%", 500, 5650, 5));
Collections.reverse(ranks);
PlayerListenerList.addGlobal(this);
}
@Override
public void onKill(Creature actor, Creature victim)
{
if(actor.isPlayer() && victim.isPlayer())
{
Player player = actor.getPlayer();
Rank rank = getRank(player.getPvpKills());
if(rank == null)
{
return;
}
if(player.getSkillLevel(rank.skill.getId()) == rank.skill.getLevel())
{
return;
}
player.addSkill(rank.skill, false);
player.sendPacket(new SkillList(player));
player.broadcastUserInfo(false);
player.sendMessage(MESSAGE_ON_REWARD.replaceFirst("%RANK%", rank.name));
}
}
@Override
public boolean ignorePetOrSummon()
{
return false;
}
/**
* Возвращает ранг, исходя из кол-ва pvp.
*
* @param pvp - кол-во пвп
* @return Rank - ранг
*/
public Rank getRank(int pvp)
{
for(Rank rank : ranks)
{
if(pvp >= rank.minPvp)
{
return rank;
}
}
return null;
}
@Override
public void onReload()
{
PlayerListenerList.removeGlobal(this);
}
@Override
public void onShutdown()
{
PlayerListenerList.removeGlobal(this);
}
@Override
public void onPlayerEnter(Player player)
{
Rank rank = getRank(player.getPvpKills());
if(rank == null)
{
return;
}
if(player.getSkillLevel(rank.skill.getId()) == rank.skill.getLevel())
{
return;
}
player.addSkill(rank.skill, false);
player.sendPacket(new SkillList(player));
player.broadcastUserInfo(false);
}
public static class Rank
{
String name;
int minPvp;
Skill skill;
public Rank(String name, int minPvp, int skillID, int skillLvl)
{
this.name = name;
this.minPvp = minPvp;
this.skill = SkillTable.getInstance().getInfo(skillID, skillLvl);
}
}
}
Код не мой, попросили адаптировать. Как будет время сделаю нормальный код. Это можно использовать, но чистый хардкод и бред.