From 30f65ca6e093be263cba7d022bdf56c1ede26254 Mon Sep 17 00:00:00 2001 From: KAMKEEL <28842281+KAMKEEL@users.noreply.github.com> Date: Tue, 18 Aug 2026 15:23:51 -0400 Subject: [PATCH] A shared party dialog objective is always complete QuestDialog.isPartyCompleted's shared branch builds readValues by recording only true: a dialog nobody has read is never put in the map at all. The check underneath returns false only on finding a false, so it never can, and an empty map returns true besides. The result is that a party on a shared dialog objective has finished it before anyone speaks to anybody, and a quest waiting on that objective can be handed in immediately. Every required dialog now starts unread, which is the line that was missing. The loop below it was already right and had nothing to find. Only the shared mode is affected. All and Leader iterate the dialogs directly and return false on the first unread one. --- src/main/java/noppes/npcs/quests/QuestDialog.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/noppes/npcs/quests/QuestDialog.java b/src/main/java/noppes/npcs/quests/QuestDialog.java index 6bcedde91..37baef74a 100644 --- a/src/main/java/noppes/npcs/quests/QuestDialog.java +++ b/src/main/java/noppes/npcs/quests/QuestDialog.java @@ -264,6 +264,12 @@ public class QuestDialog extends QuestInterface implements IQuestDialog { return true; } else { HashMap readValues = new HashMap<>(); + // Every required dialog starts unread. Without this the map only ever receives true, + // so the check below cannot find a false and a shared objective is always complete -- + // including for a party that has read nothing at all. + for (int dialogId : dialogs.values()) { + readValues.put(dialogId, false); + } for (UUID uuid : party.getPlayerUUIDs()) { EntityPlayer player = NoppesUtilServer.getPlayer(uuid); PlayerData playerData;