Change how cutscene-only filler sequences are handled
authorLiza Carvelli <liza@carvel.li>
Tue, 12 Aug 2025 20:38:52 +0000 (22:38 +0200)
committerLiza Carvelli <liza@carvel.li>
Wed, 13 Aug 2025 10:11:10 +0000 (12:11 +0200)
97 files changed:
QuestPaths/2.x - A Realm Reborn/Allied Societies/Sylphs/Dailies/1264_The Magitek Menace.json
QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/129_Spirithold Broken.json
QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/445_Chasing Shadows.json
QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/447_To Guard a Guardian.json
QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/469_Just Deserts.json
QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/543_Lurkers in the Grotto.json
QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/544_Feint and Strike.json
QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/320_Way Down in the Hole.json
QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/551_Duty, Honor, Country.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/A9-Haukke Manor/801_Skeletons in Her Closet.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/C9-Ultimate Weapon/4522_The Ultimate Weapon.json
QuestPaths/2.x - A Realm Reborn/MSQ-2/E6-2.55/4591_The Steps of Faith.json
QuestPaths/3.x - Heavensward/Alliance Raid Quests/2205_To Rule the Skies.json
QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1616_Lord of the Hive.json
QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1640_A Knight's Calling.json
QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1669_Heavensward.json
QuestPaths/3.x - Heavensward/MSQ/B-3.1/2163_As Goes Light, So Goes Darkness.json
QuestPaths/3.x - Heavensward/MSQ/D-3.3/2245_An End to the Song.json
QuestPaths/3.x - Heavensward/Unlocks/Misc/4172_Ascending to Empyreum.json
QuestPaths/4.x - Stormblood/Allied Societies/Namazu/Dailies/3107_Free for Most.json
QuestPaths/4.x - Stormblood/Class Quests/MCH/2907_Release the Hounds.json
QuestPaths/4.x - Stormblood/MSQ/F-4.5/3183_The Face of War.json
QuestPaths/4.x - Stormblood/MSQ/H-4.55/3185_A Requiem for Heroes.json
QuestPaths/5.x - Shadowbringers/Allied Societies/Pixies/Story/3683_Manic Pixie Dream Realm.json
QuestPaths/5.x - Shadowbringers/Allied Societies/Pixies/Story/3684_Sustenance for the Soul.json
QuestPaths/5.x - Shadowbringers/Class Quests/GNB/3262_Hired Gunblades.json
QuestPaths/5.x - Shadowbringers/Class Quests/GNB/3266_Steel against Steel.json
QuestPaths/5.x - Shadowbringers/MSQ/A1-Crystarium 1/3279_The Syrcus Trench.json
QuestPaths/5.x - Shadowbringers/MSQ/A2-Kholusia 1/3286_City of Final Pleasures.json
QuestPaths/5.x - Shadowbringers/MSQ/A3-Amh Araeng 1/3291_In Search of Alisaie.json
QuestPaths/5.x - Shadowbringers/MSQ/C-Rak'tika/3324_Into the Dark.json
QuestPaths/5.x - Shadowbringers/MSQ/E-Kholusia 2/3643_Extinguishing the Last Light.json
QuestPaths/5.x - Shadowbringers/MSQ/F-Tempest/3654_Shadowbringers.json
QuestPaths/5.x - Shadowbringers/MSQ/G-5.1/3674_A Grand Adventure.json
QuestPaths/5.x - Shadowbringers/MSQ/H-5.2/3769_Beneath the Surface.json
QuestPaths/5.x - Shadowbringers/MSQ/H-5.2/3770_Echoes of a Fallen Star.json
QuestPaths/5.x - Shadowbringers/MSQ/I-5.3/3775_Faded Memories.json
QuestPaths/5.x - Shadowbringers/MSQ/I-5.3/3777_The Converging Light.json
QuestPaths/5.x - Shadowbringers/MSQ/I-5.3/3778_Hope's Confluence.json
QuestPaths/5.x - Shadowbringers/MSQ/J-5.4/4011_Like Master, Like Pupil.json
QuestPaths/5.x - Shadowbringers/MSQ/K-5.5/4062_The Flames of War.json
QuestPaths/5.x - Shadowbringers/Relics/3835_Path to the Past.json
QuestPaths/5.x - Shadowbringers/Relics/3836_The Bozja Incident.json
QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3278_Courage Born of Fear.json
QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4361_A Labyrinthine Descent.json
QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4377_In the Dark of the Tower.json
QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4383_A Frosty Reception.json
QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4395_Gateway of the Gods.json
QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4396_A Trip to the Moon.json
QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4398_The Martyr.json
QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4409_Skies Aflame.json
QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4420_Hope Upon a Flower.json
QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4437_Caging the Messenger.json
QuestPaths/6.x - Endwalker/MSQ/F-Labyrinthos2/4449_Her Children One and All.json
QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4464_Endwalker.json
QuestPaths/6.x - Endwalker/MSQ/H-6.1/4529_Alzadaals Legacy.json
QuestPaths/6.x - Endwalker/MSQ/I-6.2/4592_In Search of Azdaja.json
QuestPaths/6.x - Endwalker/MSQ/I-6.2/4597_The Wind Rises.json
QuestPaths/6.x - Endwalker/MSQ/J-6.3/4674_King of the Mountain.json
QuestPaths/6.x - Endwalker/MSQ/J-6.3/4677_Desires Untold.json
QuestPaths/6.x - Endwalker/MSQ/K-6.4/4736_Going Haam.json
QuestPaths/6.x - Endwalker/MSQ/K-6.4/4742_Abyssal Dark.json
QuestPaths/6.x - Endwalker/MSQ/L-6.5/4748_Down in the Dark.json
QuestPaths/6.x - Endwalker/MSQ/M-6.55/4752_The Game Is Afoot.json
QuestPaths/6.x - Endwalker/Role Quests/Physical Ranged/4125_Laid to Rest.json
QuestPaths/7.x - Dawntrail/Class Quests/VPR/4849_Fangs of the Viper.json
QuestPaths/7.x - Dawntrail/Class Quests/VPR/4853_Vengeance of the Viper.json
QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4860_A New World to Explore.json
QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4865_To Kozama'uka.json
QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4879_For All Turali.json
QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4884_The Shape of Peace.json
QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4891_The High Luminary.json
QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4894_The Skyruin.json
QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4897_The Leap to Yak T'el.json
QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4909_Road to the Golden City.json
QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4912_The Long Road to Xak Tural.json
QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4923_In Yyasulani's Shadow.json
QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4926_All Aboard.json
QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4933_Solution Nine.json
QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4945_The Resilient Son.json
QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4948_Through the Gate of Gold.json
QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4959_Dawntrail.json
QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5249_The Warmth of Family.json
QuestPaths/7.x - Dawntrail/MSQ/I-7.3/5366_My Memories and Yours.json
QuestPaths/7.x - Dawntrail/MSQ/I-7.3/5367_A Darkness in the Heart.json
QuestPaths/7.x - Dawntrail/MSQ/I-7.3/5368_Preservation Their Purpose.json
QuestPaths/7.x - Dawntrail/MSQ/I-7.3/5371_A Terminal Invitation.json
QuestPaths/7.x - Dawntrail/Role Quests/Healer/4829_An Antidote for Anarchy.json
QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4847_Heroes and Pretenders.json
QuestPaths/7.x - Dawntrail/Role Quests/Melee/4835_A Hunter True.json
QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4841_The Mightiest Shield.json
QuestPaths/7.x - Dawntrail/Role Quests/Tank/4823_Dreams of a New Day.json
QuestPaths/quest-v1.json
Questionable.Model/Questing/QuestSequence.cs
Questionable/Controller/QuestController.cs
Questionable/Controller/Steps/Shared/Gather.cs
Questionable/Controller/Steps/TaskCreator.cs

