Limsa start unil Sylph Management; various fixes

This commit is contained in:
Liza 2024-06-14 01:10:05 +02:00
parent b74f69c981
commit b9887c07af
Signed by: liza
GPG Key ID: 7199F8D727D55F67
70 changed files with 5608 additions and 213 deletions

View File

@ -0,0 +1,58 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1001028,
"Position": {
"X": -39.84137,
"Y": 19.999994,
"Z": -4.9592285
},
"TerritoryId": 181,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1002732,
"Position": {
"X": 11.184814,
"Y": 20.999336,
"Z": 13.321045
},
"TerritoryId": 181,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_MANSEA001_00107_Q1_000_1",
"Yes": true
}
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1002697,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 181,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,288 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002697,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 181,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1002698,
"Position": {
"X": 8.499207,
"Y": 39.505493,
"Z": 3.5552979
},
"TerritoryId": 181,
"InteractionType": "Interact",
"Comment": "Required to accept this Quest; should link to a QuestId"
},
{
"DataId": 1000969,
"Position": {
"X": 7.9193726,
"Y": 40.000175,
"Z": 17.471558
},
"TerritoryId": 181,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"ExcelSheet": "quest/001/ManSea001_00107",
"Prompt": "TEXT_MANSEA001_00107_Q1_000_1",
"Yes": true
}
]
},
{
"DataId": 2001563,
"Position": {
"X": 3.616333,
"Y": 20.004517,
"Z": 9.750427
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest; the next few entries should be run as part of a separate quest"
},
{
"DataId": 2001564,
"Position": {
"X": -3.0671387,
"Y": 20.004517,
"Z": 9.964111
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest"
},
{
"DataId": 2001565,
"Position": {
"X": -11.39856,
"Y": 19.97406,
"Z": 6.6376343
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest"
},
{
"DataId": 2001566,
"Position": {
"X": -18.32611,
"Y": 20.004517,
"Z": 1.7241821
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest"
},
{
"DataId": 2001567,
"Position": {
"X": -30.47229,
"Y": 19.97406,
"Z": 0.8086548
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest"
},
{
"DataId": 2001568,
"Position": {
"X": -44.724243,
"Y": 20.004517,
"Z": -0.5036011
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest"
},
{
"DataId": 1003604,
"Position": {
"X": -60.44104,
"Y": 18.00033,
"Z": -4.348877
},
"TerritoryId": 129,
"InteractionType": "Interact",
"Comment": "Quest Turn-In (Making a Name)"
},
{
"DataId": 8,
"Position": {
"X": -84.031494,
"Y": 20.767456,
"Z": 0.015197754
},
"StopDistance": 10,
"TerritoryId": 129,
"InteractionType": "AttuneAetheryte",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"DataId": 1001217,
"Position": {
"X": -140.85602,
"Y": 18.199999,
"Z": 17.013733
},
"TerritoryId": 129,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"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": 1000926,
"Position": {
"X": -10.055725,
"Y": 44.999794,
"Z": -245.80762
},
"TerritoryId": 128,
"InteractionType": "Interact",
"Comment": "MRD Receptionist",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1000926,
"Position": {
"X": -10.055725,
"Y": 44.999794,
"Z": -245.80762
},
"TerritoryId": 128,
"InteractionType": "Interact",
"Comment": "Pick up Class Quest"
},
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,288 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002697,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 181,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1002698,
"Position": {
"X": 8.499207,
"Y": 39.505493,
"Z": 3.5552979
},
"TerritoryId": 181,
"InteractionType": "Interact",
"Comment": "Required to accept this Quest; should link to a QuestId"
},
{
"DataId": 1000969,
"Position": {
"X": 7.9193726,
"Y": 40.000175,
"Z": 17.471558
},
"TerritoryId": 181,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"ExcelSheet": "quest/001/ManSea001_00107",
"Prompt": "TEXT_MANSEA001_00107_Q1_000_1",
"Yes": true
}
]
},
{
"DataId": 2001563,
"Position": {
"X": 3.616333,
"Y": 20.004517,
"Z": 9.750427
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest; the next few entries should be run as part of a separate quest"
},
{
"DataId": 2001564,
"Position": {
"X": -3.0671387,
"Y": 20.004517,
"Z": 9.964111
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest"
},
{
"DataId": 2001565,
"Position": {
"X": -11.39856,
"Y": 19.97406,
"Z": 6.6376343
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest"
},
{
"DataId": 2001566,
"Position": {
"X": -18.32611,
"Y": 20.004517,
"Z": 1.7241821
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest"
},
{
"DataId": 2001567,
"Position": {
"X": -30.47229,
"Y": 19.97406,
"Z": 0.8086548
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest"
},
{
"DataId": 2001568,
"Position": {
"X": -44.724243,
"Y": 20.004517,
"Z": -0.5036011
},
"TerritoryId": 129,
"InteractionType": "Interact",
"$": "Making a Name: can't abandon quest"
},
{
"DataId": 1003604,
"Position": {
"X": -60.44104,
"Y": 18.00033,
"Z": -4.348877
},
"TerritoryId": 129,
"InteractionType": "Interact",
"Comment": "Quest Turn-In (Making a Name)"
},
{
"DataId": 8,
"Position": {
"X": -84.031494,
"Y": 20.767456,
"Z": 0.015197754
},
"StopDistance": 10,
"TerritoryId": 129,
"InteractionType": "AttuneAetheryte",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"DataId": 1001217,
"Position": {
"X": -140.85602,
"Y": 18.199999,
"Z": 17.013733
},
"TerritoryId": 129,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"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": 1000895,
"Position": {
"X": -335.74432,
"Y": 12.899764,
"Z": 1.3884888
},
"TerritoryId": 129,
"InteractionType": "Interact",
"Comment": "ACN Receptionist",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1000895,
"Position": {
"X": -335.74432,
"Y": 12.899764,
"Z": 1.3884888
},
"TerritoryId": 129,
"InteractionType": "Interact",
"Comment": "Pick up Class Quest"
},
{
"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": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,40 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1003239,
"Position": {
"X": -283.68048,
"Y": 10.593393,
"Z": -249.34778
},
"TerritoryId": 134,
"InteractionType": "Interact",
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Zephyr Gate (Middle La Noscea)"
]
}
]
}
]
}

View File

@ -0,0 +1,83 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1003239,
"Position": {
"X": -283.68048,
"Y": 10.593393,
"Z": -249.34778
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2001255,
"Position": {
"X": -320.57678,
"Y": 25.833496,
"Z": -527.5502
},
"TerritoryId": 134,
"InteractionType": "Interact",
"Comment": "Technically triggers combat, but can be ignored"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"Position": {
"X": -380.10605,
"Y": 32.598312,
"Z": -608.40186
},
"TerritoryId": 134,
"InteractionType": "WalkTo",
"TargetTerritoryId": 138
},
{
"DataId": 13,
"Position": {
"X": 651.5449,
"Y": 11.734131,
"Z": 513.35913
},
"StopDistance": 10,
"TerritoryId": 138,
"InteractionType": "AttuneAetheryte"
},
{
"Position": {
"X": 652.74164,
"Y": 8.129893,
"Z": 522.6646
},
"TerritoryId": 138,
"InteractionType": "WalkTo"
},
{
"DataId": 1003244,
"Position": {
"X": 650.72095,
"Y": 7.856781,
"Z": 527.21436
},
"StopDistance": 6,
"TerritoryId": 138,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,122 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1003245,
"Position": {
"X": 655.75635,
"Y": 8.316303,
"Z": 521.1719
},
"StopDistance": 7,
"TerritoryId": 138,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1003246,
"Position": {
"X": 443.22876,
"Y": 14.645099,
"Z": 452.84204
},
"TerritoryId": 138,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2001260,
"Position": {
"X": 602.50244,
"Y": 28.94629,
"Z": 361.01306
},
"TerritoryId": 138,
"InteractionType": "UseItem",
"ItemId": 2000343
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 2001261,
"Position": {
"X": 602.50244,
"Y": 28.976807,
"Z": 361.0437
},
"TerritoryId": 138,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
17
]
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1003246,
"Position": {
"X": 443.22876,
"Y": 14.645099,
"Z": 452.84204
},
"TerritoryId": 138,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1003245,
"Position": {
"X": 655.75635,
"Y": 8.316303,
"Z": 521.1719
},
"TerritoryId": 138,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1001000,
"Position": {
"X": -32.028687,
"Y": 41.499985,
"Z": 208.39233
},
"TerritoryId": 128,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] The Aftcastle"
]
}
]
}
]
}

View File

@ -0,0 +1,57 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1001000,
"Position": {
"X": -32.028687,
"Y": 41.499985,
"Z": 208.39233
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"Position": {
"X": 24.438343,
"Y": 44.499928,
"Z": 183.94363
},
"TerritoryId": 128,
"InteractionType": "WalkTo",
"TargetTerritoryId": 135
},
{
"DataId": 10,
"Position": {
"X": 156.11499,
"Y": 15.518433,
"Z": 673.21277
},
"StopDistance": 10,
"TerritoryId": 135,
"InteractionType": "AttuneAetheryte"
},
{
"DataId": 1002238,
"Position": {
"X": 247.36401,
"Y": 14.02301,
"Z": 611.9325
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,37 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002238,
"Position": {
"X": 247.36401,
"Y": 14.02301,
"Z": 611.9325
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1002274,
"Position": {
"X": -34.65332,
"Y": 8.921356,
"Z": 861.4479
},
"TerritoryId": 135,
"InteractionType": "Emote",
"Emote": "doubt"
}
]
}
]
}

View File

