- Хроники
- Fafurion
- Исходники
- Присутствуют
- Сборка
- l2jMobius
Добрый день, подскажите что исправить в скрипте, что бы ивент запускался раз в неделю например в субботу в 14:00
Код:
package custom.events.Elpies;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Calendar;
import java.util.concurrent.TimeUnit ;
import org.l2jmobius.Config;
import org.l2jmobius.gameserver.enums.CategoryType;
import org.l2jmobius.gameserver.enums.PartyDistributionType;
import org.l2jmobius.gameserver.enums.SkillFinishType;
import org.l2jmobius.gameserver.enums.Team;
import org.l2jmobius.gameserver.instancemanager.AntiFeedManager;
import org.l2jmobius.gameserver.instancemanager.InstanceManager;
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
import org.l2jmobius.gameserver.model.CommandChannel;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.Party;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.Summon;
import org.l2jmobius.gameserver.model.events.EventType;
import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
import org.l2jmobius.gameserver.model.events.impl.creature.OnCreatureDeath;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout;
import org.l2jmobius.gameserver.model.events.listeners.AbstractEventListener;
import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.ItemHolder;
import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.instancezone.InstanceTemplate;
import org.l2jmobius.gameserver.model.olympiad.OlympiadManager;
import org.l2jmobius.gameserver.model.quest.Event;
import org.l2jmobius.gameserver.model.quest.QuestTimer;
import org.l2jmobius.gameserver.model.skill.CommonSkill;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.network.serverpackets.ExPVPMatchCCRecord;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import org.l2jmobius.gameserver.util.Broadcast;
import org.l2jmobius.gameserver.util.Util;
import java.util.concurrent.ScheduledFuture;
import org.l2jmobius.Config;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.SpawnTable;
import org.l2jmobius.gameserver.model.Spawn;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.actor.instance.EventMonster;
import org.l2jmobius.gameserver.model.quest.Event;
import org.l2jmobius.gameserver.util.Broadcast;
public class Elpies extends Event
{
// NPC
private static final int ELPY = 900100;
// Amount of Elpies to spawn when the event starts
private static final int ELPY_AMOUNT = 100;
// Event duration in minutes
private static final int EVENT_DURATION_MINUTES = 2;
// @formatter:off
private static final int[][] DROPLIST_CONSUMABLES =
{
// itemId, chance, min amount, max amount
{ 1538, 60, 5, 5 }, // Blessed Scroll of Escape
{ 3936, 40, 5, 5 }, // Blessed Scroll of Ressurection
{ 6387, 25, 5, 5 }, // Blessed Scroll of Ressurection Pets
{ 40056, 0, 1, 1 }, // Свиток Чудесного Ветра Артеи
{ 6622, 5, 1, 1 }, // Giant's Codex
{ 80612, 1, 1, 1 }, // Роза Фреи
{ 20004, 1, 1, 1 }, // Energy Ginseng
{ 10649, 1, 1, 1 } // Благословенное Перо
};
private static final int[][] DROPLIST_CRYSTALS =
{
{ 1462, 1, 10, 20 } // Crystal S-Grade
};
// @formatter:on
// Non-final variables
private static boolean EVENT_ACTIVE = false;
private static int CURRENT_ELPY_COUNT = 0;
private ScheduledFuture<?> _eventTask = null;
private Elpies()
{
addSpawnId(ELPY);
addKillId(ELPY);
final Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 14); // начало отсчета текущего дня (часов), p.s если вкл или релогаешь сервер после этого времени то эвент стартует вместе с сервером и так же до этого времени на след день не начнется.
today.set(Calendar.MINUTE, 00); // начало отсчета текущего дня (минут)
today.set(Calendar.SECOND, 0); // начало отсчета текущего дня (сек)
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
eventStart(null);
}
};
timer.schedule(task, today.getTime(), TimeUnit.MILLISECONDS.convert(5400, TimeUnit.SECONDS)); // период в секундах.
}
@Override
public boolean eventBypass(Player player, String bypass)
{
return false;
}
@Override
public boolean eventStart(Player eventMaker)
{
if (EVENT_ACTIVE)
{
return false;
}
// Check Custom Table - we use custom NPCs
if (!Config.CUSTOM_NPC_DATA)
{
LOGGER.info(getName() + ": Event can't be started because custom NPC table is disabled!");
eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPC table is disabled!");
return false;
}
EVENT_ACTIVE = true;
final EventLocation randomLoc = getRandomEntry(EventLocation.values());
CURRENT_ELPY_COUNT = 0;
final long despawnDelay = EVENT_DURATION_MINUTES * 60000;
for (int i = 0; i < ELPY_AMOUNT; i++)
{
addSpawn(ELPY, randomLoc.getRandomX(), randomLoc.getRandomY(), randomLoc.getZ(), 0, true, despawnDelay);
CURRENT_ELPY_COUNT++;
}
Broadcast.toAllOnlinePlayers("*Скрип-Скрип*");
Broadcast.toAllOnlinePlayers("Вторжение Эльпи в " + randomLoc.getName());
Broadcast.toAllOnlinePlayers("Помогите нам уничтожить их!");
Broadcast.toAllOnlinePlayers("У вас есть " + EVENT_DURATION_MINUTES + " минуты!");
_eventTask = ThreadPool.schedule(() ->
{
Broadcast.toAllOnlinePlayers("Время вышло!");
eventStop();
}, despawnDelay);
return true;
}
@Override
public boolean eventStop()
{
if (!EVENT_ACTIVE)
{
return false;
}
EVENT_ACTIVE = false;
if (_eventTask != null)
{
_eventTask.cancel(true);
_eventTask = null;
}
for (Spawn spawn : SpawnTable.getInstance().getSpawns(ELPY))
{
final Npc npc = spawn.getLastSpawn();
if (npc != null)
{
npc.deleteMe();
}
}
Broadcast.toAllOnlinePlayers("*Писк Писк*");
Broadcast.toAllOnlinePlayers("Ивент завершен!");
return true;
}
@Override
public String onKill(Npc npc, Player killer, boolean isSummon)
{
if (EVENT_ACTIVE)
{
dropItem(npc, killer, DROPLIST_CONSUMABLES);
dropItem(npc, killer, DROPLIST_CRYSTALS);
CURRENT_ELPY_COUNT--;
if (CURRENT_ELPY_COUNT <= 0)
{
Broadcast.toAllOnlinePlayers("Все Эльпи были убиты!");
eventStop();
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onSpawn(Npc npc)
{
((EventMonster) npc).eventSetDropOnGround(true);
((EventMonster) npc).eventSetBlockOffensiveSkills(true);
return super.onSpawn(npc);
}
private enum EventLocation
{
ADEN("Аден", 146558, 148341, 26622, 28560, -2200),
DION("Дион", 18564, 19200, 144377, 145782, -3081),
GLUDIN("Глудин", -84040, -81420, 150257, 151175, -3125),
HV("Деревня Охотников", 116094, 117141, 75776, 77072, -2700),
OREN("Орен", 82048, 82940, 53240, 54126, -1490);
private final String _name;
private final int _minX;
private final int _maxX;
private final int _minY;
private final int _maxY;
private final int _z;
EventLocation(String name, int minX, int maxX, int minY, int maxY, int z)
{
_name = name;
_minX = minX;
_maxX = maxX;
_minY = minY;
_maxY = maxY;
_z = z;
}
public String getName()
{
return _name;
}
public int getRandomX()
{
return getRandom(_minX, _maxX);
}
public int getRandomY()
{
return getRandom(_minY, _maxY);
}
public int getZ()
{
return _z;
}
}
private void dropItem(Npc mob, Player player, int[][] droplist)
{
final int chance = getRandom(100);
for (int[] drop : droplist)
{
if (chance >= drop[1])
{
mob.dropItem(player, drop[0], getRandom(drop[2], drop[3]));
break;
}
}
}
public static void main(String[] args)
{
new Elpies();
}
}