Update CompletionQuestVariablesFlags for skip checking

pull/14/head
Liza 2024-08-01 03:22:01 +02:00
parent becfac28ad
commit d64cd9d5fc
Signed by: liza
GPG Key ID: 7199F8D727D55F67
83 changed files with 2510 additions and 1340 deletions

View File

@ -213,7 +213,9 @@ public static class RoslynShortcuts
{ {
Argument(LiteralValue(qwv.High)), Argument(LiteralValue(qwv.High)),
Token(SyntaxKind.CommaToken), Token(SyntaxKind.CommaToken),
Argument(LiteralValue(qwv.Low)) Argument(LiteralValue(qwv.Low)),
Token(SyntaxKind.CommaToken),
Argument(LiteralValue(qwv.Mode))
}))); })));
} }
else if (value is List<QuestWorkValue> list) else if (value is List<QuestWorkValue> list)
@ -255,6 +257,9 @@ public static class RoslynShortcuts
Assignment(nameof(SkipStepConditions.Never), skipStepConditions.Never, Assignment(nameof(SkipStepConditions.Never), skipStepConditions.Never,
emptyStep.Never) emptyStep.Never)
.AsSyntaxNodeOrToken(), .AsSyntaxNodeOrToken(),
AssignmentList(nameof(SkipStepConditions.CompletionQuestVariablesFlags),
skipStepConditions.CompletionQuestVariablesFlags)
.AsSyntaxNodeOrToken(),
Assignment(nameof(SkipStepConditions.Flying), skipStepConditions.Flying, Assignment(nameof(SkipStepConditions.Flying), skipStepConditions.Flying,
emptyStep.Flying) emptyStep.Flying)
.AsSyntaxNodeOrToken(), .AsSyntaxNodeOrToken(),

View File

@ -1,7 +1,6 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza", "Author": "liza",
"Disabled": true,
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "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
}
]
} }
] ]
} }

View File

@ -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"
}
]
}
]
}

View File

@ -37,16 +37,18 @@
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"NotInSameTerritory": true "NotInSameTerritory": true
}
}, },
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2002380, "DataId": 2002380,
@ -76,14 +78,18 @@
"TerritoryId": 180, "TerritoryId": 180,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2002379, "DataId": 2002379,
@ -112,14 +118,18 @@
"TerritoryId": 180, "TerritoryId": 180,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-16 16
] ]
}
}
}, },
{ {
"DataId": 2002382, "DataId": 2002382,
@ -148,14 +158,18 @@
"TerritoryId": 180, "TerritoryId": 180,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2002381, "DataId": 2002381,

View File

@ -65,14 +65,18 @@
"TerritoryId": 139, "TerritoryId": 139,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Mount": true, "Mount": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1007844, "DataId": 1007844,
@ -120,16 +124,16 @@
}, },
"TerritoryId": 139, "TerritoryId": 139,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
], ],
"SkipConditions": {
"StepIf": {
"Flying": "Unlocked" "Flying": "Unlocked"
} }
} }

View File

@ -28,18 +28,20 @@
}, },
"TerritoryId": 155, "TerritoryId": 155,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead",
"SkipConditions": {
"AetheryteShortcutIf": {
"NotInSameTerritory": true
},
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
], ]
"AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead",
"SkipConditions": {
"AetheryteShortcutIf": {
"NotInSameTerritory": true
} }
}, },
"Fly": true "Fly": true
@ -56,14 +58,18 @@
"KillEnemyDataIds": [ "KillEnemyDataIds": [
1918 1918
], ],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2002308, "DataId": 2002308,
@ -127,14 +133,18 @@
"InteractionType": "UseItem", "InteractionType": "UseItem",
"ItemId": 30362, "ItemId": 30362,
"TargetTerritoryId": 140, "TargetTerritoryId": 140,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -148,14 +158,18 @@
"KillEnemyDataIds": [ "KillEnemyDataIds": [
1920 1920
], ],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2002310, "DataId": 2002310,

View File

@ -65,14 +65,18 @@
}, },
"TerritoryId": 148, "TerritoryId": 148,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -83,14 +87,18 @@
"TerritoryId": 148, "TerritoryId": 148,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2000748, "DataId": 2000748,
@ -120,14 +128,18 @@
"TerritoryId": 148, "TerritoryId": 148,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-16 16
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -137,14 +149,18 @@
}, },
"TerritoryId": 148, "TerritoryId": 148,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-16 16
] ]
}
}
}, },
{ {
"DataId": 2000751, "DataId": 2000751,

View File

@ -36,14 +36,18 @@
}, },
"StopDistance": 3 "StopDistance": 3
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-8 8
] ]
}
}
}, },
{ {
"DataId": 1002639, "DataId": 1002639,

View File

@ -64,14 +64,18 @@
}, },
"StopDistance": 5 "StopDistance": 5
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-16 16
] ]
}
}
}, },
{ {
"DataId": 1004506, "DataId": 1004506,

View File

@ -65,14 +65,18 @@
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": false, "DisableNavmesh": false,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1004599, "DataId": 1004599,

View File

@ -63,14 +63,18 @@
}, },
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-8 8
] ]
}
}
}, },
{ {
"DataId": 2001953, "DataId": 2001953,
@ -109,14 +113,18 @@
}, },
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2001951, "DataId": 2001951,
@ -146,14 +154,18 @@
"TerritoryId": 153, "TerritoryId": 153,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-16 16
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -163,14 +175,18 @@
}, },
"TerritoryId": 153, "TerritoryId": 153,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-16 16
] ]
}
}
}, },
{ {
"DataId": 2001952, "DataId": 2001952,

View File

@ -71,14 +71,18 @@
725, 725,
726 726
], ],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2002261, "DataId": 2002261,

