Minor cleanup for ARR part 2
authorLiza Carvelli <liza@carvel.li>
Fri, 19 Jul 2024 14:31:38 +0000 (16:31 +0200)
committerLiza Carvelli <liza@carvel.li>
Fri, 19 Jul 2024 14:31:54 +0000 (16:31 +0200)
17 files changed:
QuestPathGenerator/QuestSourceGenerator.cs
QuestPaths/2.x - A Realm Reborn/MSQ-2/3856_We Come in Peace.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/3857_Dance Dance Diplomacy.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/3858_Forest Friend.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/3860_Never Forget.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/3861_Microbrewing.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/514_Into the Beast's Maw.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/709_Sylphic Studies.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/715_First Contact.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/719_Presence of the Enemy.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/738_Sylphish Concerns.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/743_A Simple Gift.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/744_Believe in Your Sylph.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/746_Back from the Wood.json
QuestPaths/quest-v1.json
Questionable.Model/V1/Converter/StringListOrValueConverter.cs [new file with mode: 0644]
Questionable.Model/V1/QuestRoot.cs

index 8cdd45623ed1ae3bc8d38e53ead47fdbd2fee6a5..40d1fafe981b5514d1d324105f7c87e68544b05e 100644 (file)
@@ -222,9 +222,7 @@ public class QuestSourceGenerator : ISourceGenerator
                                     SyntaxKind.ObjectInitializerExpression,
                                     SeparatedList<ExpressionSyntax>(
                                         SyntaxNodeList(
-                                            Assignment(nameof(QuestRoot.Author), quest.Author, null)
-                                                .AsSyntaxNodeOrToken(),
-                                            AssignmentList(nameof(QuestRoot.Contributors), quest.Contributors)
+                                            AssignmentList(nameof(QuestRoot.Author), quest.Author)
                                                 .AsSyntaxNodeOrToken(),
                                             Assignment(nameof(QuestRoot.Comment), quest.Comment, null)
                                                 .AsSyntaxNodeOrToken(),
index 580148adc2268fb061797d3284b19bf1bfa9dbcf..6cada47e495aa6de4f3ecbfcd59ffaa433a60d28 100644 (file)
@@ -1,6 +1,6 @@
 {
   "$schema": "https://carvel.li/questionable/quest-1.0",
-  "Author": "liza, JerryWester",
+  "Author": ["liza", "JerryWester"],
   "QuestSequence": [
     {
       "Sequence": 0,
@@ -58,7 +58,6 @@
       "Sequence": 255,
       "Steps": [
         {
-          "$": "TODO: Questionable doesn't seem to interact with this ferry skipper",
           "DataId": 1001263,
           "Position": {
             "X": 181.41443,
           },
           "TerritoryId": 133,
           "InteractionType": "Interact",
-          "DialogueChoices": [
-            {
-              "Type": "List",
-              "ExcelSheet": "Warp",
-              "Prompt": "Null",
-              "Answer": "131077"
-            },
-            {
-              "Type": "YesNo",
-              "ExcelSheet": "Warp",
-              "Prompt": "Board the ferry to Sweetbloom Pier?",
-              "Yes": true
-            }
-          ]
+          "TargetTerritoryId": 152
         },
         {
           "TerritoryId": 152,
       ]
     }
   ]
-}
\ No newline at end of file
+}
index c3027536ca99167c2303561c0544adb9216784d7..918865320e51d5e989fba51ffefc7e0466ce6c2c 100644 (file)
@@ -35,7 +35,7 @@
           "InteractionType": "Emote",\r
           "Emote": "dance",\r
           "CompletionQuestVariablesFlags": [\r
-            1,\r
+            null,\r
             null,\r
             null,\r
             null,\r
@@ -54,7 +54,7 @@
           "InteractionType": "Emote",\r
           "Emote": "dance",\r
           "CompletionQuestVariablesFlags": [\r
-            1,\r
+            null,\r
             null,\r
             null,\r
             null,\r
           },\r
           "TerritoryId": 152,\r
           "InteractionType": "Emote",\r
-          "Emote": "dance"\r
+          "Emote": "dance",\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            32\r
+          ]\r
         }\r
       ]\r
     },\r
@@ -91,4 +99,4 @@
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index b7def57ebaac9e4f6936d20b79afaf8ecb8fb625..4154bc4bd9b668b4bad660cd2fce8db043d5a5cb 100644 (file)
@@ -12,6 +12,7 @@
             "Y": -3.7126513,\r
             "Z": 209.76575\r
           },\r
