diff --git a/src/main/java/emu/grasscutter/game/quest/exec/ExecRefreshGroupSuite.java b/src/main/java/emu/grasscutter/game/quest/exec/ExecRefreshGroupSuite.java index 4b68a27b1..c60c5af8b 100644 --- a/src/main/java/emu/grasscutter/game/quest/exec/ExecRefreshGroupSuite.java +++ b/src/main/java/emu/grasscutter/game/quest/exec/ExecRefreshGroupSuite.java @@ -25,6 +25,7 @@ public class ExecRefreshGroupSuite extends QuestExecHandler { if (!scriptManager.refreshGroupSuite(groupId, suiteId, quest)) { result = false; } + scriptManager.getGroupById(groupId).dontUnload = true; } return result; diff --git a/src/main/java/emu/grasscutter/game/world/Scene.java b/src/main/java/emu/grasscutter/game/world/Scene.java index 94f36afc5..cd7c42865 100644 --- a/src/main/java/emu/grasscutter/game/world/Scene.java +++ b/src/main/java/emu/grasscutter/game/world/Scene.java @@ -838,7 +838,7 @@ public final class Scene { .collect(Collectors.toSet()); for (var group : this.loadedGroups) { - if (!visible.contains(group.id) && !group.dynamic_load) + if (!visible.contains(group.id) && !group.dynamic_load && !group.dontUnload) unloadGroup(scriptManager.getBlocks().get(group.block_id), group.id); } diff --git a/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java b/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java index 612425646..6f46aaae0 100644 --- a/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java +++ b/src/main/java/emu/grasscutter/scripts/SceneScriptManager.java @@ -266,15 +266,15 @@ public class SceneScriptManager { suiteId, groupId, getScene().getId()); - } else { - Grasscutter.getLogger().debug("Refreshing group {} suite {}", groupId, suiteId); - suiteId = - refreshGroup( - targetGroupInstance, - suiteId, - false); // If suiteId is zero, the value of suiteId changes - scene.broadcastPacket(new PacketGroupSuiteNotify(groupId, suiteId)); + if (targetGroupInstance == null) return false; } + Grasscutter.getLogger().debug("Refreshing group {} suite {}", groupId, suiteId); + suiteId = + refreshGroup( + targetGroupInstance, + suiteId, + false); // If suiteId is zero, the value of suiteId changes + scene.broadcastPacket(new PacketGroupSuiteNotify(groupId, suiteId)); return true; } diff --git a/src/main/java/emu/grasscutter/scripts/data/SceneGroup.java b/src/main/java/emu/grasscutter/scripts/data/SceneGroup.java index 78965c572..47322a38c 100644 --- a/src/main/java/emu/grasscutter/scripts/data/SceneGroup.java +++ b/src/main/java/emu/grasscutter/scripts/data/SceneGroup.java @@ -40,6 +40,7 @@ public final class SceneGroup { public SceneGarbage garbages; public SceneInitConfig init_config; @Getter public boolean dynamic_load = false; + public boolean dontUnload = false; public SceneReplaceable is_replaceable;