From 0e0e74ce64419c2332af8eec1a7c31c6edeb73ad Mon Sep 17 00:00:00 2001
From: Liza Carvelli <liza@carvel.li>
Date: Fri, 2 Aug 2024 13:47:00 +0200
Subject: [PATCH] Don't return completed main scenario quest

---
 Questionable/GameFunctions.cs | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/Questionable/GameFunctions.cs b/Questionable/GameFunctions.cs
index 76b03cfaa..ee975accb 100644
--- a/Questionable/GameFunctions.cs
+++ b/Questionable/GameFunctions.cs
@@ -149,10 +149,7 @@ internal sealed unsafe class GameFunctions
             // always prioritize accepting MSQ quests, to make sure we don't turn in one MSQ quest and then go off to do
             // side quests until the end of time.
             var msqQuest = GetMainScenarioQuest(questManager);
-            if (msqQuest.CurrentQuest != 0 &&
-                _questRegistry.IsKnownQuest(msqQuest.CurrentQuest) &&
-                IsReadyToAcceptQuest(msqQuest.CurrentQuest) &&
-                !questManager->IsQuestAccepted(msqQuest.CurrentQuest))
+            if (msqQuest.CurrentQuest != 0 && _questRegistry.IsKnownQuest(msqQuest.CurrentQuest))
                 return msqQuest;
 
             // Use the quests in the same order as they're shown in the to-do list, e.g. if the MSQ is the first item,
@@ -224,6 +221,11 @@ internal sealed unsafe class GameFunctions
         if (questManager->IsQuestAccepted(currentQuest) && questManager->GetQuestById(currentQuest)->IsHidden)
             return default;
 
+        // it can sometimes happen (although this isn't reliably reproducible) that the quest returned here
+        // is one you've just completed.
+        if (!IsReadyToAcceptQuest(currentQuest))
+            return default;
+
         // if we're not at a high enough level to continue, we also ignore it
         var currentLevel = _clientState.LocalPlayer?.Level ?? 0;
         if (currentLevel != 0 &&