Add a (dev) option to not load certain quests
authorLiza Carvelli <liza@carvel.li>
Mon, 15 Jul 2024 21:09:09 +0000 (23:09 +0200)
committerLiza Carvelli <liza@carvel.li>
Mon, 15 Jul 2024 21:09:09 +0000 (23:09 +0200)
QuestPathGenerator/QuestSourceGenerator.cs
QuestPaths/quest-v1.json
Questionable.Model/V1/QuestRoot.cs
Questionable/Controller/QuestRegistry.cs

index de026fc0e5dbb56cecf68c890a28b294e627795f..c583788544d2a335009e8e1558f25dbc5b4b2e6a 100644 (file)
@@ -79,6 +79,9 @@ public class QuestSourceGenerator : ISourceGenerator
             }
 
             var quest = questNode.Deserialize<QuestRoot>()!;
+            if (quest.Disabled)
+                continue;
+
             quests.Add((id, quest));
         }
 
index 04b2a1fddd01f0086c3ba13ffa3ef91a9b9fe215..d22e38bf5764ad82e4a4029403bb9afaaa9cd3ca 100644 (file)
@@ -19,6 +19,9 @@
         "type": "string"
       }
     },
+    "Disabled": {
+      "type": "boolean"
+    },
     "Comment": {
       "type": "string"
     },
index 880e34ce251a3622b88ea03a91e7ca2782bae70d..60693898cff767c98c68886a599750e8408d76c4 100644 (file)
@@ -6,6 +6,7 @@ public sealed class QuestRoot
 {
     public string Author { get; set; } = null!;
     public List<string> Contributors { get; set; } = new();
+    public bool Disabled { get; set; }
     public string? Comment { get; set; }
     public List<ushort> TerritoryBlacklist { get; set; } = new();
     public List<QuestSequence> QuestSequence { get; set; } = new();
index dc656fbc63c2a2ecd239bfcc7c82b7d439fcda3a..96d5c8478cc6bccc61c9dd0e5dc9f6ae99f313e9 100644 (file)
@@ -130,7 +130,8 @@ internal sealed class QuestRegistry
                     var distinctSequenceCount = quest.Root.QuestSequence.Select(x => x.Sequence).Distinct().Count();
                     if (totalSequenceCount != distinctSequenceCount)
                     {
-                        _logger.LogWarning("Quest has duplicate sequence numbers: {QuestId} / {QuestName}", quest.QuestId,
+                        _logger.LogWarning("Quest has duplicate sequence numbers: {QuestId} / {QuestName}",
+                            quest.QuestId,
                             quest.Info.Name);
                         ++foundProblems;
                     }
@@ -196,7 +197,8 @@ internal sealed class QuestRegistry
                         {
                             _logger.LogWarning(
                                 "Quest step has duplicate completion flags: {QuestId} / {QuestName} → {Sequence} → {Flags}",
-                                quest.QuestId, quest.Info.Name, sequence.Sequence, string.Join(", ", duplicate.First()));
+                                quest.QuestId, quest.Info.Name, sequence.Sequence,
+                                string.Join(", ", duplicate.First()));
                             ++foundProblems;
                         }
                     }
@@ -231,6 +233,13 @@ internal sealed class QuestRegistry
             Root = JsonSerializer.Deserialize<QuestRoot>(stream)!,
             Info = _questData.GetQuestInfo(questId.Value),
         };
+        if (quest.Root.Disabled)
+        {
+            _logger.LogWarning("Quest {QuestId} / {QuestName} is disabled and won't be loaded", questId,
+                quest.Info.Name);
+            return;
+        }
+
         _quests[questId.Value] = quest;
     }