View File

@ -64,14 +64,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"$": "NW Skyfire Locks door (inside)", "$": "NW Skyfire Locks door (inside)",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 1006396, "DataId": 1006396,

View File

@ -34,14 +34,18 @@
}, },
"TerritoryId": 138, "TerritoryId": 138,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -52,14 +56,18 @@
"TerritoryId": 138, "TerritoryId": 138,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 1006500, "DataId": 1006500,

View File

@ -94,14 +94,18 @@
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Comment": "Avoids pit", "Comment": "Avoids pit",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -112,14 +116,18 @@
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Comment": "Move into LOS", "Comment": "Move into LOS",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2002230, "DataId": 2002230,

View File

@ -68,14 +68,18 @@
"TerritoryId": 351, "TerritoryId": 351,
"InteractionType": "Interact", "InteractionType": "Interact",
"TargetTerritoryId": 156, "TargetTerritoryId": 156,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-2 2
] ]
}
}
}, },
{ {
"DataId": 1009147, "DataId": 1009147,

View File

@ -76,14 +76,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"AetheryteShortcut": "Upper La Noscea - Camp Bronze Lake", "AetheryteShortcut": "Upper La Noscea - Camp Bronze Lake",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -94,14 +98,18 @@
"TerritoryId": 139, "TerritoryId": 139,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"TargetTerritoryId": 180, "TargetTerritoryId": 180,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -112,27 +120,35 @@
"TerritoryId": 180, "TerritoryId": 180,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"TerritoryId": 180, "TerritoryId": 180,
"InteractionType": "AttuneAetheryte", "InteractionType": "AttuneAetheryte",
"Aetheryte": "Outer La Noscea - Camp Overlook", "Aetheryte": "Outer La Noscea - Camp Overlook",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -143,14 +159,18 @@
"TerritoryId": 180, "TerritoryId": 180,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -161,14 +181,18 @@
"TerritoryId": 180, "TerritoryId": 180,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -179,14 +203,18 @@
"TerritoryId": 180, "TerritoryId": 180,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2000075, "DataId": 2000075,
@ -221,14 +249,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"AetheryteShortcut": "Western La Noscea - Aleport", "AetheryteShortcut": "Western La Noscea - Aleport",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2000076, "DataId": 2000076,

View File

@ -28,14 +28,18 @@
}, },
"TerritoryId": 180, "TerritoryId": 180,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2003715, "DataId": 2003715,

View File

@ -28,14 +28,18 @@
}, },
"TerritoryId": 400, "TerritoryId": 400,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -46,14 +50,18 @@
"TerritoryId": 400, "TerritoryId": 400,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -63,14 +71,18 @@
}, },
"TerritoryId": 400, "TerritoryId": 400,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 1013424, "DataId": 1013424,
@ -118,14 +130,18 @@
}, },
"TerritoryId": 400, "TerritoryId": 400,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -144,14 +160,18 @@
"Z": 380.9018 "Z": 380.9018
} }
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1013421, "DataId": 1013421,

View File

@ -28,14 +28,18 @@
}, },
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -46,14 +50,18 @@
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -64,14 +72,18 @@
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 1011932, "DataId": 1011932,
@ -99,14 +111,18 @@
}, },
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -117,14 +133,18 @@
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 1011924, "DataId": 1011924,

View File

@ -34,14 +34,18 @@
}, },
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -52,14 +56,18 @@
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -70,14 +78,18 @@
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 1011932, "DataId": 1011932,
@ -106,14 +118,18 @@
}, },
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -124,14 +140,18 @@
"TerritoryId": 398, "TerritoryId": 398,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 1011924, "DataId": 1011924,

View File

@ -29,14 +29,18 @@
"TerritoryId": 401, "TerritoryId": 401,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Mount": true, "Mount": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -47,14 +51,18 @@
"TerritoryId": 401, "TerritoryId": 401,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1013498, "DataId": 1013498,

View File

@ -86,14 +86,18 @@
}, },
"TerritoryId": 418, "TerritoryId": 418,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -104,14 +108,18 @@
"TerritoryId": 418, "TerritoryId": 418,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 1012251, "DataId": 1012251,

View File

@ -64,14 +64,18 @@
null, null,
null null
], ],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2009361, "DataId": 2009361,
@ -160,14 +164,18 @@
null, null,
null null
], ],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2009360, "DataId": 2009360,
@ -253,14 +261,18 @@
null, null,
null null
], ],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2009359, "DataId": 2009359,
@ -346,14 +358,18 @@
null, null,
null null
], ],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-4 4
] ]
}
}
}, },
{ {
"DataId": 2009364, "DataId": 2009364,
@ -436,14 +452,18 @@
null, null,
null null
], ],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-8 8
] ]
}
}
}, },
{ {
"DataId": 2009363, "DataId": 2009363,
@ -529,14 +549,18 @@
null, null,
null null
], ],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-16 16
] ]
}
}
}, },
{ {
"DataId": 2009362, "DataId": 2009362,

View File

@ -63,14 +63,18 @@
"TerritoryId": 813, "TerritoryId": 813,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Mount": true, "Mount": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -81,14 +85,18 @@
"TerritoryId": 813, "TerritoryId": 813,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 1027339, "DataId": 1027339,
@ -116,14 +124,18 @@
}, },
"TerritoryId": 813, "TerritoryId": 813,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -133,14 +145,18 @@
}, },
"TerritoryId": 813, "TerritoryId": 813,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -150,14 +166,18 @@
}, },
"TerritoryId": 813, "TerritoryId": 813,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 1027420, "DataId": 1027420,