index d376b2f..e911f09 100644 (file)
@@ -1,73 +1,72 @@
 {
-    "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
-    "Author": "Censored",
-    "Disabled": true,
-    "Comment": "This is a FATE Allied Society Quest",
-    "QuestSequence": [
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "Censored",
+  "Disabled": true,
+  "Comment": "This is a FATE Allied Society Quest",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
         {
-            "Sequence": 0,
-            "Steps": [
-                {
-                    "DataId": 1005561,
-                    "Position": {
-                        "X": 47.01306,
-                        "Y": 6.0734644,
-                        "Z": 254.01685
-                    },
-                    "TerritoryId": 152,
-                    "InteractionType": "AcceptQuest",
-                    "AetheryteShortcut": "East Shroud - Hawthorne Hut",
-                    "Fly": true,
-                    "SkipConditions": {
-                        "AetheryteShortcutIf": {
-                            "InSameTerritory": true
-                        }
-                    }
-                }
-            ]
-        },
+          "DataId": 1005561,
+          "Position": {
+            "X": 47.01306,
+            "Y": 6.0734644,
+            "Z": 254.01685
+          },
+          "TerritoryId": 152,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "East Shroud - Hawthorne Hut",
+          "Fly": true,
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            }
+          }
+        }
+      ]
+    },
+    {
+      "Sequence": 1
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
         {
-            "Sequence": 1,
-            "Steps": []
+          "Position": {
+            "X": 37.71168,
+            "Y": 4.7303743,
+            "Z": 250.62769
+          },
+          "TerritoryId": 152,
+          "InteractionType": "WalkTo",
+          "Fly": true,
+          "Land": true,
+          "SkipConditions": {
+            "StepIf": {
+              "NearPosition": {
+                "Position": {
+                  "X": 37.71168,
+                  "Y": 4.7303743,
+                  "Z": 250.62769
+                },
+                "TerritoryId": 152,
+                "MaximumDistance": 10
+              }
+            }
+          }
         },
         {
-            "Sequence": 255,
-            "Steps": [
-                {
-                    "Position": {
-                        "X": 37.71168,
-                        "Y": 4.7303743,
-                        "Z": 250.62769
-                    },
-                    "TerritoryId": 152,
-                    "InteractionType": "WalkTo",
-                    "Fly": true,
-                    "Land": true,
-                    "SkipConditions": {
-                        "StepIf": {
-                            "NearPosition": {
-                                "Position": {
-                                    "X": 37.71168,
-                                    "Y": 4.7303743,
-                                    "Z": 250.62769
-                                },
-                                "TerritoryId": 152,
-                                "MaximumDistance": 10
-                            }
-                        }
-                    }
-                },
-                {
-                    "DataId": 1005561,
-                    "Position": {
-                        "X": 47.01306,
-                        "Y": 6.0734644,
-                        "Z": 254.01685
-                    },
-                    "TerritoryId": 152,
-                    "InteractionType": "CompleteQuest"
-                }
-            ]
+          "DataId": 1005561,
+          "Position": {
+            "X": 47.01306,
+            "Y": 6.0734644,
+            "Z": 254.01685
+          },
+          "TerritoryId": 152,
+          "InteractionType": "CompleteQuest"
         }
-    ]
+      ]
+    }
+  ]
 }
