Делаем итем, который при двойном клике дает бафф. Сам пример бафа можно взять с пера.
Немного примера скрипта
package items;
import javolution.util.FastMap;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.cache.Static;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.actor.instance.L2PlayableInstance;
import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUser;
import scripts.items.ItemHandler;
import scripts.items.IItemHandler;
public class DonateScrolls implements IItemHandler
{
private final static FastMap<Integer, Integer[]> SCROLLS = new FastMap<Integer, Integer[]>().shared("DonateScrolls.SCROLLS");
private static int[] ITEM_IDS = null;
public DonateScrolls()
{
/**шаблон
**SCROLLS.put(итем_ид, new Integer[] { ид_баффа, уровень_баффа, ид_скилла_анимации, продолжительность_анимации(мс.)), кушать_скролл(1 да, 0 нет)) });
**/
SCROLLS.put(0, new Integer[] { 0, 1, 0, 1, 1 });
SCROLLS.put(0, new Integer[] { 0, 1, 0, 1, 1 });
SCROLLS.put(0, new Integer[] { 0, 1, 0, 1, 1 });
//
Integer[] tmp_ids = (Integer[]) SCROLLS.keySet().toArray(new Integer[SCROLLS.size()]);
ITEM_IDS = toIntArray(tmp_ids);
tmp_ids = null;
ItemHandler.getInstance().registerItemHandler(this);
}
public static void main (String... arguments )
{
new DonateScrolls();
}
public void useItem(L2PlayableInstance playable, L2ItemInstance item)
{
if (!playable.isPlayer())
return;
L2PcInstance player = (L2PcInstance) playable;
if (player.isAllSkillsDisabled())
{
player.sendActionFailed();
return;
}
if (player.isInOlympiadMode())
{
player.sendPacket(Static.THIS_ITEM_IS_NOT_AVAILABLE_FOR_THE_OLYMPIAD_EVENT);
player.sendActionFailed();
return;
}
Integer[] data = SCROLLS.get(item.getItemId());
if(data != null)
{
player.stopSkillEffects(data[0]);
SkillTable.getInstance().getInfo(data[0], data[1]).getEffects(player, player);
player.broadcastPacket(new MagicSkillUser(player, player, data[2], 1, data[3], 0));
if (data[4] == 1)
player.destroyItem("Consume", item.getObjectId(), 1, null, false);
}
}
private int[] toIntArray(Integer[] arr)
{
int[] ret = new int[arr.length];
int i = 0;
for (Integer e : arr)
ret[i++] = e.intValue();
return ret;
}
public int[] getItemIds()
{
return ITEM_IDS;
}
}