View File

@ -29,14 +29,18 @@
"TerritoryId": 813, "TerritoryId": 813,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Comment": "Tower Bottom", "Comment": "Tower Bottom",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -48,14 +52,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"Comment": "Tower Bottom Platform 1", "Comment": "Tower Bottom Platform 1",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2010618, "DataId": 2010618,

View File

@ -74,14 +74,18 @@
}, },
"TerritoryId": 813, "TerritoryId": 813,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 1028952, "DataId": 1028952,

View File

@ -28,14 +28,18 @@
}, },
"TerritoryId": 816, "TerritoryId": 816,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2009820, "DataId": 2009820,
@ -66,14 +70,18 @@
"TerritoryId": 816, "TerritoryId": 816,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2009819, "DataId": 2009819,

View File

@ -46,14 +46,18 @@
}, },
"TerritoryId": 816, "TerritoryId": 816,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -64,14 +68,18 @@
"TerritoryId": 816, "TerritoryId": 816,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2009831, "DataId": 2009831,

View File

@ -150,14 +150,18 @@
}, },
"TerritoryId": 816, "TerritoryId": 816,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -168,14 +172,18 @@
"TerritoryId": 816, "TerritoryId": 816,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2009836, "DataId": 2009836,
@ -214,14 +222,18 @@
}, },
"DelaySeconds": 0.2 "DelaySeconds": 0.2
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -241,14 +253,18 @@
}, },
"DelaySeconds": 0.1 "DelaySeconds": 0.1
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -268,14 +284,18 @@
}, },
"DelaySeconds": 0.1 "DelaySeconds": 0.1
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -295,14 +315,18 @@
}, },
"DelaySeconds": 0.2 "DelaySeconds": 0.2
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2009835, "DataId": 2009835,

View File

@ -79,14 +79,18 @@
"StopDistance": 2, "StopDistance": 2,
"Type": "RepeatedJumps" "Type": "RepeatedJumps"
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-16 16
] ]
}
}
}, },
{ {
"DataId": 2009890, "DataId": 2009890,
@ -128,14 +132,18 @@
"StopDistance": 2, "StopDistance": 2,
"Type": "RepeatedJumps" "Type": "RepeatedJumps"
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2009887, "DataId": 2009887,
@ -166,14 +174,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"Mount": true, "Mount": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -196,14 +208,18 @@
"StopDistance": 2, "StopDistance": 2,
"Type": "RepeatedJumps" "Type": "RepeatedJumps"
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2009888, "DataId": 2009888,
@ -245,14 +261,18 @@
"StopDistance": 2, "StopDistance": 2,
"Type": "RepeatedJumps" "Type": "RepeatedJumps"
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2009889, "DataId": 2009889,

View File

@ -60,14 +60,18 @@
}, },
"TerritoryId": 814, "TerritoryId": 814,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2010088, "DataId": 2010088,
@ -114,14 +118,18 @@
}, },
"TerritoryId": 814, "TerritoryId": 814,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2010089, "DataId": 2010089,

View File

@ -48,14 +48,18 @@
"TerritoryId": 819, "TerritoryId": 819,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1027246, "DataId": 1027246,

View File

@ -29,14 +29,18 @@
"TerritoryId": 816, "TerritoryId": 816,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2010856, "DataId": 2010856,
@ -83,14 +87,18 @@
}, },
"TerritoryId": 816, "TerritoryId": 816,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2010857, "DataId": 2010857,

View File

@ -29,14 +29,18 @@
"StopDistance": 1, "StopDistance": 1,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -56,14 +60,18 @@
}, },
"Mount": false, "Mount": false,
"Comment": "Platform 1", "Comment": "Platform 1",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -82,14 +90,18 @@
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"Comment": "Platform 2", "Comment": "Platform 2",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -108,14 +120,18 @@
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"Comment": "Platform 3", "Comment": "Platform 3",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -134,14 +150,18 @@
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"Comment": "Platform 4", "Comment": "Platform 4",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -160,14 +180,18 @@
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"Comment": "Platform 5", "Comment": "Platform 5",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -186,14 +210,18 @@
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"Comment": "Platform 6", "Comment": "Platform 6",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -204,14 +232,18 @@
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1041789, "DataId": 1041789,
@ -287,14 +319,18 @@
}, },
"Mount": false, "Mount": false,
"Comment": "Platform 1", "Comment": "Platform 1",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -314,14 +350,18 @@
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"Comment": "Platform 2", "Comment": "Platform 2",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -341,14 +381,18 @@
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"Comment": "Platform 3", "Comment": "Platform 3",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -368,14 +412,18 @@
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"Comment": "Platform 4", "Comment": "Platform 4",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -395,14 +443,18 @@
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"Comment": "Platform 5", "Comment": "Platform 5",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -422,14 +474,18 @@
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"Comment": "Platform 6", "Comment": "Platform 6",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 1041791, "DataId": 1041791,

View File

@ -61,14 +61,18 @@
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2011914, "DataId": 2011914,

View File

@ -74,7 +74,7 @@
null, null,
null, null,
null, null,
-64 64
], ],
"$": "QuestVariables after killing enemy: 17 1 0 0 0 64" "$": "QuestVariables after killing enemy: 17 1 0 0 0 64"
}, },

