Набор эвентов, которые я когда-то писал или адаптировал к нашей старой сборке HF, на основе Phoenix'а.
Особой ценности в наше время уже не имеет, да и написано было это все довольно страшненько, но может кто чего и почерпнет из имеющегося.
Список эвентов в архиве:
- April Fool's Day
- Celebration of Weavers
- Change of Heart
- Christmas
- Coffer of Shadows
- Fall Harvest
- Great Mouse Hunt
- Halloween
- L2 Day
- L2 Medal Collection
- Lovers' Jubilee
- Master of Enchanting...
package events.PlayingWithFire;
import events.EventFunctions;
import events.EventInstance;
import l2p.gameserver.model.L2Character;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.instances.L2NpcInstance;
public class PlayingWithFire extends EventInstance
{
private static final int StarShard = 6403;
private static final int Gunpowder = 6404;
private static final int Magnesium = 6405;
private static final int Firework = 6406;
private static final int LargeFirework = 6407;
private static PlayingWithFire _instance;
public static PlayingWithFire getInstance()
{
if (_instance == null)
_instance = new PlayingWithFire();
return _instance;
}
public void setConfig()
{
// Название эвента (первая строка - название для вывода в разных сообщениях, вторая строка - название для сохранения в базу )
eventName = new String[] { "Playing With Fire", "PlayingWithFire" };
// Предметы, падающие из мобов (ид предмета, шанс [10000 = 1%])
eventDrop = new int[][] {
{ StarShard, 30000 },
{ Gunpowder, 30000 },
{ Magnesium, 5000 } };
// Эвент менеджер
eventManager = new int[] { 31774 }; // Beryl the Cat
}
public void startEvent()
{
getInstance().startEvent((L2Player) getSelf());
}
public void stopEvent()
{
getInstance().stopEvent((L2Player) getSelf());
}
public void changeState(Boolean state)
{
getInstance().changeState(state, true);
}
public void onLoad()
{
getInstance().setConfig();
getInstance().loadEvent();
}
public void onReload()
{
getInstance().reloadEvent();
}
public void onShutdown()
{
getInstance().shutdownEvent();
}
public void OnPlayerEnter(L2Player player)
{
getInstance().onPlayerEnter(player);
}
public void OnDie(L2Character mob, L2Character killer)
{
getInstance().onDie(mob, killer);
}
public void makeFirework(String[] param)
{
L2Player player = (L2Player) getSelf();
L2NpcInstance npc = getNpc();
if (player == null || npc == null || EventFunctions.checkInventory(player, 2))
return;
try
{
int type = Integer.valueOf(param[0]);
if (type == 0)
{
if (getItemCount(player, StarShard) < 2 || getItemCount(player, Gunpowder) < 2)
{
npc.showChatWindow(player, 3);
return;
}
removeItem(player, StarShard, 2);
removeItem(player, Gunpowder, 2);
addItem(player, Firework, 1);
}
else if (type == 1)
{
if (getItemCount(player, StarShard) < 4 || getItemCount(player, Gunpowder) < 4 || getItemCount(player, Magnesium) < 1)
{
npc.showChatWindow(player, 3);
return;
}
removeItem(player, StarShard, 4);
removeItem(player, Gunpowder, 4);
removeItem(player, Magnesium, 1);
addItem(player, LargeFirework, 1);
}
npc.showChatWindow(player, 2);
}
catch (Exception e)
{}
}
}
package events.PlayingWithFire;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.instances.NpcInstance;
import l2p.gameserver.utils.ItemUtils;
import l2p.gameserver.utils.Util;
import events.base.instances.FunEventInstance;
public class PlayingWithFire extends FunEventInstance
{
private static final int StarShard = 6403;
private static final int Gunpowder = 6404;
private static final int Magnesium = 6405;
private static final int Firework = 6406;
private static final int LargeFirework = 6407;
public PlayingWithFire()
{
super("Playing With Fire", "Игра с огнем", "event_playing_with_fire");
setDropType(DropType.ALL);
addItem(StarShard, 8.0);
addItem(Gunpowder, 8.0);
addItem(Magnesium, 2.0);
addCommand("makeFirework");
}
public static PlayingWithFire getInstance()
{
return SingletonHolder._instance;
}
@Override
public void onLoad()
{
getInstance().onLoad(true);
}
@Override
public void onBypassFeedback(NpcInstance npc, Player player, String command, String[] params)
{
if (!ItemUtils.checkInventory(player, 1))
return;
int type = Util.parseValue(params[1], -1);
if (type == 0)
{
if (ItemUtils.getItemCount(player, StarShard) < 2 || ItemUtils.getItemCount(player, Gunpowder) < 2)
{
npc.showChatWindow(player, 3);
return;
}
ItemUtils.removeItem(player, StarShard, 2, true);
ItemUtils.removeItem(player, Gunpowder, 2, true);
ItemUtils.addItem(player, Firework, 1, true);
}
else if (type == 1)
{
if (ItemUtils.getItemCount(player, StarShard) < 4 || ItemUtils.getItemCount(player, Gunpowder) < 4 || ItemUtils.getItemCount(player, Magnesium) < 1)
{
npc.showChatWindow(player, 3);
return;
}
ItemUtils.removeItem(player, StarShard, 4, true);
ItemUtils.removeItem(player, Gunpowder, 4, true);
ItemUtils.removeItem(player, Magnesium, 1, true);
ItemUtils.addItem(player, LargeFirework, 1, true);
}
else
return;
npc.showChatWindow(player, 2);
}
private static class SingletonHolder
{
private static final PlayingWithFire _instance = new PlayingWithFire();
}
}
покажи всю админку)Ну, и что бывает когда "немножко" увлечься с реализацией эвентов для сервера
а что в дроп настройках?Да в остальном она типичная оверовская.
Это управление эвентами у меня переписано и генерится диалог на лету, так сказать.
Эвенты при загрузке серва регистрируются в отдельном холдере, ну и в админке идет взаимодействие с этим холдером - составление списка эвентов, показ их текущего статуса, управление и все такое.
классно очень удобно)это переключатель режима работы эвента - автоматически показывается у эвентов с имеющимся эвентовым дропом.
у меня ща в бд статус эвента хранится не как on/off, а как числовое значение.
0 или записи нет - эвент отключен.
1 - эвент работает, есть эвентовые нпс, есть дроп эвентовых предметов.
2 - эвент работает, есть эвентовые нпс, нет дропа эвентовых предметов.
ну и кнопка переключает между значениями 1 и 2.
вобщем чтобы проводить эвенты как на оффе - скажем эвент длится 2 недели, предметы падают только первую неделю, а во вторую эвентовый нпс просто дообменивает эти предметы.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?