index 9b882da..ec0eebc 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
index 73e086f..a48f76c 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 0e90567..04941d8 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 255,
index c38eddc..8282a61 100644 (file)
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 6,
index e319cb1..f38283e 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 255,
index eed5628..130ee6e 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 255,
index 10b394a..0dcb568 100644 (file)
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 6,
index 846a75d..222f173 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 255,
index e8b7817..53e0b20 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
index aad57d7..62ae139 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 6,
index 1c91e8f..906fc74 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index d2dcc60..a053802 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 255,
index bac7e06..99548bb 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
index da55ca4..bba5049 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
index 215f184..1772127 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
index a211178..9cb8e5b 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index c49c8e3..7d7ec14 100644 (file)
       ]
     },
     {
-      "Sequence": 1,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 1
     },
     {
       "Sequence": 2,
index 72601fe..f7a58b1 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index f88df65..d68ddad 100644 (file)
@@ -44,8 +44,7 @@
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": []
+      "Sequence": 2
     },
     {
       "Sequence": 255,
       ]
     }
   ]
-}
\ No newline at end of file
+}
index f4124de..32e5fb7 100644 (file)
@@ -72,9 +72,7 @@
       ]\r
     },\r
     {\r
-      "Sequence": 3,\r
-      "Steps": [\r
-      ]\r
+      "Sequence": 3\r
     },\r
     {\r
       "Sequence": 4,\r
index 0dcf298..f959403 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 76e5fdb..3840513 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 201cfc2..ff03942 100644 (file)
       ]
     },
     {
-      "Sequence": 7,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 7
     },
     {
       "Sequence": 8,
       ]
     },
     {
-      "Sequence": 9,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 9
     },
     {
       "Sequence": 10,
index 75b26ea..58ac0f7 100644 (file)
       ]
     },
     {
-      "Sequence": 10,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 10
     },
     {
       "Sequence": 11,
index 187ee71..8feb64e 100644 (file)
       ]
     },
     {
-      "Sequence": 6,
-      "Steps": [
-      ]
+      "Sequence": 6
     },
     {
       "Sequence": 7,
index 443df19..2fc4724 100644 (file)
@@ -64,8 +64,7 @@
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": []
+      "Sequence": 3
     },
     {
       "Sequence": 4,
index 456f753..96ac18f 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
index ed00aca..b3091fe 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index f300ab5..2767027 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
index fbf2d4c..8596bf5 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index ef9aa4d..32e6315 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
index 4ff383f..1e9450b 100644 (file)
       ]
     },
     {
-      "Sequence": 8,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 8
     },
     {
       "Sequence": 9,
       ]
     },
     {
-      "Sequence": 10,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 10
     },
     {
       "Sequence": 11,
index 2e85654..b5ab485 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 255,
index 61a471a..7fff366 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 255,
index 21c950e..dd91228 100644 (file)
       ]
     },
     {
-      "Sequence": 1,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 1
     },
     {
       "Sequence": 2,
index 44d8eba..f7895cd 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index a1b2847..ce66f21 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
index 57781ac..c02921a 100644 (file)
       ]
     },
     {
-      "Sequence": 1,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 1
     },
     {
       "Sequence": 2,
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 255,
index 62f0227..beb0f39 100644 (file)
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 255,
index 0024ca1..0c7ebbc 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 255,
index 0cb9d44..e134298 100644 (file)
 {\r
-    "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",\r
-    "Author": "Censored",\r
-    "QuestSequence": [\r
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",\r
+  "Author": "Censored",\r
+  "QuestSequence": [\r
+    {\r
+      "Sequence": 0,\r
+      "Steps": [\r
         {\r
-            "Sequence": 0,\r
-            "Steps": [\r
-                {\r
-                    "DataId": 1032868,\r
-                    "Position": {\r
-                        "X": -258.59473,\r
-                        "Y": 53.217506,\r
-                        "Z": -644.8616\r
-                    },\r
-                    "TerritoryId": 614,\r
-                    "InteractionType": "AcceptQuest",\r
-                    "AetheryteShortcut": "Yanxia - House of the Fierce",\r
-                    "Fly": true,\r
-                    "SkipConditions": {\r
-                        "AetheryteShortcutIf": {\r
-                            "InSameTerritory": true\r
-                        }\r
-                    }\r
-                }\r
-            ]\r
-        },\r
-        {\r
-            "Sequence": 1,\r
-            "Steps": [\r
-                {\r
-                    "DataId": 1032869,\r
-                    "Position": {\r
-                        "X": 127.27539,\r
-                        "Y": -4.1787133,\r
-                        "Z": 98.68005\r
-                    },\r
-                    "TerritoryId": 759,\r
-                    "InteractionType": "Interact",\r
-                    "AetheryteShortcut": "Doman Enclave",\r
-                    "AethernetShortcut": [\r
-                        "[Doman Enclave] Aetheryte Plaza",\r
-                        "[Doman Enclave] Ferry Docks"\r
-                    ],\r
-                    "DialogueChoices": [\r
-                        {\r
-                            "Type": "YesNo",\r
-                            "Prompt": "TEXT_LUCKSA002_03835_Q1_000_031",\r
-                            "Yes": true\r
-                        }\r
-                    ]\r
-                }\r
-            ]\r
-        },\r
+          "DataId": 1032868,\r
+          "Position": {\r
+            "X": -258.59473,\r
+            "Y": 53.217506,\r
+            "Z": -644.8616\r
+          },\r
+          "TerritoryId": 614,\r
+          "InteractionType": "AcceptQuest",\r
+          "AetheryteShortcut": "Yanxia - House of the Fierce",\r
+          "Fly": true,\r
+          "SkipConditions": {\r
+            "AetheryteShortcutIf": {\r
+              "InSameTerritory": true\r
+            }\r
+          }\r
+        }\r
+      ]\r
+    },\r
+    {\r
+      "Sequence": 1,\r
+      "Steps": [\r
         {\r
-            "Sequence": 2,\r
-            "Steps": [\r
-                {\r
-                    "Position": {\r
-                        "X": 0,\r
-                        "Y": 0,\r
-                        "Z": 0\r
-                    },\r
-                    "TerritoryId": 1,\r
-                    "InteractionType": "WalkTo",\r
-                    "Comment": "Filler"\r
-                }\r
-            ]\r
-        },\r
+          "DataId": 1032869,\r
+          "Position": {\r
+            "X": 127.27539,\r
+            "Y": -4.1787133,\r
+            "Z": 98.68005\r
+          },\r
+          "TerritoryId": 759,\r
+          "InteractionType": "Interact",\r
+          "AetheryteShortcut": "Doman Enclave",\r
+          "AethernetShortcut": [\r
+            "[Doman Enclave] Aetheryte Plaza",\r
+            "[Doman Enclave] Ferry Docks"\r
+          ],\r
+          "DialogueChoices": [\r
+            {\r
+              "Type": "YesNo",\r
+              "Prompt": "TEXT_LUCKSA002_03835_Q1_000_031",\r
+              "Yes": true\r
+            }\r
+          ]\r
+        }\r
+      ]\r
+    },\r
+    {\r
+      "Sequence": 2\r
+    },\r
+    {\r
+      "Sequence": 3,\r
+      "Steps": [\r
         {\r
-            "Sequence": 3,\r
-            "Steps": [\r
-                {\r
-                    "DataId": 1032874,\r
-                    "Position": {\r
-                        "X": 13.168518,\r
-                        "Y": -0.23751694,\r
-                        "Z": 8.377136\r
-                    },\r
-                    "TerritoryId": 915,\r
-                    "InteractionType": "Interact"\r
-                }\r
-            ]\r
-        },\r
+          "DataId": 1032874,\r
+          "Position": {\r
+            "X": 13.168518,\r
+            "Y": -0.23751694,\r
+            "Z": 8.377136\r
+          },\r
+          "TerritoryId": 915,\r
+          "InteractionType": "Interact"\r
+        }\r
+      ]\r
+    },\r
+    {\r
+      "Sequence": 4,\r
+      "Steps": [\r
         {\r
-            "Sequence": 4,\r
-            "Steps": [\r
-                {\r
-                    "DataId": 1032871,\r
-                    "Position": {\r
-                        "X": 22.323914,\r
-                        "Y": 0.09971012,\r
-                        "Z": -14.694458\r
-                    },\r
-                    "TerritoryId": 915,\r
-                    "InteractionType": "Interact"\r
-                }\r
-            ]\r
-        },\r
+          "DataId": 1032871,\r
+          "Position": {\r
+            "X": 22.323914,\r
+            "Y": 0.09971012,\r
+            "Z": -14.694458\r
+          },\r
+          "TerritoryId": 915,\r
+          "InteractionType": "Interact"\r
+        }\r
+      ]\r
+    },\r
+    {\r
+      "Sequence": 5,\r
+      "Steps": [\r
         {\r
-            "Sequence": 5,\r
-            "Steps": [\r
-                {\r
-                    "DataId": 1032877,\r
-                    "Position": {\r
-                        "X": 29.43457,\r
-                        "Y": 0,\r
-                        "Z": 30.350098\r
-                    },\r
-                    "TerritoryId": 635,\r
-                    "InteractionType": "Interact",\r
-                    "AetheryteShortcut": "Rhalgr's Reach"\r
-                }\r
-            ]\r
-        },\r
+          "DataId": 1032877,\r
+          "Position": {\r
+            "X": 29.43457,\r
+            "Y": 0,\r
+            "Z": 30.350098\r
+          },\r
+          "TerritoryId": 635,\r
+          "InteractionType": "Interact",\r
+          "AetheryteShortcut": "Rhalgr's Reach"\r
+        }\r
+      ]\r
+    },\r
+    {\r
+      "Sequence": 255,\r
+      "Steps": [\r
         {\r
-            "Sequence": 255,\r
-            "Steps": [\r
-                {\r
-                    "DataId": 1032877,\r
-                    "Position": {\r
-                        "X": 29.43457,\r
-                        "Y": 0,\r
-                        "Z": 30.350098\r
-                    },\r
-                    "TerritoryId": 635,\r
-                    "InteractionType": "CompleteQuest",\r
-                    "NextQuestId": 3836\r
-                }\r
-            ]\r
+          "DataId": 1032877,\r
+          "Position": {\r
+            "X": 29.43457,\r
+            "Y": 0,\r
+            "Z": 30.350098\r
+          },\r
+          "TerritoryId": 635,\r
+          "InteractionType": "CompleteQuest",\r
+          "NextQuestId": 3836\r
         }\r
-    ]\r
+      ]\r
+    }\r
+  ]\r
 }\r