View File

@ -66,14 +66,18 @@
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1037715, "DataId": 1037715,

View File

@ -112,14 +112,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Mount": true, "Mount": true,
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2012111, "DataId": 2012111,
@ -180,14 +184,18 @@
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
], ]
}
},
"Comment": "Avoids combat" "Comment": "Avoids combat"
}, },
{ {
@ -219,14 +227,18 @@
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Comment": "Avoids combat", "Comment": "Avoids combat",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-16 16
] ]
}
}
}, },
{ {
"DataId": 2012110, "DataId": 2012110,

View File

@ -60,14 +60,18 @@
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
], ]
}
},
"Sprint": true "Sprint": true
}, },
{ {

View File

@ -71,14 +71,18 @@
"Z": -1.1141448 "Z": -1.1141448
} }
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-16 16
] ]
}
}
}, },
{ {
"DataId": 2012128, "DataId": 2012128,

View File

@ -109,14 +109,18 @@
}, },
"TerritoryId": 960, "TerritoryId": 960,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2012354, "DataId": 2012354,

View File

@ -51,14 +51,18 @@
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"AetheryteShortcut": "Thavnair - Yedlihmad", "AetheryteShortcut": "Thavnair - Yedlihmad",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1037631, "DataId": 1037631,

View File

@ -97,14 +97,18 @@
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1037655, "DataId": 1037655,
@ -151,14 +155,18 @@
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 1037708, "DataId": 1037708,
@ -169,15 +177,19 @@
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact", "InteractionType": "Interact",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
} }
}
}
] ]
}, },
{ {

View File

@ -68,14 +68,18 @@
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2012455, "DataId": 2012455,
@ -105,14 +109,18 @@
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2012457, "DataId": 2012457,
@ -141,14 +149,18 @@
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2012456, "DataId": 2012456,

View File

@ -45,14 +45,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"Land": true, "Land": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 1042372, "DataId": 1042372,
@ -84,14 +88,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"Land": true, "Land": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 1042371, "DataId": 1042371,
@ -123,14 +131,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"Land": true, "Land": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1042373, "DataId": 1042373,

View File

@ -45,14 +45,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"Land": true, "Land": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2012887, "DataId": 2012887,
@ -84,14 +88,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"Land": true, "Land": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2012888, "DataId": 2012888,
@ -123,14 +131,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"Land": true, "Land": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2012889, "DataId": 2012889,
@ -149,7 +161,7 @@
null, null,
null, null,
null, null,
-32 32
] ]
} }
] ]

View File

@ -29,14 +29,18 @@
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2012902, "DataId": 2012902,
@ -66,14 +70,18 @@
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2012901, "DataId": 2012901,
@ -103,14 +111,18 @@
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2012900, "DataId": 2012900,

View File

@ -30,14 +30,18 @@
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2012907, "DataId": 2012907,

View File

@ -34,14 +34,18 @@
"[Radz-at-Han] The Gate of First Sight (Thavnair)" "[Radz-at-Han] The Gate of First Sight (Thavnair)"
], ],
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 1042462, "DataId": 1042462,

View File

@ -111,14 +111,18 @@
}, },
"DelaySeconds": 0.25 "DelaySeconds": 0.25
}, },
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2014134, "DataId": 2014134,

View File

@ -47,14 +47,18 @@
}, },
"TerritoryId": 1187, "TerritoryId": 1187,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 1046874, "DataId": 1046874,

View File

@ -142,14 +142,18 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
"Mount": true, "Mount": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2013653, "DataId": 2013653,
@ -177,14 +181,18 @@
}, },
"TerritoryId": 1189, "TerritoryId": 1189,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2013655, "DataId": 2013655,

View File

@ -113,14 +113,18 @@
}, },
"TerritoryId": 1191, "TerritoryId": 1191,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2013819, "DataId": 2013819,

View File

@ -131,14 +131,18 @@
}, },
"TerritoryId": 1192, "TerritoryId": 1192,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-16 16
] ]
}
}
}, },
{ {
"DataId": 1047904, "DataId": 1047904,

View File

@ -29,14 +29,18 @@
"TerritoryId": 1191, "TerritoryId": 1191,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2014091, "DataId": 2014091,
@ -85,14 +89,18 @@
"TerritoryId": 1191, "TerritoryId": 1191,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2014093, "DataId": 2014093,

View File

@ -31,17 +31,17 @@
"Fly": true, "Fly": true,
"SkipConditions": { "SkipConditions": {
"StepIf": { "StepIf": {
"Flying": "Locked" "Flying": "Locked",
}
},
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2014184, "DataId": 2014184,

View File

@ -31,17 +31,17 @@
"Fly": true, "Fly": true,
"SkipConditions": { "SkipConditions": {
"StepIf": { "StepIf": {
"Flying": "Locked" "Flying": "Locked",
}
},
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2013901, "DataId": 2013901,

View File

@ -49,14 +49,18 @@
"TerritoryId": 1192, "TerritoryId": 1192,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2013916, "DataId": 2013916,
@ -86,14 +90,18 @@
"TerritoryId": 1192, "TerritoryId": 1192,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2013917, "DataId": 2013917,

View File

@ -29,14 +29,18 @@
"TerritoryId": 1190, "TerritoryId": 1190,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1049284, "DataId": 1049284,
@ -64,14 +68,18 @@
}, },
"TerritoryId": 1190, "TerritoryId": 1190,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 1049275, "DataId": 1049275,

View File

@ -31,17 +31,17 @@
"Fly": true, "Fly": true,
"SkipConditions": { "SkipConditions": {
"StepIf": { "StepIf": {
"Flying": "Locked" "Flying": "Locked",
}
},
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2014051, "DataId": 2014051,

View File

@ -46,16 +46,16 @@
"TerritoryId": 1190, "TerritoryId": 1190,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
], ],
"SkipConditions": {
"StepIf": {
"Flying": "Locked" "Flying": "Locked"
} }
} }
@ -89,16 +89,16 @@
"TerritoryId": 1190, "TerritoryId": 1190,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
], ],
"SkipConditions": {
"StepIf": {
"Flying": "Locked" "Flying": "Locked"
} }
}, },
@ -131,16 +131,16 @@
}, },
"TerritoryId": 1190, "TerritoryId": 1190,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
], ],
"SkipConditions": {
"StepIf": {
"Flying": "Locked" "Flying": "Locked"
} }
}, },

