1
0
Fork 0

Add rogue quests; adjust ninja paths

Liza 2024-10-19 17:24:21 +02:00
parent b5b9850a76
commit c6272ccd88
Signed by: liza
GPG Key ID: 7199F8D727D55F67
42 changed files with 2261 additions and 333 deletions

View File

@ -95,6 +95,8 @@ internal static class QuestStepExtensions
.AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.Action), step.Action, emptyStep.Action)
.AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.Status), step.Status, emptyStep.Status)
.AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.EnemySpawnType), step.EnemySpawnType,
emptyStep.EnemySpawnType)
.AsSyntaxNodeOrToken(),

View File

@ -53,7 +53,8 @@
"Prompt": "TEXT_CLSROG011_00102_Q1_000_030",
"Yes": true
}
]
],
"NextQuestId": 104
}
]
}

View File

@ -0,0 +1,196 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"TargetTerritoryId": 129,
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"ExtraCondition": "RoguesGuild"
}
}
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": 31.662792,
"Y": 44.020653,
"Z": 146.94322
},
"TerritoryId": 134,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"ComplexCombatData": [
{
"DataId": 347,
"MinimumKillCount": 3,
"CompletionQuestVariablesFlags": [
{
"Low": 3
},
null,
null,
null,
null,
null
]
}
],
"AethernetShortcut": [
"[Limsa Lominsa] Fishermens' Guild",
"[Limsa Lominsa] Zephyr Gate (Middle La Noscea)"
],
"CompletionQuestVariablesFlags": [
{
"Low": 3
},
null,
null,
null,
null,
null
]
},
{
"Position": {
"X": 74.15681,
"Y": 45.953808,
"Z": 169.73499
},
"TerritoryId": 134,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"ComplexCombatData": [
{
"DataId": 338,
"MinimumKillCount": 3,
"CompletionQuestVariablesFlags": [
null,
{
"Low": 3
},
null,
null,
null,
null
]
}
],
"CompletionQuestVariablesFlags": [
null,
{
"Low": 3
},
null,
null,
null,
null
]
},
{
"Position": {
"X": 5.6626997,
"Y": 42.625427,
"Z": 55.983746
},
"TerritoryId": 134,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"ComplexCombatData": [
{
"DataId": 383,
"MinimumKillCount": 3,
"CompletionQuestVariablesFlags": [
null,
{
"High": 3
},
null,
null,
null,
null
]
}
],
"CompletionQuestVariablesFlags": [
null,
{
"High": 3
},
null,
null,
null,
null
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
]
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"NextQuestId": 110
}
]
}
]
}

View File

@ -0,0 +1,298 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"TargetTerritoryId": 129,
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"ExtraCondition": "RoguesGuild"
}
}
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1010197,
"Position": {
"X": -150.98804,
"Y": -129.4397,
"Z": 266.31567
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2004936,
"Position": {
"X": -151.90363,
"Y": -128.16058,
"Z": 256.8551
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"SkipConditions": {
"StepIf": {
"InTerritory": [
135
]
}
}
},
{
"Position": {
"X": 174.3623,
"Y": 39.811382,
"Z": 52.27733
},
"TerritoryId": 135,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"Fly": true,
"KillEnemyDataIds": [
324
],
"AethernetShortcut": [
"[Limsa Lominsa] Fishermens' Guild",
"[Limsa Lominsa] Tempest Gate (Lower La Noscea)"
]
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"ExtraCondition": "RoguesGuild"
}
}
},
{
"DataId": 1010197,
"Position": {
"X": -150.98804,
"Y": -129.4397,
"Z": 266.31567
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 2004936,
"Position": {
"X": -151.90363,
"Y": -128.16058,
"Z": 256.8551
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"AethernetShortcut": [
"[Limsa Lominsa] Fishermens' Guild",
"[Limsa Lominsa] The Aftcastle"
],
"SkipConditions": {
"StepIf": {
"InTerritory": [
128
]
}
}
},
{
"DataId": 1005411,
"Position": {
"X": 13.412659,
"Y": 40.2,
"Z": -13.260071
},
"TerritoryId": 128,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_CLSROG050_00110_Q1_000_061",
"Answer": "TEXT_CLSROG050_00110_A1_000_064"
}
]
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1010206,
"Position": {
"X": 107.71338,
"Y": 47.783855,
"Z": 50.736206
},
"TerritoryId": 134,
"InteractionType": "Interact",
"Fly": true,
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Zephyr Gate (Middle La Noscea)"
]
}
]
},
{
"Sequence": 6,
"Steps": [
{
"Position": {
"X": 101.76026,
"Y": 48.69752,
"Z": 10.89893
},
"TerritoryId": 134,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"KillEnemyDataIds": [
769
],
"Fly": true
}
]
},
{
"Sequence": 7,
"Steps": [
{
"DataId": 1010206,
"Position": {
"X": 107.71338,
"Y": 47.783855,
"Z": 50.736206
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 8,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"ExtraCondition": "RoguesGuild"
}
}
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"NextQuestId": 126
}
]
}
]
}