@ -0,0 +1,81 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002238,
"Position": {
"X": 247.36401,
"Y": 14.02301,
"Z": 611.9325
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1002237,
"Position": {
"X": 167.55933,
"Y": 14.095915,
"Z": 683.92444
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1002240,
"Position": {
"X": 118.51672,
"Y": 23.000835,
"Z": 735.6831
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1002463,
"Position": {
"X": 249.89697,
"Y": 6.194409,
"Z": 773.12866
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1002237,
"Position": {
"X": 167.55933,
"Y": 14.095915,
"Z": 683.92444
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,110 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"TerritoryBlacklist": [
249
],
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002237,
"Position": {
"X": 167.55933,
"Y": 14.095915,
"Z": 683.92444
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1002240,
"Position": {
"X": 118.51672,
"Y": 23.000835,
"Z": 735.6831
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"Position": {
"X": 106.18569,
"Y": 53.59632,
"Z": 674.99817
},
"TerritoryId": 135,
"InteractionType": "WalkTo"
},
{
"DataId": 1002651,
"Position": {
"X": 107.65234,
"Y": 54.64395,
"Z": 674.9523
},
"StopDistance": 5,
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1002237,
"Position": {
"X": 167.55933,
"Y": 14.095915,
"Z": 683.92444
},
"TerritoryId": 135,
"InteractionType": "SinglePlayerDuty",
"AetheryteShortcut": "Lower La Noscea - Moraby Drydocks"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1002238,
"Position": {
"X": 247.36401,
"Y": 14.02301,
"Z": 611.9325
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1002237,
"Position": {
"X": 167.55933,
"Y": 14.095915,
"Z": 683.92444
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,127 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002274,
"Position": {
"X": -34.65332,
"Y": 8.921356,
"Z": 861.4479
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1002456,
"Position": {
"X": -94.86542,
"Y": 2.3717625,
"Z": 734.2793
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2000769,
"Position": {
"X": -145.09808,
"Y": 1.0527954,
"Z": 709.10205
},
"StopDistance": 4,
"TerritoryId": 135,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"DataId": 2000770,
"Position": {
"X": -185.68707,
"Y": -0.13739014,
"Z": 694.6669
},
"TerritoryId": 135,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 2000771,
"Position": {
"X": -168.84113,
"Y": 1.9683228,
"Z": 659.327
},
"TerritoryId": 135,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1002456,
"Position": {
"X": -94.86542,
"Y": 2.3717625,
"Z": 734.2793
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1002238,
"Position": {
"X": 247.36401,
"Y": 14.02301,
"Z": 611.9325
},
"TerritoryId": 135,
"InteractionType": "Interact",
"AetheryteShortcut": "Lower La Noscea - Moraby Drydocks"
}
]
}
]
}

View File

@ -0,0 +1,61 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 41,
"Position": {
"X": 16.067688,
"Y": 40.787354,
"Z": 68.80286
},
"TerritoryId": 128,
"InteractionType": "AttuneAethernetShard"
},
{
"DataId": 52,
"Position": {
"X": 227.98499,
"Y": 115.526,
"Z": -257.0382
},
"StopDistance": 10,
"TerritoryId": 134,
"InteractionType": "AttuneAetheryte",
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Zephyr Gate (Middle La Noscea)"
]
},
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,37 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact",
"Comment": "All starting gear (except the hat) is ilvl 5 already"
}
]
}
]
}

View File

@ -0,0 +1,185 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": 200.59262,
"Y": 109.63514,
"Z": -268.2013
},
"TerritoryId": 134,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": 198.45822,
"Y": 101.082535,
"Z": -274.90256
},
"StopDistance": 3
},
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
-8
]
},
{
"DataId": 1002639,
"Position": {
"X": 197.16174,
"Y": 101.098366,
"Z": -273.57898
},
"StopDistance": 5,
"TerritoryId": 134,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_SUBSEA053_00465_Q4_000_1",
"Answer": "TEXT_SUBSEA053_00465_A4_000_2"
}
],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
8
]
},
{
"DataId": 1002638,
"Position": {
"X": 169.35986,
"Y": 93.96625,
"Z": -191.36346
},
"TerritoryId": 134,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_SUBSEA053_00465_Q3_000_1",
"Answer": "TEXT_SUBSEA053_00465_A3_000_1"
}
],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
]
},
{
"DataId": 1002637,
"Position": {
"X": 94.46863,
"Y": 66.13388,
"Z": -257.52655
},
"TerritoryId": 134,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_SUBSEA053_00465_Q2_000_1",
"Answer": "TEXT_SUBSEA053_00465_A2_000_1"
}
],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
},
{
"DataId": 1002636,
"Position": {
"X": 17.746216,
"Y": 60.791252,
"Z": -269.91687
},
"TerritoryId": 134,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_SUBSEA053_00465_Q1_000_1",
"Answer": "TEXT_SUBSEA053_00465_A1_000_1"
}
],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 1002635,
"Position": {
"X": 33.829224,
"Y": 54.646034,
"Z": -150.31665
},
"TerritoryId": 134,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,181 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1002640,
"Position": {
"X": 131.09021,
"Y": 45.70909,
"Z": 134.44714
},
"TerritoryId": 134,
"InteractionType": "Emote",
"Emote": "doubt"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"Position": {
"X": 189.7694,
"Y": 46.25815,
"Z": 121.13219
},
"TerritoryId": 134,
"InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
52
]
},
{
"DataId": 1002643,
"Position": {
"X": 194.44568,
"Y": 46.41682,
"Z": 119.21863
},
"TerritoryId": 134,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
},
{
"DataId": 1002642,
"Position": {
"X": 192.52307,
"Y": 46.299305,
"Z": 122.11792
},
"StopDistance": 7,
"TerritoryId": 134,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 1002641,
"Position": {
"X": 190.875,
"Y": 46.324783,
"Z": 118.30322
},
"StopDistance": 7,
"TerritoryId": 134,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1002640,
"Position": {
"X": 131.09021,
"Y": 45.70909,
"Z": 134.44714
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 2001279,
"Position": {
"X": 132.7992,
"Y": 45.76172,
"Z": 134.93542
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1002630,
"Position": {
"X": 179.85803,
"Y": 64.61002,
"Z": 294.75854
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"Position": {
"X": 205.08835,
"Y": 111.9045,
"Z": -245.44336
},
"TerritoryId": 134,
"InteractionType": "WalkTo",
"AetheryteShortcut": "Middle La Noscea - Summerford Farms"
},
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,129 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002627,
"Position": {
"X": 203.32642,
"Y": 111.72371,
"Z": -213.91626
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": 202.80931,
"Y": 111.89438,
"Z": -216.29411
},
"TerritoryId": 134,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": 192.77504,
"Y": 98.07924,
"Z": -211.47052
},
"StopDistance": 5
}
},
{
"DataId": 1002629,
"Position": {
"X": 52.750366,
"Y": 64.48143,
"Z": -185.71759
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2001239,
"Position": {
"X": -132.9519,
"Y": 45.365112,
"Z": -228.93109
},
"TerritoryId": 134,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
},
{
"DataId": 2001238,
"Position": {
"X": -121.78229,
"Y": 45.97534,
"Z": -210.83392
},
"TerritoryId": 134,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
],
"DisableNavmesh": true
},
{
"DataId": 2001237,
"Position": {
"X": -129.38129,
"Y": 46.67737,
"Z": -192.52313
},
"TerritoryId": 134,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"DisableNavmesh": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1002631,
"Position": {
"X": 0.045776367,
"Y": 57.85028,
"Z": -308.76636
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,90 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002631,
"Position": {
"X": 0.045776367,
"Y": 57.85028,
"Z": -308.76636
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -42.099247,
"Y": 54.599857,
"Z": -262.0961
},
"TerritoryId": 134,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"KillEnemyDataIds": [
348,
349
],
"Comment": "Kill Pirates/Raiders manually",
"$": "These flags don't exist, just want this step to not-finish",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1002631,
"Position": {
"X": 0.045776367,
"Y": 57.85028,
"Z": -308.76636
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"Position": {
"X": 205.08835,
"Y": 111.9045,
"Z": -245.44336
},
"TerritoryId": 134,
"InteractionType": "WalkTo",
"AetheryteShortcut": "Middle La Noscea - Summerford Farms"
},
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,144 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"TerritoryBlacklist": [
272
],
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1002633,
"Position": {
"X": 232.56274,
"Y": 113.07393,
"Z": -240.2533
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1002645,
"Position": {
"X": -144.27411,
"Y": 20.32,
"Z": -336.32416
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1002646,
"Position": {
"X": -58.762512,
"Y": 12.537111,
"Z": -410.94073
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1002647,
"Position": {
"X": -34.866882,
"Y": 10.902258,
"Z": -432.15082
},
"TerritoryId": 134,
"InteractionType": "SinglePlayerDuty"
}
]
},
{
"Sequence": 6,
"Steps": [
{
"Position": {
"X": 205.08835,
"Y": 111.9045,
"Z": -245.44336
},
"TerritoryId": 134,
"InteractionType": "WalkTo",
"AetheryteShortcut": "Middle La Noscea - Summerford Farms"
},
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 7,
"Steps": [
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] The Aftcastle"
]
}
]
}
]
}

View File

