From 7d1f592980500147cf5a1c2fe99ea9cc6629d962 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 17 Sep 2022 21:22:45 +0000 Subject: [PATCH] Event spawns must initialize after server loads scripts. --- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- .../gameserver/model/quest/LongTimeEvent.java | 31 +++++++++++++++---- 27 files changed, 675 insertions(+), 162 deletions(-) diff --git a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_01.0_Ertheia/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_02.5_Underground/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_03.0_Helios/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_04.0_GrandCrusade/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_05.0_Salvation/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_05.5_EtinasFate/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_06.0_Fafurion/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_07.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index a37f196024..07aa2273d8 100644 --- a/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_08.2_Homunculus/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -45,6 +46,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -66,13 +71,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -333,11 +338,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -359,9 +363,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index a37f196024..07aa2273d8 100644 --- a/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_09.2_ReturnOfTheQueenAnt/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -45,6 +46,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -66,13 +71,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -333,11 +338,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -359,9 +363,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index a37f196024..07aa2273d8 100644 --- a/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_10.2_MasterClass/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -45,6 +46,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -66,13 +71,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -333,11 +338,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -359,9 +363,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 3cb0afc993..56f2fa58dc 100644 --- a/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_CT_0_Interlude/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import java.util.logging.Level; import javax.xml.parsers.DocumentBuilder; @@ -46,6 +47,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -66,13 +71,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -319,11 +324,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Event enter announcement. @@ -339,9 +343,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 3cb0afc993..56f2fa58dc 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import java.util.logging.Level; import javax.xml.parsers.DocumentBuilder; @@ -46,6 +47,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -66,13 +71,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -319,11 +324,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Event enter announcement. @@ -339,9 +343,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 3cb0afc993..56f2fa58dc 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import java.util.logging.Level; import javax.xml.parsers.DocumentBuilder; @@ -46,6 +47,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -66,13 +71,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -319,11 +324,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Event enter announcement. @@ -339,9 +343,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Classic_1.0/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Classic_1.5_AgeOfSplendor/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Classic_2.5_Zaken/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Classic_2.7_Antharas/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Classic_2.8_SevenSigns/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Classic_2.9.5_Saviors/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Classic_2.9_SecretOfEmpire/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index 9cabf6f49a..aaff4d8279 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -44,6 +45,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -65,13 +70,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -325,11 +330,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -351,9 +355,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index a37f196024..07aa2273d8 100644 --- a/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Essence_4.2_DwellingOfSpirits/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -45,6 +46,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -66,13 +71,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -333,11 +338,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -359,9 +363,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index a37f196024..07aa2273d8 100644 --- a/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Essence_5.2_FrostLord/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -45,6 +46,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -66,13 +71,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -333,11 +338,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -359,9 +363,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override diff --git a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java index a37f196024..07aa2273d8 100644 --- a/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java +++ b/L2J_Mobius_Essence_6.2_Vanguard/java/org/l2jmobius/gameserver/model/quest/LongTimeEvent.java @@ -28,6 +28,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.function.Consumer; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -45,6 +46,10 @@ import org.l2jmobius.gameserver.model.Location; import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.announce.EventAnnouncement; +import org.l2jmobius.gameserver.model.events.Containers; +import org.l2jmobius.gameserver.model.events.EventType; +import org.l2jmobius.gameserver.model.events.impl.OnServerStart; +import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener; import org.l2jmobius.gameserver.model.holders.EventDropHolder; import org.l2jmobius.gameserver.script.DateRange; import org.l2jmobius.gameserver.util.Broadcast; @@ -66,13 +71,13 @@ public class LongTimeEvent extends Quest protected String _endMsg = ""; protected int _enterAnnounceId = -1; - // NPCs to spawm and their spawn points + // NPCs to spawn and their spawn points protected final List _spawnList = new ArrayList<>(); // Drop data for event protected final List _dropList = new ArrayList<>(); - // Items to destroy when event ends. + // Items to destroy when event ends protected final List _destroyItemsOnEnd = new ArrayList<>(); protected class NpcSpawn @@ -333,11 +338,10 @@ public class LongTimeEvent extends Quest // Add event drops. EventDropManager.getInstance().addDrops(this, _dropList); - // Add spawns. - final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); - for (NpcSpawn spawn : _spawnList) + // Add spawns on server start. + if (!_spawnList.isEmpty()) { - addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_SERVER_START, _spawnNpcs, this)); } // Enable town shrines. @@ -359,9 +363,24 @@ public class LongTimeEvent extends Quest } // Schedule event end. + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); ThreadPool.schedule(new ScheduleEnd(), millisToEventEnd); } + /** + * Event spawns must initialize after server loads scripts. + */ + private final Consumer _spawnNpcs = event -> + { + final Long millisToEventEnd = _eventPeriod.getEndDate().getTime() - System.currentTimeMillis(); + for (NpcSpawn spawn : _spawnList) + { + addSpawn(spawn.npcId, spawn.loc.getX(), spawn.loc.getY(), spawn.loc.getZ(), spawn.loc.getHeading(), false, millisToEventEnd, false); + } + + Containers.Global().removeListenerIf(EventType.ON_SERVER_START, listener -> listener.getOwner() == this); + }; + protected class ScheduleEnd implements Runnable { @Override