View File

@ -126,16 +126,16 @@
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"AetheryteShortcut": "Shaaloani - Hhusatahwi", "AetheryteShortcut": "Shaaloani - Hhusatahwi",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
], ],
"SkipConditions": {
"StepIf": {
"Flying": "Locked" "Flying": "Locked"
} }
}, },

View File

@ -49,14 +49,18 @@
"TerritoryId": 1189, "TerritoryId": 1189,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1048995, "DataId": 1048995,

View File

@ -45,14 +45,18 @@
"TerritoryId": 1189, "TerritoryId": 1189,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 2014313, "DataId": 2014313,
@ -82,14 +86,18 @@
"TerritoryId": 1189, "TerritoryId": 1189,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 2014314, "DataId": 2014314,
@ -119,14 +127,18 @@
"TerritoryId": 1189, "TerritoryId": 1189,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 2014315, "DataId": 2014315,

View File

@ -29,14 +29,18 @@
"TerritoryId": 1189, "TerritoryId": 1189,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"DataId": 1051049, "DataId": 1051049,
@ -48,14 +52,18 @@
"StopDistance": 4, "StopDistance": 4,
"TerritoryId": 1189, "TerritoryId": 1189,
"InteractionType": "Interact", "InteractionType": "Interact",
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-128 128
] ]
}
}
}, },
{ {
"Position": { "Position": {
@ -66,14 +74,18 @@
"TerritoryId": 1189, "TerritoryId": 1189,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-32 32
] ]
}
}
}, },
{ {
"DataId": 1051051, "DataId": 1051051,
@ -102,14 +114,18 @@
"TerritoryId": 1189, "TerritoryId": 1189,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"Fly": true, "Fly": true,
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
null, null,
null, null,
null, null,
null, null,
-64 64
] ]
}
}
}, },
{ {
"DataId": 1051050, "DataId": 1051050,

View File

@ -28,5 +28,6 @@ public static partial class AssemblyQuestLoader
public static Stream QuestSchema => public static Stream QuestSchema =>
typeof(AssemblyQuestLoader).Assembly.GetManifestResourceStream("Questionable.QuestPaths.QuestSchema")!; typeof(AssemblyQuestLoader).Assembly.GetManifestResourceStream("Questionable.QuestPaths.QuestSchema")!;
[SuppressMessage("ReSharper", "UnusedMember.Local")]
private static void AddQuest(ushort questId, QuestRoot root) => _quests![questId] = root; private static void AddQuest(ushort questId, QuestRoot root) => _quests![questId] = root;
} }

View File