index fe1cc7c..c818c97 100644 (file)
@@ -1,99 +1,87 @@
 {\r
-    "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",\r
-    "Author": "Censored",\r
-    "QuestSequence": [\r
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",\r
+  "Author": "Censored",\r
+  "QuestSequence": [\r
+    {\r
+      "Sequence": 0,\r
+      "Steps": [\r
         {\r
-            "Sequence": 0,\r
-            "Steps": [\r
-                {\r
-                    "DataId": 1032877,\r
-                    "Position": {\r
-                        "X": 29.43457,\r
-                        "Y": 0,\r
-                        "Z": 30.350098\r
-                    },\r
-                    "TerritoryId": 635,\r
-                    "InteractionType": "AcceptQuest",\r
-                    "AetheryteShortcut": "Rhalgr's Reach",\r
-                    "SkipConditions": {\r
-                        "AetheryteShortcutIf": {\r
-                            "InSameTerritory": true\r
-                        }\r
-                    }\r
-                }\r
-            ]\r
-        },\r
-        {\r
-            "Sequence": 1,\r
-            "Steps": [\r
-                {\r
-                    "DataId": 1032869,\r
-                    "Position": {\r
-                        "X": 127.27539,\r
-                        "Y": -4.1787133,\r
-                        "Z": 98.68005\r
-                    },\r
-                    "TerritoryId": 759,\r
-                    "InteractionType": "Interact",\r
-                    "AetheryteShortcut": "Doman Enclave",\r
-                    "AethernetShortcut": [\r
-                        "[Doman Enclave] Aetheryte Plaza",\r
-                        "[Doman Enclave] Ferry Docks"\r
-                    ]\r
-                }\r
-            ]\r
-        },\r
+          "DataId": 1032877,\r
+          "Position": {\r
+            "X": 29.43457,\r
+            "Y": 0,\r
+            "Z": 30.350098\r
+          },\r
+          "TerritoryId": 635,\r
+          "InteractionType": "AcceptQuest",\r
+          "AetheryteShortcut": "Rhalgr's Reach",\r
+          "SkipConditions": {\r
+            "AetheryteShortcutIf": {\r
+              "InSameTerritory": true\r
+            }\r
+          }\r
+        }\r
+      ]\r
+    },\r
+    {\r
+      "Sequence": 1,\r
+      "Steps": [\r
         {\r
-            "Sequence": 2,\r
-            "Steps": [\r
-                {\r
-                    "DataId": 1032901,\r
-                    "Position": {\r
-                        "X": 9.567322,\r
-                        "Y": -6.0169958E-05,\r
-                        "Z": -10.269409\r
-                    },\r
-                    "TerritoryId": 915,\r
-                    "InteractionType": "SinglePlayerDuty",\r
-                    "DialogueChoices": [\r
-                        {\r
-                            "Type": "YesNo",\r
-                            "Prompt": "TEXT_LUCKSA003_03836_Q1_100_098",\r
-                            "Yes": true\r
-                        }\r
-                    ]\r
-                }\r
-            ]\r
-        },\r
+          "DataId": 1032869,\r
+          "Position": {\r
+            "X": 127.27539,\r
+            "Y": -4.1787133,\r
+            "Z": 98.68005\r
+          },\r
+          "TerritoryId": 759,\r
+          "InteractionType": "Interact",\r
+          "AetheryteShortcut": "Doman Enclave",\r
+          "AethernetShortcut": [\r
+            "[Doman Enclave] Aetheryte Plaza",\r
+            "[Doman Enclave] Ferry Docks"\r
+          ]\r
+        }\r
+      ]\r
+    },\r
+    {\r
+      "Sequence": 2,\r
+      "Steps": [\r
         {\r
-            "Sequence": 3,\r
-            "Steps": [\r
-                {\r
-                    "Position": {\r
-                        "X": 0,\r
-                        "Y": 0,\r
-                        "Z": 0\r
-                    },\r
-                    "TerritoryId": 1,\r
-                    "InteractionType": "WalkTo",\r
-                    "Comment": "Filler"\r
-                }\r
-            ]\r
-        },\r
+          "DataId": 1032901,\r
+          "Position": {\r
+            "X": 9.567322,\r
+            "Y": -6.0169958E-05,\r
+            "Z": -10.269409\r
+          },\r
+          "TerritoryId": 915,\r
+          "InteractionType": "SinglePlayerDuty",\r
+          "DialogueChoices": [\r
+            {\r
+              "Type": "YesNo",\r
+              "Prompt": "TEXT_LUCKSA003_03836_Q1_100_098",\r
+              "Yes": true\r
+            }\r
+          ]\r
+        }\r
+      ]\r
+    },\r
+    {\r
+      "Sequence": 3\r
+    },\r
+    {\r
+      "Sequence": 255,\r
+      "Steps": [\r
         {\r
-            "Sequence": 255,\r
-            "Steps": [\r
-                {\r
-                    "DataId": 1032872,\r
-                    "Position": {\r
-                        "X": 16.67804,\r
-                        "Y": 0.03006095,\r
-                        "Z": -17.868408\r
-                    },\r
-                    "TerritoryId": 915,\r
-                    "InteractionType": "CompleteQuest"\r
-                }\r
-            ]\r
+          "DataId": 1032872,\r
+          "Position": {\r
+            "X": 16.67804,\r
+            "Y": 0.03006095,\r
+            "Z": -17.868408\r
+          },\r
+          "TerritoryId": 915,\r
+          "InteractionType": "CompleteQuest"\r
         }\r
-    ]\r
+      ]\r
+    }\r
+  ]\r
 }\r
