quests.Add((id, quest));
}
+ if (quests.Count == 0)
+ return;
+
quests = quests.OrderBy(x => x.Item1).ToList();
var code =
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "TerritoryBlacklist": [
+ 225
+ ],
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000421,
+ "Position": {
+ "X": 98.25281,
+ "Y": -8,
+ "Z": -78.446655
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1000465,
+ "Position": {
+ "X": 298.63428,
+ "Y": 9.999997,
+ "Z": 119.035645
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1000465,
+ "Position": {
+ "X": 298.63428,
+ "Y": 9.999997,
+ "Z": 119.035645
+ },
+ "TerritoryId": 148,
+ "InteractionType": "WaitForManualProgress",
+ "Comment": "Manual Quest Progress (very combat heavy)",
+ "$": "TODO Remove later"
+ },
+ {
+ "DataId": 1000512,
+ "Position": {
+ "X": 311.69592,
+ "Y": 14.8470745,
+ "Z": 164.47693
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "Disabled": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "DataId": 1000513,
+ "Position": {
+ "X": 303.8833,
+ "Y": 15.899703,
+ "Z": 160.87585
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "Disabled": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ },
+ {
+ "DataId": 1000514,
+ "Position": {
+ "X": 296.1012,
+ "Y": 15.999987,
+ "Z": 171.4961
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "Disabled": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 1000515,
+ "Position": {
+ "X": 291.21838,
+ "Y": 19.86808,
+ "Z": 175.21924
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "Disabled": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 16
+ ]
+ },
+ {
+ "DataId": 1000516,
+ "Position": {
+ "X": 284.65698,
+ "Y": 21.97319,
+ "Z": 188.18945
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "Disabled": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 8
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1000740,
+ "Position": {
+ "X": 260.18152,
+ "Y": 24.000002,
+ "Z": 192.2179
+ },
+ "TerritoryId": 148,
+ "InteractionType": "SinglePlayerDuty"
+ }
+ ]
+ },
+ {
+ "Sequence": 5,
+ "Steps": [
+ {
+ "Position": {
+ "X": 319.9492,
+ "Y": 13.866494,
+ "Z": 156.2647
+ },
+ "TerritoryId": 148,
+ "InteractionType": "WalkTo"
+ },
+ {
+ "DataId": 1000465,
+ "Position": {
+ "X": 298.63428,
+ "Y": 9.999997,
+ "Z": 119.035645
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000100,
+ "Position": {
+ "X": 23.819275,
+ "Y": -8,
+ "Z": 115.92273
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Gridania",
+ "AethernetShortcut": [
+ "[Gridania] Aetheryte Plaza",
+ "[Gridania] Airship Landing"
+ ]
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000471,
+ "Position": {
+ "X": -60.471558,
+ "Y": 0.19999865,
+ "Z": 6.301941
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1000484,
+ "Position": {
+ "X": 2.0598755,
+ "Y": -7.9139543,
+ "Z": -22.171448
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 1000476,
+ "Position": {
+ "X": 27.0542,
+ "Y": -6.881897,
+ "Z": 14.145081
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "DataId": 1000483,
+ "Position": {
+ "X": 85.496216,
+ "Y": -6.0870457,
+ "Z": 67.00232
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1000471,
+ "Position": {
+ "X": -60.471558,
+ "Y": 0.19999865,
+ "Z": 6.301941
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "Position": {
+ "X": 9.630515,
+ "Y": -22.580793,
+ "Z": 242.32327
+ },
+ "TerritoryId": 148,
+ "InteractionType": "WalkTo"
+ },
+ {
+ "DataId": 1003002,
+ "Position": {
+ "X": -189.13562,
+ "Y": -26.70127,
+ "Z": 295.52136
+ },
+ "TerritoryId": 148,
+ "InteractionType": "SinglePlayerDuty"
+ }
+ ]
+ },
+ {
+ "Sequence": 4,
+ "Steps": [
+ {
+ "DataId": 1003002,
+ "Position": {
+ "X": -189.13562,
+ "Y": -26.70127,
+ "Z": 295.52136
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 5,
+ "Steps": [
+ {
+ "DataId": 1000471,
+ "Position": {
+ "X": -60.471558,
+ "Y": 0.19999865,
+ "Z": 6.301941
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Central Shroud - Bentbranch Meadows"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000471,
+ "Position": {
+ "X": -60.471558,
+ "Y": 0.19999865,
+ "Z": 6.301941
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000449,
+ "Position": {
+ "X": 201.83093,
+ "Y": -5.5419664,
+ "Z": -107.25574
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Comment": "Very likely this needs manual combat and/or manual continues",
+ "Steps": [
+ {
+ "DataId": 2000141,
+ "Position": {
+ "X": 179.4613,
+ "Y": -10.666138,
+ "Z": 99.56506
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ],
+ "$": "QuestVariables if done first: 17 0 16 0 0 128"
+ },
+ {
+ "DataId": 2000147,
+ "Position": {
+ "X": 168.07812,
+ "Y": -12.008911,
+ "Z": 120.80554
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ],
+ "$": "QuestVariables if done first: 17 16 17 0 0 192"
+ },
+ {
+ "DataId": 2000149,
+ "Position": {
+ "X": 154.0398,
+ "Y": -10.75769,
+ "Z": 120.3479
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 16
+ ],
+ "$": "QuestVariables if done first: 33 17 17 16 0 208"
+ },
+ {
+ "DataId": 2000148,
+ "Position": {
+ "X": 126.14636,
+ "Y": -12.008911,
+ "Z": 142.35144
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000685,
+ "Position": {
+ "X": 287.92236,
+ "Y": -3.297,
+ "Z": -32.6391
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000100,
+ "Position": {
+ "X": 23.819275,
+ "Y": -8,
+ "Z": 115.92273
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 3,
+ "Position": {
+ "X": 13.076904,
+ "Y": 0.56451416,
+ "Z": 35.90442
+ },
+ "StopDistance": 10,
+ "TerritoryId": 148,
+ "InteractionType": "AttuneAetheryte",
+ "AethernetShortcut": ["[Gridania] Aetheryte Plaza", "[Gridania] Blue Badger Gate (Central Shroud)"]
+ },
+ {
+ "DataId": 1000470,
+ "Position": {
+ "X": -59.006653,
+ "Y": -0.010835781,
+ "Z": 26.41333
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000421,
+ "Position": {
+ "X": 98.25281,
+ "Y": -8,
+ "Z": -78.446655
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000421,
+ "Position": {
+ "X": 98.25281,
+ "Y": -8,
+ "Z": -78.446655
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "Comment": "All starting gear (except the hat) is ilvl 5 already"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000100,
+ "Position": {
+ "X": 23.819275,
+ "Y": -8,
+ "Z": 115.92273
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "Position": {
+ "X": 158.06026,
+ "Y": -12.97808,
+ "Z": 158.08466
+ },
+ "TerritoryId": 132,
+ "InteractionType": "WalkTo",
+ "TargetTerritoryId": 148
+ },
+ {
+ "DataId": 1000421,
+ "Position": {
+ "X": 98.25281,
+ "Y": -8,
+ "Z": -78.446655
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000470,
+ "Position": {
+ "X": -59.006653,
+ "Y": -0.010835781,
+ "Z": 26.41333
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "Position": {
+ "X": -61.749943,
+ "Y": 0.9481318,
+ "Z": -38.52144
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Jump",
+ "JumpDestination": {
+ "Position": {
+ "X": -67.083466,
+ "Y": -4.478065,
+ "Z": -45.204926
+ },
+ "StopDistance": 3
+ }
+ },
+ {
+ "DataId": 1000748,
+ "Position": {
+ "X": -125.230774,
+ "Y": 4.1573725,
+ "Z": -43.595093
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "Position": {
+ "X": -171.87439,
+ "Y": 1.7183347,
+ "Z": -70.586975
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "OverworldEnemies",
+ "KillEnemyDataIds": [
+ 771
+ ],
+ "Comment": "Kill Qiqirn manually"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000748,
+ "Position": {
+ "X": -125.230774,
+ "Y": 4.1573725,
+ "Z": -43.595093
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000435,
+ "Position": {
+ "X": -127.06189,
+ "Y": 4.1490583,
+ "Z": -44.296997
+ },
+ "StopDistance": 5,
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2000750,
+ "Position": {
+ "X": -151.26276,
+ "Y": 14.358704,
+ "Z": -73.014465
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
+ },
+ {
+ "DataId": 2000749,
+ "Position": {
+ "X": -164.11078,
+ "Y": 23.025818,
+ "Z": -86.167725
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
+ },
+ {
+ "Position": {
+ "X": -180.18181,
+ "Y": 31.66525,
+ "Z": -91.84381
+ },
+ "TerritoryId": 148,
+ "InteractionType": "WalkTo",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ -128
+ ]
+ },
+ {
+ "Position": {
+ "X": -184.41872,
+ "Y": 29.940958,
+ "Z": -93.809525
+ },
+ "TerritoryId": 148,
+ "InteractionType": "WalkTo",
+ "DisableNavmesh": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ -128
+ ]
+ },
+ {
+ "DataId": 2000748,
+ "Position": {
+ "X": -189.25769,
+ "Y": 30.44165,
+ "Z": -98.83276
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "DisableNavmesh": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "Position": {
+ "X": -179.84062,
+ "Y": 31.476957,
+ "Z": -91.05707
+ },
+ "TerritoryId": 148,
+ "InteractionType": "WalkTo",
+ "DisableNavmesh": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ -16
+ ]
+ },
+ {
+ "Position": {
+ "X": -171.76294,
+ "Y": 23.022184,
+ "Z": -76.32822
+ },
+ "TerritoryId": 148,
+ "InteractionType": "WalkTo",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ -16
+ ]
+ },
+ {
+ "DataId": 2000751,
+ "Position": {
+ "X": -169.3294,
+ "Y": 18.600708,
+ "Z": -72.129456
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "DisableNavmesh": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 16
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "Position": {
+ "X": -166.56161,
+ "Y": 0.63666093,
+ "Z": -61.089085
+ },
+ "TerritoryId": 148,
+ "InteractionType": "WalkTo",
+ "DisableNavmesh": true,
+ "Comment": "Jumping back up isn't trivial"
+ },
+ {
+ "DataId": 1000436,
+ "Position": {
+ "X": -193.22504,
+ "Y": 56.264572,
+ "Z": -116.47211
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000436,
+ "Position": {
+ "X": -193.22504,
+ "Y": 56.264572,
+ "Z": -116.47211
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1000748,
+ "Position": {
+ "X": -125.230774,
+ "Y": 4.1573725,
+ "Z": -43.595093
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 2000689,
+ "Position": {
+ "X": -95.47571,
+ "Y": 3.4942627,
+ "Z": -150.80493
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000748,
+ "Position": {
+ "X": -125.230774,
+ "Y": 4.1573725,
+ "Z": -43.595093
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000748,
+ "Position": {
+ "X": -125.230774,
+ "Y": 4.1573725,
+ "Z": -43.595093
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1001280,
+ "Position": {
+ "X": 89.28052,
+ "Y": -6.351089,
+ "Z": -121.96539
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1000483,
+ "Position": {
+ "X": 85.496216,
+ "Y": -6.0870457,
+ "Z": 67.00232
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000741,
+ "Position": {
+ "X": -66.7583,
+ "Y": 0.2,
+ "Z": 11.36792
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000741,
+ "Position": {
+ "X": -66.7583,
+ "Y": 0.2,
+ "Z": 11.36792
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2001006,
+ "Position": {
+ "X": 99.65662,
+ "Y": -15.732117,
+ "Z": 193.01135
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "AfterInteraction",
+ "KillEnemyDataIds": [
+ 12
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000491,
+ "Position": {
+ "X": 47.958984,
+ "Y": -24,
+ "Z": 228.5343
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000491,
+ "Position": {
+ "X": 47.958984,
+ "Y": -24,
+ "Z": 228.5343
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1002932,
+ "Position": {
+ "X": -65.049255,
+ "Y": -36.79766,
+ "Z": 477.59204
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000503,
+ "Position": {
+ "X": 178.33215,
+ "Y": -32.015224,
+ "Z": 333.30273
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000421,
+ "Position": {
+ "X": 98.25281,
+ "Y": -8,
+ "Z": -78.446655
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "Position": {
+ "X": 194.08282,
+ "Y": -8.422037,
+ "Z": -47.295006
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "OverworldEnemies",
+ "KillEnemyDataIds": [
+ 43
+ ],
+ "Comment": "Kill Chigoes manually"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000449,
+ "Position": {
+ "X": 201.83093,
+ "Y": -5.5419664,
+ "Z": -107.25574
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000685,
+ "Position": {
+ "X": 287.92236,
+ "Y": -3.297,
+ "Z": -32.6391
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Comment": "TODO Figure out quest flags if picking up egg first OR doing the combat first",
+ "Steps": [
+ {
+ "DataId": 2000010,
+ "Position": {
+ "X": 480.88794,
+ "Y": 30.746826,
+ "Z": -49.729187
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ },
+ {
+ "Position": {
+ "X": 480.88794,
+ "Y": 30.746826,
+ "Z": -49.729187
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "OverworldEnemies",
+ "KillEnemyDataIds": [142],
+ "Comment": "Depending on how many enemies you fought on the way to the egg, this step could be optional"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1000685,
+ "Position": {
+ "X": 287.92236,
+ "Y": -3.297,
+ "Z": -32.6391
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000408,
+ "Position": {
+ "X": 106.85889,
+ "Y": -8,
+ "Z": -75.669556
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000503,
+ "Position": {
+ "X": 178.33215,
+ "Y": -32.015224,
+ "Z": 333.30273
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2001018,
+ "Position": {
+ "X": 155.47412,
+ "Y": -23.66681,
+ "Z": 490.74524
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Combat",
+ "EnemySpawnType": "AutoOnEnterArea",
+ "KillEnemyDataIds": [
+ 26
+ ]
+ },
+ {
+ "DataId": 2001016,
+ "Position": {
+ "X": 152.60547,
+ "Y": -23.758362,
+ "Z": 494.71265
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000470,
+ "Position": {
+ "X": -59.006653,
+ "Y": -0.010835781,
+ "Z": 26.41333
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Central Shroud - Bentbranch Meadows"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1001148,
+ "Position": {
+ "X": 117.112915,
+ "Y": -12.506256,
+ "Z": 143.63306
+ },
+ "TerritoryId": 183,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1001140,
+ "Position": {
+ "X": 23.788818,
+ "Y": -8,
+ "Z": 115.861694
+ },
+ "TerritoryId": 183,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "TerritoryBlacklist": [
+ 233
+ ],
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000421,
+ "Position": {
+ "X": 98.25281,
+ "Y": -8,
+ "Z": -78.446655
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2000953,
+ "Position": {
+ "X": 323.5979,
+ "Y": 0.3508911,
+ "Z": -309.55975
+ },
+ "TerritoryId": 148,
+ "InteractionType": "SinglePlayerDuty"
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 2001194,
+ "Position": {
+ "X": 323.627,
+ "Y": 0.3168333,
+ "Z": -309.5412
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000421,
+ "Position": {
+ "X": 98.25281,
+ "Y": -8,
+ "Z": -78.446655
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000471,
+ "Position": {
+ "X": -60.471558,
+ "Y": 0.19999865,
+ "Z": 6.301941
+ },
+ "TerritoryId": 148,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000100,
+ "Position": {
+ "X": 23.819275,
+ "Y": -8,
+ "Z": 115.92273
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Gridania",
+ "AethernetShortcut": [
+ "[Gridania] Aetheryte Plaza",
+ "[Gridania] Airship Landing"
+ ]
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000100,
+ "Position": {
+ "X": 23.819275,
+ "Y": -8,
+ "Z": 115.92273
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "Position": {
+ "X": 49.65071,
+ "Y": -8.046952,
+ "Z": 102.32186
+ },
+ "TerritoryId": 132,
+ "InteractionType": "WalkTo",
+ "$": "New Gridania Navmesh workaround"
+ },
+ {
+ "DataId": 1000423,
+ "Position": {
+ "X": 232.04382,
+ "Y": 1.999974,
+ "Z": 45.578613
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "AethernetShortcut": ["[Gridania] Aetheryte Plaza", "[Gridania] Archers' Guild"],
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_MANFST007_00447_Q1_000_1",
+ "Yes": true
+ }
+ ]
+ },
+ {
+ "DataId": 1003061,
+ "Position": {
+ "X": -0.015319824,
+ "Y": 0.500025,
+ "Z": -4.3793945
+ },
+ "StopDistance": 7,
+ "TerritoryId": 204,
+ "InteractionType": "Interact",
+ "DisableNavmesh": true
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1000456,
+ "Position": {
+ "X": -303.5172,
+ "Y": 21.902342,
+ "Z": 127.45862
+ },
+ "TerritoryId": 148,
+ "InteractionType": "SinglePlayerDuty",
+ "AetheryteShortcut": "Central Shroud - Bentbranch Meadows"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000423,
+ "Position": {
+ "X": 232.04382,
+ "Y": 1.999974,
+ "Z": 45.578613
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Gridania",
+ "AethernetShortcut": ["[Gridania] Aetheryte Plaza", "[Gridania] Archers' Guild"],
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_MANFST007_00447_Q1_000_1",
+ "Yes": true
+ }
+ ]
+ },
+ {
+ "DataId": 1003061,
+ "Position": {
+ "X": -0.015319824,
+ "Y": 0.500025,
+ "Z": -4.3793945
+ },
+ "StopDistance": 7,
+ "TerritoryId": 204,
+ "InteractionType": "Interact",
+ "DisableNavmesh": true
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1003061,
+ "Position": {
+ "X": -0.015319824,
+ "Y": 0.500025,
+ "Z": -4.3793945
+ },
+ "StopDistance": 7,
+ "TerritoryId": 204,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2001215,
+ "Position": {
+ "X": 0.002457563,
+ "Y": 1.052062,
+ "Z": 9.820032
+ },
+ "TerritoryId": 204,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 132
+ },
+ {
+ "DataId": 1000100,
+ "Position": {
+ "X": 23.819275,
+ "Y": -8,
+ "Z": 115.92273
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Gridania] Archers' Guild",
+ "[Gridania] Airship Landing"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "Position": {
+ "X": 49.65071,
+ "Y": -8.046952,
+ "Z": 102.32186
+ },
+ "TerritoryId": 132,
+ "InteractionType": "WalkTo",
+ "$": "New Gridania Navmesh workaround"
+ },
+ {
+ "DataId": 1000153,
+ "Position": {
+ "X": -44.87683,
+ "Y": -1.2500024,
+ "Z": 56.839844
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "Position": {
+ "X": 49.65071,
+ "Y": -8.046952,
+ "Z": 102.32186
+ },
+ "TerritoryId": 132,
+ "InteractionType": "WalkTo",
+ "$": "New Gridania Navmesh workaround"
+ },
+ {
+ "DataId": 1000100,
+ "Position": {
+ "X": 23.819275,
+ "Y": -8,
+ "Z": 115.92273
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000100,
+ "Position": {
+ "X": 23.819275,
+ "Y": -8,
+ "Z": 115.92273
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "TerritoryId": 132,
+ "InteractionType": "EquipItem",
+ "ItemId": 2651
+ },
+ {
+ "Position": {
+ "X": 49.65071,
+ "Y": -8.046952,
+ "Z": 102.32186
+ },
+ "TerritoryId": 132,
+ "InteractionType": "WalkTo",
+ "$": "New Gridania Navmesh workaround"
+ },
+ {
+ "DataId": 1000286,
+ "Position": {
+ "X": -53.574463,
+ "Y": 7.2025366,
+ "Z": -118.36426
+ },
+ "TerritoryId": 133,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Gridania] Aetheryte Plaza",
+ "[Gridania] Mih Khetto's Amphitheatre"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 2000087,
+ "Position": {
+ "X": 0.015197754,
+ "Y": 1.449585,
+ "Z": 7.7057495
+ },
+ "TerritoryId": 179,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 132
+ },
+ {
+ "Position": {
+ "X": 49.65071,
+ "Y": -8.046952,
+ "Z": 102.32186
+ },
+ "TerritoryId": 132,
+ "InteractionType": "WalkTo",
+ "$": "New Gridania Navmesh workaround"
+ },
+ {
+ "DataId": 1000460,
+ "Position": {
+ "X": -159.41101,
+ "Y": 4.054107,
+ "Z": -4.1047363
+ },
+ "TerritoryId": 133,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Gridania] Aetheryte Plaza",
+ "[Gridania] Conjurers' Guild"
+ ],
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_MANFST009_00449_Q2_000_1",
+ "Yes": true
+ }
+ ]
+ },
+ {
+ "DataId": 1003027,
+ "Position": {
+ "X": 4.8981323,
+ "Y": -1.92944,
+ "Z": -0.19836426
+ },
+ "TerritoryId": 205,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1003027,
+ "Position": {
+ "X": 4.8981323,
+ "Y": -1.92944,
+ "Z": -0.19836426
+ },
+ "TerritoryId": 205,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2001216,
+ "Position": {
+ "X": 45.87172,
+ "Y": 7.763558,
+ "Z": 47.41661
+ },
+ "TerritoryId": 205,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 133
+ },
+ {
+ "DataId": 1000100,
+ "Position": {
+ "X": 23.819275,
+ "Y": -8,
+ "Z": 115.92273
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Gridania] Conjurers' Guild",
+ "[Gridania] Airship Landing"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1000106,
+ "Position": {
+ "X": 29.007324,
+ "Y": -19.000002,
+ "Z": 105.485596
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_MANFST200_00507_Q1_000_1",
+ "Yes": true
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 2001666,
+ "Position": {
+ "X": 7.179191,
+ "Y": -21.93796,
+ "Z": 124.1005
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_MANFST200_00507_Q2_000_1",
+ "Yes": true
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 4,
+ "Steps": [
+ {
+ "DataId": 1002703,
+ "Position": {
+ "X": -12.375122,
+ "Y": 91.499985,
+ "Z": -0.5340576
+ },
+ "TerritoryId": 128,
+ "InteractionType": "Interact",
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_MANFST200_00507_Q5_000_1",
+ "Yes": true
+ }
+ ],
+ "Comment": "Limsa Arrivals Attendant"
+ },
+ {
+ "DataId": 1002693,
+ "Position": {
+ "X": -6.515625,
+ "Y": 91.49996,
+ "Z": -13.656921
+ },
+ "TerritoryId": 128,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 5,
+ "Steps": [
+ {
+ "DataId": 1003583,
+ "Position": {
+ "X": -7.248047,
+ "Y": 91.49999,
+ "Z": -16.128845
+ },
+ "TerritoryId": 128,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 129,
+ "DialogueChoices": [
+ {
+ "Type": "List",
+ "ExcelSheet": "Warp",
+ "Prompt": null,
+ "Answer": 131094
+ }
+ ]
+ },
+ {
+ "DataId": 1001029,
+ "Position": {
+ "X": 9.170593,
+ "Y": 20.999403,
+ "Z": -15.213318
+ },
+ "TerritoryId": 129,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 6,
+ "Steps": [
+ {
+ "DataId": 8,
+ "Position": {
+ "X": -84.00108,
+ "Y": 20.77683,
+ "Z": 0.03414845
+ },
+ "StopDistance": 10,
+ "TerritoryId": 129,
+ "InteractionType": "AttuneAetheryte"
+ },
+ {
+ "DataId": 49,
+ "Position": {
+ "X": -213.61108,
+ "Y": 16.739136,
+ "Z": 51.80432
+ },
+ "TerritoryId": 129,
+ "InteractionType": "AttuneAethernetShard",
+ "Comment": "Hawkers' Alley"
+ },
+ {
+ "DataId": 43,
+ "Position": {
+ "X": -335.1645,
+ "Y": 12.619202,
+ "Z": 56.381958
+ },
+ "TerritoryId": 129,
+ "InteractionType": "AttuneAethernetShard",
+ "Comment": "Arcanists' Guild"
+ },
+ {
+ "DataId": 44,
+ "Position": {
+ "X": -179.40033,
+ "Y": 4.8065186,
+ "Z": 182.97095
+ },
+ "TerritoryId": 129,
+ "InteractionType": "AttuneAethernetShard",
+ "Comment": "Fishermens' Guild",
+ "AethernetShortcut": [
+ "[Limsa Lominsa] Arcanists' Guild",
+ "[Limsa Lominsa] Hawkers' Alley"
+ ]
+ },
+ {
+ "Position": {
+ "X": -83.8817,
+ "Y": 18.475962,
+ "Z": -29.903847
+ },
+ "TerritoryId": 129,
+ "InteractionType": "WalkTo",
+ "TargetTerritoryId": 128,
+ "Comment": "Walk to Culinarians' Guild",
+ "AethernetShortcut": [
+ "[Limsa Lominsa] Fishermens' Guild",
+ "[Limsa Lominsa] Aetheryte Plaza"
+ ]
+ },
+ {
+ "DataId": 42,
+ "Position": {
+ "X": -56.50421,
+ "Y": 44.47998,
+ "Z": -131.45648
+ },
+ "TerritoryId": 128,
+ "InteractionType": "AttuneAethernetShard",
+ "Comment": "Culinarians' Guild"
+ },
+ {
+ "DataId": 48,
+ "Position": {
+ "X": -5.1728516,
+ "Y": 44.63257,
+ "Z": -218.06671
+ },
+ "TerritoryId": 128,
+ "InteractionType": "AttuneAethernetShard",
+ "Comment": "Marauders' Guild"
+ },
+ {
+ "DataId": 41,
+ "Position": {
+ "X": 16.067688,
+ "Y": 40.787354,
+ "Z": 68.80286
+ },
+ "TerritoryId": 128,
+ "InteractionType": "AttuneAethernetShard",
+ "Comment": "Aftcastle"
+ },
+ {
+ "DataId": 1002695,
+ "Position": {
+ "X": -25.92511,
+ "Y": 91.999954,
+ "Z": -3.6774292
+ },
+ "TerritoryId": 128,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Limsa Lominsa] The Aftcastle",
+ "[Limsa Lominsa] Airship Landing"
+ ],
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_MANFST200_00507_Q6_000_1",
+ "Yes": true
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 7,
+ "Steps": [
+ {
+ "DataId": 2001669,
+ "Position": {
+ "X": -11.12384,
+ "Y": 92.0271,
+ "Z": 17.166382
+ },
+ "TerritoryId": 128,
+ "InteractionType": "Interact",
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_MANFST200_00507_Q4_000_1",
+ "Yes": true
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 8,
+ "Steps": [
+ {
+ "DataId": 1004434,
+ "Position": {
+ "X": -27.17633,
+ "Y": 83.19998,
+ "Z": 2.304016
+ },
+ "TerritoryId": 130,
+ "InteractionType": "Interact",
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_MANFST200_00507_Q7_000_1",
+ "Yes": true
+ }
+ ],
+ "Comment": "Ul'dah Arrivals Attendant"
+ },
+ {
+ "DataId": 1004336,
+ "Position": {
+ "X": -12.619263,
+ "Y": 82.99987,
+ "Z": 4.562378
+ },
+ "TerritoryId": 130,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1004339,
+ "Position": {
+ "X": -25.986206,
+ "Y": 81.799995,
+ "Z": -31.99823
+ },
+ "TerritoryId": 130,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 131,
+ "DialogueChoices": [
+ {
+ "Type": "List",
+ "ExcelSheet": "Warp",
+ "Prompt": null,
+ "Answer": 131096
+ }
+ ]
+ },
+ {
+ "DataId": 51,
+ "Position": {
+ "X": 6.6376343,
+ "Y": 30.655273,
+ "Z": -24.826477
+ },
+ "TerritoryId": 131,
+ "InteractionType": "AttuneAethernetShard"
+ },
+ {
+ "DataId": 1001821,
+ "Position": {
+ "X": -24.124573,
+ "Y": 38.000004,
+ "Z": 85.31323
+ },
+ "TerritoryId": 131,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1001140,
+ "Position": {
+ "X": 23.788818,
+ "Y": -8,
+ "Z": 115.861694
+ },
+ "TerritoryId": 183,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "Position": {
+ "X": 49.65071,
+ "Y": -8.046952,
+ "Z": 102.32186
+ },
+ "TerritoryId": 132,
+ "InteractionType": "WalkTo",
+ "$": "New Gridania Navmesh workaround"
+ },
+ {
+ "DataId": 2,
+ "Position": {
+ "X": 32.913696,
+ "Y": 2.670288,
+ "Z": 30.014404
+ },
+ "StopDistance": 10,
+ "TerritoryId": 132,
+ "InteractionType": "AttuneAetheryte",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
+ },
+ {
+ "DataId": 25,
+ "Position": {
+ "X": 166.58276,
+ "Y": -1.7243042,
+ "Z": 86.13721
+ },
+ "TerritoryId": 132,
+ "InteractionType": "AttuneAethernetShard",
+ "Comment": "Archers' Guild"
+ },
+ {
+ "Position": {
+ "X": 102.810745,
+ "Y": 5.4071116,
+ "Z": 12.54738
+ },
+ "TerritoryId": 132,
+ "InteractionType": "WalkTo",
+ "TargetTerritoryId": 133
+ },
+ {
+ "DataId": 1000768,
+ "Position": {
+ "X": 172.35059,
+ "Y": 15.5,
+ "Z": -89.951965
+ },
+ "TerritoryId": 133,
+ "InteractionType": "Interact",
+ "Comment": "TODO Questflags",
+ "$": "If done after aetheryte: 33 1 0 0 0 128"
+ },
+ {
+ "DataId": 26,
+ "Position": {
+ "X": 101.27405,
+ "Y": 9.018005,
+ "Z": -111.31464
+ },
+ "TerritoryId": 133,
+ "InteractionType": "AttuneAethernetShard",
+ "Comment": "Leatherworkers' Guild"
+ },
+ {
+ "DataId": 27,
+ "Position": {
+ "X": 121.23291,
+ "Y": 12.649658,
+ "Z": -229.63306
+ },
+ "TerritoryId": 133,
+ "InteractionType": "AttuneAethernetShard",
+ "Comment": "Lancers' Guild"
+ },
+ {
+ "DataId": 1000251,
+ "Position": {
+ "X": 147.08167,
+ "Y": 15.5,
+ "Z": -267.99426
+ },
+ "TerritoryId": 133,
+ "InteractionType": "Interact",
+ "Comment": "Lancer Receptionist"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000251,
+ "Position": {
+ "X": 147.08167,
+ "Y": 15.5,
+ "Z": -267.99426
+ },
+ "TerritoryId": 133,
+ "InteractionType": "Interact",
+ "Comment": "Pick up Class Quest"
+ },
+ {
+ "DataId": 30,
+ "Position": {
+ "X": -73.92999,
+ "Y": 7.9804688,
+ "Z": -140.15417
+ },
+ "TerritoryId": 133,
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShortcut": [
+ "[Gridania] Lancers' Guild",
+ "[Gridania] Leatherworkers' Guild & Shaded Bower"
+ ],
+ "Comment": "Mih Khetto's Amphitheatre"
+ },
+ {
+ "Position": {
+ "X": -174.09056,
+ "Y": 10.91981,
+ "Z": -162.12527
+ },
+ "TerritoryId": 133,
+ "InteractionType": "WalkTo"
+ },
+ {
+ "DataId": 29,
+ "Position": {
+ "X": -311.0857,
+ "Y": 7.94989,
+ "Z": -177.05048
+ },
+ "TerritoryId": 133,
+ "InteractionType": "AttuneAethernetShard",
+ "Comment": "Botanists' Guild"
+ },
+ {
+ "DataId": 28,
+ "Position": {
+ "X": -145.15906,
+ "Y": 4.9591064,
+ "Z": -11.7647705
+ },
+ "TerritoryId": 133,
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShortcut": [
+ "[Gridania] Botanists' Guild",
+ "[Gridania] Mih Khetto's Amphitheatre"
+ ],
+ "Comment": "Conjurers' Guild"
+ },
+ {
+ "DataId": 1000100,
+ "Position": {
+ "X": 23.819275,
+ "Y": -8,
+ "Z": 115.92273
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "AethernetShortcut": [
+ "[Gridania] Conjurers' Guild",
+ "[Gridania] Airship Landing"
+ ]
+ }
+ ]
+ }
+ ]
+}
"Y": 0.9999907,
"Z": 211.68835
},
+ "StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 138,
},
"TerritoryId": 141,
"InteractionType": "Interact",
- "Comment": "'Forging the Spirit'"
+ "Comment": "'Forging the Spirit'",
+ "AetheryteShortcut": "Central Thanalan - Black Brush Station"
},
{
"DataId": 1001426,
{
"Sequence": 1,
"Steps": [
+ {
+ "Position": {
+ "X": -316.29608,
+ "Y": 23.44405,
+ "Z": -345.24487
+ },
+ "TerritoryId": 140,
+ "InteractionType": "WalkTo",
+ "AetheryteShortcut": "Western Thanalan - Horizon"
+ },
{
"DataId": 1004603,
"Position": {
"Z": -381.97913
},
"TerritoryId": 140,
- "InteractionType": "Interact",
- "AetheryteShortcut": "Western Thanalan - Horizon"
+ "InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
+ {
+ "Position": {
+ "X": -493.3852,
+ "Y": 21,
+ "Z": -382.50455
+ },
+ "TerritoryId": 140,
+ "InteractionType": "WalkTo"
+ },
{
"DataId": 2001711,
"Position": {
"Y": 0.32037354,
"Z": -166.58276
},
+ "StopDistance": 10,
"TerritoryId": 141,
"InteractionType": "AttuneAetheryte",
"AetheryteShortcut": "Ul'dah",
"InteractionType": "WalkTo",
"TargetTerritoryId": 145
},
+ {
+ "Position": {
+ "X": -423.0189,
+ "Y": -37.96352,
+ "Z": 176.73677
+ },
+ "TerritoryId": 145,
+ "InteractionType": "WalkTo",
+ "$": "Camp Drybone Lantern"
+ },
{
"DataId": 18,
"Position": {
"Y": -57.1756,
"Z": 142.59558
},
+ "StopDistance": 10,
"TerritoryId": 145,
"InteractionType": "AttuneAetheryte"
},
"Sequence": 255,
"Steps": [
{
- "TerritoryId": 145,
+ "TerritoryId": 133,
"InteractionType": "UseItem",
"ItemId": 30362,
"TargetTerritoryId": 140
{
"Sequence": 255,
"Steps": [
+ {
+ "Position": {
+ "X": -378.46735,
+ "Y": -38.009487,
+ "Z": 159.38092
+ },
+ "TerritoryId": 145,
+ "InteractionType": "WalkTo",
+ "$": "Camp Drybone cliff jump"
+ },
+ {
+ "Position": {
+ "X": -379.3895,
+ "Y": -59.000004,
+ "Z": 147.99257
+ },
+ "TerritoryId": 145,
+ "InteractionType": "WalkTo",
+ "DisableNavmesh": true
+ },
{
"DataId": 1003929,
"Position": {
"Y": 48.203125,
"Z": -227.039
},
+ "StopDistance": 10,
"TerritoryId": 140,
"InteractionType": "AttuneAetheryte",
"AethernetShortcut": [
{
"Sequence": 1,
"Steps": [
+ {
+ "Position": {
+ "X": 49.65071,
+ "Y": -8.046952,
+ "Z": 102.32186
+ },
+ "TerritoryId": 132,
+ "InteractionType": "WalkTo",
+ "$": "New Gridania Navmesh workaround"
+ },
{
"DataId": 3,
"Position": {
{
"Sequence": 255,
"Steps": [
+ {
+ "Position": {
+ "X": 49.65071,
+ "Y": -8.046952,
+ "Z": 102.32186
+ },
+ "TerritoryId": 132,
+ "InteractionType": "WalkTo",
+ "$": "New Gridania Navmesh workaround",
+ "AetheryteShortcut": "Gridania"
+ },
{
"DataId": 1000100,
"Position": {
"Z": 115.92273
},
"TerritoryId": 132,
- "InteractionType": "Interact",
- "AetheryteShortcut": "Gridania"
+ "InteractionType": "Interact"
}
]
}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1004884,
+ "Position": {
+ "X": 38.895264,
+ "Y": 1.2000012,
+ "Z": 3.463745
+ },
+ "TerritoryId": 212,
+ "InteractionType": "Interact",
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_MANFST302_00680_Q1_000_1",
+ "Yes": true
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1002394,
+ "Position": {
+ "X": -69.5354,
+ "Y": -0.50095016,
+ "Z": -9.99469
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Gridania",
+ "DialogueChoices": [
+ {
+ "Type": "List",
+ "Prompt": "TEXT_MANFST302_00680_Q2_000_1",
+ "Answer": "TEXT_MANFST302_00680_A2_000_2"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1001263,
+ "Position": {
+ "X": 181.41443,
+ "Y": -2.3519497,
+ "Z": -240.40594
+ },
+ "TerritoryId": 133,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 152,
+ "AethernetShortcut": [
+ "[Gridania] Aetheryte Plaza",
+ "[Gridania] Lancers' Guild"
+ ],
+ "DialogueChoices": [
+ {
+ "Type": "List",
+ "ExcelSheet": "Warp",
+ "Prompt": null,
+ "Answer": 131077
+ }
+ ]
+ },
+ {
+ "DataId": 1004886,
+ "Position": {
+ "X": 30.319702,
+ "Y": 8.422709,
+ "Z": 475.30322
+ },
+ "TerritoryId": 152,
+ "InteractionType": "SinglePlayerDuty"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1002394,
+ "Position": {
+ "X": -69.5354,
+ "Y": -0.50095016,
+ "Z": -9.99469
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Gridania"
+ }
+ ]
+ }
+ ]
+}
"QuestSequence": [
{
"Sequence": 0,
- "Steps": [],
- "Comment": "Quest start is intentionally empty, so you pick a Grand Company"
+ "Steps": [
+ {
+ "DataId": 1004885,
+ "Position": {
+ "X": 36.453735,
+ "Y": 1.2000011,
+ "Z": 4.6845093
+ },
+ "TerritoryId": 212,
+ "InteractionType": "Interact",
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_MANSEA302_00681_Q1_000_1",
+ "Yes": true
+ }
+ ]
+ }
+ ]
},
{
"Sequence": 1,
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1002394,
+ "Position": {
+ "X": -69.5354,
+ "Y": -0.50095016,
+ "Z": -9.99469
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "TerritoryId": 132,
+ "InteractionType": "UseItem",
+ "ItemId": 30362,
+ "TargetTerritoryId": 140
+ },
+ {
+ "Position": {
+ "X": -492.96475,
+ "Y": 20.999884,
+ "Z": -380.82272
+ },
+ "TerritoryId": 140,
+ "InteractionType": "WalkTo"
+ },
+ {
+ "DataId": 2001711,
+ "Position": {
+ "X": -480.9181,
+ "Y": 18.00103,
+ "Z": -386.862
+ },
+ "TerritoryId": 140,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 212
+ },
+ {
+ "DataId": 1005012,
+ "Position": {
+ "X": 22.507019,
+ "Y": 0.9999986,
+ "Z": -2.02948
+ },
+ "TerritoryId": 212,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000168,
+ "Position": {
+ "X": -75.48645,
+ "Y": -0.5013741,
+ "Z": -5.081299
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1002394,
+ "Position": {
+ "X": -69.5354,
+ "Y": -0.50095016,
+ "Z": -9.99469
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Instruction",
+ "Comment": "Buy Serpent Chocobo Issuance"
+ },
+ {
+ "DataId": 1000136,
+ "Position": {
+ "X": 32.303345,
+ "Y": -0.050583772,
+ "Z": 70.29822
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1006001,
+ "Position": {
+ "X": 35.38562,
+ "Y": -0.89902794,
+ "Z": 67.551636
+ },
+ "StopDistance": 7,
+ "TerritoryId": 132,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1000136,
+ "Position": {
+ "X": 32.303345,
+ "Y": -0.050583772,
+ "Z": 70.29822
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1003281,
+ "Position": {
+ "X": 97.520386,
+ "Y": 40.248554,
+ "Z": 81.1322
+ },
+ "TerritoryId": 128,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Limsa Lominsa",
+ "AethernetShortcut": ["[Limsa Lominsa] Aetheryte Plaza", "[Limsa Lominsa] The Aftcastle"]
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1002387,
+ "Position": {
+ "X": 95.750244,
+ "Y": 40.250286,
+ "Z": 76.67651
+ },
+ "TerritoryId": 128,
+ "InteractionType": "Instruction",
+ "Comment": "Buy Storm Chocobo Issuance"
+ },
+ {
+ "DataId": 1003597,
+ "Position": {
+ "X": 8.194031,
+ "Y": 39.999973,
+ "Z": 17.746216
+ },
+ "TerritoryId": 128,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 129,
+ "DialogueChoices": [
+ {
+ "Type": "List",
+ "ExcelSheet": "Warp",
+ "Prompt": null,
+ "Answer": 131094
+ }
+ ]
+ },
+ {
+ "DataId": 1001027,
+ "Position": {
+ "X": 45.792236,
+ "Y": 20,
+ "Z": -8.1026
+ },
+ "TerritoryId": 129,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "DataId": 1006002,
+ "Position": {
+ "X": 49.576538,
+ "Y": 20,
+ "Z": -5.722229
+ },
+ "StopDistance": 7,
+ "TerritoryId": 129,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1001027,
+ "Position": {
+ "X": 45.792236,
+ "Y": 20,
+ "Z": -8.1026
+ },
+ "TerritoryId": 129,
+ "InteractionType": "Interact"
+ }
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1000168,
+ "Position": {
+ "X": -75.48645,
+ "Y": -0.5013741,
+ "Z": -5.081299
+ },
+ "TerritoryId": 132,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Gridania",
+ "SkipIf": [
+ "AetheryteShortcutIfInSameTerritory"
+ ]
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "Position": {
+ "X": -75.48645,
+ "Y": -0.5013741,
+ "Z": -5.081299
+ },
+ "TerritoryId": 132,
+ "InteractionType": "UseItem",
+ "ItemId": 6001,
+ "SkipIf": [
+ "ChocoboUnlocked"
+ ],
+ "Comment": "Use Chocobo whistle (if not yet unlocked)"
+ }
+ ]
+ }
+ ]
+}
"Never",
"FlyingLocked",
"FlyingUnlocked",
- "DifferentTerritory"
+ "DifferentTerritory",
+ "ChocoboUnlocked",
+ "AetheryteShortcutIfInSameTerritory"
]
}
},
{ ESkipCondition.Never, "Never" },
{ ESkipCondition.FlyingLocked, "FlyingLocked" },
{ ESkipCondition.FlyingUnlocked, "FlyingUnlocked" },
+ { ESkipCondition.ChocoboUnlocked, "ChocoboUnlocked" },
+ { ESkipCondition.AetheryteShortcutIfInSameTerritory, "AetheryteShortcutIfInSameTerritory" },
};
}
Never,
FlyingLocked,
FlyingUnlocked,
+ ChocoboUnlocked,
+ AetheryteShortcutIfInSameTerritory,
}
using Dalamud.Configuration;
+using FFXIVClientStructs.FFXIV.Client.UI.Agent;
using LLib.ImGui;
namespace Questionable;
{
public bool AutoAcceptNextQuest { get; set; }
public uint MountId { get; set; } = 71;
+ public GrandCompany GrandCompany { get; set; } = GrandCompany.None;
}
internal sealed class AdvancedConfiguration
{
if (_questController.CurrentQuest?.Quest.QuestId == 245)
{
- // TODO Test this
_logger.LogInformation("Closing ContentsTutorial");
AtkUnitBase* addon = (AtkUnitBase*)args.Addon;
- //addon->FireCallbackInt(-2);
addon->FireCallbackInt(13);
}
}
public bool IsNavmeshReady => _navmeshIpc.IsReady;
public bool IsPathRunning => _navmeshIpc.IsPathRunning;
public bool IsPathfinding => _pathfindTask is { IsCompleted: false };
- public DestinationData? Destination { get; private set; }
+ public DestinationData? Destination { get; set; }
public DateTime MovementStartedAt { get; private set; } = DateTime.MaxValue;
public void Update()
using System;
using System.Collections.Generic;
using System.Linq;
-using System.Numerics;
-using System.Threading;
-using System.Threading.Tasks;
-using Dalamud.Game.ClientState.Conditions;
using Dalamud.Game.ClientState.Keys;
-using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Plugin.Services;
-using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
-using FFXIVClientStructs.FFXIV.Client.Game;
-using FFXIVClientStructs.FFXIV.Client.Game.UI;
using Microsoft.Extensions.Logging;
using Questionable.Controller.Steps;
-using Questionable.Data;
-using Questionable.External;
using Questionable.Model;
using Questionable.Model.V1;
-using Questionable.Model.V1.Converter;
namespace Questionable.Controller;
}
}
- // TODO is this still required?
- public sealed record StepProgress(
- DateTime StartedAt,
- int DialogueChoicesSelected = 0);
-
public void Skip(ushort questQuestId, byte currentQuestSequence)
{
lock (_lock)
}
}
}
+
+ public sealed record StepProgress(
+ DateTime StartedAt);
}
var task = serviceProvider.GetRequiredService<UseAetheryteShortcut>()
.With(step, step.AetheryteShortcut.Value, aetheryteData.TerritoryIds[step.AetheryteShortcut.Value]);
- return [new WaitConditionTask(gameFunctions.CanTeleport, "CanTeleport"), task];
+ return
+ [
+ new WaitConditionTask(() => gameFunctions.CanTeleport(step.AetheryteShortcut.Value), "CanTeleport"),
+ task
+ ];
}
public ITask CreateTask(Quest quest, QuestSequence sequence, QuestStep step)
ushort territoryType = clientState.TerritoryType;
if (ExpectedTerritoryId == territoryType)
{
+ if (Step.SkipIf.Contains(ESkipCondition.AetheryteShortcutIfInSameTerritory))
+ {
+ logger.LogInformation("Skipping aetheryte teleport due to SkipIf");
+ return false;
+ }
+
Vector3 pos = clientState.LocalPlayer!.Position;
if (aetheryteData.CalculateDistance(pos, territoryType, TargetAetheryte) < 11 ||
(Step.AethernetShortcut != null &&
using System;
+using System.Collections.Generic;
+using System.Linq;
using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
+using FFXIVClientStructs.FFXIV.Client.Game.UI;
using FFXIVClientStructs.FFXIV.Client.System.Framework;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
if (step.SkipIf.Contains(ESkipCondition.Never))
return null;
- if (step.SkipIf.Count == 0 && step.CompletionQuestVariablesFlags.Count == 0)
+ var relevantConditions =
+ step.SkipIf.Where(x => x != ESkipCondition.AetheryteShortcutIfInSameTerritory).ToList();
+ if (relevantConditions.Count == 0 && step.CompletionQuestVariablesFlags.Count == 0)
return null;
return serviceProvider.GetRequiredService<CheckTask>()
- .With(step, quest.QuestId);
+ .With(step, relevantConditions, quest.QuestId);
}
}
GameFunctions gameFunctions) : ITask
{
public QuestStep Step { get; set; } = null!;
+ public List<ESkipCondition> SkipConditions { get; set; } = null!;
public ushort QuestId { get; set; }
- public ITask With(QuestStep step, ushort questId)
+ public ITask With(QuestStep step, List<ESkipCondition> skipConditions, ushort questId)
{
Step = step;
+ SkipConditions = skipConditions;
QuestId = questId;
return this;
}
- public bool Start()
+ public unsafe bool Start()
{
- logger.LogInformation("Checking skip conditions; {ConfiguredConditions}", string.Join(",", Step.SkipIf));
+ logger.LogInformation("Checking skip conditions; {ConfiguredConditions}", string.Join(",", SkipConditions));
- if (Step.SkipIf.Contains(ESkipCondition.FlyingUnlocked) &&
+ if (SkipConditions.Contains(ESkipCondition.FlyingUnlocked) &&
gameFunctions.IsFlyingUnlocked(Step.TerritoryId))
{
logger.LogInformation("Skipping step, as flying is unlocked");
return true;
}
- if (Step.SkipIf.Contains(ESkipCondition.FlyingLocked) &&
+ if (SkipConditions.Contains(ESkipCondition.FlyingLocked) &&
!gameFunctions.IsFlyingUnlocked(Step.TerritoryId))
{
logger.LogInformation("Skipping step, as flying is locked");
return true;
}
+ if (SkipConditions.Contains(ESkipCondition.ChocoboUnlocked) &&
+ PlayerState.Instance()->IsMountUnlocked(1))
+ {
+ logger.LogInformation("Skipping step, as chocobo is unlocked");
+ return true;
+ }
+
if (Step is
{
DataId: not null,
public ETaskResult Update() => ETaskResult.SkipRemainingTasksForStep;
- public override string ToString() => $"CheckSkip({string.Join(", ", Step.SkipIf)})";
+ public override string ToString() => $"CheckSkip({string.Join(", ", SkipConditions)})";
}
}
return [
serviceProvider.GetRequiredService<WaitDelay>(),
notInCombat,
+ serviceProvider.GetRequiredService<WaitDelay>(),
Next(quest, sequence, step)
];
}
}
- internal sealed class DoEquip(IDataManager dataManager, ILogger<DoEquip> logger)
- : AbstractDelayedTask(TimeSpan.FromSeconds(1))
+ internal sealed class DoEquip(IDataManager dataManager, ILogger<DoEquip> logger) : ITask
{
private static readonly IReadOnlyList<InventoryType> SourceInventoryTypes =
[
private Item _item = null!;
private List<ushort> _targetSlots = [];
+ private DateTime _continueAt = DateTime.MaxValue;
+
public ITask With(uint itemId)
{
_itemId = itemId;
return this;
}
- protected override unsafe bool StartInternal()
+ public bool Start()
+ {
+ Equip();
+ _continueAt = DateTime.Now.AddSeconds(1);
+ return true;
+ }
+
+ public unsafe ETaskResult Update()
+ {
+ if (DateTime.Now < _continueAt)
+ return ETaskResult.StillRunning;
+
+ InventoryManager* inventoryManager = InventoryManager.Instance();
+ if (inventoryManager == null)
+ return ETaskResult.StillRunning;
+
+ if (_targetSlots.Any(x =>
+ inventoryManager->GetInventorySlot(InventoryType.EquippedItems, x)->ItemID == _itemId))
+ return ETaskResult.TaskComplete;
+
+ Equip();
+ _continueAt = DateTime.Now.AddSeconds(1);
+ return ETaskResult.StillRunning;
+ }
+
+ private unsafe bool Equip()
{
var inventoryManager = InventoryManager.Instance();
if (inventoryManager == null)
int result = inventoryManager->MoveItemSlot(sourceInventoryType, sourceSlot,
InventoryType.EquippedItems, targetSlot, 1);
logger.LogInformation("MoveItemSlot result: {Result}", result);
- return true;
+ return result == 0;
}
}
return false;
}
- protected override unsafe ETaskResult UpdateInternal()
- {
- InventoryManager* inventoryManager = InventoryManager.Instance();
- if (inventoryManager == null)
- return ETaskResult.StillRunning;
-
- if (_targetSlots.Any(x =>
- inventoryManager->GetInventorySlot(InventoryType.EquippedItems, x)->ItemID == _itemId))
- return ETaskResult.TaskComplete;
-
- return ETaskResult.StillRunning;
- }
-
private static List<ushort>? GetEquipSlot(Item item)
{
return item.EquipSlotCategory.Row switch
using System;
using System.Collections.Generic;
+using FFXIVClientStructs.FFXIV.Client.Game;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
using Questionable.Controller.Steps.BaseTasks;
using Questionable.Model;
using Questionable.Model.V1;
internal static class UseItem
{
+ public const int VesperBayAetheryteTicket = 30362;
+
internal sealed class Factory(IServiceProvider serviceProvider) : ITaskFactory
{
public IEnumerable<ITask> CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step)
=> throw new InvalidOperationException();
}
- internal abstract class UseItemBase : ITask
+ internal abstract class UseItemBase(ILogger logger) : ITask
{
private bool _usedItem;
private DateTime _continueAt;
+ private int _itemCount;
public uint ItemId { get; set; }
protected abstract bool UseItem();
- public bool Start()
+ public unsafe bool Start()
{
+ InventoryManager* inventoryManager = InventoryManager.Instance();
+ if (inventoryManager == null)
+ throw new TaskException("No InventoryManager");
+
+ _itemCount = inventoryManager->GetInventoryItemCount(ItemId);
+ if (_itemCount == 0)
+ throw new TaskException($"Don't have any {ItemId} in inventory (NQ only)");
+
_usedItem = UseItem();
- if (ItemId == 30362) // vesper bay aether ticket
+ if (ItemId == VesperBayAetheryteTicket)
_continueAt = DateTime.Now.AddSeconds(11);
else
_continueAt = DateTime.Now.AddSeconds(2);
return true;
}
- public ETaskResult Update()
+ public unsafe ETaskResult Update()
{
if (DateTime.Now <= _continueAt)
return ETaskResult.StillRunning;
+ if (ItemId == VesperBayAetheryteTicket)
+ {
+ InventoryManager* inventoryManager = InventoryManager.Instance();
+ if (inventoryManager == null)
+ {
+ logger.LogWarning("InventoryManager is not available");
+ return ETaskResult.StillRunning;
+ }
+
+ int itemCount = inventoryManager->GetInventoryItemCount(ItemId);
+ if (itemCount == _itemCount)
+ {
+ // TODO Better handling for game-provided errors, i.e. reacting to the 'Could not use' messages. UseItem() is successful in this case (and returns 0)
+ logger.LogInformation("Attempted to use vesper bay aetheryte ticket, but it didn't consume an item - reattempting next frame");
+ _usedItem = false;
+ return ETaskResult.StillRunning;
+ }
+ }
+
if (!_usedItem)
{
_usedItem = UseItem();
}
- internal sealed class UseOnGround(GameFunctions gameFunctions) : UseItemBase
+ internal sealed class UseOnGround(GameFunctions gameFunctions, ILogger<UseOnGround> logger) : UseItemBase(logger)
{
public uint DataId { get; set; }
public override string ToString() => $"UseItem({ItemId} on ground at {DataId})";
}
- internal sealed class UseOnObject(GameFunctions gameFunctions) : UseItemBase
+ internal sealed class UseOnObject(GameFunctions gameFunctions, ILogger<UseOnObject> logger) : UseItemBase(logger)
{
public uint DataId { get; set; }
public override string ToString() => $"UseItem({ItemId} on {DataId})";
}
- internal sealed class Use(GameFunctions gameFunctions) : UseItemBase
+ internal sealed class Use(GameFunctions gameFunctions, ILogger<Use> logger) : UseItemBase(logger)
{
public ITask With(uint itemId)
{
using ContentTalk = Lumina.Excel.GeneratedSheets.ContentTalk;
using Emote = Lumina.Excel.GeneratedSheets.Emote;
using GameObject = Dalamud.Game.ClientState.Objects.Types.GameObject;
+using GrandCompany = FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany;
using Quest = Questionable.Model.Quest;
using TerritoryType = Lumina.Excel.GeneratedSheets.TerritoryType;
public DateTime ReturnRequestedAt { get; set; } = DateTime.MinValue;
public (ushort CurrentQuest, byte Sequence) GetCurrentQuest()
+ {
+ var (currentQuest, sequence) = GetCurrentQuestInternal();
+ QuestManager* questManager = QuestManager.Instance();
+ PlayerState* playerState = PlayerState.Instance();
+
+ if (currentQuest == 0)
+ {
+ if (_clientState.TerritoryType == 181) // Starting in Limsa
+ return (107, 0);
+ if (_clientState.TerritoryType == 183) // Starting in Gridania
+ return (39, 0);
+ return default;
+ }
+ else if (currentQuest == 681)
+ {
+ // if we have already picked up the GC quest, just return the progress for it
+ if (questManager->IsQuestAccepted(currentQuest) || QuestManager.IsQuestComplete(currentQuest))
+ return (currentQuest, sequence);
+
+ // The company you keep...
+ return _configuration.General.GrandCompany switch
+ {
+ GrandCompany.TwinAdder => (680, 0),
+ GrandCompany.Maelstrom => (681, 0),
+ _ => default
+ };
+ }
+ else if (currentQuest == 3856 && !playerState->IsMountUnlocked(1)) // we come in peace
+ {
+ ushort chocoboQuest = (GrandCompany)playerState->GrandCompany switch
+ {
+ GrandCompany.TwinAdder => 700,
+ GrandCompany.Maelstrom => 701,
+ _ => 0
+ };
+
+ if (chocoboQuest != 0 && !QuestManager.IsQuestComplete(chocoboQuest))
+ return (chocoboQuest, QuestManager.GetQuestSequence(chocoboQuest));
+ }
+
+ return (currentQuest, sequence);
+ }
+
+ public (ushort CurrentQuest, byte Sequence) GetCurrentQuestInternal()
{
ushort currentQuest;
currentQuest = scenarioTree->Data->CurrentScenarioQuest;
if (currentQuest == 0)
- {
- if (_clientState.TerritoryType == 181) // Starting Limsa
- return (107, 0);
-
return default;
- }
return (currentQuest, QuestManager.GetQuestSequence(currentQuest));
}
var uiState = UIState.Instance();
return uiState != null && uiState->IsAetheryteUnlocked(aetheryteId);
- /*
- var telepo = Telepo.Instance();
- if (telepo == null || telepo->UpdateAetheryteList() == null)
- {
- subIndex = 0;
- return false;
- }
-
- for (ulong i = 0; i < telepo->TeleportList.Size(); ++i)
- {
- var data = telepo->TeleportList.Get(i);
- if (data.AetheryteId == aetheryteId)
- {
- subIndex = data.SubIndex;
- return true;
- }
- }
-
- subIndex = 0;
- return false;
- */
}
public bool IsAetheryteUnlocked(EAetheryteLocation aetheryteLocation)
=> IsAetheryteUnlocked((uint)aetheryteLocation, out _);
- public bool CanTeleport() => ActionManager.Instance()->GetActionStatus(ActionType.Action, 5) == 0;
+ public bool CanTeleport(EAetheryteLocation aetheryteLocation)
+ {
+ if ((ushort)aetheryteLocation == PlayerState.Instance()->HomeAetheryteId &&
+ ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 8) == 0)
+ return true;
+
+ return ActionManager.Instance()->GetActionStatus(ActionType.Action, 5) == 0;
+ }
public bool TeleportAetheryte(uint aetheryteId)
{
- var status = ActionManager.Instance()->GetActionStatus(ActionType.Action, 5);
- if (status != 0)
- return false;
+
if (IsAetheryteUnlocked(aetheryteId, out var subIndex))
{
return true;
}
- // fallback if return isn't available or (more likely) on a different aetheryte
- return Telepo.Instance()->Teleport(aetheryteId, subIndex);
+ if (ActionManager.Instance()->GetActionStatus(ActionType.Action, 5) == 0)
+ // fallback if return isn't available or (more likely) on a different aetheryte
+ return Telepo.Instance()->Teleport(aetheryteId, subIndex);
}
return false;
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
- <Version>0.14</Version>
+ <Version>0.15</Version>
<LangVersion>12</LangVersion>
<Nullable>enable</Nullable>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
using System;
-using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Dalamud.Interface.Colors;
using ImGuiNET;
using LLib.ImGui;
using Lumina.Excel.GeneratedSheets;
+using GrandCompany = FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany;
namespace Questionable.Windows;
private readonly uint[] _mountIds;
private readonly string[] _mountNames;
+ private readonly string[] _grandCompanyNames =
+ ["None (manually pick quest)", "Maelstrom", "Twin Adder"/*, "Immortal Flames"*/];
+
[SuppressMessage("Performance", "CA1861", Justification = "One time initialization")]
public ConfigWindow(DalamudPluginInterface pluginInterface, Configuration configuration, IDataManager dataManager)
: base("Config - Questionable###QuestionableConfig", ImGuiWindowFlags.AlwaysAutoResize)
Save();
}
+ int grandCompany = (int)_configuration.General.GrandCompany;
+ if (ImGui.Combo("Preferred Grand Company", ref grandCompany, _grandCompanyNames,
+ _grandCompanyNames.Length))
+ {
+ _configuration.General.GrandCompany = (GrandCompany)grandCompany;
+ Save();
+ }
+
ImGui.EndTabItem();
}
map->FlagMapMarker.TerritoryId != _clientState.TerritoryType ||
!_navmeshIpc.IsReady);
if (ImGui.Button("Move to Flag"))
+ {
+ _movementController.Destination = null;
_gameFunctions.ExecuteCommand(
$"/vnav {(_gameFunctions.IsFlyingUnlockedInCurrentZone() ? "flyflag" : "moveflag")}");
+ }
+
ImGui.EndDisabled();
ImGui.SameLine();