+          "StopDistance": 5,\r
           "TerritoryId": 152,\r
           "InteractionType": "AcceptQuest",\r
           "AetheryteShortcut": "East Shroud - Hawthorne Hut",\r
           "TerritoryId": 152,\r
           "InteractionType": "Combat",\r
           "EnemySpawnType": "OverworldEnemies",\r
-          "KillEnemyDataIds": [\r
-            179\r
+          "ComplexCombatData": [\r
+            {\r
+              "DataId": 179,\r
+              "CompletionQuestVariablesFlags": [\r
+                16,\r
+                1,\r
+                null,\r
+                null,\r
+                null,\r
+                null\r
+              ],\r
+              "MinimumKillCount": 1\r
+            }\r
           ],\r
           "CompletionQuestVariablesFlags": [\r
-            16,\r
+            null,\r
             1,\r
             null,\r
             null,\r
@@ -71,9 +83,9 @@
           "TerritoryId": 152,\r
           "InteractionType": "Interact",\r
           "CompletionQuestVariablesFlags": [\r
-            1,\r
             null,\r
-            16,\r
+            null,\r
+            null,\r
             null,\r
             null,\r
             32\r
           "TerritoryId": 152,\r
           "InteractionType": "Interact",\r
           "CompletionQuestVariablesFlags": [\r
-            1,\r
             null,\r
-            16,\r
+            null,\r
+            null,\r
             null,\r
             null,\r
             64\r
           },\r
           "TerritoryId": 152,\r
           "InteractionType": "Interact",\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            128\r
+          ],\r
           "$": "18 1  32 0  0 96 -> 35 1  48 0  0 224"\r
         },\r
         {\r
           "TerritoryId": 152,\r
           "InteractionType": "Combat",\r
           "EnemySpawnType": "OverworldEnemies",\r
-          "KillEnemyDataIds": [\r
-            7\r
-          ]\r
+          "ComplexCombatData": [\r
+            {\r
+              "DataId": 7,\r
+              "CompletionQuestVariablesFlags": [\r
+                null,\r
+                16,\r
+                null,\r
+                null,\r
+                null,\r
+                null\r
+              ],\r
+              "MinimumKillCount": 1\r
+            }\r
+          ],\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            16,\r
+            null,\r
+            null,\r
+            null,\r
+            null\r
+          ],\r
+          "$": "If skipping the previous step: 34 17 32 0 0 96"\r
         }\r
       ]\r
     },\r
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index 2d579a30da0bc2e74c3636e22bd708e65abaa03e..cb71a891186d8c2c172054431c19889ff1d4ec59 100644 (file)
           "StopDistance": 7,\r
           "TerritoryId": 129,\r
           "InteractionType": "Interact",\r