index 9a765b5..d5e2677 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
index d07dba7..a346bc0 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 255,
index a1734a3..59ffc15 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 2e876fb..a04cb50 100644 (file)
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 255,
index 5a3b25c..840e66c 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 60e6929..cb17a14 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 255,
index 21ad7d9..2c667df 100644 (file)
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 255,
index 82b13f6..bc27ab3 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 89c6fc5..12ea1f4 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 255,
index fc0aac0..bd3e851 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 6,
index 115157d..27f8176 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
       ]
     },
     {
-      "Sequence": 6,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 6
     },
     {
       "Sequence": 7,
index 8638a86..17f9fe9 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 255,
index 561b190..9b530bb 100644 (file)
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 255,
index 161b218..258bff8 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 255,
index 14c3171..060fc13 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 255,
index 2f46c5a..bf97fae 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 255,
index 30fa509..7f0b107 100644 (file)
       ]
     },
     {
-      "Sequence": 8,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 8
     },
     {
       "Sequence": 255,
index 8961732..9a8d28f 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 255,
index f507df6..7938aeb 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
       ]
     },
     {
-      "Sequence": 6,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 6
     },
     {
       "Sequence": 255,
index 058ec65..d51d782 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 044209f..56dda6a 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 7ab4379..308dfff 100644 (file)
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 6,
index 254709b..203b43b 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
index 5db8f68..503e9ab 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
index 5de37fb..e41ef1b 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 986d752..5931bb5 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
index 32e96d5..5ad515e 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 39268a0..b0c2f51 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 255,
index 4f5e866..097d0bb 100644 (file)
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 255,
index c720eb8..1abd6fc 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 9a1488e..3c35803 100644 (file)
       ]
     },
     {
-      "Sequence": 6,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 6
     },
     {
       "Sequence": 255,
index d0895fd..70398f1 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 65fe8e8..e511ce1 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 5c83c61..3430bca 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 255,
index 747faf1..de27bd7 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index e57ca85..0c166ac 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 6,
index f3fc93d..55791f6 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
index 0561e14..9fe9a72 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 255,
index 204ac29..3277e19 100644 (file)
@@ -43,8 +43,7 @@
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": []
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 2d10d1e..6043d07 100644 (file)
       ]
     },
     {
-      "Sequence": 7,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 7
     },
     {
       "Sequence": 255,
index 9569ac0..9ca78c4 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 255,
index daa0551..185af16 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 205ca0d..01e51c8 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
       ]
     },
     {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 5
     },
     {
       "Sequence": 6,
index b56436f..e99b41f 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
index 765794c..aacd55f 100644 (file)
       ]
     },
     {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 2
     },
     {
       "Sequence": 3,
index 043e48c..c87b7d8 100644 (file)
       ]
     },
     {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 4
     },
     {
       "Sequence": 5,
index 20380ed..7289c24 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
index 4f05b34..4e7ecc2 100644 (file)
       ]
     },
     {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
+      "Sequence": 3
     },
     {
       "Sequence": 4,
index 761c4ce..3df1453 100644 (file)
@@ -47,7 +47,9 @@
             "type": "array",
             "items": {
               "$ref": "#/$defs/Step"
-            }
+            },
+            "minItems": 1,
+            "description": "All steps necessary to complete the quest sequence. If a sequence has no steps (e.g. if it is cutscene-only), this element should not be used."
           },
           "Comment": {
             "type": "string"
index 3e42e09..b98978e 100644 (file)
@@ -5,7 +5,7 @@ namespace Questionable.Model.Questing;
 
 public sealed class QuestSequence
 {
-    public int Sequence { get; set; }
+    public byte Sequence { get; set; }
     public string? Comment { get; set; }
     public List<QuestStep> Steps { get; set; } = new();
 
index a8024fb..6387f3b 100644 (file)
@@ -457,7 +457,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
                 return;
             }
 
-            if (questToRun.Step >= sequence.Steps.Count)
+            if (sequence.Steps.Count > 0 && questToRun.Step >= sequence.Steps.Count)
             {
                 DebugState = "Step not found";
                 Stop("Unknown step");
@@ -468,27 +468,30 @@ internal sealed class QuestController : MiniTaskController<QuestController>
         }
     }
 