@ -0,0 +1,54 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"TerritoryBlacklist": [
252
],
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2001582,
"Position": {
"X": -58.640503,
"Y": 27.145752,
"Z": -141.7716
},
"TerritoryId": 134,
"InteractionType": "SinglePlayerDuty"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1002626,
"Position": {
"X": 207.2633,
"Y": 112.860374,
"Z": -222.43079
},
"TerritoryId": 134,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,99 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"TerritoryBlacklist": [
280
],
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -1.9166679,
"Y": 44.999886,
"Z": -256.1519
},
"TerritoryId": 128,
"InteractionType": "WalkTo",
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Marauders' Guild"
]
},
{
"DataId": 1003282,
"Position": {
"X": -3.03656,
"Y": 48.168007,
"Z": -261.70752
},
"StopDistance": 7,
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1003283,
"Position": {
"X": 668.0552,
"Y": 7.297715,
"Z": 533.1654
},
"TerritoryId": 138,
"InteractionType": "SinglePlayerDuty",
"AetheryteShortcut": "Western La Noscea - Swiftperch"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"Position": {
"X": -1.9166679,
"Y": 44.999886,
"Z": -256.1519
},
"TerritoryId": 128,
"InteractionType": "WalkTo",
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Marauders' Guild"
]
},
{
"DataId": 1003282,
"Position": {
"X": -3.03656,
"Y": 48.168007,
"Z": -261.70752
},
"StopDistance": 7,
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,123 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"TerritoryId": 128,
"InteractionType": "EquipItem",
"ItemId": 3760
},
{
"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": 1001029,
"Position": {
"X": 9.170593,
"Y": 20.999403,
"Z": -15.213318
},
"TerritoryId": 129,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 2001010,
"Position": {
"X": -0.015319824,
"Y": 1.449585,
"Z": 7.522644
},
"TerritoryId": 177,
"InteractionType": "Interact",
"TargetTerritoryId": 128
},
{
"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": 1001029,
"Position": {
"X": 9.170593,
"Y": 20.999403,
"Z": -15.213318
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 198,
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_MANSEA009_00545_Q1_000_1",
"Yes": true
}
]
},
{
"DataId": 1002694,
"Position": {
"X": -0.045776367,
"Y": 1.6001425,
"Z": -7.0039062
},
"TerritoryId": 198,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,410 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002694,
"Position": {
"X": -0.045776367,
"Y": 1.6001425,
"Z": -7.0039062
},
"TerritoryId": 198,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2001835,
"Position": {
"X": 0.0235393,
"Y": 2.330988,
"Z": 9.8216
},
"TerritoryId": 198,
"InteractionType": "Interact",
"TargetTerritoryId": 129
},
{
"DataId": 1003611,
"Position": {
"X": 9.781006,
"Y": 20.999247,
"Z": 15.0911255
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 128,
"DialogueChoices": [
{
"Type": "List",
"ExcelSheet": "Warp",
"Prompt": null,
"Answer": 131093
}
]
},
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1003597,
"Position": {
"X": 8.194031,
"Y": 39.999973,
"Z": 17.746216
},
"TerritoryId": 128,
"InteractionType": "Interact",
"TargetTerritoryId": 128,
"DialogueChoices": [
{
"Type": "List",
"ExcelSheet": "Warp",
"Prompt": null,
"Answer": 131092
}
]
},
{
"DataId": 1002695,
"Position": {
"X": -25.92511,
"Y": 91.999954,
"Z": -3.6774292
},
"TerritoryId": 128,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_MANSEA200_00546_Q1_000_1",
"Yes": true
}
]
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 2001668,
"Position": {
"X": -11.10527,
"Y": 92.04318,
"Z": 17.18466
},
"TerritoryId": 128,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_MANSEA200_00546_Q3_000_1",
"Yes": true
}
]
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1000109,
"Position": {
"X": 29.770264,
"Y": -19.000002,
"Z": 114.12219
},
"TerritoryId": 132,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_MANSEA200_00546_Q7_000_1",
"Yes": true
}
],
"Comment": "Gridania Arrivals Attendant"
},
{
"DataId": 1002830,
"Position": {
"X": 36.63684,
"Y": -18.800003,
"Z": 89.64673
},
"TerritoryId": 132,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 2,
"Position": {
"X": 32.913696,
"Y": 2.670288,
"Z": 30.014404
},
"StopDistance": 10,
"TerritoryId": 132,
"InteractionType": "AttuneAetheryte"
},
{
"DataId": 25,
"Position": {
"X": 166.58276,
"Y": -1.7243042,
"Z": 86.13721
},
"TerritoryId": 132,
"InteractionType": "AttuneAethernetShard",
"Comment": "Archers' Guild"
},
{
"Position": {
"X": 12.761639,
"Y": 1.2659149,
"Z": -18.021421
},
"TerritoryId": 132,
"InteractionType": "WalkTo",
"TargetTerritoryId": 133,
"AethernetShortcut": [
"[Gridania] Archers' Guild",
"[Gridania] Aetheryte Plaza"
]
},
{
"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": 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": 1000460,
"Position": {
"X": -159.41101,
"Y": 4.054107,
"Z": -4.1047363
},
"TerritoryId": 133,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 6,
"Steps": [
{
"DataId": 1000106,
"Position": {
"X": 29.007324,
"Y": -19.000002,
"Z": 105.485596
},
"TerritoryId": 132,
"InteractionType": "Interact",
"AethernetShortcut": [
"[Gridania] Conjurers' Guild",
"[Gridania] Airship Landing"
],
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_MANSEA200_00546_Q5_000_1",
"Yes": true
}
]
}
]
},
{
"Sequence": 7,
"Steps": [
{
"DataId": 2001671,
"Position": {
"X": 7.156433,
"Y": -21.957764,
"Z": 123.73535
},
"TerritoryId": 132,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_MANSEA200_00546_Q3_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_MANSEA200_00546_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"
}
]
}
]
}

View File

@ -0,0 +1,171 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"$": "This is the follow-up quest for both Lominsan Envoy & Gridanian Envoy (Ul'dahn Envoy has a quest with the same name, but different id)",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1001821,
"Position": {
"X": -24.124573,
"Y": 38.000004,
"Z": 85.31323
},
"TerritoryId": 131,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 37,
"Position": {
"X": -98.22869,
"Y": 42.37336,
"Z": 88.46719
},
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
"Comment": "Alchemists' Guild"
},
{
"Position": {
"X": 5.7796226,
"Y": 30,
"Z": -21.571625
},
"TerritoryId": 131,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": 3.6504946,
"Y": 14.688499,
"Z": -13.443354
},
"StopDistance": 5
},
"AethernetShortcut": [
"[Ul'dah] Alchemists' Guild",
"[Ul'dah] The Chamber of Rule"
]
},
{
"DataId": 35,
"Position": {
"X": -53.8269,
"Y": 10.72502,
"Z": 12.24082
},
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
"Comment": "Gladiators' Guild"
},
{
"DataId": 50,
"Position": {
"X": -19.31449,
"Y": 14.63075,
"Z": 72.0533
},
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
"Comment": "Goldsmiths' Guild"
},
{
"DataId": 36,
"Position": {
"X": 33.52188,
"Y": 13.23228,
"Z": 113.2191
},
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
"Comment": "Miners' Guild"
},
{
"DataId": 47,
"Position": {
"X": 89.67633,
"Y": 12.93493,
"Z": 58.2767
},
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
"Comment": "Weavers' Guild"
},
{
"DataId": 125,
"Position": {
"X": 131.9447,
"Y": 4.714966,
"Z": -29.800903
},
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
"Comment": "Sapphire Avenue Exchange"
},
{
"Position": {
"X": 88.335236,
"Y": 4,
"Z": -110.905876
},
"TerritoryId": 131,
"InteractionType": "WalkTo",
"TargetTerritoryId": 130
},
{
"DataId": 33,
"Position": {
"X": 64.22522,
"Y": 4.5318604,
"Z": -115.31244
},
"TerritoryId": 130,
"InteractionType": "AttuneAethernetShard",
"Comment": "Adventurers' Guild"
},
{
"DataId": 9,
"Position": {
"X": -144.51825,
"Y": -1.3580933,
"Z": -169.6651
},
"StopDistance": 10,
"TerritoryId": 130,
"InteractionType": "AttuneAetheryte"
},
{
"DataId": 34,
"Position": {
"X": -154.83331,
"Y": 14.633362,
"Z": 73.07532
},
"TerritoryId": 130,
"InteractionType": "AttuneAethernetShard"
},
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] The Aftcastle"
]
}
]
}
]
}

View File

@ -0,0 +1,41 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002237,
"Position": {
"X": 167.55933,
"Y": 14.095915,
"Z": 683.92444
},
"TerritoryId": 135,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] The Aftcastle"
]
}
]
}
]
}

View File

@ -0,0 +1,109 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1003282,
"Position": {
"X": -3.03656,
"Y": 48.168007,
"Z": -261.70752
},
"StopDistance": 7,
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact",
"AethernetShortcut": [
"[Limsa Lominsa] Marauders' Guild",
"[Limsa Lominsa] The Aftcastle"
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"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": 1003355,
"Position": {
"X": -60.868286,
"Y": 18.000334,
"Z": 7.4921875
},
"TerritoryId": 129,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1003611,
"Position": {
"X": 9.781006,
"Y": 20.999247,
"Z": 15.0911255
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 128,
"DialogueChoices": [
{
"Type": "List",
"ExcelSheet": "Warp",
"Prompt": null,
"Answer": 131093
}
]
},
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,166 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"TerritoryBlacklist": [
1036
],
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1005411,
"Position": {
"X": 13.412659,
"Y": 40.2,
"Z": -13.260071
},
"TerritoryId": 128,
"InteractionType": "Interact",
"Comment": "Accepting 'Rising to the Challenge'"
},
{
"DataId": 1003598,
"Position": {
"X": -12.069946,
"Y": 40.00053,
"Z": 11.459534
},
"TerritoryId": 128,
"InteractionType": "Interact",
"Comment": "'Rising to the Challenge'"
},
{
"DataId": 1005410,
"Position": {
"X": -182.45215,
"Y": 1.9999955,
"Z": 208.75867
},
"TerritoryId": 129,
"InteractionType": "Interact",
"Comment": "'Rising to the Challenge'",
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Fishermens' Guild"
]
},
{
"DataId": 1003621,
"Position": {
"X": -192.0653,
"Y": 0.9999907,
"Z": 208.66711
},
"TerritoryId": 129,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1000868,
"Position": {
"X": -192.00433,
"Y": 0.9999907,
"Z": 211.68835
},
"TerritoryId": 129,
"InteractionType": "Interact",
"TargetTerritoryId": 138,
"DialogueChoices": [
{
"Type": "List",
"ExcelSheet": "Warp",
"Prompt": null,
"Answer": 131109
}
]
},
{
"DataId": 14,
"Position": {
"X": 260.94446,
"Y": -19.60791,
"Z": 218.52441
},
"StopDistance": 10,
"TerritoryId": 138,
"InteractionType": "AttuneAetheryte"
},
{
"DataId": 1017075,
"Position": {
"X": 356.5575,
"Y": -15.97664,
"Z": 136.73608
},
"TerritoryId": 138,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1004472,
"Position": {
"X": 335.40857,
"Y": 9.635179,
"Z": 17.135864
},
"TerritoryId": 138,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"TerritoryId": 138,
"InteractionType": "Duty",
"ContentFinderConditionId": 4
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] The Aftcastle"
]
}
]
}
]
}

View File

@ -0,0 +1,110 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1005116,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1001426,
"Position": {
"X": 123.33862,
"Y": 30.999996,
"Z": -384.9394
},
"TerritoryId": 141,
"InteractionType": "Interact",
"Comment": "'Forging the Spirit'"
},
{
"DataId": 1001426,
"Position": {
"X": 123.33862,
"Y": 30.999996,
"Z": -384.9394
},
"TerritoryId": 141,
"InteractionType": "Interact",
"Comment": "Quest Turn-In 'Forging the Spirit'"
},
{
"DataId": 1001425,
"Position": {
"X": 115.12927,
"Y": 31.876099,
"Z": -392.2027
},
"TerritoryId": 141,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"TerritoryId": 145,
"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": 2001715,
"Position": {
"X": 23.23944,
"Y": 2.090454,
"Z": -0.015319824
},
"TerritoryId": 212,
"InteractionType": "Interact",
"TargetTerritoryId": 212
},
{
"DataId": 1005116,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,139 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"TerritoryBlacklist": [
275,
1045
],
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1005116,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1004584,
"Position": {
"X": -360.83014,
"Y": -55.35,
"Z": 145.49475
},
"TerritoryId": 145,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2001592,
"Position": {
"X": -356.71014,
"Y": -10.421997,
"Z": -242.51166
},
"TerritoryId": 145,
"InteractionType": "SinglePlayerDuty"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1005017,
"Position": {
"X": -63.157104,
"Y": -25.215523,
"Z": -554.6502
},
"TerritoryId": 146,
"InteractionType": "Interact",
"DisableNavmesh": true,
"$": "Fun fact: This is underground in Southern Thanalan (including mobs, fates, etc.), and will build the navmesh for the entire zone"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"TerritoryId": 146,
"InteractionType": "Duty",
"ContentFinderConditionId": 56
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1005156,
"Position": {
"X": -372.73218,
"Y": -57.07999,
"Z": 151.04907
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"TerritoryId": 145,
"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"
}
]
}
]
}

View File