-          "TargetTerritoryId": 138,\r
-          "DialogueChoices": [\r
-            {\r
-              "Type": "List",\r
-              "ExcelSheet": "Warp",\r
-              "Prompt": null,\r
-              "Answer": 131109\r
-            }\r
-          ]\r
+          "TargetTerritoryId": 138\r
         },\r
         {\r
           "DataId": 1003393,\r
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index 4bddedd4d131d41645e69d574fa4a8c88b641074..064bc4a4d0942bc1b43a7a53d904cb30403641bb 100644 (file)
     {\r
       "Sequence": 1,\r
       "Steps": [\r
+        {\r
+          "Position": {\r
+            "X": -422.68066,\r
+            "Y": -2.5542965,\r
+            "Z": 150.50304\r
+          },\r
+          "TerritoryId": 139,\r
+          "InteractionType": "WalkTo",\r
+          "DisableNavmesh": true,\r
+          "Comment": "Avoids swimming"\r
+        },\r
         {\r
           "Position": {\r
             "X": -585.1562,\r
     {\r
       "Sequence": 255,\r
       "Steps": [\r
+        {\r
+          "Position": {\r
+            "X": -422.68066,\r
+            "Y": -2.5542965,\r
+            "Z": 150.50304\r
+          },\r
+          "TerritoryId": 139,\r
+          "InteractionType": "WalkTo",\r
+          "Comment": "Avoids swimming"\r
+        },\r
         {\r
           "DataId": 1006193,\r
           "Position": {\r
@@ -56,4 +77,4 @@
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index d409672948d695431b905ca6adaa19f6617c8534..7e95e9f9dfb82bbcfe23d39b222ae18e9073723f 100644 (file)
@@ -1,6 +1,9 @@
 {\r
   "$schema": "https://carvel.li/questionable/quest-1.0",\r
   "Author": "JerryWester",\r
+  "TerritoryBlacklist": [\r
+    1039\r
+  ],\r
   "QuestSequence": [\r
     {\r
       "Sequence": 0,\r
@@ -62,4 +65,4 @@
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index e3736c9a09cbe545d532cc5be01d06c59f81c3a7..b5811f5e65105866a6e3eaf9334e29536eb890f3 100644 (file)
@@ -12,6 +12,7 @@
             "Y": 3.543561,\r
             "Z": 283.71094\r
           },\r
+          "StopDistance": 5,\r
           "TerritoryId": 152,\r
           "InteractionType": "AcceptQuest",\r
           "AetheryteShortcut": "East Shroud - Hawthorne Hut",\r
             "Z": 279.92664\r
           },\r
           "TerritoryId": 152,\r
-          "InteractionType": "Interact"\r
+          "InteractionType": "Interact",\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            128\r
+          ]\r
         },\r
         {\r
           "DataId": 1000557,\r
           },\r
           "TerritoryId": 152,\r
           "InteractionType": "Interact",\r
-          "$": "0 0  0 0  0 0 -> 17 0  0 0  0 128"\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            64\r
+          ]\r
         },\r
         {\r
           "DataId": 1000553,\r
           },\r
           "TerritoryId": 152,\r
           "InteractionType": "Interact",\r
-          "$": "17 0  0 0  0 128 -> 33 16  0 0  0 192"\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            32\r
+          ]\r
         }\r
       ]\r
     },\r
@@ -74,4 +97,4 @@
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index d1ef58463232f9df92bd975449e942e352a17fd3..07ec1cbd8f0a0b31e896bb6bbe5afd324aed23ab 100644 (file)
           "AetheryteShortcut": "East Shroud - Hawthorne Hut",\r
           "SkipIf": [\r
             "AetheryteShortcutIfInSameTerritory"\r
-          ],\r
-          "CompletionQuestVariablesFlags": [\r
-            null,\r
-            16,\r
-            null,\r
-            null,\r
-            null,\r
-            null\r
           ]\r
         }\r
       ]\r
             "Z": 283.4973\r
           },\r
           "TerritoryId": 152,\r
-          "InteractionType": "Interact",\r
-          "CompletionQuestVariablesFlags": [\r
-            null,\r
-            1,\r
-            null,\r
-            null,\r
-            null,\r
-            null\r
-          ]\r
+          "InteractionType": "Interact"\r
         }\r
       ]\r
     },\r
@@ -99,4 +83,4 @@
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index 0f54aeffea4ec94ef65c8924cee81e3cbb0ed68e..209eb4048f7806a22ee68ce6298dfb8a2fa69546 100644 (file)
@@ -35,7 +35,7 @@
           "InteractionType": "Interact",\r
           "$": "0 0  0 0  0 0 -> 1 0  0 0  0 128",\r
           "CompletionQuestVariablesFlags": [\r
-            1,\r
+            null,\r
             null,\r
             null,\r
             null,\r
@@ -54,7 +54,7 @@
           "InteractionType": "Interact",\r
           "$": "1 0  0 0  0 128 -> 2 0  0 0  0 192",\r
           "CompletionQuestVariablesFlags": [\r
-            1,\r
+            null,\r
             null,\r
             null,\r
             null,\r
@@ -74,7 +74,7 @@
           "AetheryteShortcut": "East Shroud - Hawthorne Hut",\r
           "$": "2 0  0 0  0 192 -> 3 0  0 0  0 224",\r
           "CompletionQuestVariablesFlags": [\r
-            1,\r
+            null,\r
             null,\r
             null,\r
             null,\r
             "Z": 286.9154\r
           },\r
           "TerritoryId": 152,\r
-          "InteractionType": "Interact"\r
+          "InteractionType": "Interact",\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            16\r
+          ]\r
         }\r
       ]\r
     },\r
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index 9043705caddd351771522217a1c19a96659c38cb..0150939eba479d9498435cd0ffcffe156e57735b 100644 (file)
             "Z": -130.11371\r
           },\r
           "TerritoryId": 153,\r