-    public (QuestSequence? Sequence, QuestStep? Step) GetNextStep()
+    public (QuestSequence? Sequence, QuestStep? Step, bool createTasks) GetNextStep()
     {
         if (CurrentQuest == null)
-            return (null, null);
+            return (null, null, false);
 
         var q = CurrentQuest.Quest;
         var seq = q.FindSequence(CurrentQuest.Sequence);
         if (seq == null)
-            return (null, null);
+            return (null, null, true);
+
+        if (seq.Steps.Count == 0)
+            return (seq, null, true);
 
         if (CurrentQuest.Step >= seq.Steps.Count)
-            return (null, null);
+            return (null, null, false);
 
-        return (seq, seq.Steps[CurrentQuest.Step]);
+        return (seq, seq.Steps[CurrentQuest.Step], true);
     }
 
     public void IncreaseStepCount(ElementId? questId, int? sequence, bool shouldContinue = false)
     {
         lock (_progressLock)
         {
-            (QuestSequence? seq, QuestStep? step) = GetNextStep();
+            (QuestSequence? seq, QuestStep? step, _) = GetNextStep();
             if (CurrentQuest == null || seq == null || step == null)
             {
                 _logger.LogWarning("Unable to retrieve next quest step, not increasing step count");
@@ -662,8 +665,8 @@ internal sealed class QuestController : MiniTaskController<QuestController>
         if (TryPickPriorityQuest())
             _logger.LogInformation("Using priority quest over current quest");
 
-        (QuestSequence? seq, QuestStep? step) = GetNextStep();
-        if (CurrentQuest == null || seq == null || step == null)
+        (QuestSequence? seq, QuestStep? step, bool createTasks) = GetNextStep();
+        if (CurrentQuest == null || seq == null)
         {
             if (CurrentQuestDetails?.Progress.Quest.Id is SatisfactionSupplyNpcId &&
                 CurrentQuestDetails?.Progress.Sequence == 1 &&
@@ -681,7 +684,8 @@ internal sealed class QuestController : MiniTaskController<QuestController>
                     CurrentQuest?.Quest.Id, CurrentQuest?.Sequence, CurrentQuest?.Step);
             }
 
-            return;
+            if (CurrentQuest == null || !createTasks)
+                return;
         }
 
         _movementController.Stop();
@@ -690,7 +694,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
 
         try
         {
-            foreach (var task in _taskCreator.CreateTasks(CurrentQuest.Quest, seq, step))
+            foreach (var task in _taskCreator.CreateTasks(CurrentQuest.Quest, CurrentQuest.Sequence, seq, step))
                 _taskQueue.Enqueue(task);
         }
         catch (Exception e)
index 31f6a9c..04f0be3 100644 (file)
@@ -28,12 +28,12 @@ internal static class Gather
 
             foreach (var itemToGather in step.ItemsToGather)
             {
-                yield return new DelayedGatheringTask(itemToGather, quest);
+                yield return new DelayedGatheringTask(itemToGather, quest, (byte)sequence.Sequence);
             }
         }
     }
 