View File

@ -0,0 +1,346 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"TargetTerritoryId": 129,
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"ExtraCondition": "RoguesGuild"
}
}
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1010198,
"Position": {
"X": -152.11719,
"Y": -129.4397,
"Z": 267.10913
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2004936,
"Position": {
"X": -151.8734,
"Y": -128.1446,
"Z": 256.8712
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"SkipConditions": {
"StepIf": {
"InTerritory": [
128
]
}
}
},
{
"DataId": 1010212,
"Position": {
"X": -50.8584,
"Y": 40,
"Z": 111.40613
},
"TerritoryId": 128,
"InteractionType": "Interact",
"AethernetShortcut": [
"[Limsa Lominsa] Fishermens' Guild",
"[Limsa Lominsa] The Aftcastle"
]
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1010211,
"Position": {
"X": -42.22174,
"Y": 42.249126,
"Z": 115.89221
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"Position": {
"X": -62.300663,
"Y": 42.300003,
"Z": -151.94725
},
"StopDistance": 0.5,
"TerritoryId": 128,
"InteractionType": "Action",
"Action": "Hide",
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Culinarians' Guild"
],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
}
},
{
"Position": {
"X": -54.962505,
"Y": 42.300007,
"Z": -158.14607
},
"StopDistance": 0.5,
"TerritoryId": 128,
"InteractionType": "WalkTo",
"DisableNavmesh": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"TerritoryId": 128,
"InteractionType": "StatusOff",
"Status": "Hidden"
},
{
"Position": {
"X": -155.25468,
"Y": 18,
"Z": 28.882175
},
"StopDistance": 0.5,
"TerritoryId": 129,
"InteractionType": "Action",
"Action": "Hide",
"AethernetShortcut": [
"[Limsa Lominsa] Culinarians' Guild",
"[Limsa Lominsa] Hawkers' Alley"
],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}
}
},
{
"Position": {
"X": -150.91245,
"Y": 18.2,
"Z": 34.06711
},
"StopDistance": 0.5,
"TerritoryId": 129,
"InteractionType": "WalkTo",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
},
{
"TerritoryId": 129,
"InteractionType": "StatusOff",
"Status": "Hidden"
},
{
"Position": {
"X": -187.95581,
"Y": 1.2697256,
"Z": 208.46738
},
"StopDistance": 0.5,
"TerritoryId": 129,
"InteractionType": "Action",
"Action": "Hide",
"AethernetShortcut": [
"[Limsa Lominsa] Hawkers' Alley",
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"StepIf": {
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}
}
},
{
"Position": {
"X": -190.81572,
"Y": 0.9999907,
"Z": 210.59836
},
"TerritoryId": 129,
"InteractionType": "WalkTo",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}
]
},
{
"Sequence": 5,
"Steps": [
{
"TerritoryId": 129,
"InteractionType": "StatusOff",
"Status": "Hidden"
},
{
"DataId": 1010213,
"Position": {
"X": -161.12,
"Y": 1.9499999,
"Z": 239.30713
},
"TerritoryId": 129,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 6,
"Steps": [
{
"DataId": 1010213,
"Position": {
"X": -161.12,
"Y": 1.9499999,
"Z": 239.30713
},
"TerritoryId": 129,
"InteractionType": "SinglePlayerDuty"
}
]
},
{
"Sequence": 7,
"Steps": [
{
"DataId": 1010213,
"Position": {
"X": -161.12,
"Y": 1.9499999,
"Z": 239.30713
},
"TerritoryId": 129,
"InteractionType": "Interact",
"AethernetShortcut": [
"[Limsa Lominsa] Hawkers' Alley",
"[Limsa Lominsa] Fishermens' Guild"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"NextQuestId": 144
}
]
}
]
}

View File

@ -0,0 +1,144 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"TargetTerritoryId": 129,
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"ExtraCondition": "RoguesGuild"
}
}
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1010199,
"Position": {
"X": 256.12268,
"Y": 21.097961,
"Z": 581.3839
},
"TerritoryId": 135,
"InteractionType": "Interact",
"AetheryteShortcut": "Lower La Noscea - Moraby Drydocks",
"Fly": true
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 2004861,
"Position": {
"X": -131.63965,
"Y": 0.503479,
"Z": 729.9762
},
"TerritoryId": 135,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1010218,
"Position": {
"X": 319.44763,
"Y": -36.353825,
"Z": 346.76123
},
"TerritoryId": 138,
"InteractionType": "Interact",
"Fly": true,
"AetheryteShortcut": "Western La Noscea - Aleport"
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1010218,
"Position": {
"X": 319.44763,
"Y": -36.353825,
"Z": 346.76123
},
"TerritoryId": 138,
"InteractionType": "SinglePlayerDuty"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1010218,
"Position": {
"X": 319.44763,
"Y": -36.353825,
"Z": 346.76123
},
"StopDistance": 5,
"TerritoryId": 138,
"InteractionType": "CompleteQuest",
"NextQuestId": 145
}
]
}
]
}