@ -0,0 +1,63 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1001353,
"Position": {
"X": 21.072632,
"Y": 7.45,
"Z": -78.78235
},
"TerritoryId": 130,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1004603,
"Position": {
"X": -489.8299,
"Y": 21.48999,
"Z": -381.97913
},
"TerritoryId": 140,
"InteractionType": "Interact",
"AetheryteShortcut": "Western Thanalan - Horizon"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"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"
}
]
}
]
}

View File

@ -0,0 +1,94 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1003783,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"StopDistance": 5,
"TerritoryId": 212,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_MANFST207_00510_Q1_000_1",
"Answer": "TEXT_MANFST207_00510_A1_000_1"
}
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1005119,
"Position": {
"X": 33.37146,
"Y": 1.1999971,
"Z": 6.454529
},
"TerritoryId": 212,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 53,
"Position": {
"X": -16.159302,
"Y": 0.32037354,
"Z": -166.58276
},
"TerritoryId": 141,
"InteractionType": "AttuneAetheryte",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gate of Nald (Central Thanalan)"
]
},
{
"Position": {
"X": 454.0109,
"Y": -17.999832,
"Z": -183.1808
},
"TerritoryId": 141,
"InteractionType": "WalkTo",
"TargetTerritoryId": 145
},
{
"DataId": 18,
"Position": {
"X": -386.3432,
"Y": -57.1756,
"Z": 142.59558
},
"TerritoryId": 145,
"InteractionType": "AttuneAetheryte"
},
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,189 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1005116,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2001717,
"Position": {
"X": 25.497803,
"Y": 2.090454,
"Z": -0.015319824
},
"TerritoryId": 212,
"InteractionType": "Interact",
"TargetTerritoryId": 212
},
{
"DataId": 2001716,
"Position": {
"X": -15.701599,
"Y": 1.083313,
"Z": -0.015319824
},
"TerritoryId": 212,
"InteractionType": "Interact",
"TargetTerritoryId": 140
},
{
"DataId": 1003785,
"Position": {
"X": -489.8299,
"Y": 21.48999,
"Z": -381.97913
},
"TerritoryId": 140,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2001691,
"Position": {
"X": -5.294922,
"Y": 29.984009,
"Z": 20.675903
},
"TerritoryId": 131,
"InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] The Chamber of Rule"
],
"$.0": "QuestVariables if done first: 16 1 0 64 0 0",
"CompletionQuestVariablesFlags": [
null,
null,
null,
64,
null,
null
]
},
{
"DataId": 1001029,
"Position": {
"X": 9.170593,
"Y": 20.999403,
"Z": -15.213318
},
"TerritoryId": 129,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_MANFST300_00511_Q1_000_1",
"Yes": true
}
],
"$.0": "QuestVariables if done after Ul'dah: 33 1 0 96 0 0",
"CompletionQuestVariablesFlags": [
null,
null,
null,
32,
null,
null
]
},
{
"DataId": 2001690,
"Position": {
"X": -49.759705,
"Y": 7.003784,
"Z": -114.82416
},
"TerritoryId": 133,
"InteractionType": "Interact",
"AetheryteShortcut": "Gridania",
"AethernetShortcut": [
"[Gridania] Aetheryte Plaza",
"[Gridania] Mih Khetto's Amphitheatre"
],
"CompletionQuestVariablesFlags": [
null,
null,
null,
128,
null,
null
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"TerritoryId": 145,
"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": 2001715,
"Position": {
"X": 23.23944,
"Y": 2.090454,
"Z": -0.015319824
},
"TerritoryId": 212,
"InteractionType": "Interact",
"TargetTerritoryId": 212
},
{
"DataId": 1005122,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,37 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1005128,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1000168,
"Position": {
"X": -75.48645,
"Y": -0.5013741,
"Z": -5.081299
},
"TerritoryId": 132,
"InteractionType": "Interact",
"AetheryteShortcut": "Gridania"
}
]
}
]
}

View File

@ -0,0 +1,233 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"TerritoryId": 145,
"InteractionType": "EquipItem",
"ItemId": 2995
},
{
"TerritoryId": 145,
"InteractionType": "EquipItem",
"ItemId": 3306
},
{
"DataId": 1004327,
"Position": {
"X": -412.03937,
"Y": -48.15,
"Z": 102.61682
},
"TerritoryId": 145,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
},
{
"Position": {
"X": -409.44067,
"Y": -48.15,
"Z": 101.391624
},
"TerritoryId": 145,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": -408.8825,
"Y": -55.764168,
"Z": 110.76053
},
"StopDistance": 5
},
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
-16
]
},
{
"DataId": 1004506,
"Position": {
"X": -416.64764,
"Y": -54.15,
"Z": 96.42175
},
"TerritoryId": 145,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
]
},
{
"DataId": 1004325,
"Position": {
"X": -402.45673,
"Y": -57.07999,
"Z": 131.82263
},
"TerritoryId": 145,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 1004556,
"Position": {
"X": -394.85773,
"Y": -57.30005,
"Z": 173.32715
},
"TerritoryId": 145,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
8
]
},
{
"DataId": 1003947,
"Position": {
"X": -369.19202,
"Y": -57.079987,
"Z": 140.0625
},
"TerritoryId": 145,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1004324,
"Position": {
"X": -377.6761,
"Y": -55.754112,
"Z": 108.17114
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1004330,
"Position": {
"X": -221.45422,
"Y": -30.074055,
"Z": 200.15259
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"TerritoryId": 145,
"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": 2001715,
"Position": {
"X": 23.23944,
"Y": 2.090454,
"Z": -0.015319824
},
"TerritoryId": 212,
"InteractionType": "Interact",
"TargetTerritoryId": 212
},
{
"DataId": 1005116,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,111 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -338.71124,
"Y": -37.497707,
"Z": 243.90338
},
"TerritoryId": 145,
"InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
166
]
},
{
"DataId": 1003943,
"Position": {
"X": -335.1645,
"Y": -37.195824,
"Z": 242.20642
},
"StopDistance": 7,
"TerritoryId": 145,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 1003944,
"Position": {
"X": -335.71375,
"Y": -37.370598,
"Z": 245.31921
},
"StopDistance": 7,
"TerritoryId": 145,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
},
{
"DataId": 1003942,
"Position": {
"X": -341.81738,
"Y": -37.60504,
"Z": 243.42712
},
"StopDistance": 7,
"TerritoryId": 145,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,127 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1003964,
"Position": {
"X": -378.53058,
"Y": -59.3,
"Z": 164.23279
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1003967,
"Position": {
"X": -392.87408,
"Y": -59,
"Z": 131.67004
},
"TerritoryId": 145,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
},
{
"DataId": 1003966,
"Position": {
"X": -373.22046,
"Y": -56.798405,
"Z": 121.99585
},
"TerritoryId": 145,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 1003965,
"Position": {
"X": -373.89185,
"Y": -55.898407,
"Z": 97.795044
},
"StopDistance": 7,
"TerritoryId": 145,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1003964,
"Position": {
"X": -378.53058,
"Y": -59.3,
"Z": 164.23279
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,112 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1005136,
"Position": {
"X": -522.20953,
"Y": -17.077162,
"Z": 18.966919
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2001657,
"Position": {
"X": -541.16125,
"Y": -5.2644043,
"Z": 46.097534
},
"TerritoryId": 145,
"InteractionType": "UseItem",
"ItemId": 2000517
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 2001658,
"Position": {
"X": -541.1918,
"Y": -5.1728516,
"Z": 46.036377
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1005136,
"Position": {
"X": -522.20953,
"Y": -17.077162,
"Z": 18.966919
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1003969,
"Position": {
"X": -504.9363,
"Y": -16.22,
"Z": -3.7080078
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,81 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1003976,
"Position": {
"X": -549.0349,
"Y": 4.824463,
"Z": -266.77356
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"Position": {
"X": -421.59717,
"Y": -0.48849356,
"Z": -278.41507
},
"TerritoryId": 145,
"InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
18,
19
]
},
{
"DataId": 1003975,
"Position": {
"X": -418.57025,
"Y": -0.17093202,
"Z": -280.38452
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone"
}
]
}
]
}

View File

@ -0,0 +1,112 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1003977,
"Position": {
"X": -200.27472,
"Y": -28.350327,
"Z": 324.75757
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2001410,
"Position": {
"X": -95.17059,
"Y": -27.023743,
"Z": 274.00623
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1003977,
"Position": {
"X": -200.27472,
"Y": -28.350327,
"Z": 324.75757
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1004323,
"Position": {
"X": -444.72424,
"Y": -55.558167,
"Z": 92.088135
},
"TerritoryId": 145,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone"
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1003978,
"Position": {
"X": -442.6795,
"Y": -55.694504,
"Z": 90.92847
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1003929,
"Position": {
"X": -378.65265,
"Y": -55.75492,
"Z": 106.79785
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,114 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"TerritoryBlacklist": [
1038,
274
],
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1001353,
"Position": {
"X": 21.072632,
"Y": 7.45,
"Z": -78.78235
},
"TerritoryId": 130,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1004621,
"Position": {
"X": 23.11737,
"Y": 6.9999914,
"Z": -86.533936
},
"TerritoryId": 130,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 17,
"Position": {
"X": 68.0094,
"Y": 48.203125,
"Z": -227.039
},
"TerritoryId": 140,
"InteractionType": "AttuneAetheryte",
"AethernetShortcut": [
"[Ul'dah] Adventurers' Guild",
"[Ul'dah] Gate of the Sultana (Western Thanalan)"
]
},
{
"DataId": 1002285,
"Position": {
"X": 326.46667,
"Y": 63,
"Z": -231.64728
},
"TerritoryId": 140,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"TerritoryId": 140,
"InteractionType": "Duty",
"ContentFinderConditionId": 3
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1004621,
"Position": {
"X": 23.11737,
"Y": 6.9999914,
"Z": -86.533936
},
"TerritoryId": 130,
"InteractionType": "SinglePlayerDuty",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Adventurers' Guild"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1001353,
"Position": {
"X": 21.072632,
"Y": 7.45,
"Z": -78.78235
},
"TerritoryId": 130,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,74 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1000972,
"Position": {
"X": 20.279175,
"Y": 40.19993,
"Z": -6.1189575
},
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1003597,
"Position": {
"X": 8.194031,
"Y": 39.999973,
"Z": 17.746216
},
"TerritoryId": 128,
"InteractionType": "Interact",
"TargetTerritoryId": 128,
"DialogueChoices": [
{
"Type": "List",
"ExcelSheet": "Warp",
"Prompt": null,
"Answer": 131092
}
]
},
{
"DataId": 1002695,
"Position": {
"X": -25.92511,
"Y": 91.999954,
"Z": -3.6774292
},
"TerritoryId": 128,
"InteractionType": "Interact",
"TargetTerritoryId": 132,
"DialogueChoices": [
{
"Type": "List",
"ExcelSheet": "Warp",
"Prompt": null,
"Answer": 131106
}
]
},
{
"DataId": 1000100,
"Position": {
"X": 23.819275,
"Y": -8,
"Z": 115.92273
},
"TerritoryId": 132,
"InteractionType": "Interact"
}
]
}
]
}

View File

@ -0,0 +1,80 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"TerritoryBlacklist": [
1037
],
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1000100,
"Position": {
"X": 23.819275,
"Y": -8,
"Z": 115.92273
},
"TerritoryId": 132,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 1,
"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": 1004612,
"Position": {
"X": -114.94629,
"Y": -39.702168,
"Z": 335.46948
},
"TerritoryId": 148,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"TerritoryId": 148,
"InteractionType": "Duty",
"ContentFinderConditionId": 2
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1000100,
"Position": {
"X": 23.819275,
"Y": -8,
"Z": 115.92273
},
"TerritoryId": 132,
"InteractionType": "Interact",
"AetheryteShortcut": "Gridania"
}
]
}
]
}

