Fix StartSingleQuest IPC, part 2
authorLiza Carvelli <liza@carvel.li>
Sat, 8 Mar 2025 01:56:13 +0000 (02:56 +0100)
committerLiza Carvelli <liza@carvel.li>
Sat, 8 Mar 2025 01:56:13 +0000 (02:56 +0100)
Questionable/Controller/QuestController.cs
Questionable/Functions/QuestFunctions.cs

index 5f874f1..0a0366d 100644 (file)
@@ -325,7 +325,8 @@ internal sealed class QuestController : MiniTaskController<QuestController>
                         .Select(x =>
                             ((ElementId?, byte)?)(x.Id, _questFunctions.GetQuestProgressInfo(x.Id)?.Sequence ?? 0))
                         .FirstOrDefault() ??
-                    _questFunctions.GetCurrentQuest();
+                    _questFunctions.GetCurrentQuest(allowNewMsq: AutomationType != EAutomationType.SingleQuestB);
+
                 if (currentQuestId == null || currentQuestId.Value == 0)
                 {
                     if (_startedQuest != null)
@@ -411,7 +412,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
             {
                 questToRun.SetSequence(currentSequence);
                 CheckNextTasks(
-                    $"New sequence {questToRun == _startedQuest}/{_questFunctions.GetCurrentQuestInternal()}");
+                    $"New sequence {questToRun == _startedQuest}/{_questFunctions.GetCurrentQuestInternal(true)}");
             }
 
             var q = questToRun.Quest;
index 6107e25..fc906e0 100644 (file)
@@ -56,9 +56,9 @@ internal sealed unsafe class QuestFunctions
         _gameGui = gameGui;
     }
 
-    public (ElementId? CurrentQuest, byte Sequence) GetCurrentQuest()
+    public (ElementId? CurrentQuest, byte Sequence) GetCurrentQuest(bool allowNewMsq = true)
     {
-        var (currentQuest, sequence) = GetCurrentQuestInternal();
+        var (currentQuest, sequence) = GetCurrentQuestInternal(allowNewMsq);
         PlayerState* playerState = PlayerState.Instance();
 
         if (currentQuest == null || currentQuest.Value == 0)
@@ -110,7 +110,7 @@ internal sealed unsafe class QuestFunctions
         return (currentQuest, sequence);
     }
 
-    public (ElementId? CurrentQuest, byte Sequence) GetCurrentQuestInternal()
+    public (ElementId? CurrentQuest, byte Sequence) GetCurrentQuestInternal(bool allowNewMsq)
     {
         var questManager = QuestManager.Instance();
         if (questManager != null)
@@ -122,7 +122,12 @@ internal sealed unsafe class QuestFunctions
                 msqQuest = default;
 
             if (msqQuest.CurrentQuest != null && !IsQuestAccepted(msqQuest.CurrentQuest))
-                return msqQuest;
+            {
+                if (allowNewMsq)
+                    return msqQuest;
+                else
+                    msqQuest = default;
+            }
 
             // 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,
             // do the MSQ; if a side quest is the first item do that side quest.