View File

@ -0,0 +1,86 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1010218,
"Position": {
"X": 319.44763,
"Y": -36.353825,
"Z": 346.76123
},
"StopDistance": 5,
"TerritoryId": 138,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Western La Noscea - Aleport",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": 593.2056,
"Y": 43.88314,
"Z": 304.65137
},
"TerritoryId": 138,
"InteractionType": "WalkTo",
"Fly": true
},
{
"DataId": 1010228,
"Position": {
"X": 594.1709,
"Y": 43.893982,
"Z": 303.76135
},
"TerritoryId": 138,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
]
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"NextQuestId": 146
}
]
}
]
}

View File

@ -0,0 +1,258 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"TargetTerritoryId": 129,
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"ExtraCondition": "RoguesGuild"
}
}
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2004936,
"Position": {
"X": -151.90363,
"Y": -128.16058,
"Z": 256.8551
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129
},
{
"DataId": 1010238,
"Position": {
"X": 146.71545,
"Y": 62.3279,
"Z": 291.82874
},
"TerritoryId": 134,
"InteractionType": "Interact",
"AethernetShortcut": [
"[Limsa Lominsa] Fishermens' Guild",
"[Limsa Lominsa] Zephyr Gate (Middle La Noscea)"
],
"Fly": true
}
]
},
{
"Sequence": 2,
"Steps": [
{
"Position": {
"X": 168.34132,
"Y": 69.5,
"Z": 327.67975
},
"StopDistance": 0.5,
"TerritoryId": 134,
"InteractionType": "Action",
"Action": "Hide"
},
{
"Position": {
"X": 178.24341,
"Y": 69.5,
"Z": 328.4606
},
"TerritoryId": 134,
"InteractionType": "WalkTo"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"TerritoryId": 134,
"InteractionType": "StatusOff",
"Status": "Hidden"
},
{
"DataId": 1010238,
"Position": {
"X": 146.71545,
"Y": 62.3279,
"Z": 291.82874
},
"TerritoryId": 134,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1010242,
"Position": {
"X": 7.2174683,
"Y": 57.91383,
"Z": -307.11835
},
"TerritoryId": 134,
"InteractionType": "Combat",
"AetheryteShortcut": "Middle La Noscea - Summerford Farms",
"Fly": true,
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
3567,
3568
]
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1010242,
"Position": {
"X": 7.2174683,
"Y": 57.91383,
"Z": -307.11835
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 6,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
]
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 7,
"Steps": [
{
"DataId": 1010237,
"Position": {
"X": 242.29797,
"Y": 8.000164,
"Z": 668.2383
},
"TerritoryId": 135,
"InteractionType": "SinglePlayerDuty",
"AetheryteShortcut": "Lower La Noscea - Moraby Drydocks",
"Fly": true
}
]
},
{
"Sequence": 8,
"Steps": [
{
"DataId": 1010237,
"Position": {
"X": 242.29797,
"Y": 8.000164,
"Z": 668.2383
},
"StopDistance": 7,
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
]
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"NextQuestId": 148
}
]
}
]
}

View File

@ -0,0 +1,292 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"TargetTerritoryId": 129,
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"ExtraCondition": "RoguesGuild"
}
}
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2004936,
"Position": {
"X": -151.90363,
"Y": -128.16058,
"Z": 256.8551
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"SkipConditions": {
"StepIf": {
"InTerritory": [
134,
135
]
}
}
},
{
"Position": {
"X": 212.54845,
"Y": 65.80573,
"Z": 285.71436
},
"TerritoryId": 134,
"InteractionType": "WalkTo",
"AethernetShortcut": [
"[Limsa Lominsa] Fishermens' Guild",
"[Limsa Lominsa] Zephyr Gate (Middle La Noscea)"
],
"Fly": true,
"SkipConditions": {
"StepIf": {
"InTerritory": [
135
]
}
}
},
{
"Position": {
"X": 509.26575,
"Y": 95.90476,
"Z": -446.11078
},
"StopDistance": 0.5,
"TerritoryId": 135,
"InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
2864,
2865,
2866
],
"Fly": true
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1010252,
"Position": {
"X": 508.23218,
"Y": 95.95811,
"Z": -449.82074
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
]
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 2004936,
"Position": {
"X": -151.90363,
"Y": -128.16058,
"Z": 256.8551
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"SkipConditions": {
"StepIf": {
"AetheryteUnlocked": "Eastern La Noscea - Costa Del Sol"
}
},
"$": "Pathfinder ref"
},
{
"DataId": 1000868,
"Position": {
"X": -192.00433,
"Y": 0.9999907,
"Z": 211.68835
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 137,
"SkipConditions": {
"StepIf": {
"AetheryteUnlocked": "Eastern La Noscea - Costa Del Sol"
}
}
},
{
"TerritoryId": 137,
"InteractionType": "AttuneAetheryte",
"Aetheryte": "Eastern La Noscea - Costa Del Sol",
"SkipConditions": {
"StepIf": {
"AetheryteUnlocked": "Eastern La Noscea - Costa Del Sol"
}
}
},
{
"Position": {
"X": 449.17413,
"Y": 16.072088,
"Z": 406.06335
},
"TerritoryId": 137,
"InteractionType": "WalkTo",
"Fly": true,
"AetheryteShortcut": "Eastern La Noscea - Costa Del Sol",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
},
{
"DataId": 1010251,
"Position": {
"X": 450.82776,
"Y": 16.18121,
"Z": 406.69873
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1010251,
"Position": {
"X": 450.82776,
"Y": 16.18121,
"Z": 406.69873
},
"TerritoryId": 137,
"InteractionType": "SinglePlayerDuty"
}
]
},
{
"Sequence": 6,
"Steps": [
{
"DataId": 1010250,
"Position": {
"X": 448.47778,
"Y": 16.154829,
"Z": 408.77393
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
]
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"NextQuestId": 154
}
]
}
]
}

