Не сработало...о, импорты :0
Как я помню - мобиус вроде поудалял "красивые" приколы с евентов...
Можно конечно попробовать...
game/data/ - тут создаем папочку /events/ и вставляем в папочку файлик ниже...
ну тогда не судьбаНе сработало...
подскажите как, что где прописать ?Ну можно таймер сделать на старт эвента)
private TvT()
{
addTalkId(MANAGER);
addFirstTalkId(MANAGER);
addExitZoneId(BLUE_PEACE_ZONE.getId(), RED_PEACE_ZONE.getId());
addEnterZoneId(BLUE_PEACE_ZONE.getId(), RED_PEACE_ZONE.getId());
final Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 20); // начало отсчета текущего дня (часов), 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(86400, TimeUnit.SECONDS)); // период в секундах.
}
package events.base;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import events.base.data.EventHolder;
import events.base.instances.PvPEventInstance;
import events.base.instances.PvPEventInstance.EventStatus;
import l2p.commons.threading.RunnableImpl;
import l2p.commons.time.cron.SchedulingPattern;
import l2p.commons.util.Rnd;
import l2p.gameserver.ThreadPoolManager;
import l2p.gameserver.model.entity.events.EventType;
import l2p.gameserver.model.entity.olympiad.Olympiad;
import l2p.gameserver.scripts.ScriptFile;
import l2p.gameserver.utils.Util;
/**
* @author Gaikotsu
*/
public class PvPEventManager implements ScriptFile
{
private static final Logger _log = LoggerFactory.getLogger(PvPEventManager.class);
// Список классов всех PvP-эвентов с их текущим статусом для проверок на то, не запущен ли в данный момент какой-то из них
private static Map<String, EventStatus> _status = new HashMap<>();
private static ScheduledFuture<?> _startEventTask = null;
@Override
public void onLoad()
{
scheduleNextStart();
}
@Override
public void onShutdown()
{
stopTask();
}
/*
* Проверяет возможность запуска эвента в данный момент времени
*/
public static boolean checkStartConditions()
{
if (_status.values().stream().anyMatch(s -> s != EventStatus.IDLE))
{
_log.info("PvPEventManager: Event not started, reason - other event is in progress.");
return false;
}
if (EventHolder.getInstance().getParam("checkOlympiad", false) && Olympiad.inCompPeriod())
{
_log.info("PvPEventManager: Event not started, reason - olympiad is in progress.");
return false;
}
return true;
}
public static void setStatus(String name, EventStatus status)
{
_status.put(name, status);
}
private static void stopTask()
{
if (_startEventTask != null)
{
_startEventTask.cancel(false);
_startEventTask = null;
}
}
/*
* Возвращает время следующего запуска эвента
*/
private static long getNextStartTime()
{
if (EventHolder.getInstance().getTimes().isEmpty())
return 0;
long time = Long.MAX_VALUE;
for (String pattern : EventHolder.getInstance().getTimes())
time = Math.min(time, new SchedulingPattern(pattern).next(System.currentTimeMillis()));
if (time == Long.MAX_VALUE)
{
_log.warn("WTF? Next start time equals max long value.");
return 0;
}
return time;
}
private static void scheduleNextStart()
{
long nextTime = getNextStartTime();
if (nextTime > 0)
{
stopTask();
_startEventTask = ThreadPoolManager.getInstance().schedule(new StartEventTask(), nextTime - System.currentTimeMillis());
_log.info("PvPEventManager: Next event started on " + Util.formatDate(nextTime));
}
}
private static class StartEventTask extends RunnableImpl
{
@Override
public void runImpl()
{
ThreadPoolManager.getInstance().schedule(() -> {
scheduleNextStart();
}, 90000L);
if (!Rnd.chance(EventHolder.getInstance().getParam("startChance", 0)))
{
_log.info("PvPEventManager: Event not started, reason - starting chance failed.");
return;
}
List<PvPEventInstance> activeEvents = new ArrayList<>();
EventHolder.getInstance().getEvents(EventType.PVP_EVENT).stream().filter(e -> e.getEvent().isActive()).forEach(e -> activeEvents.add((PvPEventInstance) e.getEvent()));
if (activeEvents.isEmpty())
{
_log.info("PvPEventManager: Event not started, reason - no enabled events.");
return;
}
if (!checkStartConditions())
return;
PvPEventInstance event = activeEvents.get(Rnd.get(activeEvents.size()));
if (event.getConfig().isUseRounds())
event.startRound(null, 1, 2, true);
else
event.startRound(null, 0, 0, true);
_log.info("PvPEventManager: Event '" + event.getName(true) + "' started.");
}
}
}
<start>
<time pattern="0 */2 * * *" />
</start>
Подскажите пожалуйста, как настроить ивент, что бы он запускался сам без нажатия кнопки в админ панели.
Что нужно исправить в файле java.
Вы не можете просматривать ссылку пожалуйста воспользуйтесь следующими ссылками Вход или Регистрацияможет поможет
о, импорты :0
Как я помню - мобиус вроде поудалял "красивые" приколы с евентов...
Можно конечно попробовать...
game/data/ - тут создаем папочку /events/ и вставляем в папочку файлик ниже...
А с моим вариантом что не получилось?Не получилось по вариантам которые предложили Вы, этот ивент лежит по пути: game\data\scripts\custom\events , может я что не так делаю. Может их перенести в по пути game\data\events что бы запускалось все автоматически не пойму просто логику
Добавил и ошибки пошли множество -А с моим вариантом что не получилось?
Импорт не прописал. Установи eclipse, импортируй туда проект, и найди этот файл он подскажит какие импорты сделать. Там calendar, timer и timertaskДобавил и ошибки пошли множество -
ERROR: \game\data\scripts\custom\events\TeamVsTeam\TvT.java, Line 125, Column 9
code: compiler.err.cant.resolve.location
message: cannot find symbol
symbol: class TimerTask
location: class custom.events.TeamVsTeam.TvT
спасибо, это в ява файлик добавил в твт, сейчас с ошибками кода разбираюсьImport java.util.Timer;
Import java.util.TimerTask;
Import java.util.Calendar;
Куда воткуть разберешься?
И коментарии в том коде прочитай и меняй под свои.
ERROR: C:\game\data\scripts\custom\events\TeamVsTeam\TvT.java, Line 128, Column 17
code: compiler.err.cant.resolve.location
message: cannot find symbol
symbol: variable ThreadPool
location: class custom.events.TeamVsTeam.TvT
at org.l2jmobius.gameserver.scripting.java.JavaExecutionContext.executeScripts(JavaExecutionContext.java:171)
at org.l2jmobius.gameserver.scripting.ScriptEngineManager.executeScriptList(ScriptEngineManager.java:181)
at org.l2jmobius.gameserver.GameServer.<init>(GameServer.java:379)
at org.l2jmobius.gameserver.GameServer.main(GameServer.java:500)
private TvT()
{
addTalkId(MANAGER);
addFirstTalkId(MANAGER);
addExitZoneId(BLUE_PEACE_ZONE.getId(), RED_PEACE_ZONE.getId());
addEnterZoneId(BLUE_PEACE_ZONE.getId(), RED_PEACE_ZONE.getId());
// Daily task to start event at 20:00.
final Calendar calendar = Calendar.getInstance();
if ((calendar.get(Calendar.HOUR_OF_DAY) >= 20) && (calendar.get(Calendar.MINUTE) >= 0))
{
calendar.add(Calendar.DAY_OF_YEAR, 1);
}
calendar.set(Calendar.HOUR_OF_DAY, 20);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
ThreadPool.scheduleAtFixedRate(() -> eventStart(null), calendar.getTimeInMillis() - System.currentTimeMillis(), 86400000); // 86400000 = 1 day
}
А мой кусок кода ты куда поставил?) замени на мой.импорт прописал , выходит единственная ошибка
строка на которую ругается , не пойму что здесь не так
ThreadPool.scheduleAtFixedRate(() -> eventStart(null), calendar.getTimeInMillis() - System.currentTimeMillis(), 86400000); // 86400000 = 1 day
ERROR: C:\game\data\scripts\custom\events\TeamVsTeam\TvT.java, Line 128, Column 17
code: compiler.err.cant.resolve.location
message: cannot find symbol
symbol: variable ThreadPool
location: class custom.events.TeamVsTeam.TvT
at org.l2jmobius.gameserver.scripting.java.JavaExecutionContext.executeScripts(JavaExecutionContext.java:171)
at org.l2jmobius.gameserver.scripting.ScriptEngineManager.executeScriptList(ScriptEngineManager.java:181)
at org.l2jmobius.gameserver.GameServer.<init>(GameServer.java:379)
at org.l2jmobius.gameserver.GameServer.main(GameServer.java:500)
вот так выглядит в яве фале этот кусок
private TvT()
{
addTalkId(MANAGER);
addFirstTalkId(MANAGER);
addExitZoneId(BLUE_PEACE_ZONE.getId(), RED_PEACE_ZONE.getId());
addEnterZoneId(BLUE_PEACE_ZONE.getId(), RED_PEACE_ZONE.getId());
// Daily task to start event at 20:00.
final Calendar calendar = Calendar.getInstance();
if ((calendar.get(Calendar.HOUR_OF_DAY) >= 20) && (calendar.get(Calendar.MINUTE) >= 0))
{
calendar.add(Calendar.DAY_OF_YEAR, 1);
}
calendar.set(Calendar.HOUR_OF_DAY, 20);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
ThreadPool.scheduleAtFixedRate(() -> eventStart(null), calendar.getTimeInMillis() - System.currentTimeMillis(), 86400000); // 86400000 = 1 day
}
С твоим кодом 2 ошибки выдаетА мой кусок кода ты куда поставил?) замени на мой.
private TvT()
{
addTalkId(MANAGER);
addFirstTalkId(MANAGER);
addExitZoneId(BLUE_PEACE_ZONE.getId(), RED_PEACE_ZONE.getId());
addEnterZoneId(BLUE_PEACE_ZONE.getId(), RED_PEACE_ZONE.getId());
final Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 20); // начало отсчета текущего дня (часов), 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(86400, TimeUnit.SECONDS)); // период в секундах.
}
import java.util.TimeUnit;
ERROR: C:\game\data\scripts\custom\events\TeamVsTeam\TvT.java, Line 14, Column 17
code: compiler.err.cant.resolve.location
message: cannot find symbol
symbol: class TimeUnit
location: package java.util
ERROR: C:\Mobius_Helios_Test\game\data\scripts\custom\events\TeamVsTeam\TvT.java, Line 141, Column 84
code: compiler.err.cant.resolve.location
message: cannot find symbol
symbol: variable TimeUnit
location: class custom.events.TeamVsTeam.TvT
ERROR: C:\game\data\scripts\custom\events\TeamVsTeam\TvT.java, Line 141, Column 55
code: compiler.err.doesnt.exist
message: package TimeUnit does not exist
at org.l2jmobius.gameserver.scripting.java.JavaExecutionContext.executeScripts(JavaExecutionContext.java:171)
at org.l2jmobius.gameserver.scripting.ScriptEngineManager.executeScriptList(ScriptEngineManager.java:181)
at org.l2jmobius.gameserver.GameServer.<init>(GameServer.java:379)
at org.l2jmobius.gameserver.GameServer.main(GameServer.java:500)
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?