View File

@ -0,0 +1,41 @@
{
"$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": 1001353,
"Position": {
"X": 21.072632,
"Y": 7.45,
"Z": -78.78235
},
"TerritoryId": 130,
"InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Adventurers' Guild"
]
}
]
}
]
}

View File

@ -0,0 +1,79 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [],
"Comment": "Quest start is intentionally empty, so you pick a Grand Company"
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1002388,
"Position": {
"X": 95.68933,
"Y": 40.250286,
"Z": 74.54028
},
"StopDistance": 5,
"TerritoryId": 128,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] The Aftcastle"
],
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_MANSEA302_00681_Q2_000_1",
"Answer": "TEXT_MANSEA302_00681_A2_000_2"
}
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1004888,
"Position": {
"X": 389.2423,
"Y": 78.360275,
"Z": -349.05017
},
"TerritoryId": 135,
"InteractionType": "SinglePlayerDuty",
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Tempest Gate (Lower La Noscea)"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1002388,
"Position": {
"X": 95.68933,
"Y": 40.250286,
"Z": 74.54028
},
"StopDistance": 5,
"TerritoryId": 128,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] The Aftcastle"
]
}
]
}
]
}

View File

@ -0,0 +1,63 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002388,
"Position": {
"X": 95.68933,
"Y": 40.250286,
"Z": 74.54028
},
"StopDistance": 5,
"TerritoryId": 128,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"TerritoryId": 145,
"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"
}
]
}
]
}

View File

View File

@ -32,7 +32,7 @@
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Arcanist's Guild"
"[Limsa Lominsa] Arcanists' Guild"
]
}
]

View File

@ -72,6 +72,27 @@
{
"Sequence": 255,
"Steps": [
{
"Position": {
"X": -601.1813,
"Y": -24.48022,
"Z": 633.1958
},
"TerritoryId": 956,
"InteractionType": "WalkTo",
"Comment": "Avoids aggro + possible navmesh issue",
"Mount": true
},
{
"Position": {
"X": -596.4733,
"Y": -22.860794,
"Z": 666.64417
},
"TerritoryId": 956,
"InteractionType": "WalkTo",
"Comment": "Avoids aggro + possible navmesh issue"
},
{
"DataId": 2011985,
"Position": {

View File

@ -10,6 +10,12 @@
<PathMap Condition="$(SolutionDir) != ''">$(SolutionDir)=X:\</PathMap>
</PropertyGroup>
<Target Name="ZipARealmReborn" BeforeTargets="BeforeResGen" Condition="'$(Configuration)' == 'Release'">
<ZipDirectory SourceDirectory="$(ProjectDir)\ARealmReborn"
DestinationFile="$(TargetDir)\ARealmReborn.zip"
Overwrite="true"/>
</Target>
<Target Name="ZipShadowbringers" BeforeTargets="BeforeResGen" Condition="'$(Configuration)' == 'Release'">
<ZipDirectory SourceDirectory="$(ProjectDir)\Shadowbringers"
DestinationFile="$(TargetDir)\Shadowbringers.zip"
@ -23,6 +29,7 @@
</Target>
<ItemGroup Condition="'$(Configuration)' == 'Release'">
<EmbeddedResource Include="$(TargetDir)\ARealmReborn.zip"/>
<EmbeddedResource Include="$(TargetDir)\Shadowbringers.zip"/>
<EmbeddedResource Include="$(TargetDir)\Endwalker.zip"/>
</ItemGroup>

29
QuestPaths/README.md Normal file
View File

@ -0,0 +1,29 @@
# Quest Paths
## Folder Structure
Generally, the folder name is derived from SE's classification of quests.
### A Realm Reborn
- `MSQ-1`: All Starting Cities quests up to `Sylph-management`
- Limsa: `ManSea[...]`
- Gridania: `ManFst[...]`, also includes some latter quests (e.g. Ifrit)
- Ul'dah: `ManWil[...]`
- Generally, each starting class quest should be in its own city folder, with all shared quests in the `Shared`
folder
- `MSQ-2`: All quests from `We Come in Peace` until the end of ARR (incl. patches)
- original quests: `GaiUs@[...]`, with `@` being the letter used as part of the folder name
- reworked quests: `Xx[...]`, updated in 5.3 probabbly → see original quest
### Heavensward
### Stormblood
### Shadowbringers
- `MSQ`: `LucKm@` with `@` being the letter used as part of the folder name
### Endwalker
- `MSQ`: `AktKm@` with `@` being the letter used as part of the folder name

View File

@ -62,7 +62,7 @@
"InteractionType": "Interact",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Marauder's Guild"
"[Limsa Lominsa] Marauders' Guild"
],
"$.1": "QuestVariables if done first: 1 0 0 0 0 128"
},
@ -77,7 +77,7 @@
"TerritoryId": 128,
"InteractionType": "Interact",
"AethernetShortcut": [
"[Limsa Lominsa] Marauder's Guild",
"[Limsa Lominsa] Marauders' Guild",
"[Limsa Lominsa] The Aftcastle"
]
}

View File

@ -33,7 +33,7 @@
"AetheryteShortcut": "Gridania",
"AethernetShortcut": [
"[Gridania] Aetheryte Plaza",
"[Gridania] Lancer's Guild"
"[Gridania] Lancers' Guild"
]
}
]
@ -70,7 +70,7 @@
"AetheryteShortcut": "Gridania",
"AethernetShortcut": [
"[Gridania] Aetheryte Plaza",
"[Gridania] Conjurer's Guild"
"[Gridania] Conjurers' Guild"
]
}
]

View File

@ -502,6 +502,25 @@
]
}
},
{
"if": {
"properties": {
"InteractionType": {
"const": "UseItem"
},
"ItemId": {
"not": {
"const": 30362
}
}
}
},
"then": {
"required": [
"Position"
]
}
},
{
"if": {
"properties": {
@ -521,7 +540,6 @@
}
},
"required": [
"Position",
"ItemId"
]
}

View File

@ -2,12 +2,14 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using Dalamud.Game.Addon.Lifecycle;
using Dalamud.Game.Addon.Lifecycle.AddonArgTypes;
using Dalamud.Game.ClientState.Objects;
using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Client.UI;
using FFXIVClientStructs.FFXIV.Component.GUI;
using LLib;
using LLib.GameUI;
using Lumina.Excel.GeneratedSheets;
using Microsoft.Extensions.Logging;
@ -26,9 +28,10 @@ internal sealed class GameUiController : IDisposable
private readonly IGameGui _gameGui;
private readonly ITargetManager _targetManager;
private readonly ILogger<GameUiController> _logger;
private readonly Regex _returnRegex;
public GameUiController(IAddonLifecycle addonLifecycle, IDataManager dataManager, GameFunctions gameFunctions,
QuestController questController, IGameGui gameGui, ITargetManager targetManager,
QuestController questController, IGameGui gameGui, ITargetManager targetManager, IPluginLog pluginLog,
ILogger<GameUiController> logger)
{
_addonLifecycle = addonLifecycle;
@ -39,12 +42,16 @@ internal sealed class GameUiController : IDisposable
_targetManager = targetManager;
_logger = logger;
_returnRegex = _dataManager.GetExcelSheet<Addon>()!.GetRow(196)!.GetRegex(addon => addon.Text, pluginLog)!;
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectString", SelectStringPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "CutSceneSelectString", CutsceneSelectStringPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectIconString", SelectIconStringPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "Credit", CreditPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "AkatsukiNote", UnendingCodexPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "ContentsTutorial", ContentsTutorialPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "MultipleHelpWindow", MultipleHelpWindowPostSetup);
}
internal unsafe void HandleCurrentDialogueChoices()
@ -96,11 +103,7 @@ internal sealed class GameUiController : IDisposable
int? answer = HandleListChoice(actualPrompt, answers, checkAllSteps);
if (answer != null)
{
if (!checkAllSteps)
_questController.IncreaseDialogueChoicesSelected();
addonSelectString->AtkUnitBase.FireCallbackInt(answer.Value);
}
}
private unsafe void CutsceneSelectStringPostSetup(AddonEvent type, AddonArgs args)
@ -122,11 +125,7 @@ internal sealed class GameUiController : IDisposable
int? answer = HandleListChoice(actualPrompt, answers, checkAllSteps);
if (answer != null)
{
if (!checkAllSteps)
_questController.IncreaseDialogueChoicesSelected();
addonCutSceneSelectString->AtkUnitBase.FireCallbackInt(answer.Value);
}
}
private unsafe void SelectIconStringPostSetup(AddonEvent type, AddonArgs args)
@ -148,9 +147,19 @@ internal sealed class GameUiController : IDisposable
int? answer = HandleListChoice(actualPrompt, answers, checkAllSteps);
if (answer != null)
{
if (!checkAllSteps)
_questController.IncreaseDialogueChoicesSelected();
addonSelectIconString->AtkUnitBase.FireCallbackInt(answer.Value);
return;
}
var currentQuest = _questController.CurrentQuest;
if (currentQuest != null && actualPrompt == null)
{
// it is possible for this to be a quest selection
string questName = currentQuest.Quest.Name;
int questSelection = answers.FindIndex(x => GameStringEquals(questName, x));
if (questSelection >= 0)
addonSelectIconString->AtkUnitBase.FireCallbackInt(questSelection);
return;
}
}
@ -298,8 +307,6 @@ internal sealed class GameUiController : IDisposable
}
addonSelectYesno->AtkUnitBase.FireCallbackInt(dialogueChoice.Yes ? 0 : 1);
if (!checkAllSteps)
_questController.IncreaseDialogueChoicesSelected();
return true;
}
@ -309,6 +316,13 @@ internal sealed class GameUiController : IDisposable
private unsafe void HandleTravelYesNo(AddonSelectYesno* addonSelectYesno,
QuestController.QuestProgress currentQuest, string actualPrompt)
{
if (_gameFunctions.ReturnRequestedAt >= DateTime.Now.AddSeconds(-2) && _returnRegex.IsMatch(actualPrompt))
{
_logger.LogInformation("Automatically confirming return...");
addonSelectYesno->AtkUnitBase.FireCallbackInt(0);
return;
}
// this can be triggered either manually (in which case we should increase the step counter), or automatically
// (in which case it is ~1 frame later, and the step counter has already been increased)
var sequence = currentQuest.Quest.FindSequence(currentQuest.Sequence);
@ -339,8 +353,7 @@ internal sealed class GameUiController : IDisposable
}
var warps = _dataManager.GetExcelSheet<Warp>()!
.Where(x => x.RowId > 0 && x.TerritoryType.Row == step.TargetTerritoryId)
.Where(x => x.ConfirmEvent.Row == 0); // unsure if this is needed
.Where(x => x.RowId > 0 && x.TerritoryType.Row == step.TargetTerritoryId);
foreach (var entry in warps)
{
string? excelPrompt = entry.Question?.ToString();
@ -375,6 +388,29 @@ internal sealed class GameUiController : IDisposable
}
}
private unsafe void ContentsTutorialPostSetup(AddonEvent type, AddonArgs args)
{
if (_questController.CurrentQuest?.Quest.QuestId == 245)
{
// TODO Test this
_logger.LogInformation("Closing ContentsTutorial");
AtkUnitBase* addon = (AtkUnitBase*)args.Addon;
//addon->FireCallbackInt(-2);
addon->FireCallbackInt(13);
}
}
private unsafe void MultipleHelpWindowPostSetup(AddonEvent type, AddonArgs args)
{
if (_questController.CurrentQuest?.Quest.QuestId == 245)
{
_logger.LogInformation("Closing MultipleHelpWindow");
AtkUnitBase* addon = (AtkUnitBase*)args.Addon;
addon->FireCallbackInt(-2);
addon->FireCallbackInt(-1);
}
}
/// <summary>
/// Ensures characters like '-' are handled equally in both strings.
/// </summary>
@ -404,6 +440,8 @@ internal sealed class GameUiController : IDisposable
public void Dispose()
{
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "MultipleHelpWindow", MultipleHelpWindowPostSetup);
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "ContentsTutorial", ContentsTutorialPostSetup);
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "AkatsukiNote", UnendingCodexPostSetup);
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "Credit", CreditPostSetup);
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup);