View File

@ -0,0 +1,160 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"TargetTerritoryId": 129,
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"ExtraCondition": "RoguesGuild"
}
}
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": 410.07083,
"Y": 31.504957,
"Z": -12.586371
},
"TerritoryId": 138,
"InteractionType": "WalkTo",
"AetheryteShortcut": "Western La Noscea - Aleport",
"TargetTerritoryId": 139,
"Fly": true
},
{
"Position": {
"X": -436.69995,
"Y": -2.0159357,
"Z": 48.819775
},
"StopDistance": 1,
"TerritoryId": 139,
"InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
3569,
3570,
3571
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2004916,
"Position": {
"X": -436.02655,
"Y": -1.9379272,
"Z": 48.569458
},
"TerritoryId": 139,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1010261,
"Position": {
"X": -437.3694,
"Y": -2.369183,
"Z": 55.954834
},
"StopDistance": 7,
"TerritoryId": 139,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1010267,
"Position": {
"X": -449.08832,
"Y": 21.634577,
"Z": -327.93164
},
"TerritoryId": 134,
"InteractionType": "Interact",
"AetheryteShortcut": "Middle La Noscea - Summerford Farms",
"Fly": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
]
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"NextQuestId": 155
}
]
}
]
}

View File

@ -0,0 +1,108 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"TargetTerritoryId": 129,
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"ExtraCondition": "RoguesGuild"
}
}
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2004936,
"Position": {
"X": -151.90363,
"Y": -128.16058,
"Z": 256.8551
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129
},
{
"DataId": 2004863,
"Position": {
"X": 4.4403076,
"Y": 44.47998,
"Z": 121.29382
},
"TerritoryId": 128,
"InteractionType": "SinglePlayerDuty",
"AethernetShortcut": [
"[Limsa Lominsa] Fishermens' Guild",
"[Limsa Lominsa] The Aftcastle"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 129,
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Fishermens' Guild"
]
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"NextQuestId": 212
}
]
}
]
}

View File

@ -21,16 +21,11 @@
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
},
"StepIf": {
"NearPosition": {
"Position": {
"X": -151.80984,
"Y": -128.6493,
"Z": 265.27332
},
"TerritoryId": 129,
"MaximumDistance": 50
}
"ExtraCondition": "RoguesGuild"
}
}
},
@ -41,6 +36,7 @@
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
@ -98,7 +94,8 @@
"Z": -2.3651733
},
"TerritoryId": 137,
"InteractionType": "Interact"
"InteractionType": "Interact",
"Fly": true
}
]
},
@ -135,9 +132,17 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true }
}
},
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_JOBNIN300_00212_Q2_000_000",
"Yes": true
}
]
}
]
},

View File

@ -18,15 +18,7 @@
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137,
@ -77,9 +69,15 @@
}
},
{
"InteractionType": "WaitForManualProgress",
"DataId": 2004927,
"Position": {
"X": -10.605103,
"Y": 41.397705,
"Z": 267.87207
},
"TerritoryId": 137,
"Comment": "Use Ten -> Fuma Shuriken on the dummy"
"InteractionType": "Action",
"Action": "Fuma Shuriken"
}
]
},

View File

