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 6ee71f2427..0d9520fb0b 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,6 +20,7 @@ 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; @@ -812,7 +813,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -845,7 +846,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 95d3a1c267..95b101c6fc 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,7 +28,6 @@ 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,9 +85,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -261,7 +260,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -277,9 +276,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -302,7 +306,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -330,7 +334,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -360,7 +364,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -388,7 +392,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2808,7 +2812,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2888,16 +2892,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2908,11 +2902,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2932,7 +2921,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2944,6 +2933,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 6ee71f2427..0d9520fb0b 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,6 +20,7 @@ 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; @@ -812,7 +813,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -845,7 +846,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 bd0576f4e6..1249c52f42 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,7 +28,6 @@ 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,9 +86,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -263,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; } @@ -279,9 +278,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -304,7 +308,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -332,7 +336,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -362,7 +366,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -390,7 +394,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2810,7 +2814,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2890,16 +2894,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2910,11 +2904,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2934,7 +2923,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2946,6 +2935,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 6ee71f2427..0d9520fb0b 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,6 +20,7 @@ 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; @@ -812,7 +813,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -845,7 +846,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 a5d15042ee..91d0d28243 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,7 +28,6 @@ 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,9 +87,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -264,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; } @@ -280,9 +279,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -305,7 +309,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -333,7 +337,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -363,7 +367,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -391,7 +395,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2811,7 +2815,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2891,16 +2895,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2911,11 +2905,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2935,7 +2924,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2947,6 +2936,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 6ee71f2427..0d9520fb0b 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,6 +20,7 @@ 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; @@ -812,7 +813,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -845,7 +846,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 98716d22ff..ef902af0be 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,7 +28,6 @@ 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; @@ -89,9 +88,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -264,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; } @@ -280,9 +279,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -305,7 +309,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -333,7 +337,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -363,7 +367,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -391,7 +395,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2811,7 +2815,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2891,16 +2895,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2911,11 +2905,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2935,7 +2924,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2947,6 +2936,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 4d8c4da1b8..29d02eeeca 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,6 +20,7 @@ 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; @@ -810,7 +811,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -843,7 +844,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 b751861e20..830bc643aa 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,7 +28,6 @@ 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; @@ -89,9 +88,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -264,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; } @@ -280,9 +279,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -305,7 +309,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -333,7 +337,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -363,7 +367,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -391,7 +395,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2811,7 +2815,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2891,16 +2895,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2911,11 +2905,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2935,7 +2924,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2947,6 +2936,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 4d8c4da1b8..29d02eeeca 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,6 +20,7 @@ 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; @@ -810,7 +811,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -843,7 +844,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 98716d22ff..ef902af0be 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,7 +28,6 @@ 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; @@ -89,9 +88,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -264,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; } @@ -280,9 +279,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -305,7 +309,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -333,7 +337,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -363,7 +367,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -391,7 +395,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2811,7 +2815,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2891,16 +2895,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2911,11 +2905,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2935,7 +2924,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2947,6 +2936,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 4d8c4da1b8..29d02eeeca 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,6 +20,7 @@ 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; @@ -810,7 +811,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -843,7 +844,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 98716d22ff..ef902af0be 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,7 +28,6 @@ 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; @@ -89,9 +88,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -264,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; } @@ -280,9 +279,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -305,7 +309,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -333,7 +337,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -363,7 +367,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -391,7 +395,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2811,7 +2815,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2891,16 +2895,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2911,11 +2905,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2935,7 +2924,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2947,6 +2936,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 4d8c4da1b8..29d02eeeca 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,6 +20,7 @@ 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; @@ -810,7 +811,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -843,7 +844,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 1e2011c02b..b14f05e8aa 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,7 +28,6 @@ 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; @@ -89,9 +88,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -274,7 +273,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -290,9 +289,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -315,7 +319,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -343,7 +347,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -373,7 +377,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -401,7 +405,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2821,7 +2825,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2901,16 +2905,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2921,11 +2915,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2945,7 +2934,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2957,6 +2946,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 c01d366c35..d3b30ad873 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,7 +27,8 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.CopyOnWriteArrayList; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -67,7 +68,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 @@ -333,7 +334,7 @@ public class Quest extends ManagedScript * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -349,9 +350,14 @@ public class Quest extends ManagedScript */ public void startQuestTimer(String name, long time, NpcInstance npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -374,7 +380,7 @@ public class Quest extends ManagedScript return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -402,7 +408,7 @@ public class Quest extends ManagedScript return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -432,7 +438,7 @@ public class Quest extends ManagedScript return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -460,7 +466,7 @@ public class Quest extends ManagedScript return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -472,7 +478,6 @@ public class Quest extends ManagedScript public boolean notifyAttack(NpcInstance npc, PlayerInstance attacker, int damage, boolean isPet) { String res = null; - try { res = onAttack(npc, attacker, damage, isPet); @@ -487,7 +492,6 @@ public class Quest extends ManagedScript public boolean notifyDeath(Creature killer, Creature victim, QuestState qs) { String res = null; - try { res = onDeath(killer, victim, qs); @@ -502,7 +506,6 @@ public class Quest extends ManagedScript public boolean notifyEvent(String event, NpcInstance npc, PlayerInstance player) { String res = null; - try { res = onAdvEvent(event, npc, player); @@ -517,7 +520,6 @@ public class Quest extends ManagedScript public boolean notifyKill(NpcInstance npc, PlayerInstance killer, boolean isPet) { String res = null; - try { res = onKill(npc, killer, isPet); @@ -532,7 +534,6 @@ public class Quest extends ManagedScript public boolean notifyTalk(NpcInstance npc, QuestState qs) { String res = null; - try { res = onTalk(npc, qs.getPlayer()); @@ -551,7 +552,6 @@ public class Quest extends ManagedScript public boolean notifyFirstTalk(NpcInstance npc, PlayerInstance player) { String res = null; - try { res = onFirstTalk(npc, player); @@ -577,7 +577,6 @@ public class Quest extends ManagedScript public boolean notifySkillUse(NpcInstance npc, PlayerInstance caster, Skill skill) { String res = null; - try { res = onSkillUse(npc, caster, skill); @@ -620,7 +619,6 @@ public class Quest extends ManagedScript public boolean notifyAggroRangeEnter(NpcInstance npc, PlayerInstance player, boolean isPet) { String res = null; - try { res = onAggroRangeEnter(npc, player, isPet); @@ -635,7 +633,6 @@ public class Quest extends ManagedScript public boolean notifySpawn(NpcInstance npc) { String res = null; - try { res = onSpawn(npc); @@ -1663,7 +1660,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { 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 1c299b9eb6..a229705e1f 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,7 +17,6 @@ package handlers.admincommandhandlers; import java.nio.file.Paths; -import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -238,7 +237,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 be133c5d7c..6828564fe0 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,7 +27,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.concurrent.CopyOnWriteArrayList; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; import java.util.logging.Level; @@ -73,9 +74,9 @@ 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 Map, String> _startCondition = null; + private final Map, String> _startCondition = new LinkedHashMap<>(1); private final int _questId; protected boolean _onEnterWorld = false; @@ -236,7 +237,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -252,9 +253,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -277,7 +283,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -305,7 +311,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -335,7 +341,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -363,7 +369,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2498,7 +2504,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2554,13 +2560,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Map, String> getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - _startCondition = new LinkedHashMap<>(1); - } - } return _startCondition; } @@ -2571,11 +2570,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (Predicate cond : _startCondition.keySet()) { if (!cond.test(player)) @@ -2593,11 +2587,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public String getStartConditionHtml(PlayerInstance player) { - if (_startCondition == null) - { - return null; - } - for (Entry, String> startRequirement : _startCondition.entrySet()) { if (!startRequirement.getKey().test(player)) 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 1c299b9eb6..a229705e1f 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,7 +17,6 @@ package handlers.admincommandhandlers; import java.nio.file.Paths; -import java.util.List; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; @@ -238,7 +237,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 5c7fc8a395..86041000a2 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,7 +27,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.concurrent.CopyOnWriteArrayList; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Predicate; import java.util.logging.Level; @@ -75,9 +76,9 @@ 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 Map, String> _startCondition = null; + private final Map, String> _startCondition = new LinkedHashMap<>(1); private final int _questId; protected boolean _onEnterWorld = false; @@ -238,7 +239,7 @@ public class Quest extends AbstractScript implements IIdentifiable * Gets the quest timers. * @return the quest timers */ - public Map> getQuestTimers() + public Map> getQuestTimers() { return _questTimers; } @@ -254,9 +255,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -279,7 +285,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -307,7 +313,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -337,7 +343,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -365,7 +371,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2541,7 +2547,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2597,13 +2603,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Map, String> getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - _startCondition = new LinkedHashMap<>(1); - } - } return _startCondition; } @@ -2614,11 +2613,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (Predicate cond : _startCondition.keySet()) { if (!cond.test(player)) @@ -2636,11 +2630,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public String getStartConditionHtml(PlayerInstance player) { - if (_startCondition == null) - { - return null; - } - for (Entry, String> startRequirement : _startCondition.entrySet()) { if (!startRequirement.getKey().test(player)) 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 a31b5e32bd..72f8e2ac84 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,6 +20,7 @@ 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; @@ -814,7 +815,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -847,7 +848,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 f4fd17eeeb..94c4bf09db 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,7 +28,6 @@ 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,9 +85,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -262,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; } @@ -278,9 +277,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -303,7 +307,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -331,7 +335,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -361,7 +365,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -389,7 +393,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2765,7 +2769,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2845,16 +2849,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2865,11 +2859,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2889,7 +2878,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2901,6 +2890,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 a31b5e32bd..72f8e2ac84 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,6 +20,7 @@ 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; @@ -814,7 +815,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -847,7 +848,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 f4fd17eeeb..94c4bf09db 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,7 +28,6 @@ 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,9 +85,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -262,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; } @@ -278,9 +277,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -303,7 +307,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -331,7 +335,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -361,7 +365,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -389,7 +393,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2765,7 +2769,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2845,16 +2849,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2865,11 +2859,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2889,7 +2878,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2901,6 +2890,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 a31b5e32bd..72f8e2ac84 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,6 +20,7 @@ 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; @@ -814,7 +815,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -847,7 +848,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 f4fd17eeeb..94c4bf09db 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,7 +28,6 @@ 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,9 +85,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -262,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; } @@ -278,9 +277,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -303,7 +307,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -331,7 +335,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -361,7 +365,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -389,7 +393,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2765,7 +2769,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2845,16 +2849,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2865,11 +2859,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2889,7 +2878,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2901,6 +2890,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 a31b5e32bd..72f8e2ac84 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,6 +20,7 @@ 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; @@ -814,7 +815,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -847,7 +848,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 f4fd17eeeb..94c4bf09db 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,7 +28,6 @@ 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,9 +85,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -262,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; } @@ -278,9 +277,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -303,7 +307,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -331,7 +335,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -361,7 +365,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -389,7 +393,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2765,7 +2769,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2845,16 +2849,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2865,11 +2859,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2889,7 +2878,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2901,6 +2890,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 a31b5e32bd..72f8e2ac84 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,6 +20,7 @@ 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; @@ -814,7 +815,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -847,7 +848,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 f4fd17eeeb..94c4bf09db 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,7 +28,6 @@ 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,9 +85,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -262,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; } @@ -278,9 +277,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -303,7 +307,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -331,7 +335,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -361,7 +365,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -389,7 +393,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2765,7 +2769,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2845,16 +2849,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2865,11 +2859,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2889,7 +2878,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2901,6 +2890,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 a31b5e32bd..72f8e2ac84 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,6 +20,7 @@ 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; @@ -814,7 +815,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -847,7 +848,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 f4fd17eeeb..94c4bf09db 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,7 +28,6 @@ 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,9 +85,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -262,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; } @@ -278,9 +277,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -303,7 +307,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -331,7 +335,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -361,7 +365,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -389,7 +393,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2765,7 +2769,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2845,16 +2849,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2865,11 +2859,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2889,7 +2878,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2901,6 +2890,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; } 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 a31b5e32bd..72f8e2ac84 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,6 +20,7 @@ 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; @@ -814,7 +815,7 @@ public class TvT extends Event EVENT_ACTIVE = true; // Cancel timers. (In case event started immediately after another event was canceled.) - for (List timers : getQuestTimers().values()) + for (Set timers : getQuestTimers().values()) { for (QuestTimer timer : timers) { @@ -847,7 +848,7 @@ public class TvT extends Event // Despawn event manager. MANAGER_NPC_INSTANCE.deleteMe(); // Cancel timers. - for (List timers : getQuestTimers().values()) + for (Set 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 ed25980856..1e24efc4de 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,7 +19,6 @@ 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; @@ -253,7 +252,7 @@ public class AdminQuest implements IAdminCommandHandler items = quest.getRegisteredItemIds().length + ":" + items.substring(2); } - for (List list : quest.getQuestTimers().values()) + for (Set 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 f4fd17eeeb..94c4bf09db 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,7 +28,6 @@ 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,9 +85,9 @@ 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 Set _startCondition = null; + private final Set _startCondition = ConcurrentHashMap.newKeySet(1); private final int _questId; private final byte _initialState = State.CREATED; @@ -262,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; } @@ -278,9 +277,14 @@ public class Quest extends AbstractScript implements IIdentifiable */ public void startQuestTimer(String name, long time, Npc npc, PlayerInstance player, boolean repeating) { + if (name == null) + { + return; + } + synchronized (_questTimers) { - final List timers = _questTimers.computeIfAbsent(name, k -> new CopyOnWriteArrayList<>()); + final Set timers = _questTimers.getOrDefault(name, ConcurrentHashMap.newKeySet(1)); // 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) { @@ -303,7 +307,7 @@ public class Quest extends AbstractScript implements IIdentifiable return null; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return null; @@ -331,7 +335,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -361,7 +365,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(name); + final Set timers = _questTimers.get(name); if ((timers == null) || timers.isEmpty()) { return; @@ -389,7 +393,7 @@ public class Quest extends AbstractScript implements IIdentifiable return; } - final List timers = _questTimers.get(timer.toString()); + final Set timers = _questTimers.get(timer.toString()); if (timers != null) { timers.remove(timer); @@ -2765,7 +2769,7 @@ 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 (List timers : _questTimers.values()) + for (Set timers : _questTimers.values()) { for (QuestTimer timer : timers) { @@ -2845,16 +2849,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ private Set getStartConditions() { - if (_startCondition == null) - { - synchronized (this) - { - if (_startCondition == null) - { - _startCondition = ConcurrentHashMap.newKeySet(1); - } - } - } return _startCondition; } @@ -2865,11 +2859,6 @@ public class Quest extends AbstractScript implements IIdentifiable */ public boolean canStartQuest(PlayerInstance player) { - if (_startCondition == null) - { - return true; - } - for (QuestCondition cond : _startCondition) { if (!cond.test(player)) @@ -2889,7 +2878,7 @@ public class Quest extends AbstractScript implements IIdentifiable public String getStartConditionHtml(PlayerInstance player, Npc npc) { final QuestState qs = getQuestState(player, false); - if ((_startCondition == null) || ((qs != null) && !qs.isCreated())) + if ((qs != null) && !qs.isCreated()) { return null; } @@ -2901,6 +2890,7 @@ public class Quest extends AbstractScript implements IIdentifiable return cond.getHtml(npc); } } + return null; }