View File

@ -75,27 +75,6 @@ internal sealed class MovementController : IDisposable
}
}
}
else if (!Destination.IsFlying && !_condition[ConditionFlag.Mounted] && navPoints.Count > 0 &&
!_gameFunctions.HasStatusPreventingSprintOrMount(true) && Destination.CanSprint)
{
float actualDistance = 0;
foreach (Vector3 end in navPoints)
{
actualDistance += (start - end).Length();
start = end;
}
unsafe
{
// 70 is ~10 seconds of sprint
if (actualDistance > 100f &&
ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 4) == 0)
{
_logger.LogInformation("Triggering Sprint");
ActionManager.Instance()->UseAction(ActionType.GeneralAction, 4);
}
}
}
_navmeshIpc.MoveTo(navPoints, Destination.IsFlying);
MovementStartedAt = DateTime.Now;
@ -177,6 +156,32 @@ internal sealed class MovementController : IDisposable
else
Stop();
}
else if (!Destination.IsFlying && !_condition[ConditionFlag.Mounted] &&
!_gameFunctions.HasStatusPreventingSprint() && Destination.CanSprint)
{
List<Vector3> navPoints = _navmeshIpc.GetWaypoints();
Vector3? start = _clientState.LocalPlayer?.Position;
if (start != null)
{
float actualDistance = 0;
foreach (Vector3 end in navPoints)
{
actualDistance += (start.Value - end).Length();
start = end;
}
unsafe
{
// 70 is ~10 seconds of sprint
if (actualDistance > 100f &&
ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 4) == 0)
{
_logger.LogInformation("Triggering Sprint");
ActionManager.Instance()->UseAction(ActionType.GeneralAction, 4);
}
}
}
}
}
}

View File

@ -32,6 +32,8 @@ internal sealed class QuestController
private readonly Configuration _configuration;
private readonly IReadOnlyList<ITaskFactory> _taskFactories;
private readonly object _lock = new();
private readonly Queue<ITask> _taskQueue = new();
private ITask? _currentTask;
private bool _automatic;
@ -63,10 +65,13 @@ internal sealed class QuestController
public void Reload()
{
CurrentQuest = null;
DebugState = null;
lock (_lock)
{
CurrentQuest = null;
DebugState = null;
_questRegistry.Reload();
_questRegistry.Reload();
}
}
public void Update()
@ -88,11 +93,14 @@ internal sealed class QuestController
&& CurrentQuest is { Sequence: 0, Step: 0 } or { Sequence: 0, Step: 255 }
&& DateTime.Now >= CurrentQuest.StepProgress.StartedAt.AddSeconds(15))
{
_logger.LogWarning("Quest accept apparently didn't work out, resetting progress");
CurrentQuest = CurrentQuest with
lock (_lock)
{
Step = 0
};
_logger.LogWarning("Quest accept apparently didn't work out, resetting progress");
CurrentQuest = CurrentQuest with
{
Step = 0
};
}
ExecuteNextStep(true);
return;
@ -103,103 +111,106 @@ internal sealed class QuestController
private void UpdateCurrentQuest()
{
DebugState = null;
(ushort currentQuestId, byte currentSequence) = _gameFunctions.GetCurrentQuest();
if (currentQuestId == 0)
lock (_lock)
{
if (CurrentQuest != null)
DebugState = null;
(ushort currentQuestId, byte currentSequence) = _gameFunctions.GetCurrentQuest();
if (currentQuestId == 0)
{
_logger.LogInformation("No current quest, resetting data");
CurrentQuest = null;
Stop("Resetting current quest");
if (CurrentQuest != null)
{
_logger.LogInformation("No current quest, resetting data");
CurrentQuest = null;
Stop("Resetting current quest");
}
}
}
else if (CurrentQuest == null || CurrentQuest.Quest.QuestId != currentQuestId)
{
if (_questRegistry.TryGetQuest(currentQuestId, out var quest))
else if (CurrentQuest == null || CurrentQuest.Quest.QuestId != currentQuestId)
{
_logger.LogInformation("New quest: {QuestName}", quest.Name);
CurrentQuest = new QuestProgress(quest, currentSequence, 0);
if (_questRegistry.TryGetQuest(currentQuestId, out var quest))
{
_logger.LogInformation("New quest: {QuestName}", quest.Name);
CurrentQuest = new QuestProgress(quest, currentSequence, 0);
bool continueAutomatically = _configuration.General.AutoAcceptNextQuest;
bool continueAutomatically = _configuration.General.AutoAcceptNextQuest;
if (_clientState.LocalPlayer?.Level < quest.Level)
continueAutomatically = false;
if (_clientState.LocalPlayer?.Level < quest.Level)
continueAutomatically = false;
Stop("Different Quest", continueAutomatically);
}
else if (CurrentQuest != null)
{
_logger.LogInformation("No active quest anymore? Not sure what happened...");
CurrentQuest = null;
Stop("No active Quest");
Stop("Different Quest", continueAutomatically);
}
else if (CurrentQuest != null)
{
_logger.LogInformation("No active quest anymore? Not sure what happened...");
CurrentQuest = null;
Stop("No active Quest");
}
return;
}
return;
}
if (CurrentQuest == null)
{
DebugState = "No quest active";
Comment = null;
Stop("No quest active");
return;
}
if (CurrentQuest == null)
{
DebugState = "No quest active";
Comment = null;
Stop("No quest active");
return;
}
if (_gameFunctions.IsOccupied())
{
DebugState = "Occupied";
return;
}
if (_gameFunctions.IsOccupied())
{
DebugState = "Occupied";
return;
}
if (!_movementController.IsNavmeshReady)
{
DebugState = "Navmesh not ready";
return;
}
else if (_movementController.IsPathfinding || _movementController.IsPathRunning)
{
DebugState = "Path is running";
return;
}
if (!_movementController.IsNavmeshReady)
{
DebugState = "Navmesh not ready";
return;
}
else if (_movementController.IsPathfinding || _movementController.IsPathRunning)
{
DebugState = "Path is running";
return;
}
if (CurrentQuest.Sequence != currentSequence)
{
CurrentQuest = CurrentQuest with { Sequence = currentSequence, Step = 0 };
Stop("New sequence", continueIfAutomatic: true);
}
if (CurrentQuest.Sequence != currentSequence)
{
CurrentQuest = CurrentQuest with { Sequence = currentSequence, Step = 0 };
Stop("New sequence", continueIfAutomatic: true);
}
var q = CurrentQuest.Quest;
var sequence = q.FindSequence(CurrentQuest.Sequence);
if (sequence == null)
{
DebugState = "Sequence not found";
Comment = null;
Stop("Unknown sequence");
return;
}
var q = CurrentQuest.Quest;
var sequence = q.FindSequence(CurrentQuest.Sequence);
if (sequence == null)
{
DebugState = "Sequence not found";
Comment = null;
Stop("Unknown sequence");
return;
}
if (CurrentQuest.Step == 255)
{
DebugState = "Step completed";
Comment = null;
if (_currentTask != null || _taskQueue.Count > 0)
Stop("Step complete", continueIfAutomatic: true);
return;
}
if (CurrentQuest.Step == 255)
{
DebugState = "Step completed";
Comment = null;
if (_currentTask != null || _taskQueue.Count > 0)
Stop("Step complete", continueIfAutomatic: true);
return;
}
if (CurrentQuest.Step >= sequence.Steps.Count)
{
DebugState = "Step not found";
Comment = null;
Stop("Unknown step");
return;
}
if (CurrentQuest.Step >= sequence.Steps.Count)
{
DebugState = "Step not found";
Comment = null;
Stop("Unknown step");
return;
var step = sequence.Steps[CurrentQuest.Step];
DebugState = null;
Comment = step.Comment ?? sequence.Comment ?? q.Data.Comment;
}
var step = sequence.Steps[CurrentQuest.Step];
DebugState = null;
Comment = step.Comment ?? sequence.Comment ?? q.Data.Comment;
}
public (QuestSequence? Sequence, QuestStep? Step) GetNextStep()
@ -218,61 +229,55 @@ internal sealed class QuestController
return (seq, seq.Steps[CurrentQuest.Step]);
}
public void IncreaseStepCount(bool shouldContinue = false)
public void IncreaseStepCount(ushort? questId, int? sequence, bool shouldContinue = false)
{
(QuestSequence? seq, QuestStep? step) = GetNextStep();
if (CurrentQuest == null || seq == null || step == null)
lock (_lock)
{
_logger.LogWarning("Unable to retrieve next quest step, not increasing step count");
return;
}
_logger.LogInformation("Increasing step count from {CurrentValue}", CurrentQuest.Step);
if (CurrentQuest.Step + 1 < seq.Steps.Count)
{
CurrentQuest = CurrentQuest with
(QuestSequence? seq, QuestStep? step) = GetNextStep();
if (CurrentQuest == null || seq == null || step == null)
{
Step = CurrentQuest.Step + 1,
StepProgress = new(DateTime.Now),
};
}
else
{
CurrentQuest = CurrentQuest with
{
Step = 255,
StepProgress = new(DateTime.Now),
};
}
_logger.LogWarning("Unable to retrieve next quest step, not increasing step count");
return;
}
if (questId != null && CurrentQuest.Quest.QuestId != questId)
{
_logger.LogWarning(
"Ignoring 'increase step count' for different quest (expected {ExpectedQuestId}, but we are at {CurrentQuestId}",
questId, CurrentQuest.Quest.QuestId);
return;
}
if (sequence != null && seq.Sequence != sequence.Value)
{
_logger.LogWarning(
"Ignoring 'increase step count' for different sequence (expected {ExpectedSequence}, but we are at {CurrentSequence}",
sequence, seq.Sequence);
}
_logger.LogInformation("Increasing step count from {CurrentValue}", CurrentQuest.Step);
if (CurrentQuest.Step + 1 < seq.Steps.Count)
{
CurrentQuest = CurrentQuest with
{
Step = CurrentQuest.Step + 1,
StepProgress = new(DateTime.Now),
};
}
else
{
CurrentQuest = CurrentQuest with
{
Step = 255,
StepProgress = new(DateTime.Now),
};
}
}
if (shouldContinue && _automatic)
ExecuteNextStep(true);
}
public void IncreaseDialogueChoicesSelected()
{
(QuestSequence? seq, QuestStep? step) = GetNextStep();
if (CurrentQuest == null || seq == null || step == null)
{
_logger.LogWarning("Unable to retrieve next quest step, not increasing dialogue choice count");
return;
}
CurrentQuest = CurrentQuest with
{
StepProgress = CurrentQuest.StepProgress with
{
DialogueChoicesSelected = CurrentQuest.StepProgress.DialogueChoicesSelected + 1
}
};
/* TODO Is this required?
if (CurrentQuest.StepProgress.DialogueChoicesSelected >= step.DialogueChoices.Count)
IncreaseStepCount();
*/
}
private void ClearTasksInternal()
{
_currentTask = null;
@ -377,8 +382,10 @@ internal sealed class QuestController
case ETaskResult.NextStep:
_logger.LogInformation("{Task} → {Result}", _currentTask, result);
var lastTask = (ILastTask)_currentTask;
_currentTask = null;
IncreaseStepCount(true);
IncreaseStepCount(lastTask.QuestId, lastTask.Sequence, true);
return;
case ETaskResult.End:
@ -461,4 +468,34 @@ internal sealed class QuestController
public sealed record StepProgress(
DateTime StartedAt,
int DialogueChoicesSelected = 0);
public void Skip(ushort questQuestId, byte currentQuestSequence)
{
lock (_lock)
{
if (_currentTask is ISkippableTask)
_currentTask = null;
else if (_currentTask != null)
{
_currentTask = null;
while (_taskQueue.Count > 0)
{
var task = _taskQueue.Dequeue();
if (task is ISkippableTask)
return;
}
if (_taskQueue.Count == 0)
{
Stop("Skip");
IncreaseStepCount(questQuestId, currentQuestSequence);
}
}
else
{
Stop("SkipNx");
IncreaseStepCount(questQuestId, currentQuestSequence);
}
}
}
}