@ -18,15 +18,7 @@
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -71,9 +63,15 @@
}
},
{
"InteractionType": "WaitForManualProgress",
"DataId": 2004928,
"Position": {
"X": -10.605103,
"Y": 41.397705,
"Z": 267.87207
},
"TerritoryId": 137,
"Comment": "Use Ten -> Chi -> Raiton on the dummy"
"InteractionType": "Action",
"Action": "Raiton"
}
]
},
@ -96,9 +94,16 @@
"Sequence": 3,
"Steps": [
{
"InteractionType": "WaitForManualProgress",
"DataId": 2004929,
"Position": {
"X": -10.605103,
"Y": 41.397705,
"Z": 267.87207
},
"StopDistance": 7,
"TerritoryId": 137,
"Comment": "Use Chi -> Ten -> Katon on the dummy"
"InteractionType": "Action",
"Action": "Katon"
}
]
},
@ -180,15 +185,7 @@
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -15,19 +15,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -40,7 +31,14 @@
"Z": 257.98413
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest"
"InteractionType": "AcceptQuest",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_JOBNIN400_00216_Q1_000_000",
"Answer": "TEXT_JOBNIN400_00216_A1_000_001"
}
]
}
]
},

View File

@ -207,19 +207,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -15,19 +15,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -86,19 +86,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -15,19 +15,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -55,7 +46,14 @@
"Z": 250.32422
},
"TerritoryId": 137,
"InteractionType": "Interact"
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_JOBNIN500_00234_Q1_000_000",
"Answer": "TEXT_JOBNIN500_00234_A1_000_002"
}
]
}
]
},
@ -162,19 +160,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -15,19 +15,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -191,19 +182,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -15,19 +15,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -163,19 +154,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -15,19 +15,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -75,18 +66,15 @@
"Sequence": 2,
"Steps": [
{
"DataId": 2005928,
"Position": {
"X": -11.615023,
"Y": 66.32614,
"Z": 421.28235
"X": -22.842834,
"Y": 66.300415,
"Z": 426.1692
},
"TerritoryId": 135,
"InteractionType": "WalkTo"
},
{
"TerritoryId": 135,
"InteractionType": "WaitForManualProgress",
"Comment": "Use Raiton on destination"
"InteractionType": "Action",
"Action": "Raiton"
}
]
},
@ -94,18 +82,15 @@
"Sequence": 3,
"Steps": [
{
"DataId": 2005929,
"Position": {
"X": -45.41632,
"Y": 50.40381,
"Z": 519.4183
"X": -46.707886,
"Y": 48.41687,
"Z": 529.1676
},
"TerritoryId": 135,
"InteractionType": "WalkTo"
},
{
"TerritoryId": 135,
"InteractionType": "WaitForManualProgress",
"Comment": "Use Raiton on destination"
"InteractionType": "Action",
"Action": "Raiton"
}
]
},
@ -113,18 +98,15 @@
"Sequence": 4,
"Steps": [
{
"DataId": 2005930,
"Position": {
"X": -91.23599,
"Y": 28.63774,
"Z": 617.4151
"X": -93.888794,
"Y": 26.932129,
"Z": 623.25464
},
"TerritoryId": 135,
"InteractionType": "WalkTo"
},
{
"TerritoryId": 135,
"InteractionType": "WaitForManualProgress",
"Comment": "Use Raiton on destination"
"InteractionType": "Action",
"Action": "Raiton"
}
]
},
@ -193,19 +175,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -15,19 +15,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -182,18 +173,9 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -15,19 +15,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -111,6 +102,7 @@
},
"TerritoryId": 398,
"InteractionType": "WalkTo",
"Fly": true,
"AetheryteShortcut": "The Dravanian Forelands - Tailfeather"
},
{
@ -138,7 +130,8 @@
"TerritoryId": 398,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [5042, 4619]
"KillEnemyDataIds": [5042, 4619],
"Fly": true
}
]
},
@ -153,7 +146,8 @@
"Z": -217.02905
},
"TerritoryId": 398,
"InteractionType": "Interact"
"InteractionType": "Interact",
"Fly": true
}
]
},
@ -170,18 +164,9 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -15,19 +15,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -114,19 +105,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -156,7 +138,14 @@
"TerritoryId": 135,
"Fly": true,
"InteractionType": "Interact",
"AetheryteShortcut": "Lower La Noscea - Moraby Drydocks"
"AetheryteShortcut": "Lower La Noscea - Moraby Drydocks",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_JOBNIN600_01688_Q1_000_000",
"Answer": "TEXT_JOBNIN600_01688_A1_000_010"
}
]
}
]
},
@ -220,18 +209,9 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -15,19 +15,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -115,6 +106,13 @@
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] The Aftcastle"
],
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_JOBNIN601_02948_Q1_000_031",
"Answer": "TEXT_JOBNIN601_02948_A3_000_034"
}
]
}
]
@ -210,18 +208,9 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -15,19 +15,10 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true },
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137
@ -74,7 +65,8 @@
"Z": -60.22008
},
"TerritoryId": 628,
"InteractionType": "WalkTo",
"InteractionType": "Action",
"Action": "Hide",
"AethernetShortcut": [
"[Kugane] Sekiseigumi Barracks",
"[Kugane] Aetheryte Plaza"
@ -93,11 +85,20 @@
}
},
{
"InteractionType": "WaitForManualProgress",
"Position": {
"X": -46.572186,
"Y": 3.0135043,
"Z": -71.70311
},
"TerritoryId": 628,
"Comment": "Hide, then approach Loutish Lickspittle",
"InteractionType": "WalkTo",
"CompletionQuestVariablesFlags": [null, null, null, null, null, 128]
},
{
"TerritoryId": 628,
"InteractionType": "StatusOff",
"Status": "Hidden"
},
{
"Position": {
"X": -53.864307,
@ -105,18 +106,28 @@
"Z": -106.929726
},
"TerritoryId": 628,
"InteractionType": "WalkTo"
"InteractionType": "Action",
"Action": "Hide"
},
{
"InteractionType": "WaitForManualProgress",
"Position": {
"X": -82.41595,
"Y": -7.300003,
"Z": -111.459076
},
"TerritoryId": 628,
"Comment": "Hide, then approach the two NPCs downstairs"
"InteractionType": "WalkTo"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"TerritoryId": 628,
"InteractionType": "StatusOff",
"Status": "Hidden"
},
{
"DataId": 1023555,
"Position": {

View File

@ -17,7 +17,14 @@
"AetheryteShortcut": "Yanxia - Namai",
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true }
}
},
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_JOBNIN680_02951_Q1_000_003",
"Answer": "TEXT_JOBNIN680_02951_A3_000_006"
}
]
}
]
},
@ -48,7 +55,14 @@
"Z": -96.75751
},
"TerritoryId": 614,
"InteractionType": "Interact"
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_JOBNIN680_02951_SYSTEM_100_049",
"Yes": true
}
]
}
]
},
@ -91,10 +105,12 @@
"Y": 16.160986,
"Z": 390.68732
},
"StopDistance": 1,
"TerritoryId": 614,
"InteractionType": "Combat",
"KillEnemyDataIds": [6641],
"EnemySpawnType": "OverworldEnemies"
"EnemySpawnType": "OverworldEnemies",
"Fly": true
}
]
},
@ -110,7 +126,14 @@
},
"TerritoryId": 614,
"InteractionType": "Interact",
"AetheryteShortcut": "Yanxia - Namai"
"AetheryteShortcut": "Yanxia - Namai",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_JOBNIN680_02951_SYSTEM_100_049",
"Yes": true
}
]
}
]
},

