From bc2bab889d93b1b197818da6c549e092f812d9b7 Mon Sep 17 00:00:00 2001 From: bigguy345 Date: Mon, 30 Jun 2025 08:59:51 +0300 Subject: [PATCH] cleared ActionManager on NPC delete --- .../npcs/controllers/data/action/Action.java | 4 + .../npcs/entity/EntityNPCInterface.java | 2 + .../npcs/scripted/ScriptedActionManager.java | 79 ++++++++++--------- 3 files changed, 48 insertions(+), 37 deletions(-) diff --git a/src/main/java/noppes/npcs/controllers/data/action/Action.java b/src/main/java/noppes/npcs/controllers/data/action/Action.java index af0e28320..8ce816541 100644 --- a/src/main/java/noppes/npcs/controllers/data/action/Action.java +++ b/src/main/java/noppes/npcs/controllers/data/action/Action.java @@ -149,9 +149,13 @@ public class Action implements IAction { return done; } + @Override public void kill() { if (actionThread != null) actionThread.stop(); + + dataStore.clear(); + done = true; } @Override diff --git a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java index 796cec2fa..56808721a 100644 --- a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java +++ b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java @@ -1407,6 +1407,8 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti roleInterface.delete(); if (advanced.job != EnumJobType.None && jobInterface != null) jobInterface.delete(); + actionManager.clear(); + super.setDead(); } diff --git a/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java b/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java index 9df292a1d..fe00fd064 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java +++ b/src/main/java/noppes/npcs/scripted/ScriptedActionManager.java @@ -214,43 +214,6 @@ public class ScriptedActionManager implements IActionManager { return false; } - @Override - public void clear() { - actionQueue.clear(); - parallelActions.clear(); - conditionalActions.clear(); - } - - @Override - public boolean cancelAction(String name) { - Iterator acts = actionQueue.iterator(); - while (acts.hasNext()) { - IAction act = acts.next(); - if (act.getName().equals(name)) { - acts.remove(); - return true; - } - } - - Iterator pit = parallelActions.iterator(); - while (pit.hasNext()) { - if (pit.next().getName().equals(name)) { - pit.remove(); - return true; - } - } - - Iterator cons = conditionalActions.iterator(); - while (cons.hasNext()) { - IConditionalAction con = cons.next(); - if (con.getName().equals(name)) { - cons.remove(); - return true; - } - } - return false; - } - /////////////////////////////////////////////////// /////////////////////////////////////////////////// // Conditionals @@ -368,6 +331,48 @@ public class ScriptedActionManager implements IActionManager { } } + @Override + public void clear() { + actionQueue.forEach((act) -> act.kill()); + actionQueue.clear(); + + parallelActions.forEach((act) -> act.kill()); + parallelActions.clear(); + + conditionalActions.forEach((act) -> act.kill()); + conditionalActions.clear(); + } + + @Override + public boolean cancelAction(String name) { + Iterator acts = actionQueue.iterator(); + while (acts.hasNext()) { + IAction act = acts.next(); + if (act.getName().equals(name)) { + acts.remove(); + return true; + } + } + + Iterator pit = parallelActions.iterator(); + while (pit.hasNext()) { + if (pit.next().getName().equals(name)) { + pit.remove(); + return true; + } + } + + Iterator cons = conditionalActions.iterator(); + while (cons.hasNext()) { + IConditionalAction con = cons.next(); + if (con.getName().equals(name)) { + cons.remove(); + return true; + } + } + return false; + } + @Override public IActionChain chain() { return new ActionChain(this);