Add option for quests to be non-interruptible
authorLiza Carvelli <liza@carvel.li>
Mon, 14 Apr 2025 14:29:42 +0000 (16:29 +0200)
committerLiza Carvelli <liza@carvel.li>
Mon, 14 Apr 2025 14:29:42 +0000 (16:29 +0200)
QuestPathGenerator/QuestSourceGenerator.cs
QuestPaths/2.x - A Realm Reborn/MSQ-2/B2-Eastern La Noscea, Brayflox, Cheese and Wine/832_The Things We Do for Cheese.json
QuestPaths/quest-v1.json
Questionable.Model/Questing/QuestRoot.cs
Questionable/Controller/QuestController.cs

index b23bb9daeb8869dcff3033b733c46bfc26e7d62a..463e04bc196c6c9926c528639c6da655c3a4418f 100644 (file)
@@ -152,6 +152,7 @@ public class QuestSourceGenerator : ISourceGenerator
     {
         try
         {
+            QuestRoot emptyQuest = new();
             return ObjectCreationExpression(
                     IdentifierName(nameof(QuestRoot)))
                 .WithInitializer(
@@ -161,8 +162,9 @@ public class QuestSourceGenerator : ISourceGenerator
                             SyntaxNodeList(
                                 AssignmentList(nameof(QuestRoot.Author), quest.Author)
                                     .AsSyntaxNodeOrToken(),
-                                Assignment(nameof(QuestRoot.Disabled), quest.Disabled, false).AsSyntaxNodeOrToken(),
-                                Assignment(nameof(QuestRoot.Comment), quest.Comment, null)
+                                Assignment(nameof(QuestRoot.Disabled), quest.Disabled, emptyQuest.Disabled).AsSyntaxNodeOrToken(),
+                                Assignment(nameof(QuestRoot.Interruptible), quest.Interruptible, emptyQuest.Interruptible).AsSyntaxNodeOrToken(),
+                                Assignment(nameof(QuestRoot.Comment), quest.Comment, emptyQuest.Comment)
                                     .AsSyntaxNodeOrToken(),
                                 AssignmentExpression(
                                     SyntaxKind.SimpleAssignmentExpression,
index 833c79f71ba7a9a9e400bfbd28dbbae3384247df..74b1c93944cc0b3869fbcd20c655deb7cbbb0b9f 100644 (file)
@@ -1,6 +1,7 @@
 {
   "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
   "Author": "JerryWester",
+  "Interruptible": false,
   "QuestSequence": [
     {
       "Sequence": 0,
index 925a801b6e91f72828f45e7261dfa40db60320d3..56d33fc9233dc5d747c90911c7a06055b9711287 100644 (file)
     "Disabled": {
       "type": "boolean"
     },
+    "Interruptible": {
+      "type": "boolean",
+      "description": "If set to false, no priority quest (e.g. class quests) will be done while this is the currently active quest"
+    },
     "Comment": {
       "type": "string"
     },
       ]
     }
   }
-}
\ No newline at end of file
+}
index 998994126d568c118b9af9c8f105290dc8aaf49a..d42ee869bb0501fb4affcefa4b39b7fc230fac11 100644 (file)
@@ -15,6 +15,7 @@ public sealed class QuestRoot
     /// </summary>
     public bool Disabled { get; set; }
 
+    public bool Interruptible { get; set; } = true;
     public string? Comment { get; set; }
     public List<QuestSequence> QuestSequence { get; set; } = new();
 }
index 752df5b32a118be4ff75a1dc5a0483e8ba01d6b3..905c2abafcc9a957c7f5faa6d6e4c0763e1c4ca2 100644 (file)
@@ -9,13 +9,11 @@ using Dalamud.Game.Gui.Toast;
 using Dalamud.Game.Text.SeStringHandling;
 using Dalamud.Plugin.Services;
 using FFXIVClientStructs.FFXIV.Client.Game;
-using Lumina.Excel.Sheets;
 using Microsoft.Extensions.Logging;
 using Questionable.Controller.Steps;
 using Questionable.Controller.Steps.Interactions;
 using Questionable.Controller.Steps.Shared;
 using Questionable.Data;
-using Questionable.External;
 using Questionable.Functions;
 using Questionable.Model;
 using Questionable.Model.Questing;
@@ -812,7 +810,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
             return false;
 
         var (currentQuest, type) = details.Value;
-        if (type != ECurrentQuestType.Normal || currentQuest.Sequence == 0)
+        if (type != ECurrentQuestType.Normal || !currentQuest.Quest.Root.Interruptible || currentQuest.Sequence == 0)
             return false;
 
         if (ManualPriorityQuests.Contains(currentQuest.Quest))