-    internal sealed record DelayedGatheringTask(GatheredItem GatheredItem, Quest Quest) : ITask
+    internal sealed record DelayedGatheringTask(GatheredItem GatheredItem, Quest Quest, byte Sequence) : ITask
     {
         public override string ToString() => $"Gathering(pending for {GatheredItem.ItemId})";
     }
@@ -77,7 +77,7 @@ internal static class Gather
                 foreach (var gatheringStep in gatheringSequence.Steps)
                 {
                     foreach (var task in serviceProvider.GetRequiredService<TaskCreator>()
-                                 .CreateTasks(Task.Quest, gatheringSequence, gatheringStep))
+                                 .CreateTasks(Task.Quest, Task.Sequence, gatheringSequence, gatheringStep))
                         if (task is WaitAtEnd.NextStep)
                             yield return new SkipMarker();
                         else
index 997d40d..9df249a 100644 (file)
@@ -4,7 +4,9 @@ using System.Linq;
 using Dalamud.Plugin.Services;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
+using Questionable.Controller.Steps.Common;
 using Questionable.Controller.Steps.Interactions;
+using Questionable.Controller.Steps.Shared;
 using Questionable.Data;
 using Questionable.Model;
 using Questionable.Model.Questing;
@@ -16,63 +18,81 @@ internal sealed class TaskCreator
     private readonly IServiceProvider _serviceProvider;
     private readonly TerritoryData _territoryData;
     private readonly IClientState _clientState;
+    private readonly IChatGui _chatGui;
     private readonly ILogger<TaskCreator> _logger;
 
     public TaskCreator(
         IServiceProvider serviceProvider,
         TerritoryData territoryData,
         IClientState clientState,
+        IChatGui chatGui,
         ILogger<TaskCreator> logger)
     {
         _serviceProvider = serviceProvider;
         _territoryData = territoryData;
         _clientState = clientState;
+        _chatGui = chatGui;
         _logger = logger;
     }
 
