From 1464b1ab8b2767d1ac9d233a2bd71ad5979c662f Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sun, 17 May 2020 02:49:50 +0000 Subject: [PATCH] Reintroduction of CopyOnWriteArrayList for storing QuestTimers. --- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../gameserver/model/quest/Quest.java | 28 +++++++++---------- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 28 +++++++++---------- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 28 +++++++++---------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- .../scripts/custom/events/TeamVsTeam/TvT.java | 5 ++-- .../admincommandhandlers/AdminQuest.java | 3 +- .../gameserver/model/quest/Quest.java | 26 +++++++++-------- 50 files changed, 316 insertions(+), 284 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 0d9520fb0b..6ee71f2427 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.CategoryType; @@ -813,7 +812,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -846,7 +845,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/quest/Quest.java index 95b101c6fc..c7355487c0 100644 --- a/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_1.0_Ertheia/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -85,7 +86,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -260,7 +261,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -283,11 +284,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -306,7 +311,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -334,7 +339,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -364,7 +369,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -375,7 +380,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -392,7 +396,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2812,16 +2816,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 0d9520fb0b..6ee71f2427 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.CategoryType; @@ -813,7 +812,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -846,7 +845,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/quest/Quest.java index 1249c52f42..6685c89b98 100644 --- a/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_2.5_Underground/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -86,7 +87,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -262,7 +263,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -285,11 +286,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -308,7 +313,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -336,7 +341,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -366,7 +371,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -377,7 +382,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -394,7 +398,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2814,16 +2818,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 0d9520fb0b..6ee71f2427 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.CategoryType; @@ -813,7 +812,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -846,7 +845,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/quest/Quest.java index 91d0d28243..261c06cc14 100644 --- a/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_3.0_Helios/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -87,7 +88,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -263,7 +264,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -286,11 +287,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -309,7 +314,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -337,7 +342,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -367,7 +372,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -378,7 +383,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -395,7 +399,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2815,16 +2819,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 0d9520fb0b..6ee71f2427 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.CategoryType; @@ -813,7 +812,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -846,7 +845,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/quest/Quest.java index ef902af0be..f5226d67ea 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -88,7 +89,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -263,7 +264,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -286,11 +287,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -309,7 +314,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -337,7 +342,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -367,7 +372,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -378,7 +383,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -395,7 +399,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2815,16 +2819,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 29d02eeeca..4d8c4da1b8 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.CategoryType; @@ -811,7 +810,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -844,7 +843,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_5.0_Salvation/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/quest/Quest.java index 830bc643aa..150828ffd9 100644 --- a/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_5.0_Salvation/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -88,7 +89,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -263,7 +264,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -286,11 +287,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -309,7 +314,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -337,7 +342,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -367,7 +372,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -378,7 +383,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -395,7 +399,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2815,16 +2819,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 29d02eeeca..4d8c4da1b8 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.CategoryType; @@ -811,7 +810,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -844,7 +843,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_5.5_EtinasFate/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/quest/Quest.java index ef902af0be..f5226d67ea 100644 --- a/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_5.5_EtinasFate/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -88,7 +89,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -263,7 +264,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -286,11 +287,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -309,7 +314,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -337,7 +342,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -367,7 +372,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -378,7 +383,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -395,7 +399,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2815,16 +2819,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 29d02eeeca..4d8c4da1b8 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.CategoryType; @@ -811,7 +810,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -844,7 +843,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_6.0_Fafurion/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/quest/Quest.java index ef902af0be..f5226d67ea 100644 --- a/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_6.0_Fafurion/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -88,7 +89,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -263,7 +264,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -286,11 +287,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -309,7 +314,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -337,7 +342,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -367,7 +372,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -378,7 +383,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -395,7 +399,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2815,16 +2819,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 29d02eeeca..4d8c4da1b8 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.CategoryType; @@ -811,7 +810,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -844,7 +843,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/quest/Quest.java index b14f05e8aa..de4c4fec93 100644 --- a/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_7.0_PreludeOfWar/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -88,7 +89,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -273,7 +274,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -296,11 +297,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -319,7 +324,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -347,7 +352,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -377,7 +382,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -388,7 +393,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -405,7 +409,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2825,16 +2829,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/quest/Quest.java index d3b30ad873..eb74463563 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -27,8 +27,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -68,7 +67,7 @@ public class Quest extends ManagedScript /** Map containing events from String value of the event */ private static Map _allEvents = new HashMap<>(); /** Map containing lists of timers from the name of the timer */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); private final int _questId; private final String _prefixPath; // used only for admin_quest_reload @@ -334,7 +333,7 @@ public class Quest extends ManagedScript * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -357,11 +356,15 @@ public class Quest extends ManagedScript synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -380,7 +383,7 @@ public class Quest extends ManagedScript return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -408,7 +411,7 @@ public class Quest extends ManagedScript return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -438,7 +441,7 @@ public class Quest extends ManagedScript return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -449,7 +452,6 @@ public class Quest extends ManagedScript if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -466,7 +468,7 @@ public class Quest extends ManagedScript return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -1660,16 +1662,14 @@ public class Quest extends ManagedScript // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); return QuestManager.getInstance().removeQuest(this); diff --git a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index a229705e1f..1c299b9eb6 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_CT_2.4_Epilogue/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -17,6 +17,7 @@ package handlers.admincommandhandlers; import java.nio.file.Paths; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -237,7 +238,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/quest/Quest.java index 6828564fe0..b222302e0a 100644 --- a/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_CT_2.4_Epilogue/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -27,8 +27,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; @@ -74,7 +73,7 @@ import org.l2jmobius.gameserver.util.Util; public class Quest extends AbstractScript implements IIdentifiable { /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Map, String> _startCondition = new LinkedHashMap<>(1); @@ -237,7 +236,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -260,11 +259,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -283,7 +286,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -311,7 +314,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -341,7 +344,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -352,7 +355,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -369,7 +371,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2504,16 +2506,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index a229705e1f..1c299b9eb6 100644 --- a/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_CT_2.6_HighFive/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -17,6 +17,7 @@ package handlers.admincommandhandlers; import java.nio.file.Paths; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -237,7 +238,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/quest/Quest.java index 86041000a2..37a991fd4d 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -27,8 +27,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; @@ -76,7 +75,7 @@ import org.l2jmobius.gameserver.util.Util; public class Quest extends AbstractScript implements IIdentifiable { /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Map, String> _startCondition = new LinkedHashMap<>(1); @@ -239,7 +238,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -262,11 +261,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -285,7 +288,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -313,7 +316,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -343,7 +346,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -354,7 +357,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -371,7 +373,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2547,16 +2549,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 72f8e2ac84..a31b5e32bd 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PartyDistributionType; @@ -815,7 +814,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -848,7 +847,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/quest/Quest.java index 94c4bf09db..6ac59b6f71 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -85,7 +86,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -261,7 +262,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -284,11 +285,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -307,7 +312,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -335,7 +340,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -365,7 +370,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -376,7 +381,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -393,7 +397,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2769,16 +2773,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 72f8e2ac84..a31b5e32bd 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PartyDistributionType; @@ -815,7 +814,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -848,7 +847,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/quest/Quest.java index 94c4bf09db..6ac59b6f71 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -85,7 +86,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -261,7 +262,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -284,11 +285,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -307,7 +312,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -335,7 +340,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -365,7 +370,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -376,7 +381,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -393,7 +397,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2769,16 +2773,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 72f8e2ac84..a31b5e32bd 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PartyDistributionType; @@ -815,7 +814,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -848,7 +847,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/quest/Quest.java index 94c4bf09db..6ac59b6f71 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -85,7 +86,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -261,7 +262,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -284,11 +285,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -307,7 +312,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -335,7 +340,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -365,7 +370,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -376,7 +381,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -393,7 +397,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2769,16 +2773,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 72f8e2ac84..a31b5e32bd 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PartyDistributionType; @@ -815,7 +814,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -848,7 +847,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/quest/Quest.java index 94c4bf09db..6ac59b6f71 100644 --- a/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_Classic_2.3_SevenSigns/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -85,7 +86,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -261,7 +262,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -284,11 +285,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -307,7 +312,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -335,7 +340,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -365,7 +370,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -376,7 +381,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -393,7 +397,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2769,16 +2773,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 72f8e2ac84..a31b5e32bd 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PartyDistributionType; @@ -815,7 +814,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -848,7 +847,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/quest/Quest.java index 94c4bf09db..6ac59b6f71 100644 --- a/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_Classic_2.4_SecretOfEmpire/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -85,7 +86,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -261,7 +262,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -284,11 +285,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -307,7 +312,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -335,7 +340,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -365,7 +370,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -376,7 +381,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -393,7 +397,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2769,16 +2773,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 72f8e2ac84..a31b5e32bd 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PartyDistributionType; @@ -815,7 +814,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -848,7 +847,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/quest/Quest.java index 94c4bf09db..6ac59b6f71 100644 --- a/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_Classic_3.0_TheKamael/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -85,7 +86,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -261,7 +262,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -284,11 +285,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -307,7 +312,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -335,7 +340,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -365,7 +370,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -376,7 +381,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -393,7 +397,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2769,16 +2773,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList) diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 72f8e2ac84..a31b5e32bd 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.l2jmobius.gameserver.enums.PartyDistributionType; @@ -815,7 +814,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -848,7 +847,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (Set timers : getQuestTimers().values()) + for (List timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { diff --git a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java index 1e24efc4de..ed25980856 100644 --- a/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java +++ b/L2J_Mobius_Classic_Interlude/dist/game/data/scripts/handlers/admincommandhandlers/AdminQuest.java @@ -19,6 +19,7 @@ package handlers.admincommandhandlers; import java.io.File; import java.nio.file.Paths; import java.util.Arrays; +import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -252,7 +253,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (Set list : quest.getQuestTimers().values()) + for (List list : quest.getQuestTimers().values()) { for (QuestTimer timer : list) { diff --git a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/quest/Quest.java b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/quest/Quest.java index 94c4bf09db..6ac59b6f71 100644 --- a/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/quest/Quest.java +++ b/L2J_Mobius_Classic_Interlude/java/org/l2jmobius/gameserver/model/quest/Quest.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.function.Predicate; import java.util.logging.Level; import java.util.logging.Logger; @@ -85,7 +86,7 @@ public class Quest extends AbstractScript implements IIdentifiable public static final Logger LOGGER = Logger.getLogger(Quest.class.getName()); /** Map containing lists of timers from the name of the timer. */ - private final Map> _questTimers = new HashMap<>(); + private final Map> _questTimers = new HashMap<>(); /** Map containing all the start conditions. */ private final Set _startCondition = ConcurrentHashMap.newKeySet(1); @@ -261,7 +262,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -284,11 +285,15 @@ public class Quest extends AbstractScript implements IIdentifiable synchronized (_questTimers) { - final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); + if (!_questTimers.containsKey(name)) + { + _questTimers.put(name, new CopyOnWriteArrayList<>()); + } + // If there exists a timer with this name, allow the timer only if the [npc, player] set is unique nulls act as wildcards. if (getQuestTimer(name, npc, player) == null) { - timers.add(new QuestTimer(this, name, time, npc, player, repeating)); + _questTimers.get(name).add(new QuestTimer(this, name, time, npc, player, repeating)); } } } @@ -307,7 +312,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -335,7 +340,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -365,7 +370,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(name); + final List timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -376,7 +381,6 @@ public class Quest extends AbstractScript implements IIdentifiable if ((timer != null) && timer.equals(this, name, npc, player)) { timer.cancel(); - return; } } } @@ -393,7 +397,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final Set timers = _questTimers.get(timer.toString()); + final List timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2769,16 +2773,14 @@ public class Quest extends AbstractScript implements IIdentifiable // Cancel all pending timers before reloading. // If timers ought to be restarted, the quest can take care of it with its code (example: save global data indicating what timer must be restarted). - for (Set timers : _questTimers.values()) + for (List timers : _questTimers.values()) { for (QuestTimer timer : timers) { timer.cancel(); } - timers.clear(); } - _questTimers.clear(); if (removeFromList)