View File

@ -17,7 +17,14 @@
"AetheryteShortcut": "Yanxia - Namai",
"SkipConditions": {
"AetheryteShortcutIf": { "InSameTerritory": true }
}
},
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_JOBNIN700_02952_Q1_100_004",
"Answer": "TEXT_JOBNIN700_02952_A1_100_005"
}
]
}
]
},
@ -34,7 +41,7 @@
"TerritoryId": 622,
"InteractionType": "SinglePlayerDuty",
"Fly": true,
"AetheryteShortcut": "Azim Steppe - Dawn Throne",
"AetheryteShortcut": "Azim Steppe - Reunion",
"SkipConditions": {
"AetheryteShortcutIf": {
"NearPosition": {
@ -64,18 +71,9 @@
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"Fly": true,
"SkipConditions": {
"StepIf": {
"NearPosition": {
"Position": {
"X": -25.149055,
"Y": -24.773232,
"Z": 258.15594
},
"TerritoryId": 137,
"MaximumDistance": 25
}
"ExtraCondition": "DockStorehouse"
}
},
"TargetTerritoryId": 137

View File

@ -118,6 +118,7 @@
"Say",
"Emote",
"Action",
"StatusOff",
"WaitForNpcAtPosition",
"WaitForManualProgress",
"Duty",
@ -945,7 +946,8 @@
"Hop-step",
"Fuma Shuriken",
"Katon",
"Raiton"
"Raiton",
"Hide"
]
}
},
@ -954,6 +956,29 @@
]
}
},
{
"if": {
"properties": {
"InteractionType": {
"const": "StatusOff"
}
}
},
"then": {
"properties": {
"Status": {
"type": "string",
"description": "The status to disable",
"enum": [
"Hidden"
]
}
},
"required": [
"Status"
]
}
},
{
"if": {
"properties": {

View File

@ -35,6 +35,7 @@ public sealed class ActionConverter() : EnumConverter<EAction>(Values)
{ EAction.BlueGulal, "Blue Gulal" },
{ EAction.ElectrixFlux, "Electric Flux" },
{ EAction.HopStep, "Hop-step" },
{ EAction.Hide, "Hide" },
{ EAction.FumaShuriken, "Fuma Shuriken" },
{ EAction.Katon, "Katon" },
{ EAction.Raiton, "Raiton" },

View File

@ -21,6 +21,7 @@ public sealed class InteractionTypeConverter() : EnumConverter<EInteractionType>
{ EInteractionType.Say, "Say" },
{ EInteractionType.Emote, "Emote" },
{ EInteractionType.Action, "Action" },
{ EInteractionType.StatusOff, "StatusOff" },
{ EInteractionType.WaitForObjectAtPosition, "WaitForNpcAtPosition" },
{ EInteractionType.WaitForManualProgress, "WaitForManualProgress" },
{ EInteractionType.Duty, "Duty" },

View File

@ -0,0 +1,12 @@
using System.Collections.Generic;
using Questionable.Model.Common.Converter;
namespace Questionable.Model.Questing.Converter;
public sealed class StatusConverter() : EnumConverter<EStatus>(Values)
{
private static readonly Dictionary<EStatus, string> Values = new()
{
{ EStatus.Hidden, "Hidden" },
};
}

View File

@ -36,6 +36,7 @@ public enum EAction
BlueGulal = 29384,
ElectrixFlux = 29718,
HopStep = 31116,
Hide = 2245,
Ten = 2259,
Ninjutsu = 2260,
Chi = 2261,
@ -43,6 +44,7 @@ public enum EAction
FumaShuriken = 2265,
Katon = 2266,
Raiton = 2267,
RabbitMedium = 2272,
CollectMiner = 240,
ScourMiner = 22182,

View File

@ -20,6 +20,7 @@ public enum EInteractionType
Say,
Emote,
Action,
StatusOff,
WaitForObjectAtPosition,
WaitForManualProgress,
Duty,

View File

@ -0,0 +1,12 @@
using System.Text.Json.Serialization;
using Questionable.Model.Questing.Converter;
namespace Questionable.Model.Questing;
[JsonConverter(typeof(StatusConverter))]
public enum EStatus : uint
{
GatheringRateUp = 218,
Hidden = 614,
Eukrasia = 2606,
}

View File

@ -63,6 +63,7 @@ public sealed class QuestStep
public EEmote? Emote { get; set; }
public ChatMessage? ChatMessage { get; set; }
public EAction? Action { get; set; }
public EStatus? Status { get; set; }
public EEnemySpawnType? EnemySpawnType { get; set; }
public List<uint> KillEnemyDataIds { get; set; } = [];

View File

@ -37,8 +37,6 @@ internal static class DoGather
ICondition condition,
ILogger<GatherExecutor> logger) : TaskExecutor<Task>
{
private const uint StatusGatheringRateUp = 218;
private bool _wasGathering;
private SlotInfo? _slotToGather;
private Queue<EAction>? _actionQueue;
@ -155,7 +153,7 @@ internal static class DoGather
//uint gp = clientState.LocalPlayer!.CurrentGp;
Queue<EAction> actions = new();
if (!gameFunctions.HasStatus(StatusGatheringRateUp))
if (!gameFunctions.HasStatus(EStatus.GatheringRateUp))
{
// do we have an alternative item? only happens for 'evaluation' leve quests
if (Task.Request.AlternativeItemId != 0)

View File

@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Dalamud.Game.ClientState.Objects.Types;
using FFXIVClientStructs.FFXIV.Client.Game;
using Microsoft.Extensions.Logging;
using Questionable.Controller.Steps.Common;
using Questionable.Functions;
@ -29,7 +31,13 @@ internal static class Action
public static ITask OnObject(uint? dataId, EAction action)
{
return new UseOnObject(dataId, action);
if (action is EAction.FumaShuriken or EAction.Katon or EAction.Raiton)
{
ArgumentNullException.ThrowIfNull(dataId);
return new UseMudraOnObject(dataId.Value, action);
}
else
return new UseOnObject(dataId, action);
}
}
@ -62,11 +70,10 @@ internal static class Action
{
if (Task.Action == EAction.Diagnosis)
{
uint eukrasiaAura = 2606;
// If SGE have Eukrasia status, we need to remove it.
if (gameFunctions.HasStatus(eukrasiaAura))
if (gameFunctions.HasStatus(EStatus.Eukrasia))
{
if (GameFunctions.RemoveStatus(eukrasiaAura))
if (GameFunctions.RemoveStatus(EStatus.Eukrasia))
{
// Introduce a delay of 2 seconds before using the next action (otherwise it will try and use Eukrasia Diagnosis)
_continueAt = DateTime.Now.AddSeconds(2);
@ -118,4 +125,67 @@ internal static class Action
return ETaskResult.TaskComplete;
}
}
internal sealed record UseMudraOnObject(uint DataId, EAction Action) : ITask
{
public override string ToString() => $"Mudra({Action})";
}
internal sealed class UseMudraOnObjectExecutor(
GameFunctions gameFunctions,
ILogger<UseMudraOnObject> logger) : TaskExecutor<UseMudraOnObject>
{
private static readonly ReadOnlyDictionary<EAction, Dictionary<EAction, EAction>> Combos =
new Dictionary<EAction, Dictionary<EAction, EAction>>
{
{ EAction.FumaShuriken, new() { { EAction.Ninjutsu, EAction.Ten } } },
{ EAction.Raiton, new() { { EAction.Ninjutsu, EAction.Ten }, { EAction.FumaShuriken, EAction.Chi } } },
{ EAction.Katon, new() {{ EAction.Ninjutsu, EAction.Chi }, { EAction.FumaShuriken, EAction.Ten } } }
}.AsReadOnly();
private DateTime _continueAt = DateTime.MinValue;
protected override bool Start() => true;
public override unsafe ETaskResult Update()
{
if (DateTime.Now < _continueAt)
return ETaskResult.StillRunning;
EAction adjustedNinjutsuId = (EAction)ActionManager.Instance()->GetAdjustedActionId((uint)EAction.Ninjutsu);
if (adjustedNinjutsuId == EAction.RabbitMedium)
{
_continueAt = DateTime.Now.AddSeconds(1);
return ETaskResult.StillRunning;
}
IGameObject? gameObject = gameFunctions.FindObjectByDataId(Task.DataId);
if (gameObject == null || !gameObject.IsTargetable)
return ETaskResult.StillRunning;
if (adjustedNinjutsuId == Task.Action)
{
_continueAt = DateTime.Now.AddSeconds(0.25);
return gameFunctions.UseAction(gameObject, Task.Action)
? ETaskResult.TaskComplete
: ETaskResult.StillRunning;
}
if (Combos.TryGetValue(Task.Action, out var combo))
{
if (combo.TryGetValue(adjustedNinjutsuId, out var mudra))
{
_continueAt = DateTime.Now.AddSeconds(0.25);
gameFunctions.UseAction(mudra);
return ETaskResult.StillRunning;
}
_continueAt = DateTime.Now.AddSeconds(0.25);
return ETaskResult.StillRunning;
}
logger.LogError("Unable to find relevant combo for {Action}", Task.Action);
return ETaskResult.TaskComplete;
}
}
}

View File

@ -0,0 +1,47 @@
using System;
using Questionable.Controller.Steps.Common;
using Questionable.Functions;
using Questionable.Model;
using Questionable.Model.Questing;
namespace Questionable.Controller.Steps.Interactions;
internal static class StatusOff
{
internal sealed class Factory : SimpleTaskFactory
{
public override ITask? CreateTask(Quest quest, QuestSequence sequence, QuestStep step)
{
if (step.InteractionType != EInteractionType.StatusOff)
return null;
ArgumentNullException.ThrowIfNull(step.Status);
return new Task(step.Status.Value);
}
}
internal sealed record Task(EStatus Status) : ITask
{
public bool ShouldRedoOnInterrupt() => true;
public override string ToString() => $"StatusOff({Status})";
}
internal sealed class DoStatusOff(
GameFunctions gameFunctions)
: AbstractDelayedTaskExecutor<Task>
{
protected override bool StartInternal()
{
if (gameFunctions.HasStatus(Task.Status))
return GameFunctions.RemoveStatus(Task.Status);
return false;
}
public override ETaskResult Update()
{
return gameFunctions.HasStatus(Task.Status) ? ETaskResult.StillRunning : ETaskResult.TaskComplete;
}
}
}

View File

@ -298,7 +298,7 @@ internal sealed unsafe class GameFunctions
statusManager->HasStatus(2730);
}
public bool HasStatus(uint statusId)
public bool HasStatus(EStatus statusId)
{
var localPlayer = _clientState.LocalPlayer;
if (localPlayer == null)
@ -306,12 +306,12 @@ internal sealed unsafe class GameFunctions
var battleChara = (BattleChara*)localPlayer.Address;
StatusManager* statusManager = battleChara->GetStatusManager();
return statusManager->HasStatus(statusId);
return statusManager->HasStatus((uint)statusId);
}
public static bool RemoveStatus(uint statusId)
public static bool RemoveStatus(EStatus statusId)
{
return StatusManager.ExecuteStatusOff(statusId);
return StatusManager.ExecuteStatusOff((uint)statusId);
}
public bool Mount()

View File

@ -174,6 +174,8 @@ public sealed class QuestionablePlugin : IDalamudPlugin
serviceCollection.AddTaskExecutor<Emote.UseOnObject, Emote.UseOnObjectExecutor>();
serviceCollection.AddTaskExecutor<Emote.UseOnSelf, Emote.UseOnSelfExecutor>();
serviceCollection.AddTaskFactoryAndExecutor<Action.UseOnObject, Action.Factory, Action.UseOnObjectExecutor>();
serviceCollection.AddTaskExecutor<Action.UseMudraOnObject, Action.UseMudraOnObjectExecutor>();
serviceCollection.AddTaskFactoryAndExecutor<StatusOff.Task, StatusOff.Factory, StatusOff.DoStatusOff>();
serviceCollection.AddTaskFactoryAndExecutor<Interact.Task, Interact.Factory, Interact.DoInteract>();
serviceCollection.AddTaskFactory<Jump.Factory>();
serviceCollection.AddTaskExecutor<Jump.SingleJumpTask, Jump.DoSingleJump>();