-    public IReadOnlyList<ITask> CreateTasks(Quest quest, QuestSequence sequence, QuestStep step)
+    public IReadOnlyList<ITask> CreateTasks(Quest quest, byte sequenceNumber, QuestSequence? sequence, QuestStep? step)
     {
-        using var scope = _serviceProvider.CreateScope();
-        var newTasks = scope.ServiceProvider.GetRequiredService<IEnumerable<ITaskFactory>>()
-            .SelectMany(x =>
-            {
-                List<ITask> tasks = x.CreateAllTasks(quest, sequence, step).ToList();
-
-                if (tasks.Count > 0 && _logger.IsEnabled(LogLevel.Trace))
+        List<ITask> newTasks;
+        if (sequence == null)
+        {
+            _chatGui.PrintError(
+                $"Path for quest '{quest.Info.Name}' ({quest.Id}) does not contain sequence {sequenceNumber}, please report this.",
+                CommandHandler.MessageTag, CommandHandler.TagColor);
+            newTasks = [new WaitAtEnd.WaitNextStepOrSequence()];
+        }
+        else if (step == null)
+        {
+            newTasks = [new WaitAtEnd.WaitNextStepOrSequence()];
+        }
+        else
+        {
+            using var scope = _serviceProvider.CreateScope();
+            newTasks = scope.ServiceProvider.GetRequiredService<IEnumerable<ITaskFactory>>()
+                .SelectMany(x =>
                 {
-                    string factoryName = x.GetType().FullName ?? x.GetType().Name;
-                    if (factoryName.Contains('.', StringComparison.Ordinal))
-                        factoryName = factoryName[(factoryName.LastIndexOf('.') + 1)..];
+                    List<ITask> tasks = x.CreateAllTasks(quest, sequence, step).ToList();
 
-                    _logger.LogTrace("Factory {FactoryName} created Task {TaskNames}",
-                        factoryName, string.Join(", ", tasks.Select(y => y.ToString())));
-                }
+                    if (tasks.Count > 0 && _logger.IsEnabled(LogLevel.Trace))
+                    {
+                        string factoryName = x.GetType().FullName ?? x.GetType().Name;
+                        if (factoryName.Contains('.', StringComparison.Ordinal))
+                            factoryName = factoryName[(factoryName.LastIndexOf('.') + 1)..];
 
-                return tasks;
-            })
-            .ToList();
+                        _logger.LogTrace("Factory {FactoryName} created Task {TaskNames}",
+                            factoryName, string.Join(", ", tasks.Select(y => y.ToString())));
+                    }
 
-        var singlePlayerDutyTask = newTasks
-            .Where(y => y is SinglePlayerDuty.StartSinglePlayerDuty)
-            .Cast<SinglePlayerDuty.StartSinglePlayerDuty>()
-            .FirstOrDefault();
-        if (singlePlayerDutyTask != null &&
-            _territoryData.TryGetContentFinderCondition(singlePlayerDutyTask.ContentFinderConditionId,
-                out var cfcData))
-        {
-            // if we have a single player duty in queue, we check if we're in the matching territory
-            // if yes, skip all steps before (e.g. teleporting, waiting for navmesh, moving, interacting)
-            if (_clientState.TerritoryType == cfcData.TerritoryId)
+                    return tasks;
+                })
+                .ToList();
+
+            var singlePlayerDutyTask = newTasks
+                .Where(y => y is SinglePlayerDuty.StartSinglePlayerDuty)
+                .Cast<SinglePlayerDuty.StartSinglePlayerDuty>()
+                .FirstOrDefault();
+            if (singlePlayerDutyTask != null &&
+                _territoryData.TryGetContentFinderCondition(singlePlayerDutyTask.ContentFinderConditionId,
+                    out var cfcData))
             {
-                int index = newTasks.IndexOf(singlePlayerDutyTask);
-                _logger.LogWarning(
-                    "Skipping {SkippedTaskCount} out of {TotalCount} tasks, questionable was started while in single player duty",
-                    index + 1, newTasks.Count);
+                // if we have a single player duty in queue, we check if we're in the matching territory
+                // if yes, skip all steps before (e.g. teleporting, waiting for navmesh, moving, interacting)
+                if (_clientState.TerritoryType == cfcData.TerritoryId)
+                {
+                    int index = newTasks.IndexOf(singlePlayerDutyTask);
+                    _logger.LogWarning(
+                        "Skipping {SkippedTaskCount} out of {TotalCount} tasks, questionable was started while in single player duty",
+                        index + 1, newTasks.Count);
 
-                newTasks.RemoveRange(0, index + 1);
-                _logger.LogInformation("Next actual task: {NextTask}, total tasks left: {RemainingTaskCount}",
-                    newTasks.FirstOrDefault(),
-                    newTasks.Count);
+                    newTasks.RemoveRange(0, index + 1);
+                    _logger.LogInformation("Next actual task: {NextTask}, total tasks left: {RemainingTaskCount}",
+                        newTasks.FirstOrDefault(),
+                        newTasks.Count);
+                }
             }
         }
 
@@ -81,7 +101,7 @@ internal sealed class TaskCreator
         else
         {
             _logger.LogInformation("Tasks for {QuestId}, {Sequence}, {Step}: {Tasks}",
-                quest.Id, sequence.Sequence, sequence.Steps.IndexOf(step),
+                quest.Id, sequenceNumber, step != null ? sequence?.Steps.IndexOf(step) : null,
                 string.Join(", ", newTasks.Select(x => x.ToString())));
         }