-          "InteractionType": "Combat",\r
-          "EnemySpawnType": "AfterInteraction",\r
-          "KillEnemyDataIds": [\r
-            55\r
-          ],\r
+          "InteractionType": "Interact",\r
           "$": "0 0  0 0  0 0 -> 16 0  16 0  0 128",\r
           "CompletionQuestVariablesFlags": [\r
-            16,\r
             null,\r
-            16,\r
+            null,\r
+            null,\r
             null,\r
             null,\r
             128\r
+          ],\r
+          "Comment": "Enemy loses aggro by the next waypoint"\r
+        },\r
+        {\r
+          "Position": {\r
+            "X": -108.2742,\r
+            "Y": 5.6416674,\r
+            "Z": -80.21974\r
+          },\r
+          "StopDistance": 0.25,\r
+          "TerritoryId": 153,\r
+          "InteractionType": "Jump",\r
+          "JumpDestination": {\r
+            "Position": {\r
+              "X": -111.25065,\r
+              "Y": 8.312978,\r
+              "Z": -82.8167\r
+            },\r
+            "DelaySeconds": 0.25\r
+          },\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            -8\r
           ]\r
         },\r
         {\r
           "TerritoryId": 153,\r
           "InteractionType": "Interact",\r
           "$": "16 0  16 0  0 128 -> 32 1  16 0  0 136",\r
+          "DisableNavmesh": true,\r
           "CompletionQuestVariablesFlags": [\r
-            16,\r
-            1,\r
+            null,\r
+            null,\r
             null,\r
             null,\r
             null,\r
             8\r
           ]\r
         },\r
+        {\r
+          "Position": {\r
+            "X": -90.467575,\r
+            "Y": 3.3634722,\r
+            "Z": -27.515985\r
+          },\r
+          "StopDistance": 0.25,\r
+          "TerritoryId": 153,\r
+          "InteractionType": "Jump",\r
+          "JumpDestination": {\r
+            "Position": {\r
+              "X": -84.96217,\r
+              "Y": 6.1436205,\r
+              "Z": -23.793756\r
+            },\r
+            "DelaySeconds": 0.25\r
+          },\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            -32\r
+          ]\r
+        },\r
         {\r
           "DataId": 2001951,\r
           "Position": {\r
           },\r
           "TerritoryId": 153,\r
           "InteractionType": "Interact",\r
-          "$": "32 1  16 0  0 136 -> 49 1  16 0  0 168"\r
+          "$": "32 1  16 0  0 136 -> 49 1  16 0  0 168",\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            32\r
+          ]\r
+        },\r
+        {\r
+          "Position": {\r
+            "X": -77.875786,\r
+            "Y": 3.9296143,\r
+            "Z": -27.107864\r
+          },\r
+          "TerritoryId": 153,\r
+          "InteractionType": "WalkTo",\r
+          "DisableNavmesh": true,\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            -16\r
+          ]\r
+        },\r
+        {\r
+          "Position": {\r
+            "X": 15.053005,\r
+            "Y": 3.8386261,\r
+            "Z": -40.758984\r
+          },\r
+          "TerritoryId": 153,\r
+          "InteractionType": "WalkTo",\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            -16\r
+          ]\r
         },\r
         {\r
           "DataId": 2001952,\r
             "Y": 7.614197,\r
             "Z": -43.137268\r
           },\r
+          "StopDistance": 6,\r
           "TerritoryId": 153,\r
           "InteractionType": "Interact",\r
-          "$": "49 1  16 0  0 168 -> 65 17  16 0  0 184"\r
+          "$": "49 1  16 0  0 168 -> 65 17  16 0  0 184",\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            16\r
+          ]\r
         },\r
         {\r
           "DataId": 2001950,\r
             "Z": -32.333923\r
           },\r
           "TerritoryId": 153,\r