View File

@ -42,6 +42,7 @@ internal sealed class QuestRegistry
new DirectoryInfo(Path.Combine(solutionDirectory.FullName, "QuestPaths"));
if (pathProjectDirectory.Exists)
{
LoadFromDirectory(new DirectoryInfo(Path.Combine(pathProjectDirectory.FullName, "ARealmReborn")));
LoadFromDirectory(new DirectoryInfo(Path.Combine(pathProjectDirectory.FullName, "Shadowbringers")));
LoadFromDirectory(new DirectoryInfo(Path.Combine(pathProjectDirectory.FullName, "Endwalker")));
}

View File

@ -31,7 +31,7 @@ internal static class AethernetShortcut
IClientState clientState,
AetheryteData aetheryteData,
LifestreamIpc lifestreamIpc,
MovementController movementController) : ITask
MovementController movementController) : ISkippableTask
{
private bool _moving;
private bool _teleported;
@ -117,7 +117,7 @@ internal static class AethernetShortcut
else if (aetheryteData.IsCityAetheryte(To))
{
if (aetheryteData.CalculateDistance(clientState.LocalPlayer?.Position ?? Vector3.Zero,
clientState.TerritoryType, To) > 11)
clientState.TerritoryType, To) > 20)
return ETaskResult.StillRunning;
}
else

View File