@ -182,6 +182,9 @@
"Never": { "Never": {
"type": "boolean" "type": "boolean"
}, },
"CompletionQuestVariablesFlags": {
"$ref": "#/$defs/CompletionFlags"
},
"Flying": { "Flying": {
"type": "string", "type": "string",
"enum": [ "enum": [
@ -237,7 +240,8 @@
"WakingSandsMainArea" "WakingSandsMainArea"
] ]
} }
} },
"additionalProperties": false
}, },
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"type": "object", "type": "object",
@ -248,7 +252,8 @@
"InSameTerritory": { "InSameTerritory": {
"type": "boolean" "type": "boolean"
} }
} },
"additionalProperties": false
}, },
"AethernetShortcutIf": { "AethernetShortcutIf": {
"type": "object", "type": "object",
@ -259,7 +264,8 @@
"InSameTerritory": { "InSameTerritory": {
"type": "boolean" "type": "boolean"
} }
} },
"additionalProperties": false
} }
}, },
"additionalProperties": false "additionalProperties": false
@ -1309,12 +1315,41 @@
"type": "array", "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", "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": { "items": {
"oneOf": [
{
"type": "object",
"properties": {
"High": {
"type": [ "type": [
"integer", "number",
"null" "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": [ "enum": [
null,
1, 1,
2, 2,
4, 4,
@ -1322,15 +1357,12 @@
16, 16,
32, 32,
64, 64,
128, 128
-1, ]
-2, },
-4, {
-8, "type": "null"
-16, }
-32,
-64,
-128
] ]
}, },
"minItems": 6, "minItems": 6,

View File

@ -14,6 +14,6 @@ public sealed class ComplexCombatData
/// </summary> /// </summary>
public uint? RewardItemId { get; set; } public uint? RewardItemId { get; set; }
public int? RewardItemCount { get; set; } public int? RewardItemCount { get; set; }
public IList<short?> CompletionQuestVariablesFlags { get; set; } = new List<short?>(); public IList<QuestWorkValue?> CompletionQuestVariablesFlags { get; set; } = new List<QuestWorkValue?>();
public bool IgnoreQuestMarker { get; set; } public bool IgnoreQuestMarker { get; set; }
} }

View File

@ -15,6 +15,7 @@ public sealed class QuestWorkConfigConverter : JsonConverter<QuestWorkValue>
throw new JsonException(); throw new JsonException();
byte? high = null, low = null; byte? high = null, low = null;
EQuestWorkMode mode = EQuestWorkMode.Bitwise;
while (reader.Read()) while (reader.Read())
{ {
switch (reader.TokenType) switch (reader.TokenType)
@ -34,6 +35,10 @@ public sealed class QuestWorkConfigConverter : JsonConverter<QuestWorkValue>
low = reader.GetByte(); low = reader.GetByte();
break; break;
case nameof(QuestWorkValue.Mode):
mode = new QuestWorkModeConverter().Read(ref reader, typeof(EQuestWorkMode), options);
break;
default: default:
throw new JsonException(); throw new JsonException();
} }
@ -41,7 +46,7 @@ public sealed class QuestWorkConfigConverter : JsonConverter<QuestWorkValue>
break; break;
case JsonTokenType.EndObject: case JsonTokenType.EndObject:
return new QuestWorkValue(high, low); return new QuestWorkValue(high, low, mode);
default: default:
throw new JsonException(); throw new JsonException();

View File

@ -0,0 +1,12 @@
using System.Collections.Generic;
namespace Questionable.Model.V1.Converter;
public sealed class QuestWorkModeConverter() : EnumConverter<EQuestWorkMode>(Values)
{
private static readonly Dictionary<EQuestWorkMode, string> Values = new()
{
{ EQuestWorkMode.Bitwise, "Bitwise" },
{ EQuestWorkMode.Exact, "Exact" },
};
}

View File

@ -7,7 +7,7 @@ namespace Questionable.Model.V1.Converter;
public sealed class StringListOrValueConverter : JsonConverter<List<string>> public sealed class StringListOrValueConverter : JsonConverter<List<string>>
{ {
public override List<string>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) public override List<string> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{ {
if (reader.TokenType == JsonTokenType.String) if (reader.TokenType == JsonTokenType.String)
return [reader.GetString()!]; return [reader.GetString()!];

View File

@ -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,
}

View File

@ -64,7 +64,7 @@ public sealed class QuestStep
public SkipConditions? SkipConditions { get; set; } public SkipConditions? SkipConditions { get; set; }
public List<List<QuestWorkValue>?> RequiredQuestVariables { get; set; } = new(); public List<List<QuestWorkValue>?> RequiredQuestVariables { get; set; } = new();
public IList<short?> CompletionQuestVariablesFlags { get; set; } = new List<short?>(); public IList<QuestWorkValue?> CompletionQuestVariablesFlags { get; set; } = new List<QuestWorkValue?>();
public IList<DialogueChoice> DialogueChoices { get; set; } = new List<DialogueChoice>(); public IList<DialogueChoice> DialogueChoices { get; set; } = new List<DialogueChoice>();
public IList<uint> PointMenuChoices { get; set; } = new List<uint>(); public IList<uint> PointMenuChoices { get; set; } = new List<uint>();

View File

@ -1,16 +1,30 @@
using System.Text.Json.Serialization; using System;
using System.Text.Json.Serialization;
using Questionable.Model.V1.Converter; using Questionable.Model.V1.Converter;
namespace Questionable.Model.V1; namespace Questionable.Model.V1;
[JsonConverter(typeof(QuestWorkConfigConverter))] [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) 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? High { get; set; } = high;
public byte? Low { get; set; } = low; 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 "-";
}
} }

View File

@ -1,10 +1,12 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace Questionable.Model.V1; namespace Questionable.Model.V1;
public sealed class SkipStepConditions public sealed class SkipStepConditions
{ {
public bool Never { get; set; } public bool Never { get; set; }
public IList<QuestWorkValue?> CompletionQuestVariablesFlags { get; set; } = new List<QuestWorkValue?>();
public ELockedSkipCondition? Flying { get; set; } public ELockedSkipCondition? Flying { get; set; }
public ELockedSkipCondition? Chocobo { get; set; } public ELockedSkipCondition? Chocobo { get; set; }
public bool NotTargetable { get; set; } public bool NotTargetable { get; set; }
@ -19,7 +21,8 @@ public sealed class SkipStepConditions
{ {
if (Never) if (Never)
return false; return false;
return Flying != null || return (CompletionQuestVariablesFlags.Count > 6 && CompletionQuestVariablesFlags.Any(x => x != null)) ||
Flying != null ||
Chocobo != null || Chocobo != null ||
InTerritory.Count > 0 || InTerritory.Count > 0 ||
NotInTerritory.Count > 0 || NotInTerritory.Count > 0 ||
@ -27,4 +30,10 @@ public sealed class SkipStepConditions
QuestsAccepted.Count > 0 || QuestsAccepted.Count > 0 ||
QuestsCompleted.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}";
}
} }

View File

@ -172,7 +172,7 @@ internal sealed class CombatController : IDisposable
{ {
var questWork = _gameFunctions.GetQuestEx(_currentFight.Data.QuestId); var questWork = _gameFunctions.GetQuestEx(_currentFight.Data.QuestId);
if (questWork != null && QuestWorkUtils.MatchesQuestWork(condition.CompletionQuestVariablesFlags, if (questWork != null && QuestWorkUtils.MatchesQuestWork(condition.CompletionQuestVariablesFlags,
questWork.Value, false)) questWork.Value))
{ {
_logger.LogInformation("Complex combat condition fulfilled: QuestWork matches"); _logger.LogInformation("Complex combat condition fulfilled: QuestWork matches");
_currentFight.Data.CompletedComplexDatas.Add(i); _currentFight.Data.CompletedComplexDatas.Add(i);

View File

@ -82,10 +82,10 @@ internal static class Combat
{ {
private bool _isLastStep; private bool _isLastStep;
private CombatController.CombatData _combatData = null!; private CombatController.CombatData _combatData = null!;
private IList<short?> _completionQuestVariableFlags = null!; private IList<QuestWorkValue?> _completionQuestVariableFlags = null!;
public ITask With(ushort questId, bool isLastStep, EEnemySpawnType enemySpawnType, IList<uint> killEnemyDataIds, public ITask With(ushort questId, bool isLastStep, EEnemySpawnType enemySpawnType, IList<uint> killEnemyDataIds,
IList<short?> completionQuestVariablesFlags, IList<ComplexCombatData> complexCombatData) IList<QuestWorkValue?> completionQuestVariablesFlags, IList<ComplexCombatData> complexCombatData)
{ {
_isLastStep = isLastStep; _isLastStep = isLastStep;
_combatData = new CombatController.CombatData _combatData = new CombatController.CombatData
@ -113,7 +113,7 @@ internal static class Combat
if (questWork == null) if (questWork == null)
return ETaskResult.StillRunning; return ETaskResult.StillRunning;
if (QuestWorkUtils.MatchesQuestWork(_completionQuestVariableFlags, questWork.Value, false)) if (QuestWorkUtils.MatchesQuestWork(_completionQuestVariableFlags, questWork.Value))
return ETaskResult.TaskComplete; return ETaskResult.TaskComplete;
else else
return ETaskResult.StillRunning; return ETaskResult.StillRunning;

View File

@ -119,7 +119,7 @@ internal static class UseItem
public ushort? QuestId { get; set; } public ushort? QuestId { get; set; }
public uint ItemId { get; set; } public uint ItemId { get; set; }
public IList<short?> CompletionQuestVariablesFlags { get; set; } = new List<short?>(); public IList<QuestWorkValue?> CompletionQuestVariablesFlags { get; set; } = new List<QuestWorkValue?>();
public bool StartingCombat { get; set; } public bool StartingCombat { get; set; }
protected abstract bool UseItem(); protected abstract bool UseItem();
@ -145,7 +145,7 @@ internal static class UseItem
{ {
QuestWork? questWork = gameFunctions.GetQuestEx(QuestId.Value); QuestWork? questWork = gameFunctions.GetQuestEx(QuestId.Value);
if (questWork != null && if (questWork != null &&
QuestWorkUtils.MatchesQuestWork(CompletionQuestVariablesFlags, questWork.Value, false)) QuestWorkUtils.MatchesQuestWork(CompletionQuestVariablesFlags, questWork.Value))
return ETaskResult.TaskComplete; return ETaskResult.TaskComplete;
} }
@ -202,7 +202,7 @@ internal static class UseItem
public uint DataId { get; set; } public uint DataId { get; set; }
public ITask With(ushort? questId, uint dataId, uint itemId, IList<short?> completionQuestVariablesFlags) public ITask With(ushort? questId, uint dataId, uint itemId, IList<QuestWorkValue?> completionQuestVariablesFlags)
{ {
QuestId = questId; QuestId = questId;
DataId = dataId; DataId = dataId;
@ -226,7 +226,7 @@ internal static class UseItem
public Vector3 Position { get; set; } public Vector3 Position { get; set; }
public ITask With(ushort? questId, Vector3 position, uint itemId, IList<short?> completionQuestVariablesFlags) public ITask With(ushort? questId, Vector3 position, uint itemId, IList<QuestWorkValue?> completionQuestVariablesFlags)
{ {
QuestId = questId; QuestId = questId;
Position = position; Position = position;
@ -248,7 +248,7 @@ internal static class UseItem
public uint DataId { get; set; } public uint DataId { get; set; }
public ITask With(ushort? questId, uint dataId, uint itemId, IList<short?> completionQuestVariablesFlags, public ITask With(ushort? questId, uint dataId, uint itemId, IList<QuestWorkValue?> completionQuestVariablesFlags,
bool startingCombat = false) bool startingCombat = false)
{ {
QuestId = questId; QuestId = questId;
@ -269,7 +269,7 @@ internal static class UseItem
{ {
private readonly GameFunctions _gameFunctions = gameFunctions; private readonly GameFunctions _gameFunctions = gameFunctions;
public ITask With(ushort? questId, uint itemId, IList<short?> completionQuestVariablesFlags) public ITask With(ushort? questId, uint itemId, IList<QuestWorkValue?> completionQuestVariablesFlags)
{ {
QuestId = questId; QuestId = questId;
ItemId = itemId; ItemId = itemId;

View File

@ -156,15 +156,27 @@ internal static class SkipCondition
} }
QuestWork? questWork = gameFunctions.GetQuestEx(QuestId); 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; 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))
{ {
logger.LogInformation("Skipping step, as required variables do not match"); logger.LogInformation("Skipping step, as required variables do not match");

View File

@ -27,7 +27,7 @@ internal static class WaitAtEnd
{ {
public IEnumerable<ITask> CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) public IEnumerable<ITask> 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<WaitForCompletionFlags>() var task = serviceProvider.GetRequiredService<WaitForCompletionFlags>()
.With(quest, step); .With(quest, step);
@ -164,7 +164,7 @@ internal static class WaitAtEnd
{ {
public Quest Quest { get; set; } = null!; public Quest Quest { get; set; } = null!;
public QuestStep Step { get; set; } = null!; public QuestStep Step { get; set; } = null!;
public IList<short?> Flags { get; set; } = null!; public IList<QuestWorkValue?> Flags { get; set; } = null!;
public ITask With(Quest quest, QuestStep step) public ITask With(Quest quest, QuestStep step)
{ {
@ -180,13 +180,13 @@ internal static class WaitAtEnd
{ {
QuestWork? questWork = gameFunctions.GetQuestEx(Quest.QuestId); QuestWork? questWork = gameFunctions.GetQuestEx(Quest.QuestId);
return questWork != null && return questWork != null &&
QuestWorkUtils.MatchesQuestWork(Step.CompletionQuestVariablesFlags, questWork.Value, false) QuestWorkUtils.MatchesQuestWork(Step.CompletionQuestVariablesFlags, questWork.Value)
? ETaskResult.TaskComplete ? ETaskResult.TaskComplete
: ETaskResult.StillRunning; : ETaskResult.StillRunning;
} }
public override string ToString() => 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 internal sealed class WaitObjectAtPosition(GameFunctions gameFunctions) : ITask

View File

@ -10,40 +10,50 @@ namespace Questionable.Controller.Utils;
internal static class QuestWorkUtils internal static class QuestWorkUtils
{ {
public static bool HasCompletionFlags(IList<short?> completionQuestVariablesFlags) public static bool HasCompletionFlags(IList<QuestWorkValue?> 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));
} }
/// <summary> public static bool MatchesQuestWork(IList<QuestWorkValue?> completionQuestVariablesFlags, QuestWork questWork)
/// 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.
/// </summary>
public static bool MatchesQuestWork(IList<short?> completionQuestVariablesFlags, QuestWork questWork, bool forSkip)
{ {
if (!HasCompletionFlags(completionQuestVariablesFlags)) if (!HasCompletionFlags(completionQuestVariablesFlags))
return false; return false;
for (int i = 0; i < 6; ++i) for (int i = 0; i < 6; ++i)
{ {
short? check = completionQuestVariablesFlags[i]; QuestWorkValue? check = completionQuestVariablesFlags[i];
if (check == null) if (check == null)
continue; continue;
byte actualValue = questWork.Variables[i]; EQuestWorkMode mode = check.Mode;
byte checkByte = check > 0 ? (byte)check : (byte)-check;
if (forSkip) 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 (checkHigh != null && actualHigh != expectedHigh)
if ((actualValue & checkByte) != expectedValue) return false;
if (checkLow != null && actualLow != expectedLow)
return false; return false;
} }
else if (!forSkip && check > 0) else if (mode == EQuestWorkMode.Bitwise)
{ {
byte expectedValue = check > 0 ? (byte)check : (byte)0; if (checkHigh != null && (actualHigh & checkHigh) != expectedHigh)
if ((actualValue & checkByte) != expectedValue) return false;
if (checkLow != null && (actualLow & checkLow) != expectedLow)
return false; return false;
} }
else
throw new InvalidOperationException($"Unknown qw mode {mode}");
} }
return true; return true;
@ -54,7 +64,7 @@ internal static class QuestWorkUtils
{ {
if (requiredQuestVariables.Count != 6 || requiredQuestVariables.All(x => x == null || x.Count == 0)) if (requiredQuestVariables.Count != 6 || requiredQuestVariables.All(x => x == null || x.Count == 0))
{ {
logger.LogInformation("No RQW defined"); logger.LogDebug("No RQW defined");
return true; return true;
} }
@ -71,7 +81,7 @@ internal static class QuestWorkUtils
foreach (QuestWorkValue expectedValue in requiredQuestVariables[i]!) 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); expectedValue.High, high, expectedValue.Low, low);
if (expectedValue.High != null && expectedValue.High != high) if (expectedValue.High != null && expectedValue.High != high)
continue; continue;

View File

@ -3,6 +3,7 @@ using System.Linq;
using System.Numerics; using System.Numerics;
using Questionable.Controller.Utils; using Questionable.Controller.Utils;
using Questionable.Model; using Questionable.Model;
using Questionable.Model.V1;
namespace Questionable.Validation.Validators; namespace Questionable.Validation.Validators;
@ -19,10 +20,13 @@ internal sealed class CompletionFlagsValidator : IQuestValidator
{ {
return Enumerable.Range(0, 6).Select(y => return Enumerable.Range(0, 6).Select(y =>
{ {
short? value = x.CompletionQuestVariablesFlags[y]; QuestWorkValue? value = x.CompletionQuestVariablesFlags[y];
if (value == null || value.Value < 0) if (value == null)
return 0; 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(); .Sum();
} }
@ -46,7 +50,8 @@ internal sealed class CompletionFlagsValidator : IQuestValidator
Step = i, Step = i,
Type = EIssueType.DuplicateCompletionFlags, Type = EIssueType.DuplicateCompletionFlags,
Severity = EIssueSeverity.Error, Severity = EIssueSeverity.Error,
Description = $"Duplicate completion flags: {string.Join(", ", sequence.Steps[i].CompletionQuestVariablesFlags)}", Description =
$"Duplicate completion flags: {string.Join(", ", sequence.Steps[i].CompletionQuestVariablesFlags)}",
}; };
} }
} }