-          "InteractionType": "Combat",\r
-          "EnemySpawnType": "AfterInteraction",\r
-          "KillEnemyDataIds": [\r
-            64,\r
-            61\r
-          ],\r
-          "$": "65 17  16 0  0 184 -> "\r
+          "InteractionType": "Interact",\r
+          "$": "65 17  16 0  0 184 -> ",\r
+          "CompletionQuestVariablesFlags": [\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            null,\r
+            64\r
+          ]\r
         }\r
       ]\r
     },\r
     {\r
       "Sequence": 255,\r
       "Steps": [\r
+        {\r
+          "Position": {\r
+            "X": 51.85704,\r
+            "Y": 2.712612,\r
+            "Z": -42.67677\r
+          },\r
+          "TerritoryId": 153,\r
+          "InteractionType": "WalkTo",\r
+          "DisableNavmesh": true,\r
+          "Mount": false\r
+        },\r
         {\r
           "DataId": 1000590,\r
           "Position": {\r
             "Z": -81.34589\r
           },\r
           "TerritoryId": 153,\r
-          "InteractionType": "CompleteQuest"\r
+          "InteractionType": "CompleteQuest",\r
+          "Mount": false\r
         }\r
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index bc6e19c63f32f50476f3068d931bb088953c0610..103d35609ef83c3aa2091d79543df37a0d8a7033 100644 (file)
     {\r
       "Sequence": 255,\r
       "Steps": [\r
+        {\r
+          "TerritoryId": 153,\r
+          "InteractionType": "AttuneAetheryte",\r
+          "Aetheryte": "South Shroud - Camp Tranquil"\r
+        },\r
         {\r
           "DataId": 1000576,\r
           "Position": {\r
@@ -38,4 +43,4 @@
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index 09439a145f597a4540875d7cffb060c48c78ccb5..d8479af16eba6b6745c96542ed94e50812e87bf9 100644 (file)
@@ -30,6 +30,7 @@
             "Y": 8.673417,\r
             "Z": 187.67012\r
           },\r
+          "StopDistance": 0.5,\r
           "TerritoryId": 152,\r
           "InteractionType": "Emote",\r
           "Emote": "lookout"\r
@@ -53,4 +54,4 @@
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index 352d3f5cf19cb313fbf91b37ceace6855f6e216e..a2c370216d10e88fc54e2fe8e17891479b88b8e9 100644 (file)
           },\r
           "TerritoryId": 140,\r
           "InteractionType": "Interact",\r
-          "DialogueChoices": [\r
-            {\r
-              "ExcelSheet": "Warp",\r
-              "Type": "YesNo",\r
-              "Yes": true,\r
-              "Prompt": 131088\r
-            }\r
-          ]\r
+          "TargetTerritoryId": 212\r
         }\r
       ]\r
     },\r
           },\r
           "TerritoryId": 212,\r
           "InteractionType": "Interact",\r
-          "DialogueChoices": [\r
-            {\r
-              "ExcelSheet": "Warp",\r
-              "Type": "YesNo",\r
-              "Yes": true,\r
-              "Prompt": 131090\r
-            }\r
-          ]\r
+          "TargetTerritoryId": 212\r
         },\r
         {\r
           "DataId": 1006688,\r
@@ -99,4 +85,4 @@
       ]\r
     }\r
   ]\r
-}
\ No newline at end of file
+}\r
index a59faa7c3ab55c71fab4e1cff3213bfc6ecbec73..124677a92b18865cd1facc45b3aeb6bf7bd3e4d4 100644 (file)
     },
     "Author": {
       "description": "Author of the quest sequence",
-      "type": "string"
-    },
-    "Contributors": {
-      "type": "array",
+      "type": ["string", "array"],
       "items": {
         "type": "string"
       }
diff --git a/Questionable.Model/V1/Converter/StringListOrValueConverter.cs b/Questionable.Model/V1/Converter/StringListOrValueConverter.cs
new file mode 100644 (file)
index 0000000..d3e6ea6
--- /dev/null
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace Questionable.Model.V1.Converter;
+
+public sealed class StringListOrValueConverter : JsonConverter<List<string>>
+{
+    public override List<string>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+    {
+        if (reader.TokenType == JsonTokenType.String)
+            return [reader.GetString()!];
+
+        if (reader.TokenType != JsonTokenType.StartArray)
+            throw new JsonException();
+        reader.Read();
+
+        List<string> value = [];
+        while (reader.TokenType != JsonTokenType.EndArray)
+        {
+            value.Add(reader.GetString()!);
+            reader.Read();
+        }
+
+        return value;
+    }
+
+    public override void Write(Utf8JsonWriter writer, List<string>? value, JsonSerializerOptions options)
+    {
+        if (value == null)
+            writer.WriteNullValue();
+        else if (value.Count == 1)
+            writer.WriteStringValue(value[0]);
+        else
+        {
+            writer.WriteStartArray();
+            foreach (var v in value)
+                writer.WriteStringValue(v);
+            writer.WriteEndArray();
+        }
+    }
+}
index cf1967c44056c9fe684482f0453d9516b446e6d2..ada2e9fd907977245308f1f2eed836ca430e6f9b 100644 (file)
@@ -1,11 +1,13 @@
 using System.Collections.Generic;
+using System.Text.Json.Serialization;
+using Questionable.Model.V1.Converter;
 
 namespace Questionable.Model.V1;
 
 public sealed class QuestRoot
 {
-    public string Author { get; set; } = null!;
-    public List<string> Contributors { get; set; } = new();
+    [JsonConverter(typeof(StringListOrValueConverter))]
+    public List<string> Author { get; set; } = new();
 
     /// <summary>
     /// This is only relevant for release builds.