@ -37,7 +37,7 @@ internal static class AetheryteShortcut
GameFunctions gameFunctions,
IClientState clientState,
IChatGui chatGui,
AetheryteData aetheryteData) : ITask
AetheryteData aetheryteData) : ISkippableTask
{
private DateTime _continueAt;

View File

@ -62,8 +62,10 @@ internal static class Move
yield return new WaitConditionTask(() => clientState.TerritoryType == Step.TerritoryId,
$"Wait(territory: {Step.TerritoryId})");
yield return new WaitConditionTask(() => movementController.IsNavmeshReady,
"Wait(navmesh ready)");
if (!Step.DisableNavmesh)
yield return new WaitConditionTask(() => movementController.IsNavmeshReady,
"Wait(navmesh ready)");
float distance;
if (Step.InteractionType == EInteractionType.WalkTo)

View File

@ -65,12 +65,13 @@ internal static class WaitAtEnd
];
case EInteractionType.Interact when step.TargetTerritoryId != null:
case EInteractionType.UseItem when step.TargetTerritoryId != null:
ITask waitInteraction;
if (step.TerritoryId != step.TargetTerritoryId)
{
// interaction moves to a different territory
waitInteraction = new WaitConditionTask(() => clientState.TerritoryType == step.TerritoryId,
$"Wait(tp to territory: {step.TerritoryId})");
waitInteraction = new WaitConditionTask(() => clientState.TerritoryType == step.TargetTerritoryId,
$"Wait(tp to territory: {step.TargetTerritoryId})");
}
else
{
@ -82,7 +83,10 @@ internal static class WaitAtEnd
return false;
// interaction moved to elsewhere in the zone
return (lastPosition - currentPosition.Value).Length() > 20;
// the 'closest' locations are probably
// - waking sands' solar
// - rising stones' solar + dawn's respite
return (lastPosition - currentPosition.Value).Length() > 2;
}, $"Wait(tp away from {lastPosition.ToString("G", CultureInfo.InvariantCulture)})");
}
@ -122,7 +126,7 @@ internal static class WaitAtEnd
"Wait(questComplete)");
}
else
return new NextStep();
return new NextStep(quest.QuestId, sequence.Sequence);
}
}
@ -193,8 +197,11 @@ internal static class WaitAtEnd
$"WaitObj({DataId} at {Destination.ToString("G", CultureInfo.InvariantCulture)})";
}
internal sealed class NextStep : ILastTask
internal sealed class NextStep(ushort questId, int sequence) : ILastTask
{
public ushort QuestId { get; } = questId;
public int Sequence { get; } = sequence;
public bool Start() => true;
public ETaskResult Update() => ETaskResult.NextStep;
@ -204,6 +211,9 @@ internal static class WaitAtEnd
internal sealed class EndAutomation : ILastTask
{
public ushort QuestId => throw new InvalidOperationException();
public int Sequence => throw new InvalidOperationException();
public bool Start() => true;
public ETaskResult Update() => ETaskResult.End;

View File

@ -33,7 +33,7 @@ internal sealed class MountTask(
return false;
}
if (gameFunctions.HasStatusPreventingSprintOrMount())
if (gameFunctions.HasStatusPreventingMount())
{
logger.LogInformation("Can't mount due to status preventing sprint or mount");
return false;
@ -60,7 +60,7 @@ internal sealed class MountTask(
if (!_mountTriggered)
{
if (gameFunctions.HasStatusPreventingSprintOrMount())
if (gameFunctions.HasStatusPreventingMount())
{
logger.LogInformation("Can't mount due to status preventing sprint or mount");
return ETaskResult.TaskComplete;

View File

@ -4,9 +4,20 @@ namespace Questionable.Controller.Steps.BaseTasks;
internal sealed class WaitConditionTask(Func<bool> predicate, string description) : ITask
{
public bool Start() => predicate();
private DateTime _continueAt = DateTime.MaxValue;
public ETaskResult Update() => predicate() ? ETaskResult.TaskComplete : ETaskResult.StillRunning;
public bool Start() => !predicate();
public ETaskResult Update()
{
if (_continueAt == DateTime.MaxValue)
{
if (predicate())
_continueAt = DateTime.Now.AddSeconds(0.5);
}
return DateTime.Now >= _continueAt ? ETaskResult.TaskComplete : ETaskResult.StillRunning;
}
public override string ToString() => description;
}

View File

@ -2,5 +2,6 @@
internal interface ILastTask : ITask
{
public ushort QuestId { get; }
public int Sequence { get; }
}

View File

@ -0,0 +1,3 @@
namespace Questionable.Controller.Steps;
internal interface ISkippableTask : ITask;

View File

@ -1,10 +1,12 @@
using System;
using System.Collections.Generic;
using Dalamud.Game.ClientState.Conditions;
using Dalamud.Game.ClientState.Objects.Enums;
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Plugin.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Questionable.Controller.Steps.BaseFactory;
using Questionable.Model;
using Questionable.Model.V1;
@ -14,16 +16,23 @@ internal static class Interact
{
internal sealed class Factory(IServiceProvider serviceProvider) : ITaskFactory
{
public ITask? CreateTask(Quest quest, QuestSequence sequence, QuestStep step)
public IEnumerable<ITask> CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step)
{
if (step.InteractionType != EInteractionType.Interact)
return null;
yield break;
ArgumentNullException.ThrowIfNull(step.DataId);
return serviceProvider.GetRequiredService<DoInteract>()
// if we're fast enough, it is possible to get the smalltalk prompt
if (sequence.Sequence == 0 && sequence.Steps.IndexOf(step) == 0)
yield return serviceProvider.GetRequiredService<WaitAtEnd.WaitDelay>();
yield return serviceProvider.GetRequiredService<DoInteract>()
.With(step.DataId.Value, step.TargetTerritoryId != null);
}
public ITask CreateTask(Quest quest, QuestSequence sequence, QuestStep step)
=> throw new InvalidOperationException();
}
internal sealed class DoInteract(GameFunctions gameFunctions, ICondition condition, ILogger<DoInteract> logger)

View File

@ -50,18 +50,23 @@ internal static class UseItem
private bool _usedItem;
private DateTime _continueAt;
public uint ItemId { get; set; }
protected abstract bool UseItem();
public bool Start()
{
_usedItem = UseItem();
_continueAt = DateTime.Now.AddSeconds(2);
if (ItemId == 30362) // vesper bay aether ticket
_continueAt = DateTime.Now.AddSeconds(11);
else
_continueAt = DateTime.Now.AddSeconds(2);
return true;
}
public ETaskResult Update()
{
if (DateTime.Now > _continueAt)
if (DateTime.Now <= _continueAt)
return ETaskResult.StillRunning;
if (!_usedItem)
@ -79,7 +84,6 @@ internal static class UseItem
internal sealed class UseOnGround(GameFunctions gameFunctions) : UseItemBase
{
public uint DataId { get; set; }
public uint ItemId { get; set; }
public ITask With(uint dataId, uint itemId)
{
@ -96,7 +100,6 @@ internal static class UseItem
internal sealed class UseOnObject(GameFunctions gameFunctions) : UseItemBase
{
public uint DataId { get; set; }
public uint ItemId { get; set; }
public ITask With(uint dataId, uint itemId)
{
@ -112,8 +115,6 @@ internal static class UseItem
internal sealed class Use(GameFunctions gameFunctions) : UseItemBase
{
public uint ItemId { get; set; }
public ITask With(uint itemId)
{
ItemId = itemId;

View File

@ -15,6 +15,7 @@ internal sealed class NavmeshIpc
private readonly ICallGateSubscriber<List<Vector3>, bool, object> _pathMoveTo;
private readonly ICallGateSubscriber<object> _pathStop;
private readonly ICallGateSubscriber<bool> _pathIsRunning;
private readonly ICallGateSubscriber<List<Vector3>> _pathListWaypoints;
private readonly ICallGateSubscriber<float> _pathGetTolerance;
private readonly ICallGateSubscriber<float, object> _pathSetTolerance;
private readonly ICallGateSubscriber<Vector3, bool, float, Vector3?> _queryPointOnFloor;
@ -28,6 +29,7 @@ internal sealed class NavmeshIpc
_pathMoveTo = pluginInterface.GetIpcSubscriber<List<Vector3>, bool, object>("vnavmesh.Path.MoveTo");
_pathStop = pluginInterface.GetIpcSubscriber<object>("vnavmesh.Path.Stop");
_pathIsRunning = pluginInterface.GetIpcSubscriber<bool>("vnavmesh.Path.IsRunning");
_pathListWaypoints = pluginInterface.GetIpcSubscriber<List<Vector3>>("vnavmesh.Path.ListWaypoints");
_pathGetTolerance = pluginInterface.GetIpcSubscriber<float>("vnavmesh.Path.GetTolerance");
_pathSetTolerance = pluginInterface.GetIpcSubscriber<float, object>("vnavmesh.Path.SetTolerance");
_queryPointOnFloor =
@ -69,4 +71,12 @@ internal sealed class NavmeshIpc
public Vector3? GetPointOnFloor(Vector3 position)
=> _queryPointOnFloor.InvokeFunc(position, true, 1);
public List<Vector3> GetWaypoints()
{
if (IsPathRunning)
return _pathListWaypoints.InvokeFunc();
else
return [];
}
}

View File

@ -99,6 +99,8 @@ internal sealed unsafe class GameFunctions
.AsReadOnly();
}
public DateTime ReturnRequestedAt { get; set; } = DateTime.MinValue;
public (ushort CurrentQuest, byte Sequence) GetCurrentQuest()
{
ushort currentQuest;
@ -133,7 +135,12 @@ internal sealed unsafe class GameFunctions
currentQuest = scenarioTree->Data->CurrentScenarioQuest;
if (currentQuest == 0)
{
if (_clientState.TerritoryType == 181) // Starting Limsa
return (107, 0);
return default;
}
return (currentQuest, QuestManager.GetQuestSequence(currentQuest));
}
@ -186,6 +193,15 @@ internal sealed unsafe class GameFunctions
if (IsAetheryteUnlocked(aetheryteId, out var subIndex))
{
if (aetheryteId == PlayerState.Instance()->HomeAetheryteId &&
ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 8) == 0)
{
ReturnRequestedAt = DateTime.Now;
if (ActionManager.Instance()->UseAction(ActionType.GeneralAction, 8))
return true;
}
// fallback if return isn't available or (more likely) on a different aetheryte
return Telepo.Instance()->Teleport(aetheryteId, subIndex);
}
@ -197,6 +213,9 @@ internal sealed unsafe class GameFunctions
public bool IsFlyingUnlocked(ushort territoryId)
{
if (_configuration.Advanced.NeverFly)
return false;
var playerState = PlayerState.Instance();
return playerState != null &&
_territoryToAetherCurrentCompFlgSet.TryGetValue(territoryId, out byte aetherCurrentCompFlgSet) &&
@ -360,19 +379,26 @@ internal sealed unsafe class GameFunctions
if (gameObject != null)
{
_logger.LogInformation("Setting target with {DataId} to {ObjectId}", dataId, gameObject.ObjectId);
_targetManager.Target = null;
_targetManager.Target = gameObject;
ulong result = TargetSystem.Instance()->InteractWithObject(
long result = (long)TargetSystem.Instance()->InteractWithObject(
(FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)gameObject.Address, false);
return result != 0;
_logger.LogInformation("Interact result: {Result}", result);
return result > 0;
}
_logger.LogDebug("Game object is null");
return false;
}
public bool UseItem(uint itemId)
{
return AgentInventoryContext.Instance()->UseItem(itemId) == 0;
long result = AgentInventoryContext.Instance()->UseItem(itemId);
_logger.LogInformation("UseItem result: {Result}", result);
return result == 0;
}
public bool UseItem(uint dataId, uint itemId)
@ -381,7 +407,10 @@ internal sealed unsafe class GameFunctions
if (gameObject != null)
{
_targetManager.Target = gameObject;
return AgentInventoryContext.Instance()->UseItem(itemId) == 0;
long result = AgentInventoryContext.Instance()->UseItem(itemId);
_logger.LogInformation("UseItem result on {DataId}: {Result}", dataId, result);
return result == 0;
}
return false;
@ -420,11 +449,8 @@ internal sealed unsafe class GameFunctions
return gameObject != null && (gameObject.Position - position).Length() < 0.05f;
}
public bool HasStatusPreventingSprintOrMount(bool skipConfigCheck = false)
public bool HasStatusPreventingMount()
{
if (!skipConfigCheck && _configuration.Advanced.NeverFly)
return true;
if (_condition[ConditionFlag.Swimming] && !IsFlyingUnlockedInCurrentZone())
return true;
@ -433,6 +459,13 @@ internal sealed unsafe class GameFunctions
if (playerState != null && !playerState->IsMountUnlocked(1))
return true;
return HasCharacterStatusPreventingMountOrSprint();
}
public bool HasStatusPreventingSprint() => HasCharacterStatusPreventingMountOrSprint();
private bool HasCharacterStatusPreventingMountOrSprint()
{
var gameObject = GameObjectManager.GetGameObjectByIndex(0);
if (gameObject != null && gameObject->ObjectKind == 1)
{
@ -547,6 +580,11 @@ internal sealed unsafe class GameFunctions
var questRow = _dataManager.GetExcelSheet<GimmickYesNo>()!.GetRow(rowId);
return questRow?.Unknown0?.ToString();
}
else if (excelSheet == "Warp")
{
var questRow = _dataManager.GetExcelSheet<Warp>()!.GetRow(rowId);
return questRow?.Name?.ToString();
}
else if (excelSheet is "ContentTalk" or null)
{
var questRow = _dataManager.GetExcelSheet<ContentTalk>()!.GetRow(rowId);

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<Version>0.12</Version>
<Version>0.13</Version>
<LangVersion>12</LangVersion>
<Nullable>enable</Nullable>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>

View File

@ -6,7 +6,6 @@ using Dalamud.Game.ClientState.Objects;
using Dalamud.Interface;
using Dalamud.Interface.Colors;
using Dalamud.Interface.Components;
using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Client.Game;
@ -18,6 +17,7 @@ using LLib.ImGui;
using Microsoft.Extensions.Logging;
using Questionable.Controller;
using Questionable.Controller.Steps.BaseFactory;
using Questionable.External;
using Questionable.Model;
using Questionable.Model.V1;
@ -34,6 +34,7 @@ internal sealed class DebugWindow : LWindow, IPersistableWindowConfig
private readonly ITargetManager _targetManager;
private readonly GameUiController _gameUiController;
private readonly Configuration _configuration;
private readonly NavmeshIpc _navmeshIpc;
private readonly ILogger<DebugWindow> _logger;
public DebugWindow(DalamudPluginInterface pluginInterface,
@ -45,6 +46,7 @@ internal sealed class DebugWindow : LWindow, IPersistableWindowConfig
ITargetManager targetManager,
GameUiController gameUiController,
Configuration configuration,
NavmeshIpc navmeshIpc,
ILogger<DebugWindow> logger)
: base("Questionable", ImGuiWindowFlags.AlwaysAutoResize)
{
@ -57,6 +59,7 @@ internal sealed class DebugWindow : LWindow, IPersistableWindowConfig
_targetManager = targetManager;
_gameUiController = gameUiController;
_configuration = configuration;
_navmeshIpc = navmeshIpc;
_logger = logger;
IsOpen = true;
@ -65,6 +68,7 @@ internal sealed class DebugWindow : LWindow, IPersistableWindowConfig
MinimumSize = new Vector2(200, 30),
MaximumSize = default
};
RespectCloseHotkey = false;
}
public WindowConfig WindowConfig => _configuration.DebugWindowConfig;
@ -167,8 +171,7 @@ internal sealed class DebugWindow : LWindow, IPersistableWindowConfig
if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.ArrowCircleRight, "Skip"))
{
_movementController.Stop();
_questController.Stop("Manual");
_questController.IncreaseStepCount();
_questController.Skip(currentQuest.Quest.QuestId, currentQuest.Sequence);
}
if (colored)
@ -304,7 +307,8 @@ internal sealed class DebugWindow : LWindow, IPersistableWindowConfig
{
var map = AgentMap.Instance();
ImGui.BeginDisabled(map == null || map->IsFlagMarkerSet == 0 ||
map->FlagMapMarker.TerritoryId != _clientState.TerritoryType);
map->FlagMapMarker.TerritoryId != _clientState.TerritoryType ||
!_navmeshIpc.IsReady);
if (ImGui.Button("Move to Flag"))
_gameFunctions.ExecuteCommand(
$"/vnav {(_gameFunctions.IsFlyingUnlockedInCurrentZone() ? "flyflag" : "moveflag")}");