diff --git a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java index 58bf8fe058..e24d39ca18 100644 --- a/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java +++ b/L2J_Mobius_01.0_Ertheia/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java @@ -119,6 +119,8 @@ public class CeremonyOfChaos extends AbstractNpcAI private CeremonyOfChaos() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule event period end, 1st of next month 00:01. final Calendar periodEnd = Calendar.getInstance(); periodEnd.add(Calendar.MONTH, 1); @@ -126,18 +128,26 @@ public class CeremonyOfChaos extends AbstractNpcAI periodEnd.set(Calendar.HOUR_OF_DAY, 0); periodEnd.set(Calendar.MINUTE, 1); periodEnd.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> endMonth(), periodEnd.getTimeInMillis() - Chronos.currentTimeMillis(), 2629800000L); // 2629800000 = 1 month + if (periodEnd.getTimeInMillis() < currentTime) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + while (periodEnd.get(Calendar.DAY_OF_MONTH) != 1) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + } + } + ThreadPool.scheduleAtFixedRate(this::endMonth, periodEnd.getTimeInMillis() - currentTime, 2629800000L); // 2629800000 = 1 month // Daily task to start event at 18:00. final Calendar startTime = Calendar.getInstance(); - if ((startTime.get(Calendar.HOUR_OF_DAY) >= 18) && (startTime.get(Calendar.MINUTE) >= 0)) - { - startTime.add(Calendar.DAY_OF_YEAR, 1); - } startTime.set(Calendar.HOUR_OF_DAY, 18); startTime.set(Calendar.MINUTE, 0); startTime.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> startEvent(), startTime.getTimeInMillis() - Chronos.currentTimeMillis(), 86400000); // 86400000 = 1 day + if (startTime.getTimeInMillis() < currentTime) + { + startTime.add(Calendar.DAY_OF_YEAR, 1); + } + ThreadPool.scheduleAtFixedRate(this::startEvent, startTime.getTimeInMillis() - currentTime, 86400000); // 86400000 = 1 day } private void endMonth() @@ -207,7 +217,7 @@ public class CeremonyOfChaos extends AbstractNpcAI } } - ThreadPool.schedule(() -> registrationEnd(), 300000); // 300000 = 5 minutes + ThreadPool.schedule(this::registrationEnd, 300000); // 300000 = 5 minutes } private void registrationEnd() @@ -232,11 +242,11 @@ public class CeremonyOfChaos extends AbstractNpcAI params.set("time", 60); getTimers().addTimer("count_down", params, 60000, null, null); - ThreadPool.schedule(() -> prepareForFight(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::prepareForFight, 60000); // 60000 = 1 minute } else // Try again in 10 minutes. { - ThreadPool.schedule(() -> startEvent(), 600000); // 600000 = 10 minutes + ThreadPool.schedule(this::startEvent, 600000); // 600000 = 10 minutes } } @@ -902,7 +912,7 @@ public class CeremonyOfChaos extends AbstractNpcAI instance.destroy(); } - ThreadPool.schedule(() -> startEvent(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::startEvent, 60000); // 60000 = 1 minute } public List getWinners() diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index e8fb34987f..427571d7a9 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -53,16 +53,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java index b614e0ca9b..c59f93facc 100644 --- a/L2J_Mobius_02.5_Underground/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java +++ b/L2J_Mobius_02.5_Underground/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java @@ -119,6 +119,8 @@ public class CeremonyOfChaos extends AbstractNpcAI private CeremonyOfChaos() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule event period end, 1st of next month 00:01. final Calendar periodEnd = Calendar.getInstance(); periodEnd.add(Calendar.MONTH, 1); @@ -126,18 +128,26 @@ public class CeremonyOfChaos extends AbstractNpcAI periodEnd.set(Calendar.HOUR_OF_DAY, 0); periodEnd.set(Calendar.MINUTE, 1); periodEnd.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> endMonth(), periodEnd.getTimeInMillis() - Chronos.currentTimeMillis(), 2629800000L); // 2629800000 = 1 month + if (periodEnd.getTimeInMillis() < currentTime) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + while (periodEnd.get(Calendar.DAY_OF_MONTH) != 1) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + } + } + ThreadPool.scheduleAtFixedRate(this::endMonth, periodEnd.getTimeInMillis() - currentTime, 2629800000L); // 2629800000 = 1 month // Daily task to start event at 18:00. final Calendar startTime = Calendar.getInstance(); - if ((startTime.get(Calendar.HOUR_OF_DAY) >= 18) && (startTime.get(Calendar.MINUTE) >= 0)) - { - startTime.add(Calendar.DAY_OF_YEAR, 1); - } startTime.set(Calendar.HOUR_OF_DAY, 18); startTime.set(Calendar.MINUTE, 0); startTime.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> startEvent(), startTime.getTimeInMillis() - Chronos.currentTimeMillis(), 86400000); // 86400000 = 1 day + if (startTime.getTimeInMillis() < currentTime) + { + startTime.add(Calendar.DAY_OF_YEAR, 1); + } + ThreadPool.scheduleAtFixedRate(this::startEvent, startTime.getTimeInMillis() - currentTime, 86400000); // 86400000 = 1 day } private void endMonth() @@ -207,7 +217,7 @@ public class CeremonyOfChaos extends AbstractNpcAI } } - ThreadPool.schedule(() -> registrationEnd(), 300000); // 300000 = 5 minutes + ThreadPool.schedule(this::registrationEnd, 300000); // 300000 = 5 minutes } private void registrationEnd() @@ -232,11 +242,11 @@ public class CeremonyOfChaos extends AbstractNpcAI params.set("time", 60); getTimers().addTimer("count_down", params, 60000, null, null); - ThreadPool.schedule(() -> prepareForFight(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::prepareForFight, 60000); // 60000 = 1 minute } else // Try again in 10 minutes. { - ThreadPool.schedule(() -> startEvent(), 600000); // 600000 = 10 minutes + ThreadPool.schedule(this::startEvent, 600000); // 600000 = 10 minutes } } @@ -902,7 +912,7 @@ public class CeremonyOfChaos extends AbstractNpcAI instance.destroy(); } - ThreadPool.schedule(() -> startEvent(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::startEvent, 60000); // 60000 = 1 minute } public List getWinners() diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index d663c66692..b370b7e59b 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -55,16 +55,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java index b614e0ca9b..c59f93facc 100644 --- a/L2J_Mobius_03.0_Helios/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java +++ b/L2J_Mobius_03.0_Helios/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java @@ -119,6 +119,8 @@ public class CeremonyOfChaos extends AbstractNpcAI private CeremonyOfChaos() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule event period end, 1st of next month 00:01. final Calendar periodEnd = Calendar.getInstance(); periodEnd.add(Calendar.MONTH, 1); @@ -126,18 +128,26 @@ public class CeremonyOfChaos extends AbstractNpcAI periodEnd.set(Calendar.HOUR_OF_DAY, 0); periodEnd.set(Calendar.MINUTE, 1); periodEnd.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> endMonth(), periodEnd.getTimeInMillis() - Chronos.currentTimeMillis(), 2629800000L); // 2629800000 = 1 month + if (periodEnd.getTimeInMillis() < currentTime) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + while (periodEnd.get(Calendar.DAY_OF_MONTH) != 1) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + } + } + ThreadPool.scheduleAtFixedRate(this::endMonth, periodEnd.getTimeInMillis() - currentTime, 2629800000L); // 2629800000 = 1 month // Daily task to start event at 18:00. final Calendar startTime = Calendar.getInstance(); - if ((startTime.get(Calendar.HOUR_OF_DAY) >= 18) && (startTime.get(Calendar.MINUTE) >= 0)) - { - startTime.add(Calendar.DAY_OF_YEAR, 1); - } startTime.set(Calendar.HOUR_OF_DAY, 18); startTime.set(Calendar.MINUTE, 0); startTime.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> startEvent(), startTime.getTimeInMillis() - Chronos.currentTimeMillis(), 86400000); // 86400000 = 1 day + if (startTime.getTimeInMillis() < currentTime) + { + startTime.add(Calendar.DAY_OF_YEAR, 1); + } + ThreadPool.scheduleAtFixedRate(this::startEvent, startTime.getTimeInMillis() - currentTime, 86400000); // 86400000 = 1 day } private void endMonth() @@ -207,7 +217,7 @@ public class CeremonyOfChaos extends AbstractNpcAI } } - ThreadPool.schedule(() -> registrationEnd(), 300000); // 300000 = 5 minutes + ThreadPool.schedule(this::registrationEnd, 300000); // 300000 = 5 minutes } private void registrationEnd() @@ -232,11 +242,11 @@ public class CeremonyOfChaos extends AbstractNpcAI params.set("time", 60); getTimers().addTimer("count_down", params, 60000, null, null); - ThreadPool.schedule(() -> prepareForFight(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::prepareForFight, 60000); // 60000 = 1 minute } else // Try again in 10 minutes. { - ThreadPool.schedule(() -> startEvent(), 600000); // 600000 = 10 minutes + ThreadPool.schedule(this::startEvent, 600000); // 600000 = 10 minutes } } @@ -902,7 +912,7 @@ public class CeremonyOfChaos extends AbstractNpcAI instance.destroy(); } - ThreadPool.schedule(() -> startEvent(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::startEvent, 60000); // 60000 = 1 minute } public List getWinners() diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index d663c66692..b370b7e59b 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -55,16 +55,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java index b614e0ca9b..c59f93facc 100644 --- a/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java +++ b/L2J_Mobius_04.0_GrandCrusade/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java @@ -119,6 +119,8 @@ public class CeremonyOfChaos extends AbstractNpcAI private CeremonyOfChaos() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule event period end, 1st of next month 00:01. final Calendar periodEnd = Calendar.getInstance(); periodEnd.add(Calendar.MONTH, 1); @@ -126,18 +128,26 @@ public class CeremonyOfChaos extends AbstractNpcAI periodEnd.set(Calendar.HOUR_OF_DAY, 0); periodEnd.set(Calendar.MINUTE, 1); periodEnd.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> endMonth(), periodEnd.getTimeInMillis() - Chronos.currentTimeMillis(), 2629800000L); // 2629800000 = 1 month + if (periodEnd.getTimeInMillis() < currentTime) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + while (periodEnd.get(Calendar.DAY_OF_MONTH) != 1) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + } + } + ThreadPool.scheduleAtFixedRate(this::endMonth, periodEnd.getTimeInMillis() - currentTime, 2629800000L); // 2629800000 = 1 month // Daily task to start event at 18:00. final Calendar startTime = Calendar.getInstance(); - if ((startTime.get(Calendar.HOUR_OF_DAY) >= 18) && (startTime.get(Calendar.MINUTE) >= 0)) - { - startTime.add(Calendar.DAY_OF_YEAR, 1); - } startTime.set(Calendar.HOUR_OF_DAY, 18); startTime.set(Calendar.MINUTE, 0); startTime.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> startEvent(), startTime.getTimeInMillis() - Chronos.currentTimeMillis(), 86400000); // 86400000 = 1 day + if (startTime.getTimeInMillis() < currentTime) + { + startTime.add(Calendar.DAY_OF_YEAR, 1); + } + ThreadPool.scheduleAtFixedRate(this::startEvent, startTime.getTimeInMillis() - currentTime, 86400000); // 86400000 = 1 day } private void endMonth() @@ -207,7 +217,7 @@ public class CeremonyOfChaos extends AbstractNpcAI } } - ThreadPool.schedule(() -> registrationEnd(), 300000); // 300000 = 5 minutes + ThreadPool.schedule(this::registrationEnd, 300000); // 300000 = 5 minutes } private void registrationEnd() @@ -232,11 +242,11 @@ public class CeremonyOfChaos extends AbstractNpcAI params.set("time", 60); getTimers().addTimer("count_down", params, 60000, null, null); - ThreadPool.schedule(() -> prepareForFight(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::prepareForFight, 60000); // 60000 = 1 minute } else // Try again in 10 minutes. { - ThreadPool.schedule(() -> startEvent(), 600000); // 600000 = 10 minutes + ThreadPool.schedule(this::startEvent, 600000); // 600000 = 10 minutes } } @@ -902,7 +912,7 @@ public class CeremonyOfChaos extends AbstractNpcAI instance.destroy(); } - ThreadPool.schedule(() -> startEvent(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::startEvent, 60000); // 60000 = 1 minute } public List getWinners() diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index d663c66692..b370b7e59b 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -55,16 +55,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java index 03090ee3c9..600ab3e7ba 100644 --- a/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java +++ b/L2J_Mobius_05.0_Salvation/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java @@ -119,6 +119,8 @@ public class CeremonyOfChaos extends AbstractNpcAI private CeremonyOfChaos() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule event period end, 1st of next month 00:01. final Calendar periodEnd = Calendar.getInstance(); periodEnd.add(Calendar.MONTH, 1); @@ -126,18 +128,26 @@ public class CeremonyOfChaos extends AbstractNpcAI periodEnd.set(Calendar.HOUR_OF_DAY, 0); periodEnd.set(Calendar.MINUTE, 1); periodEnd.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> endMonth(), periodEnd.getTimeInMillis() - Chronos.currentTimeMillis(), 2629800000L); // 2629800000 = 1 month + if (periodEnd.getTimeInMillis() < currentTime) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + while (periodEnd.get(Calendar.DAY_OF_MONTH) != 1) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + } + } + ThreadPool.scheduleAtFixedRate(this::endMonth, periodEnd.getTimeInMillis() - currentTime, 2629800000L); // 2629800000 = 1 month // Daily task to start event at 18:00. final Calendar startTime = Calendar.getInstance(); - if ((startTime.get(Calendar.HOUR_OF_DAY) >= 18) && (startTime.get(Calendar.MINUTE) >= 0)) - { - startTime.add(Calendar.DAY_OF_YEAR, 1); - } startTime.set(Calendar.HOUR_OF_DAY, 18); startTime.set(Calendar.MINUTE, 0); startTime.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> startEvent(), startTime.getTimeInMillis() - Chronos.currentTimeMillis(), 86400000); // 86400000 = 1 day + if (startTime.getTimeInMillis() < currentTime) + { + startTime.add(Calendar.DAY_OF_YEAR, 1); + } + ThreadPool.scheduleAtFixedRate(this::startEvent, startTime.getTimeInMillis() - currentTime, 86400000); // 86400000 = 1 day } private void endMonth() @@ -207,7 +217,7 @@ public class CeremonyOfChaos extends AbstractNpcAI } } - ThreadPool.schedule(() -> registrationEnd(), 300000); // 300000 = 5 minutes + ThreadPool.schedule(this::registrationEnd, 300000); // 300000 = 5 minutes } private void registrationEnd() @@ -232,11 +242,11 @@ public class CeremonyOfChaos extends AbstractNpcAI params.set("time", 60); getTimers().addTimer("count_down", params, 60000, null, null); - ThreadPool.schedule(() -> prepareForFight(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::prepareForFight, 60000); // 60000 = 1 minute } else // Try again in 10 minutes. { - ThreadPool.schedule(() -> startEvent(), 600000); // 600000 = 10 minutes + ThreadPool.schedule(this::startEvent, 600000); // 600000 = 10 minutes } } @@ -902,7 +912,7 @@ public class CeremonyOfChaos extends AbstractNpcAI instance.destroy(); } - ThreadPool.schedule(() -> startEvent(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::startEvent, 60000); // 60000 = 1 minute } public List getWinners() diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index e376e0d31a..57b0affd98 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -55,16 +55,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java index fde197d933..50360cb43e 100644 --- a/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java +++ b/L2J_Mobius_05.5_EtinasFate/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java @@ -119,6 +119,8 @@ public class CeremonyOfChaos extends AbstractNpcAI private CeremonyOfChaos() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule event period end, 1st of next month 00:01. final Calendar periodEnd = Calendar.getInstance(); periodEnd.add(Calendar.MONTH, 1); @@ -126,18 +128,26 @@ public class CeremonyOfChaos extends AbstractNpcAI periodEnd.set(Calendar.HOUR_OF_DAY, 0); periodEnd.set(Calendar.MINUTE, 1); periodEnd.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> endMonth(), periodEnd.getTimeInMillis() - Chronos.currentTimeMillis(), 2629800000L); // 2629800000 = 1 month + if (periodEnd.getTimeInMillis() < currentTime) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + while (periodEnd.get(Calendar.DAY_OF_MONTH) != 1) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + } + } + ThreadPool.scheduleAtFixedRate(this::endMonth, periodEnd.getTimeInMillis() - currentTime, 2629800000L); // 2629800000 = 1 month // Daily task to start event at 18:00. final Calendar startTime = Calendar.getInstance(); - if ((startTime.get(Calendar.HOUR_OF_DAY) >= 18) && (startTime.get(Calendar.MINUTE) >= 0)) - { - startTime.add(Calendar.DAY_OF_YEAR, 1); - } startTime.set(Calendar.HOUR_OF_DAY, 18); startTime.set(Calendar.MINUTE, 0); startTime.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> startEvent(), startTime.getTimeInMillis() - Chronos.currentTimeMillis(), 86400000); // 86400000 = 1 day + if (startTime.getTimeInMillis() < currentTime) + { + startTime.add(Calendar.DAY_OF_YEAR, 1); + } + ThreadPool.scheduleAtFixedRate(this::startEvent, startTime.getTimeInMillis() - currentTime, 86400000); // 86400000 = 1 day } private void endMonth() @@ -207,7 +217,7 @@ public class CeremonyOfChaos extends AbstractNpcAI } } - ThreadPool.schedule(() -> registrationEnd(), 300000); // 300000 = 5 minutes + ThreadPool.schedule(this::registrationEnd, 300000); // 300000 = 5 minutes } private void registrationEnd() @@ -232,11 +242,11 @@ public class CeremonyOfChaos extends AbstractNpcAI params.set("time", 60); getTimers().addTimer("count_down", params, 60000, null, null); - ThreadPool.schedule(() -> prepareForFight(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::prepareForFight, 60000); // 60000 = 1 minute } else // Try again in 10 minutes. { - ThreadPool.schedule(() -> startEvent(), 600000); // 600000 = 10 minutes + ThreadPool.schedule(this::startEvent, 600000); // 600000 = 10 minutes } } @@ -902,7 +912,7 @@ public class CeremonyOfChaos extends AbstractNpcAI instance.destroy(); } - ThreadPool.schedule(() -> startEvent(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::startEvent, 60000); // 60000 = 1 minute } public List getWinners() diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index e376e0d31a..57b0affd98 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -55,16 +55,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java index fde197d933..50360cb43e 100644 --- a/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java +++ b/L2J_Mobius_06.0_Fafurion/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java @@ -119,6 +119,8 @@ public class CeremonyOfChaos extends AbstractNpcAI private CeremonyOfChaos() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule event period end, 1st of next month 00:01. final Calendar periodEnd = Calendar.getInstance(); periodEnd.add(Calendar.MONTH, 1); @@ -126,18 +128,26 @@ public class CeremonyOfChaos extends AbstractNpcAI periodEnd.set(Calendar.HOUR_OF_DAY, 0); periodEnd.set(Calendar.MINUTE, 1); periodEnd.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> endMonth(), periodEnd.getTimeInMillis() - Chronos.currentTimeMillis(), 2629800000L); // 2629800000 = 1 month + if (periodEnd.getTimeInMillis() < currentTime) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + while (periodEnd.get(Calendar.DAY_OF_MONTH) != 1) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + } + } + ThreadPool.scheduleAtFixedRate(this::endMonth, periodEnd.getTimeInMillis() - currentTime, 2629800000L); // 2629800000 = 1 month // Daily task to start event at 18:00. final Calendar startTime = Calendar.getInstance(); - if ((startTime.get(Calendar.HOUR_OF_DAY) >= 18) && (startTime.get(Calendar.MINUTE) >= 0)) - { - startTime.add(Calendar.DAY_OF_YEAR, 1); - } startTime.set(Calendar.HOUR_OF_DAY, 18); startTime.set(Calendar.MINUTE, 0); startTime.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> startEvent(), startTime.getTimeInMillis() - Chronos.currentTimeMillis(), 86400000); // 86400000 = 1 day + if (startTime.getTimeInMillis() < currentTime) + { + startTime.add(Calendar.DAY_OF_YEAR, 1); + } + ThreadPool.scheduleAtFixedRate(this::startEvent, startTime.getTimeInMillis() - currentTime, 86400000); // 86400000 = 1 day } private void endMonth() @@ -207,7 +217,7 @@ public class CeremonyOfChaos extends AbstractNpcAI } } - ThreadPool.schedule(() -> registrationEnd(), 300000); // 300000 = 5 minutes + ThreadPool.schedule(this::registrationEnd, 300000); // 300000 = 5 minutes } private void registrationEnd() @@ -232,11 +242,11 @@ public class CeremonyOfChaos extends AbstractNpcAI params.set("time", 60); getTimers().addTimer("count_down", params, 60000, null, null); - ThreadPool.schedule(() -> prepareForFight(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::prepareForFight, 60000); // 60000 = 1 minute } else // Try again in 10 minutes. { - ThreadPool.schedule(() -> startEvent(), 600000); // 600000 = 10 minutes + ThreadPool.schedule(this::startEvent, 600000); // 600000 = 10 minutes } } @@ -902,7 +912,7 @@ public class CeremonyOfChaos extends AbstractNpcAI instance.destroy(); } - ThreadPool.schedule(() -> startEvent(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::startEvent, 60000); // 60000 = 1 minute } public List getWinners() diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index e376e0d31a..57b0affd98 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -55,16 +55,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java index e3a18246b2..841237e437 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java +++ b/L2J_Mobius_07.0_PreludeOfWar/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java @@ -119,6 +119,8 @@ public class CeremonyOfChaos extends AbstractNpcAI private CeremonyOfChaos() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule event period end, 1st of next month 00:01. final Calendar periodEnd = Calendar.getInstance(); periodEnd.add(Calendar.MONTH, 1); @@ -126,18 +128,26 @@ public class CeremonyOfChaos extends AbstractNpcAI periodEnd.set(Calendar.HOUR_OF_DAY, 0); periodEnd.set(Calendar.MINUTE, 1); periodEnd.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> endMonth(), periodEnd.getTimeInMillis() - Chronos.currentTimeMillis(), 2629800000L); // 2629800000 = 1 month + if (periodEnd.getTimeInMillis() < currentTime) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + while (periodEnd.get(Calendar.DAY_OF_MONTH) != 1) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + } + } + ThreadPool.scheduleAtFixedRate(this::endMonth, periodEnd.getTimeInMillis() - currentTime, 2629800000L); // 2629800000 = 1 month // Daily task to start event at 18:00. final Calendar startTime = Calendar.getInstance(); - if ((startTime.get(Calendar.HOUR_OF_DAY) >= 18) && (startTime.get(Calendar.MINUTE) >= 0)) - { - startTime.add(Calendar.DAY_OF_YEAR, 1); - } startTime.set(Calendar.HOUR_OF_DAY, 18); startTime.set(Calendar.MINUTE, 0); startTime.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> startEvent(), startTime.getTimeInMillis() - Chronos.currentTimeMillis(), 86400000); // 86400000 = 1 day + if (startTime.getTimeInMillis() < currentTime) + { + startTime.add(Calendar.DAY_OF_YEAR, 1); + } + ThreadPool.scheduleAtFixedRate(this::startEvent, startTime.getTimeInMillis() - currentTime, 86400000); // 86400000 = 1 day } private void endMonth() @@ -207,7 +217,7 @@ public class CeremonyOfChaos extends AbstractNpcAI } } - ThreadPool.schedule(() -> registrationEnd(), 300000); // 300000 = 5 minutes + ThreadPool.schedule(this::registrationEnd, 300000); // 300000 = 5 minutes } private void registrationEnd() @@ -232,11 +242,11 @@ public class CeremonyOfChaos extends AbstractNpcAI params.set("time", 60); getTimers().addTimer("count_down", params, 60000, null, null); - ThreadPool.schedule(() -> prepareForFight(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::prepareForFight, 60000); // 60000 = 1 minute } else // Try again in 10 minutes. { - ThreadPool.schedule(() -> startEvent(), 600000); // 600000 = 10 minutes + ThreadPool.schedule(this::startEvent, 600000); // 600000 = 10 minutes } } @@ -902,7 +912,7 @@ public class CeremonyOfChaos extends AbstractNpcAI instance.destroy(); } - ThreadPool.schedule(() -> startEvent(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::startEvent, 60000); // 60000 = 1 minute } public List getWinners() diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index d51be95597..a59bd1a22e 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -57,16 +57,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java index e3a18246b2..841237e437 100644 --- a/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java +++ b/L2J_Mobius_08.2_Homunculus/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java @@ -119,6 +119,8 @@ public class CeremonyOfChaos extends AbstractNpcAI private CeremonyOfChaos() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule event period end, 1st of next month 00:01. final Calendar periodEnd = Calendar.getInstance(); periodEnd.add(Calendar.MONTH, 1); @@ -126,18 +128,26 @@ public class CeremonyOfChaos extends AbstractNpcAI periodEnd.set(Calendar.HOUR_OF_DAY, 0); periodEnd.set(Calendar.MINUTE, 1); periodEnd.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> endMonth(), periodEnd.getTimeInMillis() - Chronos.currentTimeMillis(), 2629800000L); // 2629800000 = 1 month + if (periodEnd.getTimeInMillis() < currentTime) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + while (periodEnd.get(Calendar.DAY_OF_MONTH) != 1) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + } + } + ThreadPool.scheduleAtFixedRate(this::endMonth, periodEnd.getTimeInMillis() - currentTime, 2629800000L); // 2629800000 = 1 month // Daily task to start event at 18:00. final Calendar startTime = Calendar.getInstance(); - if ((startTime.get(Calendar.HOUR_OF_DAY) >= 18) && (startTime.get(Calendar.MINUTE) >= 0)) - { - startTime.add(Calendar.DAY_OF_YEAR, 1); - } startTime.set(Calendar.HOUR_OF_DAY, 18); startTime.set(Calendar.MINUTE, 0); startTime.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> startEvent(), startTime.getTimeInMillis() - Chronos.currentTimeMillis(), 86400000); // 86400000 = 1 day + if (startTime.getTimeInMillis() < currentTime) + { + startTime.add(Calendar.DAY_OF_YEAR, 1); + } + ThreadPool.scheduleAtFixedRate(this::startEvent, startTime.getTimeInMillis() - currentTime, 86400000); // 86400000 = 1 day } private void endMonth() @@ -207,7 +217,7 @@ public class CeremonyOfChaos extends AbstractNpcAI } } - ThreadPool.schedule(() -> registrationEnd(), 300000); // 300000 = 5 minutes + ThreadPool.schedule(this::registrationEnd, 300000); // 300000 = 5 minutes } private void registrationEnd() @@ -232,11 +242,11 @@ public class CeremonyOfChaos extends AbstractNpcAI params.set("time", 60); getTimers().addTimer("count_down", params, 60000, null, null); - ThreadPool.schedule(() -> prepareForFight(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::prepareForFight, 60000); // 60000 = 1 minute } else // Try again in 10 minutes. { - ThreadPool.schedule(() -> startEvent(), 600000); // 600000 = 10 minutes + ThreadPool.schedule(this::startEvent, 600000); // 600000 = 10 minutes } } @@ -902,7 +912,7 @@ public class CeremonyOfChaos extends AbstractNpcAI instance.destroy(); } - ThreadPool.schedule(() -> startEvent(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::startEvent, 60000); // 60000 = 1 minute } public List getWinners() diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 067c8d2f0d..80d66be52b 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -59,16 +59,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java index e3a18246b2..841237e437 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java @@ -119,6 +119,8 @@ public class CeremonyOfChaos extends AbstractNpcAI private CeremonyOfChaos() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule event period end, 1st of next month 00:01. final Calendar periodEnd = Calendar.getInstance(); periodEnd.add(Calendar.MONTH, 1); @@ -126,18 +128,26 @@ public class CeremonyOfChaos extends AbstractNpcAI periodEnd.set(Calendar.HOUR_OF_DAY, 0); periodEnd.set(Calendar.MINUTE, 1); periodEnd.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> endMonth(), periodEnd.getTimeInMillis() - Chronos.currentTimeMillis(), 2629800000L); // 2629800000 = 1 month + if (periodEnd.getTimeInMillis() < currentTime) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + while (periodEnd.get(Calendar.DAY_OF_MONTH) != 1) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + } + } + ThreadPool.scheduleAtFixedRate(this::endMonth, periodEnd.getTimeInMillis() - currentTime, 2629800000L); // 2629800000 = 1 month // Daily task to start event at 18:00. final Calendar startTime = Calendar.getInstance(); - if ((startTime.get(Calendar.HOUR_OF_DAY) >= 18) && (startTime.get(Calendar.MINUTE) >= 0)) - { - startTime.add(Calendar.DAY_OF_YEAR, 1); - } startTime.set(Calendar.HOUR_OF_DAY, 18); startTime.set(Calendar.MINUTE, 0); startTime.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> startEvent(), startTime.getTimeInMillis() - Chronos.currentTimeMillis(), 86400000); // 86400000 = 1 day + if (startTime.getTimeInMillis() < currentTime) + { + startTime.add(Calendar.DAY_OF_YEAR, 1); + } + ThreadPool.scheduleAtFixedRate(this::startEvent, startTime.getTimeInMillis() - currentTime, 86400000); // 86400000 = 1 day } private void endMonth() @@ -207,7 +217,7 @@ public class CeremonyOfChaos extends AbstractNpcAI } } - ThreadPool.schedule(() -> registrationEnd(), 300000); // 300000 = 5 minutes + ThreadPool.schedule(this::registrationEnd, 300000); // 300000 = 5 minutes } private void registrationEnd() @@ -232,11 +242,11 @@ public class CeremonyOfChaos extends AbstractNpcAI params.set("time", 60); getTimers().addTimer("count_down", params, 60000, null, null); - ThreadPool.schedule(() -> prepareForFight(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::prepareForFight, 60000); // 60000 = 1 minute } else // Try again in 10 minutes. { - ThreadPool.schedule(() -> startEvent(), 600000); // 600000 = 10 minutes + ThreadPool.schedule(this::startEvent, 600000); // 600000 = 10 minutes } } @@ -902,7 +912,7 @@ public class CeremonyOfChaos extends AbstractNpcAI instance.destroy(); } - ThreadPool.schedule(() -> startEvent(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::startEvent, 60000); // 60000 = 1 minute } public List getWinners() diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 067c8d2f0d..80d66be52b 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -59,16 +59,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java b/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java index e3a18246b2..841237e437 100644 --- a/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java +++ b/L2J_Mobius_10.0_MasterClass/dist/game/data/scripts/instances/CeremonyOfChaos/CeremonyOfChaos.java @@ -119,6 +119,8 @@ public class CeremonyOfChaos extends AbstractNpcAI private CeremonyOfChaos() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule event period end, 1st of next month 00:01. final Calendar periodEnd = Calendar.getInstance(); periodEnd.add(Calendar.MONTH, 1); @@ -126,18 +128,26 @@ public class CeremonyOfChaos extends AbstractNpcAI periodEnd.set(Calendar.HOUR_OF_DAY, 0); periodEnd.set(Calendar.MINUTE, 1); periodEnd.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> endMonth(), periodEnd.getTimeInMillis() - Chronos.currentTimeMillis(), 2629800000L); // 2629800000 = 1 month + if (periodEnd.getTimeInMillis() < currentTime) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + while (periodEnd.get(Calendar.DAY_OF_MONTH) != 1) + { + periodEnd.add(Calendar.DAY_OF_YEAR, 1); + } + } + ThreadPool.scheduleAtFixedRate(this::endMonth, periodEnd.getTimeInMillis() - currentTime, 2629800000L); // 2629800000 = 1 month // Daily task to start event at 18:00. final Calendar startTime = Calendar.getInstance(); - if ((startTime.get(Calendar.HOUR_OF_DAY) >= 18) && (startTime.get(Calendar.MINUTE) >= 0)) - { - startTime.add(Calendar.DAY_OF_YEAR, 1); - } startTime.set(Calendar.HOUR_OF_DAY, 18); startTime.set(Calendar.MINUTE, 0); startTime.set(Calendar.SECOND, 0); - ThreadPool.scheduleAtFixedRate(() -> startEvent(), startTime.getTimeInMillis() - Chronos.currentTimeMillis(), 86400000); // 86400000 = 1 day + if (startTime.getTimeInMillis() < currentTime) + { + startTime.add(Calendar.DAY_OF_YEAR, 1); + } + ThreadPool.scheduleAtFixedRate(this::startEvent, startTime.getTimeInMillis() - currentTime, 86400000); // 86400000 = 1 day } private void endMonth() @@ -207,7 +217,7 @@ public class CeremonyOfChaos extends AbstractNpcAI } } - ThreadPool.schedule(() -> registrationEnd(), 300000); // 300000 = 5 minutes + ThreadPool.schedule(this::registrationEnd, 300000); // 300000 = 5 minutes } private void registrationEnd() @@ -232,11 +242,11 @@ public class CeremonyOfChaos extends AbstractNpcAI params.set("time", 60); getTimers().addTimer("count_down", params, 60000, null, null); - ThreadPool.schedule(() -> prepareForFight(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::prepareForFight, 60000); // 60000 = 1 minute } else // Try again in 10 minutes. { - ThreadPool.schedule(() -> startEvent(), 600000); // 600000 = 10 minutes + ThreadPool.schedule(this::startEvent, 600000); // 600000 = 10 minutes } } @@ -902,7 +912,7 @@ public class CeremonyOfChaos extends AbstractNpcAI instance.destroy(); } - ThreadPool.schedule(() -> startEvent(), 60000); // 60000 = 1 minute + ThreadPool.schedule(this::startEvent, 60000); // 60000 = 1 minute } public List getWinners() diff --git a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 067c8d2f0d..80d66be52b 100644 --- a/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_10.0_MasterClass/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -59,16 +59,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index e51863a8a4..42656c3db4 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -57,16 +57,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index e51863a8a4..42656c3db4 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -57,16 +57,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index e51863a8a4..42656c3db4 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -57,16 +57,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index e51863a8a4..42656c3db4 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -57,16 +57,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index e51863a8a4..42656c3db4 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -57,16 +57,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 2849e54158..0778578f68 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -59,16 +59,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index d663c66692..b370b7e59b 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -55,16 +55,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 2849e54158..0778578f68 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -59,16 +59,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 946eba3826..e0556cb417 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -59,16 +59,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task. diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java index 0c3214c9a3..468067f403 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/ClanHallAuctionManager.java @@ -42,18 +42,24 @@ public class ClanHallAuctionManager protected ClanHallAuctionManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule of the start, next Wednesday at 19:00. final Calendar start = Calendar.getInstance(); - if ((start.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - start.add(Calendar.DAY_OF_YEAR, 7); - } start.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); start.set(Calendar.HOUR_OF_DAY, 19); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, start.getTimeInMillis() - Chronos.currentTimeMillis()); - ThreadPool.scheduleAtFixedRate(() -> onStart(), startDelay, 604800000); // 604800000 = 1 week + if (start.getTimeInMillis() < currentTime) + { + start.add(Calendar.DAY_OF_YEAR, 1); + while (start.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + start.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long startDelay = Math.max(0, start.getTimeInMillis() - currentTime); + ThreadPool.scheduleAtFixedRate(this::onStart, startDelay, 604800000); // 604800000 = 1 week if (startDelay > 0) { onStart(); @@ -61,16 +67,20 @@ public class ClanHallAuctionManager // Schedule of the end, next Wednesday at 11:00. final Calendar end = Calendar.getInstance(); - if ((end.get(Calendar.DAY_OF_WEEK) >= Calendar.WEDNESDAY)) - { - end.add(Calendar.DAY_OF_YEAR, 7); - } end.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); end.set(Calendar.HOUR_OF_DAY, 11); end.set(Calendar.MINUTE, 0); end.set(Calendar.SECOND, 0); - final long endDelay = Math.max(0, end.getTimeInMillis() - Chronos.currentTimeMillis()); - _endTask = ThreadPool.scheduleAtFixedRate(() -> onEnd(), endDelay, 604800000); // 604800000 = 1 week + if (end.getTimeInMillis() < currentTime) + { + end.add(Calendar.DAY_OF_YEAR, 1); + while (end.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) + { + end.add(Calendar.DAY_OF_YEAR, 1); + } + } + final long endDelay = Math.max(0, end.getTimeInMillis() - currentTime); + _endTask = ThreadPool.scheduleAtFixedRate(this::onEnd, endDelay, 604800000); // 604800000 = 1 week } private void onStart() diff --git a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java index 946eba3826..e0556cb417 100644 --- a/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java +++ b/L2J_Mobius_Essence_6.0_BattleChronicle/java/org/l2jmobius/gameserver/instancemanager/DailyTaskManager.java @@ -59,16 +59,18 @@ public class DailyTaskManager protected DailyTaskManager() { + final long currentTime = Chronos.currentTimeMillis(); + // Schedule reset everyday at 6:30. final Calendar calendar = Calendar.getInstance(); - if ((calendar.get(Calendar.HOUR_OF_DAY) >= 6) && (calendar.get(Calendar.MINUTE) >= 30)) - { - calendar.add(Calendar.DAY_OF_YEAR, 1); - } calendar.set(Calendar.HOUR_OF_DAY, 6); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); - final long startDelay = Math.max(0, calendar.getTimeInMillis() - Chronos.currentTimeMillis()); + if (calendar.getTimeInMillis() < currentTime) + { + calendar.add(Calendar.DAY_OF_YEAR, 1); + } + final long startDelay = Math.max(0, calendar.getTimeInMillis() - currentTime); ThreadPool.scheduleAtFixedRate(this::onReset, startDelay, 86400000); // 86400000 = 1 day // Global save task.