From d64cd9d5fc57515756048ebe7435aa420e6c038a Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 1 Aug 2024 03:22:01 +0200 Subject: [PATCH] Update CompletionQuestVariablesFlags for skip checking --- QuestPathGenerator/RoslynShortcuts.cs | 7 +- .../GLA/253_Way of the Gladiator.json | 178 ++++++++++- .../GLA/256_Kicking the Hornet's Nest.json | 286 ++++++++++++++++++ .../SCH/1098_The Last Remnants.json | 80 +++-- .../SCH/1101_For Your Fellow Man.json | 36 ++- .../WAR/1052_Looking the Part.json | 78 +++-- .../MSQ-1/Gridania/377_Don't Look Down.json | 80 +++-- .../MSQ-1/Limsa/465_Washed Up.json | 20 +- .../MSQ-1/Shared/574_Dressed to Deceive.json | 20 +- .../MSQ-1/Ul'dah/671_Nothing to See Here.json | 20 +- .../738_Sylphish Concerns.json | 80 +++-- .../889_Three for Three.json | 20 +- .../897_The Talk of Coerthas.json | 20 +- .../960_It's Probably Not Pirates.json | 40 ++- .../1001_Drowning Out the Voices.json | 40 ++- .../E3-2.3/1460_Brave New Companions.json | 20 +- .../Raid Quests/1709_Legacy of Allag.json | 160 ++++++---- .../Story/1321_How Low Can You Go.json | 20 +- .../1828_Hide Your Moogles.json | 100 +++--- .../1771_Some Bad News.json | 100 +++--- .../1797_The Hunter Becomes the Kweh.json | 100 +++--- .../1593_Sense of Urgency.json | 40 ++- .../1662_Hour of Departure.json | 40 ++- .../Ananta/Dailies/3064_Thin-skinned.json | 120 +++++--- .../Lakeland/3380_A Jobb Well Done.json | 100 +++--- .../Lakeland/3384_Imperative Repairs.json | 40 ++- .../B-Il Mheg/3305_The Oracle of Light.json | 20 +- .../MSQ/B-Il Mheg/3307_Sul Uin's Request.json | 40 ++- .../MSQ/B-Il Mheg/3315_Spore Sweeper.json | 40 ++- .../MSQ/B-Il Mheg/3316_The Lawless Ones.json | 120 +++++--- .../C-Rak'tika/3335_Look to the Stars.json | 100 +++--- .../MSQ/E-Kholusia 2/3633_The Ladder.json | 40 ++- .../MSQ/F-Tempest/3645_In His Garden.json | 20 +- ...689_Where There's Wool, There's a Way.json | 40 ++- .../4241_Carrots Its Whats for Dinner.json | 280 ++++++++++------- .../Thavnair/4203_Alchemist or Dancer.json | 20 +- .../Thavnair/4259_Radiant Patrol.json | 2 +- .../B-Garlemald/4389_Personae non Gratae.json | 20 +- .../B-Garlemald/4393_Strange Bedfellows.json | 60 ++-- .../4410_The Blasphemy Unmasked.json | 20 +- .../MSQ/E-Elpis/4420_Hope Upon a Flower.json | 20 +- .../4456_Roads Paved of Sacrifice.json | 20 +- .../MSQ/H-6.1/4531_Sharing the Wealth.json | 20 +- .../Thavnair/4491_Ogul Repays Her Favors.json | 60 ++-- .../Thavnair/4495_The Sins We Bear.json | 60 ++-- .../Dailies/4557_Gulal Generosity.json | 60 ++-- .../Dailies/4564_Olfactory Warfare.json | 62 ++-- .../Arkasodara/Dailies/4570_Patching Up.json | 60 ++-- .../Dailies/4573_Gathering Moss.json | 20 +- .../Dailies/4574_Blood from a Stonemason.json | 20 +- .../5047_An Illuminating Ritual.json | 20 +- .../4892_An Echo of Madness.json | 20 +- .../MSQ/C-Yak T'el/4907_Mamook Speaks.json | 40 ++- .../4927_The Land of Levin.json | 20 +- .../4952_A Knight of Alexandria.json | 20 +- .../Heritage Found/5155_History Reforged.json | 40 ++- .../Kozama'uka/5075_Water Colors.json | 20 +- .../5175_The Canals of History.json | 20 +- .../5181_Leaving This Place for Good.json | 40 ++- .../Shaaloani/5121_Taste of the Wilds.json | 40 ++- .../Shaaloani/5132_Death by Popoto.json | 20 +- .../Shaaloani/5142_Back on Stage.json | 48 +-- .../Shaaloani/5148_Dig for Victory.json | 16 +- .../Side Quests/Yak T'el/5097_Sick Day.json | 20 +- .../Yak T'el/5098_To Forge in the Forest.json | 60 ++-- .../Yak T'el/5101_Two Hearts Aflutter.json | 80 +++-- QuestPaths/AssemblyQuestLoader.cs | 1 + QuestPaths/quest-v1.json | 82 +++-- Questionable.Model/V1/ComplexCombatData.cs | 2 +- .../V1/Converter/QuestWorkConfigConverter.cs | 7 +- .../V1/Converter/QuestWorkModeConverter.cs | 12 + .../Converter/StringListOrValueConverter.cs | 2 +- Questionable.Model/V1/EQuestWorkMode.cs | 11 + Questionable.Model/V1/QuestStep.cs | 2 +- Questionable.Model/V1/QuestWorkValue.cs | 20 +- Questionable.Model/V1/SkipStepConditions.cs | 11 +- Questionable/Controller/CombatController.cs | 2 +- .../Controller/Steps/Interactions/Combat.cs | 6 +- .../Controller/Steps/Interactions/UseItem.cs | 12 +- .../Controller/Steps/Shared/SkipCondition.cs | 20 +- .../Controller/Steps/Shared/WaitAtEnd.cs | 8 +- .../Controller/Utils/QuestWorkUtils.cs | 46 +-- .../Validators/CompletionFlagsValidator.cs | 13 +- 83 files changed, 2510 insertions(+), 1340 deletions(-) create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/GLA/256_Kicking the Hornet's Nest.json create mode 100644 Questionable.Model/V1/Converter/QuestWorkModeConverter.cs create mode 100644 Questionable.Model/V1/EQuestWorkMode.cs diff --git a/QuestPathGenerator/RoslynShortcuts.cs b/QuestPathGenerator/RoslynShortcuts.cs index 63ccdcd63..2bacaba4f 100644 --- a/QuestPathGenerator/RoslynShortcuts.cs +++ b/QuestPathGenerator/RoslynShortcuts.cs @@ -213,7 +213,9 @@ public static class RoslynShortcuts { Argument(LiteralValue(qwv.High)), Token(SyntaxKind.CommaToken), - Argument(LiteralValue(qwv.Low)) + Argument(LiteralValue(qwv.Low)), + Token(SyntaxKind.CommaToken), + Argument(LiteralValue(qwv.Mode)) }))); } else if (value is List list) @@ -255,6 +257,9 @@ public static class RoslynShortcuts Assignment(nameof(SkipStepConditions.Never), skipStepConditions.Never, emptyStep.Never) .AsSyntaxNodeOrToken(), + AssignmentList(nameof(SkipStepConditions.CompletionQuestVariablesFlags), + skipStepConditions.CompletionQuestVariablesFlags) + .AsSyntaxNodeOrToken(), Assignment(nameof(SkipStepConditions.Flying), skipStepConditions.Flying, emptyStep.Flying) .AsSyntaxNodeOrToken(), diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/GLA/253_Way of the Gladiator.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/GLA/253_Way of the Gladiator.json index 790d56719..09113bd9a 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/GLA/253_Way of the Gladiator.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/GLA/253_Way of the Gladiator.json @@ -1,7 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "liza", - "Disabled": true, "QuestSequence": [ { "Sequence": 0, @@ -24,6 +23,183 @@ ] } ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1001739, + "Position": { + "X": -94.529724, + "Y": 6.4999976, + "Z": 39.81079 + }, + "TerritoryId": 131, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_CLSGLA020_00253_Q2_000_1", + "Yes": true + } + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": 45.13088, + "Y": 3.889354, + "Z": -166.51999 + }, + "TerritoryId": 130, + "InteractionType": "WalkTo", + "AethernetShortcut": [ + "[Ul'dah] Gladiators' Guild", + "[Ul'dah] Adventurers' Guild" + ], + "SkipConditions": { + "StepIf": { + "InTerritory": [ + 141 + ] + } + } + }, + { + "Position": { + "X": -116.10664, + "Y": 10.801613, + "Z": 276.979 + }, + "TerritoryId": 141, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 351, + "MinimumKillCount": 3, + "CompletionQuestVariablesFlags": [ + { + "Low": 3, + "Mode": "Exact" + }, + null, + null, + null, + null, + null + ] + }, + { + "DataId": 141, + "MinimumKillCount": 3, + "CompletionQuestVariablesFlags": [ + null, + { + "High": 3, + "Mode": "Exact" + }, + null, + null, + null, + null + ] + } + ], + "CompletionQuestVariablesFlags": [ + { + "Low": 3, + "Mode": "Exact" + }, + { + "High": 3, + "Mode": "Exact" + }, + null, + null, + null, + null + ] + }, + { + "Position": { + "X": 39.635372, + "Y": 3.2401803, + "Z": 273.41232 + }, + "TerritoryId": 141, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 205, + "MinimumKillCount": 3, + "CompletionQuestVariablesFlags": [ + null, + { + "Low": 3, + "Mode": "Exact" + }, + null, + null, + null, + null + ] + } + ], + "CompletionQuestVariablesFlags": [ + null, + { + "Low": 3, + "Mode": "Exact" + }, + null, + null, + null, + null + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": -118.17538, + "Y": 18.35357, + "Z": 341.3039 + }, + "TerritoryId": 141, + "InteractionType": "WalkTo", + "SkipConditions": { + "StepIf": { + "NotInTerritory": [ + 141 + ] + } + } + }, + { + "DataId": 1001739, + "Position": { + "X": -94.529724, + "Y": 6.4999976, + "Z": 39.81079 + }, + "TerritoryId": 131, + "InteractionType": "CompleteQuest", + "AethernetShortcut": [ + "[Ul'dah] Adventurers' Guild", + "[Ul'dah] Gladiators' Guild" + ], + "NextQuestId": 256 + } + ] } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/GLA/256_Kicking the Hornet's Nest.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/GLA/256_Kicking the Hornet's Nest.json new file mode 100644 index 000000000..88320c09b --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/GLA/256_Kicking the Hornet's Nest.json @@ -0,0 +1,286 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1001739, + "Position": { + "X": -94.529724, + "Y": 6.4999976, + "Z": 39.81079 + }, + "TerritoryId": 131, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1003990, + "Position": { + "X": 77.25635, + "Y": 4.0999947, + "Z": -138.62823 + }, + "TerritoryId": 130, + "InteractionType": "Emote", + "Emote": "me", + "AethernetShortcut": [ + "[Ul'dah] Gladiators' Guild", + "[Ul'dah] Adventurers' Guild" + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 1003984, + "Position": { + "X": 45.029297, + "Y": 3.9999998, + "Z": -128.16058 + }, + "TerritoryId": 130, + "InteractionType": "Emote", + "Emote": "me", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1003992, + "Position": { + "X": 12.191956, + "Y": 4.0999947, + "Z": -155.53528 + }, + "TerritoryId": 130, + "InteractionType": "Emote", + "Emote": "me", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 1003994, + "Position": { + "X": 15.976135, + "Y": 7.9999995, + "Z": -124.071106 + }, + "TerritoryId": 130, + "InteractionType": "Emote", + "Emote": "me", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1004222, + "Position": { + "X": 21.927185, + "Y": 7.1999974, + "Z": -97.39838 + }, + "TerritoryId": 130, + "InteractionType": "Emote", + "Emote": "me" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1001353, + "Position": { + "X": 21.072632, + "Y": 7.45, + "Z": -78.78235 + }, + "TerritoryId": 130, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1001739, + "Position": { + "X": -94.529724, + "Y": 6.4999976, + "Z": 39.81079 + }, + "TerritoryId": 131, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ul'dah] Adventurers' Guild", + "[Ul'dah] Gladiators' Guild" + ] + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "Position": { + "X": -112.70276, + "Y": 7.7544775, + "Z": 9.123527 + }, + "TerritoryId": 131, + "InteractionType": "WalkTo" + }, + { + "Position": { + "X": -183.00035, + "Y": 13.958975, + "Z": -13.998203 + }, + "TerritoryId": 130, + "InteractionType": "WalkTo" + }, + { + "DataId": 1003985, + "Position": { + "X": 201.52588, + "Y": 52.038116, + "Z": 149.40112 + }, + "TerritoryId": 140, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 2001408, + "Position": { + "X": 154.37549, + "Y": 52.536743, + "Z": 200.91553 + }, + "TerritoryId": 140, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 1246 + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 2001409, + "Position": { + "X": 141.83252, + "Y": 52.994507, + "Z": 221.54565 + }, + "TerritoryId": 140, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 1390 + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 7, + "Steps": [ + { + "DataId": 1003985, + "Position": { + "X": 201.52588, + "Y": 52.038116, + "Z": 149.40112 + }, + "TerritoryId": 140, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 473.74796, + "Y": 96.62057, + "Z": 159.993 + }, + "TerritoryId": 140, + "InteractionType": "WalkTo" + }, + { + "Position": { + "X": -117.06801, + "Y": 9.195247, + "Z": 9.181297 + }, + "TerritoryId": 130, + "InteractionType": "WalkTo" + }, + { + "DataId": 1001739, + "Position": { + "X": -94.529724, + "Y": 6.4999976, + "Z": 39.81079 + }, + "TerritoryId": 131, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1098_The Last Remnants.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1098_The Last Remnants.json index 9ba37d458..a7116baca 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1098_The Last Remnants.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1098_The Last Remnants.json @@ -37,16 +37,18 @@ "SkipConditions": { "AetheryteShortcutIf": { "NotInSameTerritory": true + }, + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] } - }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + } }, { "DataId": 2002380, @@ -76,14 +78,18 @@ "TerritoryId": 180, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2002379, @@ -112,14 +118,18 @@ "TerritoryId": 180, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -16 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + } }, { "DataId": 2002382, @@ -148,14 +158,18 @@ "TerritoryId": 180, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2002381, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1101_For Your Fellow Man.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1101_For Your Fellow Man.json index b52d04ba1..a2b646903 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1101_For Your Fellow Man.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1101_For Your Fellow Man.json @@ -65,14 +65,18 @@ "TerritoryId": 139, "InteractionType": "WalkTo", "Mount": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1007844, @@ -120,16 +124,16 @@ }, "TerritoryId": 139, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ], "SkipConditions": { "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ], "Flying": "Unlocked" } } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/1052_Looking the Part.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/1052_Looking the Part.json index 6dcb2e15b..5e629673b 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/1052_Looking the Part.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/1052_Looking the Part.json @@ -28,18 +28,20 @@ }, "TerritoryId": 155, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ], "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", "SkipConditions": { "AetheryteShortcutIf": { "NotInSameTerritory": true + }, + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } }, "Fly": true @@ -56,14 +58,18 @@ "KillEnemyDataIds": [ 1918 ], - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2002308, @@ -127,14 +133,18 @@ "InteractionType": "UseItem", "ItemId": 30362, "TargetTerritoryId": 140, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -148,14 +158,18 @@ "KillEnemyDataIds": [ 1920 ], - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2002310, diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/377_Don't Look Down.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/377_Don't Look Down.json index d4d4a3ebd..e3a5ea4f1 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/377_Don't Look Down.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/377_Don't Look Down.json @@ -65,14 +65,18 @@ }, "TerritoryId": 148, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -83,14 +87,18 @@ "TerritoryId": 148, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2000748, @@ -120,14 +128,18 @@ "TerritoryId": 148, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -16 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + } }, { "Position": { @@ -137,14 +149,18 @@ }, "TerritoryId": 148, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -16 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + } }, { "DataId": 2000751, diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/465_Washed Up.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/465_Washed Up.json index 51da268c2..8a9700f89 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/465_Washed Up.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/465_Washed Up.json @@ -36,14 +36,18 @@ }, "StopDistance": 3 }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -8 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 8 + ] + } + } }, { "DataId": 1002639, diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/574_Dressed to Deceive.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/574_Dressed to Deceive.json index 982e2df40..75423c9d6 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/574_Dressed to Deceive.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/574_Dressed to Deceive.json @@ -64,14 +64,18 @@ }, "StopDistance": 5 }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -16 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + } }, { "DataId": 1004506, diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/671_Nothing to See Here.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/671_Nothing to See Here.json index 10b55d221..e9f7f5ad6 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/671_Nothing to See Here.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/671_Nothing to See Here.json @@ -65,14 +65,18 @@ "TerritoryId": 141, "InteractionType": "WalkTo", "DisableNavmesh": false, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1004599, diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/A3-South Shroud, Buscarron’s Druthers/738_Sylphish Concerns.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/A3-South Shroud, Buscarron’s Druthers/738_Sylphish Concerns.json index d9c687768..e4b2ae378 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/A3-South Shroud, Buscarron’s Druthers/738_Sylphish Concerns.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/A3-South Shroud, Buscarron’s Druthers/738_Sylphish Concerns.json @@ -63,14 +63,18 @@ }, "DelaySeconds": 0.25 }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -8 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 8 + ] + } + } }, { "DataId": 2001953, @@ -109,14 +113,18 @@ }, "DelaySeconds": 0.25 }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2001951, @@ -146,14 +154,18 @@ "TerritoryId": 153, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -16 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + } }, { "Position": { @@ -163,14 +175,18 @@ }, "TerritoryId": 153, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -16 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + } }, { "DataId": 2001952, diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/B6-Coerthas Central Highlands, Camp Dragonhead/889_Three for Three.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/B6-Coerthas Central Highlands, Camp Dragonhead/889_Three for Three.json index eb2aae1f6..3ff98b75b 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/B6-Coerthas Central Highlands, Camp Dragonhead/889_Three for Three.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/B6-Coerthas Central Highlands, Camp Dragonhead/889_Three for Three.json @@ -71,14 +71,18 @@ 725, 726 ], - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2002261, diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/B7-Coerthas Central Highlands, Camp Dragonhead/897_The Talk of Coerthas.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/B7-Coerthas Central Highlands, Camp Dragonhead/897_The Talk of Coerthas.json index 968fd089a..8f5426e3c 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/B7-Coerthas Central Highlands, Camp Dragonhead/897_The Talk of Coerthas.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/B7-Coerthas Central Highlands, Camp Dragonhead/897_The Talk of Coerthas.json @@ -64,14 +64,18 @@ "InteractionType": "WalkTo", "$": "NW Skyfire Locks door (inside)", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 1006396, diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/C2-Western La Noscea, Isles of Umbra/960_It's Probably Not Pirates.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/C2-Western La Noscea, Isles of Umbra/960_It's Probably Not Pirates.json index 6400f289c..f2be862b5 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/C2-Western La Noscea, Isles of Umbra/960_It's Probably Not Pirates.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/C2-Western La Noscea, Isles of Umbra/960_It's Probably Not Pirates.json @@ -34,14 +34,18 @@ }, "TerritoryId": 138, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -52,14 +56,18 @@ "TerritoryId": 138, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 1006500, diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/C6-Mor Dhona/1001_Drowning Out the Voices.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/C6-Mor Dhona/1001_Drowning Out the Voices.json index 805400afa..c9fc5c3a5 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/C6-Mor Dhona/1001_Drowning Out the Voices.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/C6-Mor Dhona/1001_Drowning Out the Voices.json @@ -94,14 +94,18 @@ "TerritoryId": 156, "InteractionType": "WalkTo", "Comment": "Avoids pit", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -112,14 +116,18 @@ "TerritoryId": 156, "InteractionType": "WalkTo", "Comment": "Move into LOS", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2002230, diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/E3-2.3/1460_Brave New Companions.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/E3-2.3/1460_Brave New Companions.json index 0da1b8581..e318a55b9 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/E3-2.3/1460_Brave New Companions.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/E3-2.3/1460_Brave New Companions.json @@ -68,14 +68,18 @@ "TerritoryId": 351, "InteractionType": "Interact", "TargetTerritoryId": 156, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -2 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 2 + ] + } + } }, { "DataId": 1009147, diff --git a/QuestPaths/2.x - A Realm Reborn/Raid Quests/1709_Legacy of Allag.json b/QuestPaths/2.x - A Realm Reborn/Raid Quests/1709_Legacy of Allag.json index f9ed54c6a..b0157e38e 100644 --- a/QuestPaths/2.x - A Realm Reborn/Raid Quests/1709_Legacy of Allag.json +++ b/QuestPaths/2.x - A Realm Reborn/Raid Quests/1709_Legacy of Allag.json @@ -76,14 +76,18 @@ "InteractionType": "WalkTo", "Fly": true, "AetheryteShortcut": "Upper La Noscea - Camp Bronze Lake", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -94,14 +98,18 @@ "TerritoryId": 139, "InteractionType": "WalkTo", "TargetTerritoryId": 180, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -112,27 +120,35 @@ "TerritoryId": 180, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "TerritoryId": 180, "InteractionType": "AttuneAetheryte", "Aetheryte": "Outer La Noscea - Camp Overlook", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -143,14 +159,18 @@ "TerritoryId": 180, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -161,14 +181,18 @@ "TerritoryId": 180, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -179,14 +203,18 @@ "TerritoryId": 180, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2000075, @@ -221,14 +249,18 @@ "InteractionType": "WalkTo", "Fly": true, "AetheryteShortcut": "Western La Noscea - Aleport", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2000076, diff --git a/QuestPaths/2.x - A Realm Reborn/Tribal/Kobolds/Story/1321_How Low Can You Go.json b/QuestPaths/2.x - A Realm Reborn/Tribal/Kobolds/Story/1321_How Low Can You Go.json index 7f119f735..b53e459c6 100644 --- a/QuestPaths/2.x - A Realm Reborn/Tribal/Kobolds/Story/1321_How Low Can You Go.json +++ b/QuestPaths/2.x - A Realm Reborn/Tribal/Kobolds/Story/1321_How Low Can You Go.json @@ -28,14 +28,18 @@ }, "TerritoryId": 180, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2003715, diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json index e152eea9e..7d7043cf2 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json @@ -28,14 +28,18 @@ }, "TerritoryId": 400, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "Position": { @@ -46,14 +50,18 @@ "TerritoryId": 400, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "Position": { @@ -63,14 +71,18 @@ }, "TerritoryId": 400, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 1013424, @@ -118,14 +130,18 @@ }, "TerritoryId": 400, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -144,14 +160,18 @@ "Z": 380.9018 } }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1013421, diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1771_Some Bad News.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1771_Some Bad News.json index 4010255c1..c584f07b1 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1771_Some Bad News.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1771_Some Bad News.json @@ -28,14 +28,18 @@ }, "TerritoryId": 398, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -46,14 +50,18 @@ "TerritoryId": 398, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -64,14 +72,18 @@ "TerritoryId": 398, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 1011932, @@ -99,14 +111,18 @@ }, "TerritoryId": 398, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "Position": { @@ -117,14 +133,18 @@ "TerritoryId": 398, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 1011924, diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1797_The Hunter Becomes the Kweh.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1797_The Hunter Becomes the Kweh.json index 1b6676ba7..11df6fd8b 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1797_The Hunter Becomes the Kweh.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1797_The Hunter Becomes the Kweh.json @@ -34,14 +34,18 @@ }, "TerritoryId": 398, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -52,14 +56,18 @@ "TerritoryId": 398, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -70,14 +78,18 @@ "TerritoryId": 398, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 1011932, @@ -106,14 +118,18 @@ }, "TerritoryId": 398, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "Position": { @@ -124,14 +140,18 @@ "TerritoryId": 398, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 1011924, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1593_Sense of Urgency.json b/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1593_Sense of Urgency.json index 499045dbf..4a8d50acb 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1593_Sense of Urgency.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1593_Sense of Urgency.json @@ -29,14 +29,18 @@ "TerritoryId": 401, "InteractionType": "WalkTo", "Mount": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -47,14 +51,18 @@ "TerritoryId": 401, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1013498, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1662_Hour of Departure.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1662_Hour of Departure.json index b79ad4073..ddf0e6eaf 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1662_Hour of Departure.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1662_Hour of Departure.json @@ -86,14 +86,18 @@ }, "TerritoryId": 418, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -104,14 +108,18 @@ "TerritoryId": 418, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 1012251, diff --git a/QuestPaths/4.x - Stormblood/Tribal/Ananta/Dailies/3064_Thin-skinned.json b/QuestPaths/4.x - Stormblood/Tribal/Ananta/Dailies/3064_Thin-skinned.json index 59c56180e..2e3c84b60 100644 --- a/QuestPaths/4.x - Stormblood/Tribal/Ananta/Dailies/3064_Thin-skinned.json +++ b/QuestPaths/4.x - Stormblood/Tribal/Ananta/Dailies/3064_Thin-skinned.json @@ -64,14 +64,18 @@ null, null ], - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2009361, @@ -160,14 +164,18 @@ null, null ], - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2009360, @@ -253,14 +261,18 @@ null, null ], - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2009359, @@ -346,14 +358,18 @@ null, null ], - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -4 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 4 + ] + } + } }, { "DataId": 2009364, @@ -436,14 +452,18 @@ null, null ], - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -8 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 8 + ] + } + } }, { "DataId": 2009363, @@ -529,14 +549,18 @@ null, null ], - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -16 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + } }, { "DataId": 2009362, diff --git a/QuestPaths/5.x - Shadowbringers/Aether Currents/Lakeland/3380_A Jobb Well Done.json b/QuestPaths/5.x - Shadowbringers/Aether Currents/Lakeland/3380_A Jobb Well Done.json index 19c4d695e..bb74f2781 100644 --- a/QuestPaths/5.x - Shadowbringers/Aether Currents/Lakeland/3380_A Jobb Well Done.json +++ b/QuestPaths/5.x - Shadowbringers/Aether Currents/Lakeland/3380_A Jobb Well Done.json @@ -63,14 +63,18 @@ "TerritoryId": 813, "InteractionType": "WalkTo", "Mount": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "Position": { @@ -81,14 +85,18 @@ "TerritoryId": 813, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 1027339, @@ -116,14 +124,18 @@ }, "TerritoryId": 813, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -133,14 +145,18 @@ }, "TerritoryId": 813, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -150,14 +166,18 @@ }, "TerritoryId": 813, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 1027420, diff --git a/QuestPaths/5.x - Shadowbringers/Aether Currents/Lakeland/3384_Imperative Repairs.json b/QuestPaths/5.x - Shadowbringers/Aether Currents/Lakeland/3384_Imperative Repairs.json index b54bc1326..4f8715aa4 100644 --- a/QuestPaths/5.x - Shadowbringers/Aether Currents/Lakeland/3384_Imperative Repairs.json +++ b/QuestPaths/5.x - Shadowbringers/Aether Currents/Lakeland/3384_Imperative Repairs.json @@ -29,14 +29,18 @@ "TerritoryId": 813, "InteractionType": "WalkTo", "Comment": "Tower Bottom", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "Position": { @@ -48,14 +52,18 @@ "InteractionType": "WalkTo", "DisableNavmesh": true, "Comment": "Tower Bottom Platform 1", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2010618, diff --git a/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3305_The Oracle of Light.json b/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3305_The Oracle of Light.json index 8c3baec4a..5aeffbc0d 100644 --- a/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3305_The Oracle of Light.json +++ b/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3305_The Oracle of Light.json @@ -74,14 +74,18 @@ }, "TerritoryId": 813, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 1028952, diff --git a/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3307_Sul Uin's Request.json b/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3307_Sul Uin's Request.json index b578fa655..b4801eeda 100644 --- a/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3307_Sul Uin's Request.json +++ b/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3307_Sul Uin's Request.json @@ -28,14 +28,18 @@ }, "TerritoryId": 816, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2009820, @@ -66,14 +70,18 @@ "TerritoryId": 816, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2009819, diff --git a/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3315_Spore Sweeper.json b/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3315_Spore Sweeper.json index 93eeea774..999292557 100644 --- a/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3315_Spore Sweeper.json +++ b/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3315_Spore Sweeper.json @@ -46,14 +46,18 @@ }, "TerritoryId": 816, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "Position": { @@ -64,14 +68,18 @@ "TerritoryId": 816, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2009831, diff --git a/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3316_The Lawless Ones.json b/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3316_The Lawless Ones.json index 9acc6b95b..07967866b 100644 --- a/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3316_The Lawless Ones.json +++ b/QuestPaths/5.x - Shadowbringers/MSQ/B-Il Mheg/3316_The Lawless Ones.json @@ -150,14 +150,18 @@ }, "TerritoryId": 816, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -168,14 +172,18 @@ "TerritoryId": 816, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2009836, @@ -214,14 +222,18 @@ }, "DelaySeconds": 0.2 }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "Position": { @@ -241,14 +253,18 @@ }, "DelaySeconds": 0.1 }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "Position": { @@ -268,14 +284,18 @@ }, "DelaySeconds": 0.1 }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "Position": { @@ -295,14 +315,18 @@ }, "DelaySeconds": 0.2 }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2009835, diff --git a/QuestPaths/5.x - Shadowbringers/MSQ/C-Rak'tika/3335_Look to the Stars.json b/QuestPaths/5.x - Shadowbringers/MSQ/C-Rak'tika/3335_Look to the Stars.json index a005447b9..668c8fee5 100644 --- a/QuestPaths/5.x - Shadowbringers/MSQ/C-Rak'tika/3335_Look to the Stars.json +++ b/QuestPaths/5.x - Shadowbringers/MSQ/C-Rak'tika/3335_Look to the Stars.json @@ -79,14 +79,18 @@ "StopDistance": 2, "Type": "RepeatedJumps" }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -16 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + } }, { "DataId": 2009890, @@ -128,14 +132,18 @@ "StopDistance": 2, "Type": "RepeatedJumps" }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2009887, @@ -166,14 +174,18 @@ "InteractionType": "WalkTo", "DisableNavmesh": true, "Mount": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "Position": { @@ -196,14 +208,18 @@ "StopDistance": 2, "Type": "RepeatedJumps" }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2009888, @@ -245,14 +261,18 @@ "StopDistance": 2, "Type": "RepeatedJumps" }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2009889, diff --git a/QuestPaths/5.x - Shadowbringers/MSQ/E-Kholusia 2/3633_The Ladder.json b/QuestPaths/5.x - Shadowbringers/MSQ/E-Kholusia 2/3633_The Ladder.json index a7c9fd254..0c46f86d9 100644 --- a/QuestPaths/5.x - Shadowbringers/MSQ/E-Kholusia 2/3633_The Ladder.json +++ b/QuestPaths/5.x - Shadowbringers/MSQ/E-Kholusia 2/3633_The Ladder.json @@ -60,14 +60,18 @@ }, "TerritoryId": 814, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2010088, @@ -114,14 +118,18 @@ }, "TerritoryId": 814, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2010089, diff --git a/QuestPaths/5.x - Shadowbringers/MSQ/F-Tempest/3645_In His Garden.json b/QuestPaths/5.x - Shadowbringers/MSQ/F-Tempest/3645_In His Garden.json index 8972210d7..a2485ea1e 100644 --- a/QuestPaths/5.x - Shadowbringers/MSQ/F-Tempest/3645_In His Garden.json +++ b/QuestPaths/5.x - Shadowbringers/MSQ/F-Tempest/3645_In His Garden.json @@ -48,14 +48,18 @@ "TerritoryId": 819, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1027246, diff --git a/QuestPaths/5.x - Shadowbringers/Tribal/Pixies/Dailies/3689_Where There's Wool, There's a Way.json b/QuestPaths/5.x - Shadowbringers/Tribal/Pixies/Dailies/3689_Where There's Wool, There's a Way.json index 51110d724..6a4cbf23f 100644 --- a/QuestPaths/5.x - Shadowbringers/Tribal/Pixies/Dailies/3689_Where There's Wool, There's a Way.json +++ b/QuestPaths/5.x - Shadowbringers/Tribal/Pixies/Dailies/3689_Where There's Wool, There's a Way.json @@ -29,14 +29,18 @@ "TerritoryId": 816, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2010856, @@ -83,14 +87,18 @@ }, "TerritoryId": 816, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2010857, diff --git a/QuestPaths/6.x - Endwalker/Aether Currents/Mare Lamentorum/4241_Carrots Its Whats for Dinner.json b/QuestPaths/6.x - Endwalker/Aether Currents/Mare Lamentorum/4241_Carrots Its Whats for Dinner.json index 720ba8e84..0d7637ca4 100644 --- a/QuestPaths/6.x - Endwalker/Aether Currents/Mare Lamentorum/4241_Carrots Its Whats for Dinner.json +++ b/QuestPaths/6.x - Endwalker/Aether Currents/Mare Lamentorum/4241_Carrots Its Whats for Dinner.json @@ -29,14 +29,18 @@ "StopDistance": 1, "TerritoryId": 959, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -56,14 +60,18 @@ }, "Mount": false, "Comment": "Platform 1", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -82,14 +90,18 @@ "DelaySeconds": 0.25 }, "Comment": "Platform 2", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -108,14 +120,18 @@ "DelaySeconds": 0.25 }, "Comment": "Platform 3", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -134,14 +150,18 @@ "DelaySeconds": 0.25 }, "Comment": "Platform 4", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -160,14 +180,18 @@ "DelaySeconds": 0.25 }, "Comment": "Platform 5", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -186,14 +210,18 @@ "DelaySeconds": 0.25 }, "Comment": "Platform 6", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -204,14 +232,18 @@ "TerritoryId": 959, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1041789, @@ -287,14 +319,18 @@ }, "Mount": false, "Comment": "Platform 1", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -314,14 +350,18 @@ "DelaySeconds": 0.25 }, "Comment": "Platform 2", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -341,14 +381,18 @@ "DelaySeconds": 0.25 }, "Comment": "Platform 3", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -368,14 +412,18 @@ "DelaySeconds": 0.25 }, "Comment": "Platform 4", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -395,14 +443,18 @@ "DelaySeconds": 0.25 }, "Comment": "Platform 5", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "Position": { @@ -422,14 +474,18 @@ "DelaySeconds": 0.25 }, "Comment": "Platform 6", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 1041791, diff --git a/QuestPaths/6.x - Endwalker/Aether Currents/Thavnair/4203_Alchemist or Dancer.json b/QuestPaths/6.x - Endwalker/Aether Currents/Thavnair/4203_Alchemist or Dancer.json index 6e01fb6fd..3b15ae0b7 100644 --- a/QuestPaths/6.x - Endwalker/Aether Currents/Thavnair/4203_Alchemist or Dancer.json +++ b/QuestPaths/6.x - Endwalker/Aether Currents/Thavnair/4203_Alchemist or Dancer.json @@ -61,14 +61,18 @@ }, "TerritoryId": 957, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2011914, diff --git a/QuestPaths/6.x - Endwalker/Aether Currents/Thavnair/4259_Radiant Patrol.json b/QuestPaths/6.x - Endwalker/Aether Currents/Thavnair/4259_Radiant Patrol.json index ca5a86522..43425dbe4 100644 --- a/QuestPaths/6.x - Endwalker/Aether Currents/Thavnair/4259_Radiant Patrol.json +++ b/QuestPaths/6.x - Endwalker/Aether Currents/Thavnair/4259_Radiant Patrol.json @@ -74,7 +74,7 @@ null, null, null, - -64 + 64 ], "$": "QuestVariables after killing enemy: 17 1 0 0 0 64" }, diff --git a/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4389_Personae non Gratae.json b/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4389_Personae non Gratae.json index d76baf9dd..9bee400fc 100644 --- a/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4389_Personae non Gratae.json +++ b/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4389_Personae non Gratae.json @@ -66,14 +66,18 @@ }, "TerritoryId": 958, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1037715, diff --git a/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json b/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json index 8dfb9b509..04342d49e 100644 --- a/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json +++ b/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json @@ -112,14 +112,18 @@ "InteractionType": "WalkTo", "Mount": true, "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2012111, @@ -180,14 +184,18 @@ }, "TerritoryId": 958, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ], + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + }, "Comment": "Avoids combat" }, { @@ -219,14 +227,18 @@ "TerritoryId": 958, "InteractionType": "WalkTo", "Comment": "Avoids combat", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -16 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + } }, { "DataId": 2012110, diff --git a/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json b/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json index 436856e5f..92f13d835 100644 --- a/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json +++ b/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json @@ -60,14 +60,18 @@ "TerritoryId": 963, "InteractionType": "WalkTo", "DisableNavmesh": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ], + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + }, "Sprint": true }, { diff --git a/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4420_Hope Upon a Flower.json b/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4420_Hope Upon a Flower.json index 905075126..82b13f6e9 100644 --- a/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4420_Hope Upon a Flower.json +++ b/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4420_Hope Upon a Flower.json @@ -71,14 +71,18 @@ "Z": -1.1141448 } }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -16 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + } }, { "DataId": 2012128, diff --git a/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4456_Roads Paved of Sacrifice.json b/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4456_Roads Paved of Sacrifice.json index 4289281a4..deaef7912 100644 --- a/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4456_Roads Paved of Sacrifice.json +++ b/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4456_Roads Paved of Sacrifice.json @@ -109,14 +109,18 @@ }, "TerritoryId": 960, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2012354, diff --git a/QuestPaths/6.x - Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json b/QuestPaths/6.x - Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json index 476a86592..59686b6f4 100644 --- a/QuestPaths/6.x - Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json +++ b/QuestPaths/6.x - Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json @@ -51,14 +51,18 @@ "TerritoryId": 957, "InteractionType": "WalkTo", "AetheryteShortcut": "Thavnair - Yedlihmad", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1037631, diff --git a/QuestPaths/6.x - Endwalker/Side Quests/Thavnair/4491_Ogul Repays Her Favors.json b/QuestPaths/6.x - Endwalker/Side Quests/Thavnair/4491_Ogul Repays Her Favors.json index 4d77d3b3c..f5f66dc4f 100644 --- a/QuestPaths/6.x - Endwalker/Side Quests/Thavnair/4491_Ogul Repays Her Favors.json +++ b/QuestPaths/6.x - Endwalker/Side Quests/Thavnair/4491_Ogul Repays Her Favors.json @@ -97,14 +97,18 @@ "TerritoryId": 957, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1037655, @@ -151,14 +155,18 @@ }, "TerritoryId": 957, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 1037708, @@ -169,14 +177,18 @@ }, "TerritoryId": 957, "InteractionType": "Interact", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } } ] }, diff --git a/QuestPaths/6.x - Endwalker/Side Quests/Thavnair/4495_The Sins We Bear.json b/QuestPaths/6.x - Endwalker/Side Quests/Thavnair/4495_The Sins We Bear.json index 952be85ec..604919843 100644 --- a/QuestPaths/6.x - Endwalker/Side Quests/Thavnair/4495_The Sins We Bear.json +++ b/QuestPaths/6.x - Endwalker/Side Quests/Thavnair/4495_The Sins We Bear.json @@ -68,14 +68,18 @@ "TerritoryId": 957, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2012455, @@ -105,14 +109,18 @@ "TerritoryId": 957, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2012457, @@ -141,14 +149,18 @@ "TerritoryId": 957, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2012456, diff --git a/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4557_Gulal Generosity.json b/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4557_Gulal Generosity.json index 2250fc999..2f59883e9 100644 --- a/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4557_Gulal Generosity.json +++ b/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4557_Gulal Generosity.json @@ -45,14 +45,18 @@ "InteractionType": "WalkTo", "Fly": true, "Land": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 1042372, @@ -84,14 +88,18 @@ "InteractionType": "WalkTo", "Fly": true, "Land": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 1042371, @@ -123,14 +131,18 @@ "InteractionType": "WalkTo", "Fly": true, "Land": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1042373, diff --git a/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4564_Olfactory Warfare.json b/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4564_Olfactory Warfare.json index b9fda16a7..b7219f5d8 100644 --- a/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4564_Olfactory Warfare.json +++ b/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4564_Olfactory Warfare.json @@ -45,14 +45,18 @@ "InteractionType": "WalkTo", "Fly": true, "Land": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2012887, @@ -84,14 +88,18 @@ "InteractionType": "WalkTo", "Fly": true, "Land": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2012888, @@ -123,14 +131,18 @@ "InteractionType": "WalkTo", "Fly": true, "Land": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2012889, @@ -149,7 +161,7 @@ null, null, null, - -32 + 32 ] } ] diff --git a/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4570_Patching Up.json b/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4570_Patching Up.json index 34493e0e8..90e6b009d 100644 --- a/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4570_Patching Up.json +++ b/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4570_Patching Up.json @@ -29,14 +29,18 @@ "TerritoryId": 957, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2012902, @@ -66,14 +70,18 @@ "TerritoryId": 957, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2012901, @@ -103,14 +111,18 @@ "TerritoryId": 957, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2012900, diff --git a/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4573_Gathering Moss.json b/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4573_Gathering Moss.json index 57905110f..9685dbf86 100644 --- a/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4573_Gathering Moss.json +++ b/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4573_Gathering Moss.json @@ -30,14 +30,18 @@ "TerritoryId": 957, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2012907, diff --git a/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4574_Blood from a Stonemason.json b/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4574_Blood from a Stonemason.json index f79b047ce..c84aa4ac0 100644 --- a/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4574_Blood from a Stonemason.json +++ b/QuestPaths/6.x - Endwalker/Tribal/Arkasodara/Dailies/4574_Blood from a Stonemason.json @@ -34,14 +34,18 @@ "[Radz-at-Han] The Gate of First Sight (Thavnair)" ], "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 1042462, diff --git a/QuestPaths/7.x - Dawntrail/Aether Currents/Urqopacha/5047_An Illuminating Ritual.json b/QuestPaths/7.x - Dawntrail/Aether Currents/Urqopacha/5047_An Illuminating Ritual.json index 119513fb2..f3436491a 100644 --- a/QuestPaths/7.x - Dawntrail/Aether Currents/Urqopacha/5047_An Illuminating Ritual.json +++ b/QuestPaths/7.x - Dawntrail/Aether Currents/Urqopacha/5047_An Illuminating Ritual.json @@ -111,14 +111,18 @@ }, "DelaySeconds": 0.25 }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2014134, diff --git a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4892_An Echo of Madness.json b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4892_An Echo of Madness.json index 355a6b305..f35bf22ee 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4892_An Echo of Madness.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4892_An Echo of Madness.json @@ -47,14 +47,18 @@ }, "TerritoryId": 1187, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 1046874, diff --git a/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4907_Mamook Speaks.json b/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4907_Mamook Speaks.json index bdfb619ac..95739833f 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4907_Mamook Speaks.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4907_Mamook Speaks.json @@ -142,14 +142,18 @@ "InteractionType": "WalkTo", "DisableNavmesh": true, "Mount": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2013653, @@ -177,14 +181,18 @@ }, "TerritoryId": 1189, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2013655, diff --git a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4927_The Land of Levin.json b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4927_The Land of Levin.json index 092ada305..c846a700b 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4927_The Land of Levin.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4927_The Land of Levin.json @@ -113,14 +113,18 @@ }, "TerritoryId": 1191, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2013819, diff --git a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4952_A Knight of Alexandria.json b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4952_A Knight of Alexandria.json index 2791cb5a4..9fce91709 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4952_A Knight of Alexandria.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4952_A Knight of Alexandria.json @@ -131,14 +131,18 @@ }, "TerritoryId": 1192, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -16 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + } }, { "DataId": 1047904, diff --git a/QuestPaths/7.x - Dawntrail/Side Quests/Heritage Found/5155_History Reforged.json b/QuestPaths/7.x - Dawntrail/Side Quests/Heritage Found/5155_History Reforged.json index 7218094ca..6d3f5179f 100644 --- a/QuestPaths/7.x - Dawntrail/Side Quests/Heritage Found/5155_History Reforged.json +++ b/QuestPaths/7.x - Dawntrail/Side Quests/Heritage Found/5155_History Reforged.json @@ -29,14 +29,18 @@ "TerritoryId": 1191, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2014091, @@ -85,14 +89,18 @@ "TerritoryId": 1191, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2014093, diff --git a/QuestPaths/7.x - Dawntrail/Side Quests/Kozama'uka/5075_Water Colors.json b/QuestPaths/7.x - Dawntrail/Side Quests/Kozama'uka/5075_Water Colors.json index 4d81d887f..002e4fad6 100644 --- a/QuestPaths/7.x - Dawntrail/Side Quests/Kozama'uka/5075_Water Colors.json +++ b/QuestPaths/7.x - Dawntrail/Side Quests/Kozama'uka/5075_Water Colors.json @@ -31,17 +31,17 @@ "Fly": true, "SkipConditions": { "StepIf": { - "Flying": "Locked" + "Flying": "Locked", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] } - }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + } }, { "DataId": 2014184, diff --git a/QuestPaths/7.x - Dawntrail/Side Quests/Living Memory/5175_The Canals of History.json b/QuestPaths/7.x - Dawntrail/Side Quests/Living Memory/5175_The Canals of History.json index 92ac22703..2a09e97d9 100644 --- a/QuestPaths/7.x - Dawntrail/Side Quests/Living Memory/5175_The Canals of History.json +++ b/QuestPaths/7.x - Dawntrail/Side Quests/Living Memory/5175_The Canals of History.json @@ -31,17 +31,17 @@ "Fly": true, "SkipConditions": { "StepIf": { - "Flying": "Locked" + "Flying": "Locked", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } - }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + } }, { "DataId": 2013901, diff --git a/QuestPaths/7.x - Dawntrail/Side Quests/Living Memory/5181_Leaving This Place for Good.json b/QuestPaths/7.x - Dawntrail/Side Quests/Living Memory/5181_Leaving This Place for Good.json index 8062590b3..a77798f71 100644 --- a/QuestPaths/7.x - Dawntrail/Side Quests/Living Memory/5181_Leaving This Place for Good.json +++ b/QuestPaths/7.x - Dawntrail/Side Quests/Living Memory/5181_Leaving This Place for Good.json @@ -49,14 +49,18 @@ "TerritoryId": 1192, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2013916, @@ -86,14 +90,18 @@ "TerritoryId": 1192, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2013917, diff --git a/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5121_Taste of the Wilds.json b/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5121_Taste of the Wilds.json index 77ee6e048..f1414639c 100644 --- a/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5121_Taste of the Wilds.json +++ b/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5121_Taste of the Wilds.json @@ -29,14 +29,18 @@ "TerritoryId": 1190, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1049284, @@ -64,14 +68,18 @@ }, "TerritoryId": 1190, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 1049275, diff --git a/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5132_Death by Popoto.json b/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5132_Death by Popoto.json index c16f3f0d5..0c7e9530c 100644 --- a/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5132_Death by Popoto.json +++ b/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5132_Death by Popoto.json @@ -31,17 +31,17 @@ "Fly": true, "SkipConditions": { "StepIf": { - "Flying": "Locked" + "Flying": "Locked", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } - }, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + } }, { "DataId": 2014051, diff --git a/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5142_Back on Stage.json b/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5142_Back on Stage.json index 92cf0facb..8a873f7a7 100644 --- a/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5142_Back on Stage.json +++ b/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5142_Back on Stage.json @@ -46,16 +46,16 @@ "TerritoryId": 1190, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ], "SkipConditions": { "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ], "Flying": "Locked" } } @@ -89,16 +89,16 @@ "TerritoryId": 1190, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ], "SkipConditions": { "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], "Flying": "Locked" } }, @@ -131,16 +131,16 @@ }, "TerritoryId": 1190, "InteractionType": "WalkTo", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ], "SkipConditions": { "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ], "Flying": "Locked" } }, diff --git a/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5148_Dig for Victory.json b/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5148_Dig for Victory.json index d764508dc..836fb20f8 100644 --- a/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5148_Dig for Victory.json +++ b/QuestPaths/7.x - Dawntrail/Side Quests/Shaaloani/5148_Dig for Victory.json @@ -126,16 +126,16 @@ "InteractionType": "WalkTo", "AetheryteShortcut": "Shaaloani - Hhusatahwi", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ], "SkipConditions": { "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], "Flying": "Locked" } }, diff --git a/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5097_Sick Day.json b/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5097_Sick Day.json index f7afd7b5d..5ec0cff12 100644 --- a/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5097_Sick Day.json +++ b/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5097_Sick Day.json @@ -49,14 +49,18 @@ "TerritoryId": 1189, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1048995, diff --git a/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5098_To Forge in the Forest.json b/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5098_To Forge in the Forest.json index 1995c1789..007b86872 100644 --- a/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5098_To Forge in the Forest.json +++ b/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5098_To Forge in the Forest.json @@ -45,14 +45,18 @@ "TerritoryId": 1189, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 2014313, @@ -82,14 +86,18 @@ "TerritoryId": 1189, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 2014314, @@ -119,14 +127,18 @@ "TerritoryId": 1189, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 2014315, diff --git a/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5101_Two Hearts Aflutter.json b/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5101_Two Hearts Aflutter.json index ee0174ba9..bfd9d8fb6 100644 --- a/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5101_Two Hearts Aflutter.json +++ b/QuestPaths/7.x - Dawntrail/Side Quests/Yak T'el/5101_Two Hearts Aflutter.json @@ -29,14 +29,18 @@ "TerritoryId": 1189, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "DataId": 1051049, @@ -48,14 +52,18 @@ "StopDistance": 4, "TerritoryId": 1189, "InteractionType": "Interact", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -128 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } }, { "Position": { @@ -66,14 +74,18 @@ "TerritoryId": 1189, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -32 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } }, { "DataId": 1051051, @@ -102,14 +114,18 @@ "TerritoryId": 1189, "InteractionType": "WalkTo", "Fly": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - -64 - ] + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } }, { "DataId": 1051050, diff --git a/QuestPaths/AssemblyQuestLoader.cs b/QuestPaths/AssemblyQuestLoader.cs index afc7ea83e..90ba89a1a 100644 --- a/QuestPaths/AssemblyQuestLoader.cs +++ b/QuestPaths/AssemblyQuestLoader.cs @@ -28,5 +28,6 @@ public static partial class AssemblyQuestLoader public static Stream QuestSchema => typeof(AssemblyQuestLoader).Assembly.GetManifestResourceStream("Questionable.QuestPaths.QuestSchema")!; + [SuppressMessage("ReSharper", "UnusedMember.Local")] private static void AddQuest(ushort questId, QuestRoot root) => _quests![questId] = root; } diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 8cda540c8..751e4730a 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -182,6 +182,9 @@ "Never": { "type": "boolean" }, + "CompletionQuestVariablesFlags": { + "$ref": "#/$defs/CompletionFlags" + }, "Flying": { "type": "string", "enum": [ @@ -237,7 +240,8 @@ "WakingSandsMainArea" ] } - } + }, + "additionalProperties": false }, "AetheryteShortcutIf": { "type": "object", @@ -248,7 +252,8 @@ "InSameTerritory": { "type": "boolean" } - } + }, + "additionalProperties": false }, "AethernetShortcutIf": { "type": "object", @@ -259,7 +264,8 @@ "InSameTerritory": { "type": "boolean" } - } + }, + "additionalProperties": false } }, "additionalProperties": false @@ -1309,28 +1315,54 @@ "type": "array", "description": "Quest Variables that dictate whether or not this step is skipped: null is don't check, positive values need to be set, negative values need to be unset", "items": { - "type": [ - "integer", - "null" - ], - "enum": [ - null, - 1, - 2, - 4, - 8, - 16, - 32, - 64, - 128, - -1, - -2, - -4, - -8, - -16, - -32, - -64, - -128 + "oneOf": [ + { + "type": "object", + "properties": { + "High": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "maximum": 15 + }, + "Low": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "maximum": 15 + }, + "Negative": { + "type": "boolean" + }, + "Mode": { + "type": "string", + "enum": [ + "Bitwise", + "Exact" + ] + } + } + }, + { + "type": "number", + "enum": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64, + 128 + ] + }, + { + "type": "null" + } ] }, "minItems": 6, diff --git a/Questionable.Model/V1/ComplexCombatData.cs b/Questionable.Model/V1/ComplexCombatData.cs index a408a29ff..d31de7e26 100644 --- a/Questionable.Model/V1/ComplexCombatData.cs +++ b/Questionable.Model/V1/ComplexCombatData.cs @@ -14,6 +14,6 @@ public sealed class ComplexCombatData /// public uint? RewardItemId { get; set; } public int? RewardItemCount { get; set; } - public IList CompletionQuestVariablesFlags { get; set; } = new List(); + public IList CompletionQuestVariablesFlags { get; set; } = new List(); public bool IgnoreQuestMarker { get; set; } } diff --git a/Questionable.Model/V1/Converter/QuestWorkConfigConverter.cs b/Questionable.Model/V1/Converter/QuestWorkConfigConverter.cs index 9f6b0e7e8..2b3769377 100644 --- a/Questionable.Model/V1/Converter/QuestWorkConfigConverter.cs +++ b/Questionable.Model/V1/Converter/QuestWorkConfigConverter.cs @@ -15,6 +15,7 @@ public sealed class QuestWorkConfigConverter : JsonConverter throw new JsonException(); byte? high = null, low = null; + EQuestWorkMode mode = EQuestWorkMode.Bitwise; while (reader.Read()) { switch (reader.TokenType) @@ -34,6 +35,10 @@ public sealed class QuestWorkConfigConverter : JsonConverter low = reader.GetByte(); break; + case nameof(QuestWorkValue.Mode): + mode = new QuestWorkModeConverter().Read(ref reader, typeof(EQuestWorkMode), options); + break; + default: throw new JsonException(); } @@ -41,7 +46,7 @@ public sealed class QuestWorkConfigConverter : JsonConverter break; case JsonTokenType.EndObject: - return new QuestWorkValue(high, low); + return new QuestWorkValue(high, low, mode); default: throw new JsonException(); diff --git a/Questionable.Model/V1/Converter/QuestWorkModeConverter.cs b/Questionable.Model/V1/Converter/QuestWorkModeConverter.cs new file mode 100644 index 000000000..a3697d66c --- /dev/null +++ b/Questionable.Model/V1/Converter/QuestWorkModeConverter.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace Questionable.Model.V1.Converter; + +public sealed class QuestWorkModeConverter() : EnumConverter(Values) +{ + private static readonly Dictionary Values = new() + { + { EQuestWorkMode.Bitwise, "Bitwise" }, + { EQuestWorkMode.Exact, "Exact" }, + }; +} diff --git a/Questionable.Model/V1/Converter/StringListOrValueConverter.cs b/Questionable.Model/V1/Converter/StringListOrValueConverter.cs index d3e6ea6fd..b6da81a27 100644 --- a/Questionable.Model/V1/Converter/StringListOrValueConverter.cs +++ b/Questionable.Model/V1/Converter/StringListOrValueConverter.cs @@ -7,7 +7,7 @@ namespace Questionable.Model.V1.Converter; public sealed class StringListOrValueConverter : JsonConverter> { - public override List? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + public override List Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.String) return [reader.GetString()!]; diff --git a/Questionable.Model/V1/EQuestWorkMode.cs b/Questionable.Model/V1/EQuestWorkMode.cs new file mode 100644 index 000000000..ef225b239 --- /dev/null +++ b/Questionable.Model/V1/EQuestWorkMode.cs @@ -0,0 +1,11 @@ +using System.Text.Json.Serialization; +using Questionable.Model.V1.Converter; + +namespace Questionable.Model.V1; + +[JsonConverter(typeof(QuestWorkModeConverter))] +public enum EQuestWorkMode +{ + Bitwise, + Exact, +} diff --git a/Questionable.Model/V1/QuestStep.cs b/Questionable.Model/V1/QuestStep.cs index 37d4a0d8d..accd66232 100644 --- a/Questionable.Model/V1/QuestStep.cs +++ b/Questionable.Model/V1/QuestStep.cs @@ -64,7 +64,7 @@ public sealed class QuestStep public SkipConditions? SkipConditions { get; set; } public List?> RequiredQuestVariables { get; set; } = new(); - public IList CompletionQuestVariablesFlags { get; set; } = new List(); + public IList CompletionQuestVariablesFlags { get; set; } = new List(); public IList DialogueChoices { get; set; } = new List(); public IList PointMenuChoices { get; set; } = new List(); diff --git a/Questionable.Model/V1/QuestWorkValue.cs b/Questionable.Model/V1/QuestWorkValue.cs index 7321b2be6..75c685110 100644 --- a/Questionable.Model/V1/QuestWorkValue.cs +++ b/Questionable.Model/V1/QuestWorkValue.cs @@ -1,16 +1,30 @@ -using System.Text.Json.Serialization; +using System; +using System.Text.Json.Serialization; using Questionable.Model.V1.Converter; namespace Questionable.Model.V1; [JsonConverter(typeof(QuestWorkConfigConverter))] -public sealed class QuestWorkValue(byte? high, byte? low) +public sealed class QuestWorkValue(byte? high, byte? low, EQuestWorkMode mode) { public QuestWorkValue(byte value) - : this((byte)(value >> 4), (byte)(value & 0xF)) + : this((byte)(value >> 4), (byte)(value & 0xF), EQuestWorkMode.Bitwise) { } public byte? High { get; set; } = high; public byte? Low { get; set; } = low; + public EQuestWorkMode Mode { get; set; } = mode; + + public override string ToString() + { + if (High != null && Low != null) + return ((byte)(High << 4) + Low).ToString(); + else if (High != null) + return High + "H"; + else if (Low != null) + return Low + "L"; + else + return "-"; + } } diff --git a/Questionable.Model/V1/SkipStepConditions.cs b/Questionable.Model/V1/SkipStepConditions.cs index 316b1cc19..9186515db 100644 --- a/Questionable.Model/V1/SkipStepConditions.cs +++ b/Questionable.Model/V1/SkipStepConditions.cs @@ -1,10 +1,12 @@ using System.Collections.Generic; +using System.Linq; namespace Questionable.Model.V1; public sealed class SkipStepConditions { public bool Never { get; set; } + public IList CompletionQuestVariablesFlags { get; set; } = new List(); public ELockedSkipCondition? Flying { get; set; } public ELockedSkipCondition? Chocobo { get; set; } public bool NotTargetable { get; set; } @@ -19,7 +21,8 @@ public sealed class SkipStepConditions { if (Never) return false; - return Flying != null || + return (CompletionQuestVariablesFlags.Count > 6 && CompletionQuestVariablesFlags.Any(x => x != null)) || + Flying != null || Chocobo != null || InTerritory.Count > 0 || NotInTerritory.Count > 0 || @@ -27,4 +30,10 @@ public sealed class SkipStepConditions QuestsAccepted.Count > 0 || QuestsCompleted.Count > 0; } + + public override string ToString() + { + return + $"{nameof(Never)}: {Never}, {nameof(CompletionQuestVariablesFlags)}: {CompletionQuestVariablesFlags}, {nameof(Flying)}: {Flying}, {nameof(Chocobo)}: {Chocobo}, {nameof(NotTargetable)}: {NotTargetable}, {nameof(InTerritory)}: {string.Join(" ", InTerritory)}, {nameof(NotInTerritory)}: {string.Join(" ", NotInTerritory)}, {nameof(Item)}: {Item}, {nameof(QuestsAccepted)}: {string.Join(" ", QuestsAccepted)}, {nameof(QuestsCompleted)}: {string.Join(" ", QuestsCompleted)}, {nameof(ExtraCondition)}: {ExtraCondition}"; + } } diff --git a/Questionable/Controller/CombatController.cs b/Questionable/Controller/CombatController.cs index d02def761..f747966ed 100644 --- a/Questionable/Controller/CombatController.cs +++ b/Questionable/Controller/CombatController.cs @@ -172,7 +172,7 @@ internal sealed class CombatController : IDisposable { var questWork = _gameFunctions.GetQuestEx(_currentFight.Data.QuestId); if (questWork != null && QuestWorkUtils.MatchesQuestWork(condition.CompletionQuestVariablesFlags, - questWork.Value, false)) + questWork.Value)) { _logger.LogInformation("Complex combat condition fulfilled: QuestWork matches"); _currentFight.Data.CompletedComplexDatas.Add(i); diff --git a/Questionable/Controller/Steps/Interactions/Combat.cs b/Questionable/Controller/Steps/Interactions/Combat.cs index 11f5777d0..97201b465 100644 --- a/Questionable/Controller/Steps/Interactions/Combat.cs +++ b/Questionable/Controller/Steps/Interactions/Combat.cs @@ -82,10 +82,10 @@ internal static class Combat { private bool _isLastStep; private CombatController.CombatData _combatData = null!; - private IList _completionQuestVariableFlags = null!; + private IList _completionQuestVariableFlags = null!; public ITask With(ushort questId, bool isLastStep, EEnemySpawnType enemySpawnType, IList killEnemyDataIds, - IList completionQuestVariablesFlags, IList complexCombatData) + IList completionQuestVariablesFlags, IList complexCombatData) { _isLastStep = isLastStep; _combatData = new CombatController.CombatData @@ -113,7 +113,7 @@ internal static class Combat if (questWork == null) return ETaskResult.StillRunning; - if (QuestWorkUtils.MatchesQuestWork(_completionQuestVariableFlags, questWork.Value, false)) + if (QuestWorkUtils.MatchesQuestWork(_completionQuestVariableFlags, questWork.Value)) return ETaskResult.TaskComplete; else return ETaskResult.StillRunning; diff --git a/Questionable/Controller/Steps/Interactions/UseItem.cs b/Questionable/Controller/Steps/Interactions/UseItem.cs index bef6fadec..3e1212f8a 100644 --- a/Questionable/Controller/Steps/Interactions/UseItem.cs +++ b/Questionable/Controller/Steps/Interactions/UseItem.cs @@ -119,7 +119,7 @@ internal static class UseItem public ushort? QuestId { get; set; } public uint ItemId { get; set; } - public IList CompletionQuestVariablesFlags { get; set; } = new List(); + public IList CompletionQuestVariablesFlags { get; set; } = new List(); public bool StartingCombat { get; set; } protected abstract bool UseItem(); @@ -145,7 +145,7 @@ internal static class UseItem { QuestWork? questWork = gameFunctions.GetQuestEx(QuestId.Value); if (questWork != null && - QuestWorkUtils.MatchesQuestWork(CompletionQuestVariablesFlags, questWork.Value, false)) + QuestWorkUtils.MatchesQuestWork(CompletionQuestVariablesFlags, questWork.Value)) return ETaskResult.TaskComplete; } @@ -202,7 +202,7 @@ internal static class UseItem public uint DataId { get; set; } - public ITask With(ushort? questId, uint dataId, uint itemId, IList completionQuestVariablesFlags) + public ITask With(ushort? questId, uint dataId, uint itemId, IList completionQuestVariablesFlags) { QuestId = questId; DataId = dataId; @@ -226,7 +226,7 @@ internal static class UseItem public Vector3 Position { get; set; } - public ITask With(ushort? questId, Vector3 position, uint itemId, IList completionQuestVariablesFlags) + public ITask With(ushort? questId, Vector3 position, uint itemId, IList completionQuestVariablesFlags) { QuestId = questId; Position = position; @@ -248,7 +248,7 @@ internal static class UseItem public uint DataId { get; set; } - public ITask With(ushort? questId, uint dataId, uint itemId, IList completionQuestVariablesFlags, + public ITask With(ushort? questId, uint dataId, uint itemId, IList completionQuestVariablesFlags, bool startingCombat = false) { QuestId = questId; @@ -269,7 +269,7 @@ internal static class UseItem { private readonly GameFunctions _gameFunctions = gameFunctions; - public ITask With(ushort? questId, uint itemId, IList completionQuestVariablesFlags) + public ITask With(ushort? questId, uint itemId, IList completionQuestVariablesFlags) { QuestId = questId; ItemId = itemId; diff --git a/Questionable/Controller/Steps/Shared/SkipCondition.cs b/Questionable/Controller/Steps/Shared/SkipCondition.cs index 6710071c0..2f768ecdd 100644 --- a/Questionable/Controller/Steps/Shared/SkipCondition.cs +++ b/Questionable/Controller/Steps/Shared/SkipCondition.cs @@ -156,15 +156,27 @@ internal static class SkipCondition } QuestWork? questWork = gameFunctions.GetQuestEx(QuestId); - if (questWork != null) + if (QuestWorkUtils.HasCompletionFlags(Step.CompletionQuestVariablesFlags) && questWork != null) { - if (QuestWorkUtils.MatchesQuestWork(Step.CompletionQuestVariablesFlags, questWork.Value, true)) + if (QuestWorkUtils.MatchesQuestWork(Step.CompletionQuestVariablesFlags, questWork.Value)) { - logger.LogInformation("Skipping step, as quest variables match"); + logger.LogInformation("Skipping step, as quest variables match (step is complete)"); return true; } + } - if (!QuestWorkUtils.MatchesRequiredQuestWorkConfig(Step.RequiredQuestVariables, questWork.Value, + if (Step is { SkipConditions.StepIf: { } conditions } && questWork != null) + { + if (QuestWorkUtils.MatchesQuestWork(conditions.CompletionQuestVariablesFlags, questWork.Value)) + { + logger.LogInformation("Skipping step, as quest variables match (step can be skipped)"); + return true; + } + } + + if (Step is { RequiredQuestVariables: { } requiredQuestVariables } && questWork != null) + { + if (!QuestWorkUtils.MatchesRequiredQuestWorkConfig(requiredQuestVariables, questWork.Value, logger)) { logger.LogInformation("Skipping step, as required variables do not match"); diff --git a/Questionable/Controller/Steps/Shared/WaitAtEnd.cs b/Questionable/Controller/Steps/Shared/WaitAtEnd.cs index 16a5589bf..0d44663ce 100644 --- a/Questionable/Controller/Steps/Shared/WaitAtEnd.cs +++ b/Questionable/Controller/Steps/Shared/WaitAtEnd.cs @@ -27,7 +27,7 @@ internal static class WaitAtEnd { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { - if (step.CompletionQuestVariablesFlags.Count == 6 && step.CompletionQuestVariablesFlags.Any(x => x is > 0)) + if (step.CompletionQuestVariablesFlags.Count == 6 && QuestWorkUtils.HasCompletionFlags(step.CompletionQuestVariablesFlags)) { var task = serviceProvider.GetRequiredService() .With(quest, step); @@ -164,7 +164,7 @@ internal static class WaitAtEnd { public Quest Quest { get; set; } = null!; public QuestStep Step { get; set; } = null!; - public IList Flags { get; set; } = null!; + public IList Flags { get; set; } = null!; public ITask With(Quest quest, QuestStep step) { @@ -180,13 +180,13 @@ internal static class WaitAtEnd { QuestWork? questWork = gameFunctions.GetQuestEx(Quest.QuestId); return questWork != null && - QuestWorkUtils.MatchesQuestWork(Step.CompletionQuestVariablesFlags, questWork.Value, false) + QuestWorkUtils.MatchesQuestWork(Step.CompletionQuestVariablesFlags, questWork.Value) ? ETaskResult.TaskComplete : ETaskResult.StillRunning; } public override string ToString() => - $"Wait(QW: {string.Join(", ", Flags.Select(x => x?.ToString(CultureInfo.InvariantCulture) ?? "-"))})"; + $"Wait(QW: {string.Join(", ", Flags.Select(x => x?.ToString() ?? "-"))})"; } internal sealed class WaitObjectAtPosition(GameFunctions gameFunctions) : ITask diff --git a/Questionable/Controller/Utils/QuestWorkUtils.cs b/Questionable/Controller/Utils/QuestWorkUtils.cs index 33edd4981..6bb771806 100644 --- a/Questionable/Controller/Utils/QuestWorkUtils.cs +++ b/Questionable/Controller/Utils/QuestWorkUtils.cs @@ -10,40 +10,50 @@ namespace Questionable.Controller.Utils; internal static class QuestWorkUtils { - public static bool HasCompletionFlags(IList completionQuestVariablesFlags) + public static bool HasCompletionFlags(IList completionQuestVariablesFlags) { - return completionQuestVariablesFlags.Count == 6 && completionQuestVariablesFlags.Any(x => x != null); + return completionQuestVariablesFlags.Count == 6 && completionQuestVariablesFlags.Any(x => x != null && (x.High != 0 || x.Low != 0)); } - /// - /// Positive values: Must be set to this value; will wait for the step to have these set. - /// Negative values: Will skip if set to this value, won't wait for this to be set. - /// - public static bool MatchesQuestWork(IList completionQuestVariablesFlags, QuestWork questWork, bool forSkip) + public static bool MatchesQuestWork(IList completionQuestVariablesFlags, QuestWork questWork) { if (!HasCompletionFlags(completionQuestVariablesFlags)) return false; for (int i = 0; i < 6; ++i) { - short? check = completionQuestVariablesFlags[i]; + QuestWorkValue? check = completionQuestVariablesFlags[i]; if (check == null) continue; - byte actualValue = questWork.Variables[i]; - byte checkByte = check > 0 ? (byte)check : (byte)-check; - if (forSkip) + EQuestWorkMode mode = check.Mode; + + byte actualHigh = (byte)(questWork.Variables[i] >> 4); + byte actualLow = (byte)(questWork.Variables[i] & 0xF); + + byte? checkHigh = check.High; + byte? checkLow = check.Low; + + byte expectedHigh = checkHigh.GetValueOrDefault(); + byte expectedLow = checkLow.GetValueOrDefault(); + if (mode == EQuestWorkMode.Exact) { - byte expectedValue = (byte)Math.Abs(check.Value); - if ((actualValue & checkByte) != expectedValue) + if (checkHigh != null && actualHigh != expectedHigh) + return false; + + if (checkLow != null && actualLow != expectedLow) return false; } - else if (!forSkip && check > 0) + else if (mode == EQuestWorkMode.Bitwise) { - byte expectedValue = check > 0 ? (byte)check : (byte)0; - if ((actualValue & checkByte) != expectedValue) + if (checkHigh != null && (actualHigh & checkHigh) != expectedHigh) + return false; + + if (checkLow != null && (actualLow & checkLow) != expectedLow) return false; } + else + throw new InvalidOperationException($"Unknown qw mode {mode}"); } return true; @@ -54,7 +64,7 @@ internal static class QuestWorkUtils { if (requiredQuestVariables.Count != 6 || requiredQuestVariables.All(x => x == null || x.Count == 0)) { - logger.LogInformation("No RQW defined"); + logger.LogDebug("No RQW defined"); return true; } @@ -71,7 +81,7 @@ internal static class QuestWorkUtils foreach (QuestWorkValue expectedValue in requiredQuestVariables[i]!) { - logger.LogInformation("H: {ExpectedHigh} - {ActualHigh}, L: {ExpectedLow} - {ActualLow}", + logger.LogDebug("H: {ExpectedHigh} - {ActualHigh}, L: {ExpectedLow} - {ActualLow}", expectedValue.High, high, expectedValue.Low, low); if (expectedValue.High != null && expectedValue.High != high) continue; diff --git a/Questionable/Validation/Validators/CompletionFlagsValidator.cs b/Questionable/Validation/Validators/CompletionFlagsValidator.cs index 462e92895..1d36c8c4b 100644 --- a/Questionable/Validation/Validators/CompletionFlagsValidator.cs +++ b/Questionable/Validation/Validators/CompletionFlagsValidator.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Numerics; using Questionable.Controller.Utils; using Questionable.Model; +using Questionable.Model.V1; namespace Questionable.Validation.Validators; @@ -19,10 +20,13 @@ internal sealed class CompletionFlagsValidator : IQuestValidator { return Enumerable.Range(0, 6).Select(y => { - short? value = x.CompletionQuestVariablesFlags[y]; - if (value == null || value.Value < 0) + QuestWorkValue? value = x.CompletionQuestVariablesFlags[y]; + if (value == null) return 0; - return (long)BitOperations.RotateLeft((ulong)value.Value, 8 * y); + + // this isn't perfect, as it assumes {High: 1, Low: null} == {High: 1, Low: 0} + return (long)BitOperations.RotateLeft( + (ulong)(value.High.GetValueOrDefault() * 16 + value.Low.GetValueOrDefault()), 8 * y); }) .Sum(); } @@ -46,7 +50,8 @@ internal sealed class CompletionFlagsValidator : IQuestValidator Step = i, Type = EIssueType.DuplicateCompletionFlags, Severity = EIssueSeverity.Error, - Description = $"Duplicate completion flags: {string.Join(", ", sequence.Steps[i].CompletionQuestVariablesFlags)}", + Description = + $"Duplicate completion flags: {string.Join(", ", sequence.Steps[i].CompletionQuestVariablesFlags)}", }; } }