Compare commits

...

8 Commits

108 changed files with 6731 additions and 112 deletions

View File

@ -79,6 +79,9 @@ public class QuestSourceGenerator : ISourceGenerator
} }
var quest = questNode.Deserialize<QuestRoot>()!; var quest = questNode.Deserialize<QuestRoot>()!;
if (quest.Disabled)
continue;
quests.Add((id, quest)); quests.Add((id, quest));
} }

View File

@ -173,6 +173,8 @@ public static class RoslynShortcuts
SyntaxNodeList( SyntaxNodeList(
Assignment(nameof(ComplexCombatData.DataId), complexCombatData.DataId, default(uint)) Assignment(nameof(ComplexCombatData.DataId), complexCombatData.DataId, default(uint))
.AsSyntaxNodeOrToken(), .AsSyntaxNodeOrToken(),
Assignment(nameof(ComplexCombatData.MinimumKillCount), complexCombatData.MinimumKillCount, null)
.AsSyntaxNodeOrToken(),
Assignment(nameof(ComplexCombatData.RewardItemId), complexCombatData.RewardItemId, null) Assignment(nameof(ComplexCombatData.RewardItemId), complexCombatData.RewardItemId, null)
.AsSyntaxNodeOrToken(), .AsSyntaxNodeOrToken(),
Assignment(nameof(ComplexCombatData.RewardItemCount), complexCombatData.RewardItemCount, null) Assignment(nameof(ComplexCombatData.RewardItemCount), complexCombatData.RewardItemCount, null)

6
QuestPaths/.editorconfig Normal file
View File

@ -0,0 +1,6 @@
root = true
[*.json]
indent_size = 2
indent_style = space
insert_final_newline = true

View File

@ -0,0 +1,82 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006688,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2001717,
"Position": {
"X": 25.497803,
"Y": 2.090454,
"Z": -0.015319824
},
"TerritoryId": 212,
"InteractionType": "Interact"
},
{
"DataId": 1007417,
"Position": {
"X": 1.2359009,
"Y": -3.0000014,
"Z": -57.66388
},
"TerritoryId": 212,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1006240,
"Position": {
"X": 14.389221,
"Y": -44.86571,
"Z": 262.65344
},
"TerritoryId": 154,
"InteractionType": "Interact",
"AetheryteShortcut": "Gridania",
"AethernetShortcut": [
"[Gridania] Aetheryte Plaza",
"[Gridania] Yellow Serpent Gate (North Shroud)"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006240,
"Position": {
"X": 14.389221,
"Y": -44.86571,
"Z": 262.65344
},
"TerritoryId": 154,
"InteractionType": "Emote",
"Emote": "soothe"
}
]
}
]
}

View File

@ -0,0 +1,66 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006241,
"Position": {
"X": 17.349426,
"Y": -44.86564,
"Z": 262.745
},
"TerritoryId": 154,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 7,
"Position": {
"X": -41.58087,
"Y": -38.55963,
"Z": 233.7528
},
"TerritoryId": 154,
"InteractionType": "AttuneAetheryte",
"StopDistance": 5
},
{
"Position": {
"X": -220.29037,
"Y": -28.43536,
"Z": 283.79355
},
"TerritoryId": 154,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"KillEnemyDataIds": [
179
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006241,
"Position": {
"X": 17.349426,
"Y": -44.86564,
"Z": 262.745
},
"TerritoryId": 154,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "North Shroud - Fallgourd Float"
}
]
}
]
}

View File

@ -0,0 +1,101 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006279,
"Position": {
"X": -231.4336,
"Y": 21.512743,
"Z": 339.49792
},
"TerritoryId": 153,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "South Shroud - Camp Tranquil",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2002646,
"Position": {
"X": -68.711426,
"Y": 1.296936,
"Z": 301.74707
},
"TerritoryId": 153,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
1888
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2002574,
"Position": {
"X": -68.711426,
"Y": 1.296936,
"Z": 301.74707
},
"TerritoryId": 153,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1006279,
"Position": {
"X": -231.4336,
"Y": 21.512743,
"Z": 339.49792
},
"TerritoryId": 153,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 20,
"Position": {
"X": -326.6194,
"Y": 10.696533,
"Z": 406.63757
},
"TerritoryId": 146,
"InteractionType": "AttuneAetheryte",
"StopDistance": 5,
"AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo"
},
{
"DataId": 1004917,
"Position": {
"X": -358.6328,
"Y": 8.469424,
"Z": 422.4154
},
"TerritoryId": 146,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,41 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006266,
"Position": {
"X": 560.35706,
"Y": 20.721315,
"Z": 455.89368
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Costa Del Sol",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006305,
"Position": {
"X": 10.60498,
"Y": 71.47817,
"Z": -16.617126
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Eastern La Noscea - Wineport"
}
]
}
]
}

View File

@ -0,0 +1,60 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006688,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1003281,
"Position": {
"X": 97.520386,
"Y": 40.248554,
"Z": 81.1322
},
"TerritoryId": 128,
"InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] The Aftcastle"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006264,
"Position": {
"X": 710.90247,
"Y": 66.027,
"Z": -277.66846
},
"TerritoryId": 135,
"InteractionType": "CompleteQuest",
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Tempest Gate (Lower La Noscea)"
]
}
]
}
]
}

View File

@ -0,0 +1,53 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006688,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1004576,
"Position": {
"X": -141.64954,
"Y": 4.1,
"Z": -114.67157
},
"TerritoryId": 130,
"InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006196,
"Position": {
"X": -63.98114,
"Y": -20.296238,
"Z": -5.142395
},
"TerritoryId": 145,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone"
}
]
}
]
}

View File

@ -0,0 +1,75 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006196,
"Position": {
"X": -63.98114,
"Y": -20.296238,
"Z": -5.142395
},
"TerritoryId": 145,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006206,
"Position": {
"X": -90.95911,
"Y": -29.465149,
"Z": -58.854065
},
"TerritoryId": 145,
"InteractionType": "Interact"
},
{
"DataId": 1006204,
"Position": {
"X": -29.34314,
"Y": -10.500086,
"Z": -7.5532227
},
"TerritoryId": 145,
"InteractionType": "Interact"
},
{
"DataId": 1006205,
"Position": {
"X": 14.480774,
"Y": -5.9663696,
"Z": 7.4310913
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006196,
"Position": {
"X": -63.98114,
"Y": -20.296238,
"Z": -5.142395
},
"TerritoryId": 145,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,60 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006196,
"Position": {
"X": -63.98114,
"Y": -20.296238,
"Z": -5.142395
},
"TerritoryId": 145,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2001965,
"Position": {
"X": 313.46606,
"Y": 23.178406,
"Z": -253.58972
},
"TerritoryId": 145,
"InteractionType": "Combat",
"EnemySpawnType": "AfterItemUse",
"ItemId": 2000604,
"KillEnemyDataIds": [
363
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006196,
"Position": {
"X": -63.98114,
"Y": -20.296238,
"Z": -5.142395
},
"TerritoryId": 145,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,76 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006196,
"Position": {
"X": -63.98114,
"Y": -20.296238,
"Z": -5.142395
},
"TerritoryId": 145,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -171.46503,
"Y": -46.504063,
"Z": 491.88867
},
"TerritoryId": 145,
"InteractionType": "WalkTo",
"TargetTerritoryId": 146
},
{
"DataId": 19,
"Position": {
"X": -159.3805,
"Y": 30.105957,
"Z": -415.45746
},
"TerritoryId": 146,
"InteractionType": "AttuneAetheryte",
"StopDistance": 7
},
{
"DataId": 1006211,
"Position": {
"X": -217.48688,
"Y": 26.258211,
"Z": -361.2574
},
"TerritoryId": 146,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006215,
"Position": {
"X": -227.34424,
"Y": 26.16842,
"Z": -352.98694
},
"TerritoryId": 146,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,75 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006217,
"Position": {
"X": -181.04828,
"Y": 28.214073,
"Z": -402.02948
},
"TerritoryId": 146,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006702,
"Position": {
"X": -186.14484,
"Y": 3.6335826,
"Z": -247.82184
},
"TerritoryId": 146,
"InteractionType": "Interact"
},
{
"DataId": 1006704,
"Position": {
"X": -174.12073,
"Y": 4.3956237,
"Z": -165.45361
},
"TerritoryId": 146,
"InteractionType": "Interact"
},
{
"DataId": 1006703,
"Position": {
"X": -187.27399,
"Y": 9.149252,
"Z": -133.22656
},
"TerritoryId": 146,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006217,
"Position": {
"X": -181.04828,
"Y": 28.214073,
"Z": -402.02948
},
"TerritoryId": 146,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,65 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006217,
"Position": {
"X": -181.04828,
"Y": 28.214073,
"Z": -402.02948
},
"TerritoryId": 146,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"TerritoryId": 128,
"InteractionType": "UseItem",
"ItemId": 30362
},
{
"DataId": 2001711,
"Position": {
"X": -480.91858,
"Y": 17.990356,
"Z": -386.862
},
"TerritoryId": 140,
"InteractionType": "Interact"
},
{
"DataId": 2001715,
"Position": {
"X": 23.23944,
"Y": 2.090454,
"Z": -0.015319824
},
"TerritoryId": 212,
"InteractionType": "Interact"
},
{
"DataId": 1006688,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,62 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006688,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2001717,
"Position": {
"X": 25.497803,
"Y": 2.090454,
"Z": -0.015319824
},
"TerritoryId": 212,
"InteractionType": "Interact"
},
{
"DataId": 1007418,
"Position": {
"X": 9.689453,
"Y": -3.0000017,
"Z": -55.985413
},
"TerritoryId": 212,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006219,
"Position": {
"X": 193.53015,
"Y": 7.8551283,
"Z": -25.864075
},
"TerritoryId": 153,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "South Shroud - Quarrymill"
}
]
}
]
}

View File

@ -0,0 +1,70 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1000332,
"Position": {
"X": 207.7821,
"Y": 6.103813,
"Z": -39.536194
},
"TerritoryId": 153,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "South Shroud - Quarrymill",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006219,
"Position": {
"X": 193.53015,
"Y": 7.8551283,
"Z": -25.864075
},
"TerritoryId": 153,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1000327,
"Position": {
"X": 177.66077,
"Y": 8.928099,
"Z": -43.01526
},
"TerritoryId": 153,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1000332,
"Position": {
"X": 207.7821,
"Y": 6.103813,
"Z": -39.536194
},
"TerritoryId": 153,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,88 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1000332,
"Position": {
"X": 207.7821,
"Y": 6.103813,
"Z": -39.536194
},
"TerritoryId": 153,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "South Shroud - Quarrymill",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": 260.3064,
"Y": 3.8526046,
"Z": 15.633602
},
"TerritoryId": 153,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"KillEnemyDataIds": [
4
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1000332,
"Position": {
"X": 207.7821,
"Y": 6.103813,
"Z": -39.536194
},
"TerritoryId": 153,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1000590,
"Position": {
"X": -165.9419,
"Y": 9.869227,
"Z": -81.34589
},
"TerritoryId": 153,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006680,
"Position": {
"X": 209.30798,
"Y": 6.1041656,
"Z": -39.932922
},
"TerritoryId": 153,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,104 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1000332,
"Position": {
"X": 207.7821,
"Y": 6.103813,
"Z": -39.536194
},
"TerritoryId": 153,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "South Shroud - Quarrymill",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006219,
"Position": {
"X": 193.53015,
"Y": 7.8551283,
"Z": -25.864075
},
"TerritoryId": 153,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1000332,
"Position": {
"X": 207.7821,
"Y": 6.103813,
"Z": -39.536194
},
"TerritoryId": 153,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1006679,
"Position": {
"X": 352.49854,
"Y": -2.3331592,
"Z": 51.56018
},
"TerritoryId": 153,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
1909
]
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1006679,
"Position": {
"X": 352.49854,
"Y": -2.3331592,
"Z": 51.56018
},
"TerritoryId": 153,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1000332,
"Position": {
"X": 207.7821,
"Y": 6.103813,
"Z": -39.536194
},
"TerritoryId": 153,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,41 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1000332,
"Position": {
"X": 207.7821,
"Y": 6.103813,
"Z": -39.536194
},
"TerritoryId": 153,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "South Shroud - Quarrymill",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006215,
"Position": {
"X": -227.34424,
"Y": 26.16842,
"Z": -352.98694
},
"TerritoryId": 146,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo"
}
]
}
]
}

View File

@ -0,0 +1,85 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006215,
"Position": {
"X": -227.34424,
"Y": 26.16842,
"Z": -352.98694
},
"TerritoryId": 146,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006221,
"Position": {
"X": -219.65369,
"Y": 26.204851,
"Z": -337.789
},
"TerritoryId": 146,
"InteractionType": "Interact"
},
{
"DataId": 1006222,
"Position": {
"X": -207.17181,
"Y": 27.31405,
"Z": -331.34973
},
"TerritoryId": 146,
"InteractionType": "Interact"
},
{
"DataId": 1006223,
"Position": {
"X": -85.06909,
"Y": 26.222988,
"Z": -348.50085
},
"TerritoryId": 146,
"InteractionType": "Interact"
},
{
"DataId": 1006224,
"Position": {
"X": -77.74481,
"Y": 27.626602,
"Z": -325.42914
},
"TerritoryId": 146,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006215,
"Position": {
"X": -227.34424,
"Y": 26.16842,
"Z": -352.98694
},
"TerritoryId": 146,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,75 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006226,
"Position": {
"X": -225.97089,
"Y": 26.138475,
"Z": -355.0622
},
"TerritoryId": 146,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006228,
"Position": {
"X": -194.75098,
"Y": 19.02249,
"Z": -557.8546
},
"TerritoryId": 146,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
2257,
2258
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1006228,
"Position": {
"X": -194.75098,
"Y": 19.02249,
"Z": -557.8546
},
"TerritoryId": 146,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006215,
"Position": {
"X": -227.34424,
"Y": 26.16842,
"Z": -352.98694
},
"TerritoryId": 146,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,125 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006215,
"Position": {
"X": -227.34424,
"Y": 26.16842,
"Z": -352.98694
},
"TerritoryId": 146,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2001980,
"Position": {
"X": -202.22784,
"Y": 28.122314,
"Z": -318.5016
},
"TerritoryId": 146,
"InteractionType": "Interact"
},
{
"DataId": 1006225,
"Position": {
"X": -83.84839,
"Y": 39.399178,
"Z": -333.69952
},
"TerritoryId": 146,
"InteractionType": "Interact"
},
{
"DataId": 1007617,
"Position": {
"X": -114.7937,
"Y": 39.483143,
"Z": -339.71167
},
"TerritoryId": 146,
"InteractionType": "Interact"
},
{
"DataId": 2001981,
"Position": {
"X": -78.93494,
"Y": 26.474365,
"Z": -350.08777
},
"TerritoryId": 146,
"InteractionType": "Interact"
},
{
"DataId": 1007616,
"Position": {
"X": -98.77167,
"Y": 26.161106,
"Z": -341.3291
},
"TerritoryId": 146,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1006215,
"Position": {
"X": -227.34424,
"Y": 26.16842,
"Z": -352.98694
},
"TerritoryId": 146,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1006230,
"Position": {
"X": 34.89734,
"Y": 3.3969688,
"Z": -343.70947
},
"TerritoryId": 146,
"InteractionType": "SinglePlayerDuty"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006215,
"Position": {
"X": -227.34424,
"Y": 26.16842,
"Z": -352.98694
},
"TerritoryId": 146,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,65 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006215,
"Position": {
"X": -227.34424,
"Y": 26.16842,
"Z": -352.98694
},
"TerritoryId": 146,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"TerritoryId": 128,
"InteractionType": "UseItem",
"ItemId": 30362
},
{
"DataId": 2001711,
"Position": {
"X": -480.91858,
"Y": 17.990356,
"Z": -386.862
},
"TerritoryId": 140,
"InteractionType": "Interact"
},
{
"DataId": 2001715,
"Position": {
"X": 23.23944,
"Y": 2.090454,
"Z": -0.015319824
},
"TerritoryId": 212,
"InteractionType": "Interact"
},
{
"DataId": 1006688,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,60 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006242,
"Position": {
"X": 16.403442,
"Y": -44.865616,
"Z": 264.54565
},
"TerritoryId": 154,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "North Shroud - Fallgourd Float",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2001982,
"Position": {
"X": -260.0901,
"Y": -56.38214,
"Z": 307.60657
},
"TerritoryId": 154,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
1899
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006242,
"Position": {
"X": 16.403442,
"Y": -44.865616,
"Z": 264.54565
},
"TerritoryId": 154,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "North Shroud - Fallgourd Float"
}
]
}
]
}

View File

@ -0,0 +1,111 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006241,
"Position": {
"X": 17.349426,
"Y": -44.86564,
"Z": 262.745
},
"TerritoryId": 154,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "North Shroud - Fallgourd Float",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -222.67735,
"Y": -66.345436,
"Z": 396.86935
},
"TerritoryId": 154,
"InteractionType": "WaitForManualProgress",
"Comment": "Use Firesand Stick on glowing spot"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2001988,
"Position": {
"X": -217.97516,
"Y": -66.086914,
"Z": 389.9137
},
"TerritoryId": 154,
"InteractionType": "Interact"
},
{
"DataId": 2001986,
"Position": {
"X": -219.71472,
"Y": -65.90375,
"Z": 383.3523
},
"TerritoryId": 154,
"InteractionType": "Interact"
},
{
"DataId": 2001987,
"Position": {
"X": -217.97516,
"Y": -65.20184,
"Z": 376.3026
},
"TerritoryId": 154,
"InteractionType": "Interact"
},
{
"DataId": 2001985,
"Position": {
"X": -233.02057,
"Y": -66.453064,
"Z": 378.95776
},
"TerritoryId": 154,
"InteractionType": "Interact"
},
{
"DataId": 2001984,
"Position": {
"X": -230.33496,
"Y": -66.819336,
"Z": 388.93713
},
"TerritoryId": 154,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006241,
"Position": {
"X": 17.349426,
"Y": -44.86564,
"Z": 262.745
},
"TerritoryId": 154,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "North Shroud - Fallgourd Float"
}
]
}
]
}

View File

@ -0,0 +1,70 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006240,
"Position": {
"X": 14.389221,
"Y": -44.86571,
"Z": 262.65344
},
"TerritoryId": 154,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "North Shroud - Fallgourd Float",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1007541,
"Position": {
"X": -302.8459,
"Y": -51.768955,
"Z": 331.19702
},
"TerritoryId": 154,
"InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
182
]
},
{
"DataId": 1007541,
"Position": {
"X": -302.8459,
"Y": -51.768955,
"Z": 331.19702
},
"TerritoryId": 154,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1002780,
"Position": {
"X": -89.79938,
"Y": -45.331406,
"Z": 195.88
},
"TerritoryId": 154,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "North Shroud - Fallgourd Float"
}
]
}
]
}

View File

@ -0,0 +1,90 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002780,
"Position": {
"X": -89.79938,
"Y": -45.331406,
"Z": 195.88
},
"TerritoryId": 154,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "North Shroud - Fallgourd Float",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1000100,
"Position": {
"X": 23.819275,
"Y": -8,
"Z": 115.92273
},
"TerritoryId": 132,
"InteractionType": "Interact",
"AetheryteShortcut": "Gridania"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1000146,
"Position": {
"X": 49.79016,
"Y": -1.4669685,
"Z": 51.743286
},
"TerritoryId": 132,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1000248,
"Position": {
"X": 143.05322,
"Y": 14.250365,
"Z": -250.72101
},
"TerritoryId": 133,
"InteractionType": "Interact",
"AethernetShortcut": [
"[Gridania] Aetheryte Plaza",
"[Gridania] Lancers' Guild"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006263,
"Position": {
"X": 36.819946,
"Y": 16.351469,
"Z": -334.5846
},
"TerritoryId": 133,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,113 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006263,
"Position": {
"X": 36.819946,
"Y": 16.351469,
"Z": -334.5846
},
"TerritoryId": 133,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2001999,
"Position": {
"X": -576.1349,
"Y": 68.13147,
"Z": 69.41321
},
"TerritoryId": 148,
"InteractionType": "Interact",
"AetheryteShortcut": "Central Shroud - Bentbranch Meadows"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2002701,
"Position": {
"X": -574.4259,
"Y": 67.00232,
"Z": 71.39697
},
"TerritoryId": 148,
"InteractionType": "Duty",
"ContentFinderConditionId": 6
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1006263,
"Position": {
"X": 36.819946,
"Y": 16.351469,
"Z": -334.5846
},
"TerritoryId": 133,
"InteractionType": "Interact",
"AetheryteShortcut": "Gridania",
"AethernetShortcut": [
"[Gridania] Aetheryte Plaza",
"[Gridania] Lancers' Guild"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"TerritoryId": 128,
"InteractionType": "UseItem",
"ItemId": 30362
},
{
"DataId": 2001711,
"Position": {
"X": -480.91858,
"Y": 17.990356,
"Z": -386.862
},
"TerritoryId": 140,
"InteractionType": "Interact"
},
{
"DataId": 2001715,
"Position": {
"X": 23.23944,
"Y": 2.090454,
"Z": -0.015319824
},
"TerritoryId": 212,
"InteractionType": "Interact"
},
{
"DataId": 1006688,
"Position": {
"X": 39.29187,
"Y": 1.2148079,
"Z": 0.8086548
},
"TerritoryId": 212,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,56 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006264,
"Position": {
"X": 710.90247,
"Y": 66.027,
"Z": -277.66846
},
"TerritoryId": 135,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2002033,
"Position": {
"X": 671.1986,
"Y": 64.37781,
"Z": -205.24915
},
"TerritoryId": 135,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
2239,
2240
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006264,
"Position": {
"X": 710.90247,
"Y": 66.027,
"Z": -277.66846
},
"TerritoryId": 135,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,55 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006264,
"Position": {
"X": 710.90247,
"Y": 66.027,
"Z": -277.66846
},
"TerritoryId": 135,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2002034,
"Position": {
"X": 646.1432,
"Y": 67.46008,
"Z": -263.38605
},
"TerritoryId": 135,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
1900
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006264,
"Position": {
"X": 710.90247,
"Y": 66.027,
"Z": -277.66846
},
"TerritoryId": 135,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,72 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006264,
"Position": {
"X": 710.90247,
"Y": 66.027,
"Z": -277.66846
},
"TerritoryId": 135,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006265,
"Position": {
"X": 703.5171,
"Y": 65.78333,
"Z": -288.77704
},
"TerritoryId": 135,
"InteractionType": "SinglePlayerDuty"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"Position": {
"X": 696.00323,
"Y": 80.20443,
"Z": -391.9752
},
"TerritoryId": 135,
"InteractionType": "WalkTo",
"TargetTerritoryId": 137
},
{
"DataId": 11,
"Position": {
"X": 489.15845,
"Y": 20.828491,
"Z": 468.80298
},
"TerritoryId": 137,
"InteractionType": "AttuneAetheryte",
"StopDistance": 5
},
{
"DataId": 1006266,
"Position": {
"X": 560.35706,
"Y": 20.721315,
"Z": 455.89368
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,75 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006266,
"Position": {
"X": 560.35706,
"Y": 20.721315,
"Z": 455.89368
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Costa Del Sol",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2002035,
"Position": {
"X": 666.6819,
"Y": 9.018005,
"Z": 509.6361
},
"TerritoryId": 137,
"InteractionType": "UseItem",
"ItemId": 2000636
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2002639,
"Position": {
"X": 652.2468,
"Y": 12.039368,
"Z": 519.8595
},
"TerritoryId": 137,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
1887
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006266,
"Position": {
"X": 560.35706,
"Y": 20.721315,
"Z": 455.89368
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,52 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006266,
"Position": {
"X": 560.35706,
"Y": 20.721315,
"Z": 455.89368
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Costa Del Sol",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 6,
"Position": {
"X": -230.0603,
"Y": 22.62909,
"Z": 355.45886
},
"TerritoryId": 153,
"InteractionType": "AttuneAetheryte",
"StopDistance": 5,
"AetheryteShortcut": "South Shroud - Quarrymill"
},
{
"DataId": 1006279,
"Position": {
"X": -231.4336,
"Y": 21.512743,
"Z": 339.49792
},
"TerritoryId": 153,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,76 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1004917,
"Position": {
"X": -358.6328,
"Y": 8.469424,
"Z": 422.4154
},
"TerritoryId": 146,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Southern Thanalan - Forgotten Springs",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2002044,
"Position": {
"X": 75.97461,
"Y": 2.090454,
"Z": 692.9884
},
"TerritoryId": 146,
"InteractionType": "UseItem",
"ItemId": 2000643
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2002045,
"Position": {
"X": 89.066895,
"Y": 3.189148,
"Z": 673.0906
},
"TerritoryId": 146,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
1889
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1004917,
"Position": {
"X": -358.6328,
"Y": 8.469424,
"Z": 422.4154
},
"TerritoryId": 146,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Southern Thanalan - Forgotten Springs"
}
]
}
]
}

View File

@ -0,0 +1,94 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1004917,
"Position": {
"X": -358.6328,
"Y": 8.469424,
"Z": 422.4154
},
"TerritoryId": 146,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Southern Thanalan - Forgotten Springs",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -44.549854,
"Y": 7.3629045,
"Z": 405.72034
},
"TerritoryId": 146,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"KillEnemyDataIds": [
356
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2002046,
"Position": {
"X": 42.86255,
"Y": 18.783813,
"Z": 582.5436
},
"TerritoryId": 146,
"InteractionType": "UseItem",
"ItemId": 2000645
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 2002576,
"Position": {
"X": 57.99951,
"Y": 21.011597,
"Z": 569.69543
},
"TerritoryId": 146,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
1890
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1004917,
"Position": {
"X": -358.6328,
"Y": 8.469424,
"Z": 422.4154
},
"TerritoryId": 146,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Southern Thanalan - Forgotten Springs"
}
]
}
]
}

View File

@ -0,0 +1,41 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1004917,
"Position": {
"X": -358.6328,
"Y": 8.469424,
"Z": 422.4154
},
"TerritoryId": 146,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Southern Thanalan - Forgotten Springs",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006266,
"Position": {
"X": 560.35706,
"Y": 20.721315,
"Z": 455.89368
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Eastern La Noscea - Costa Del Sol"
}
]
}
]
}

View File

@ -0,0 +1,123 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006266,
"Position": {
"X": 560.35706,
"Y": 20.721315,
"Z": 455.89368
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Costa Del Sol",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006267,
"Position": {
"X": 340.81018,
"Y": 34.269722,
"Z": 110.27698
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1003588,
"Position": {
"X": 344.6859,
"Y": 31.889465,
"Z": 89.37195
},
"TerritoryId": 137,
"InteractionType": "Interact"
},
{
"DataId": 12,
"Position": {
"X": -18.387146,
"Y": 72.67859,
"Z": 3.829956
},
"TerritoryId": 137,
"InteractionType": "AttuneAetheryte",
"StopDistance": 5
},
{
"DataId": 1006268,
"Position": {
"X": -334.6151,
"Y": 69.69995,
"Z": 153.79565
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 2002702,
"Position": {
"X": -338.61298,
"Y": 69.01648,
"Z": 159.65515
},
"TerritoryId": 137,
"InteractionType": "Duty",
"ContentFinderConditionId": 8
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1006268,
"Position": {
"X": -334.6151,
"Y": 69.69995,
"Z": 153.79565
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006266,
"Position": {
"X": 560.35706,
"Y": 20.721315,
"Z": 455.89368
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Eastern La Noscea - Costa Del Sol"
}
]
}
]
}

View File

@ -0,0 +1,55 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006305,
"Position": {
"X": 10.60498,
"Y": 71.47817,
"Z": -16.617126
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006306,
"Position": {
"X": -25.864075,
"Y": 71.787285,
"Z": -36.78955
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006305,
"Position": {
"X": 10.60498,
"Y": 71.47817,
"Z": -16.617126
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,65 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006305,
"Position": {
"X": 10.60498,
"Y": 71.47817,
"Z": -16.617126
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006309,
"Position": {
"X": -116.56372,
"Y": 86.051636,
"Z": -5.874817
},
"TerritoryId": 137,
"InteractionType": "Interact"
},
{
"DataId": 1006308,
"Position": {
"X": -42.98468,
"Y": 75.575645,
"Z": -55.069885
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006305,
"Position": {
"X": 10.60498,
"Y": 71.47817,
"Z": -16.617126
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,55 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006305,
"Position": {
"X": 10.60498,
"Y": 71.47817,
"Z": -16.617126
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006311,
"Position": {
"X": 26.504883,
"Y": 42.202568,
"Z": 251.75854
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006312,
"Position": {
"X": -369.0395,
"Y": 54.28071,
"Z": 441.24512
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,58 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006312,
"Position": {
"X": -369.0395,
"Y": 54.28071,
"Z": 441.24512
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -309.02634,
"Y": 44.280117,
"Z": 464.14
},
"TerritoryId": 137,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"KillEnemyDataIds": [
136
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006312,
"Position": {
"X": -369.0395,
"Y": 54.28071,
"Z": 441.24512
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,76 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006312,
"Position": {
"X": -369.0395,
"Y": 54.28071,
"Z": 441.24512
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2002061,
"Position": {
"X": -248.40167,
"Y": 33.98181,
"Z": 299.39722
},
"TerritoryId": 137,
"InteractionType": "Interact"
},
{
"DataId": 2002059,
"Position": {
"X": -282.88702,
"Y": 33.951294,
"Z": 308.24744
},
"TerritoryId": 137,
"InteractionType": "Interact"
},
{
"DataId": 2002060,
"Position": {
"X": -298.2987,
"Y": 33.89026,
"Z": 276.53918
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006305,
"Position": {
"X": 10.60498,
"Y": 71.47817,
"Z": -16.617126
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Eastern La Noscea - Wineport"
}
]
}
]
}

View File

@ -0,0 +1,91 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006305,
"Position": {
"X": 10.60498,
"Y": 71.47817,
"Z": -16.617126
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Wineport",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006312,
"Position": {
"X": -369.0395,
"Y": 54.28071,
"Z": 441.24512
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2002062,
"Position": {
"X": -242.63379,
"Y": 45.212402,
"Z": 495.32312
},
"TerritoryId": 137,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
1910
]
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1006305,
"Position": {
"X": 10.60498,
"Y": 71.47817,
"Z": -16.617126
},
"TerritoryId": 137,
"InteractionType": "Interact",
"AetheryteShortcut": "Eastern La Noscea - Wineport"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006266,
"Position": {
"X": 560.35706,
"Y": 20.721315,
"Z": 455.89368
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Eastern La Noscea - Costa Del Sol"
}
]
}
]
}

View File

@ -0,0 +1,125 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006676,
"Position": {
"X": 558.98376,
"Y": 20.706482,
"Z": 451.13293
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Costa Del Sol",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1006314,
"Position": {
"X": 534.8439,
"Y": 17.448048,
"Z": 450.98022
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2002598,
"Position": {
"X": 524.6348,
"Y": 18.16839,
"Z": 457.1489
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1006319,
"Position": {
"X": 523.03345,
"Y": 17.44805,
"Z": 454.5509
},
"TerritoryId": 137,
"InteractionType": "Interact"
},
{
"DataId": 1006318,
"Position": {
"X": 525.5055,
"Y": 17.448048,
"Z": 451.0719
},
"TerritoryId": 137,
"InteractionType": "Interact"
},
{
"DataId": 1006317,
"Position": {
"X": 533.77576,
"Y": 17.654663,
"Z": 450.43103
},
"TerritoryId": 137,
"InteractionType": "Interact"
},
{
"DataId": 1006316,
"Position": {
"X": 560.38745,
"Y": 20.721313,
"Z": 457.02295
},
"TerritoryId": 137,
"InteractionType": "Interact"
},
{
"DataId": 1006266,
"Position": {
"X": 560.35706,
"Y": 20.721315,
"Z": 455.89368
},
"TerritoryId": 137,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006676,
"Position": {
"X": 558.98376,
"Y": 20.706482,
"Z": 451.13293
},
"TerritoryId": 137,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,97 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006266,
"Position": {
"X": 560.35706,
"Y": 20.721315,
"Z": 455.89368
},
"TerritoryId": 137,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Eastern La Noscea - Costa Del Sol",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": 76.605774,
"Y": 80.43136,
"Z": -119.52899
},
"TerritoryId": 137,
"InteractionType": "WalkTo",
"TargetTerritoryId": 139,
"AetheryteShortcut": "Eastern La Noscea - Wineport"
},
{
"DataId": 15,
"Position": {
"X": 437.4303,
"Y": 5.508484,
"Z": 94.590576
},
"TerritoryId": 139,
"InteractionType": "AttuneAetheryte",
"StopDistance": 5
},
{
"DataId": 2002084,
"Position": {
"X": 437.27783,
"Y": 8.194031,
"Z": 133.04333
},
"TerritoryId": 139,
"InteractionType": "Interact"
},
{
"DataId": 2002085,
"Position": {
"X": 404.86768,
"Y": 4.3182373,
"Z": 88.45642
},
"TerritoryId": 139,
"InteractionType": "Interact"
},
{
"DataId": 2002083,
"Position": {
"X": 402.30408,
"Y": 8.712891,
"Z": 47.196045
},
"TerritoryId": 139,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006341,
"Position": {
"X": 479.39258,
"Y": 16.258692,
"Z": 128.37415
},
"TerritoryId": 139,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,71 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "JerryWester",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1006341,
"Position": {
"X": 479.39258,
"Y": 16.258692,
"Z": 128.37415
},
"TerritoryId": 139,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Upper La Noscea - Camp Bronze Lake",
"SkipIf": [
"AetheryteShortcutIfInSameTerritory"
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2002086,
"Position": {
"X": 382.55884,
"Y": 25.253662,
"Z": -139.02502
},
"TerritoryId": 139,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2002690,
"Position": {
"X": 381.39917,
"Y": 23.727722,
"Z": -140.79504
},
"TerritoryId": 139,
"InteractionType": "Duty",
"ContentFinderConditionId": 20002
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1006343,
"Position": {
"X": 427.63403,
"Y": 4.115109,
"Z": 85.92346
},
"TerritoryId": 139,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -1,6 +1,7 @@
{ {
"$schema": "https://carvel.li/questionable/quest-1.0", "$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza", "Author": "liza",
"Disabled": true,
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,

View File

@ -1,6 +1,7 @@
{ {
"$schema": "https://carvel.li/questionable/quest-1.0", "$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza", "Author": "liza",
"Disabled": true,
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,

View File

@ -1,6 +1,7 @@
{ {
"$schema": "https://carvel.li/questionable/quest-1.0", "$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza", "Author": "liza",
"Disabled": true,
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
@ -20,6 +21,21 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"DataId": 1032169,
"Position": {
"X": -423.33105,
"Y": 25.599815,
"Z": 265.94946
},
"TerritoryId": 816,
"InteractionType": "Interact",
"Fly": true,
"SkipIf": [
"NotTargetable"
],
"$": "Only if QW: 0 48 0 0 0 0"
},
{ {
"DataId": 1032167, "DataId": 1032167,
"Position": { "Position": {
@ -29,7 +45,10 @@
}, },
"TerritoryId": 816, "TerritoryId": 816,
"InteractionType": "Interact", "InteractionType": "Interact",
"Fly": true "Fly": true,
"SkipIf": [
"NotTargetable"
]
} }
] ]
}, },

View File

@ -0,0 +1,8 @@
## Raiders of the Lost Pork
QuestWork:
```
0 x 0 0 0 0
48 → Elegant Eulmoran (1032169)
?? → 1032167
```

View File

@ -1,6 +1,7 @@
{ {
"$schema": "https://carvel.li/questionable/quest-1.0", "$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza", "Author": "liza",
"Disabled": true,
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
@ -28,19 +29,39 @@
"Z": -55.77173 "Z": -55.77173
}, },
"TerritoryId": 816, "TerritoryId": 816,
"InteractionType": "Combat", "InteractionType": "Interact",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
11451
],
"Fly": true, "Fly": true,
"Comment": "TODO Combat is optional, check where we should walk" "$": "Only if QW: 0 0 ??? 0 0 0",
"SkipIf": ["NotTargetable"]
},
{
"DataId": 2010902,
"Position": {
"X": -405.9358,
"Y": -0.07635498,
"Z": -28.397034
},
"TerritoryId": 816,
"InteractionType": "Interact",
"$": "Only if QW: 0 0 1 0 0 0 → if complete, 0 16 0 0 0 0",
"SkipIf": ["NotTargetable"]
} }
] ]
}, },
{ {
"Sequence": 255, "Sequence": 255,
"Steps": [ "Steps": [
{
"Position": {
"X": -398.9776,
"Y": 0.82966614,
"Z": 8.668919
},
"TerritoryId": 816,
"InteractionType": "WalkTo",
"Mount": false,
"DisableNavmesh": true
},
{ {
"DataId": 1031809, "DataId": 1031809,
"Position": { "Position": {

View File

@ -0,0 +1,66 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"Disabled": true,
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1031809,
"Position": {
"X": -454.3069,
"Y": 71.43217,
"Z": 575.1278
},
"TerritoryId": 816,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -115.77283,
"Y": 7.1942587,
"Z": 130.61378
},
"TerritoryId": 816,
"InteractionType": "WalkTo",
"Fly": true
},
{
"DataId": 2010911,
"Position": {
"X": -113.93915,
"Y": -36.087585,
"Z": 87.6936
},
"TerritoryId": 816,
"InteractionType": "Interact",
"DisableNavmesh": true,
"$": "QW: 0 2 0 0 0 0"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1031809,
"Position": {
"X": -454.3069,
"Y": 71.43217,
"Z": 575.1278
},
"TerritoryId": 816,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Il Mheg - Lydha Lran",
"Fly": true
}
]
}
]
}

View File

@ -79,7 +79,6 @@
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "CompleteQuest", "InteractionType": "CompleteQuest",
"AetheryteShortcut": "Thavnair - Yedlihmad",
"Fly": true "Fly": true
} }
] ]

View File

@ -65,16 +65,6 @@
"TerritoryId": 1187, "TerritoryId": 1187,
"InteractionType": "CompleteQuest", "InteractionType": "CompleteQuest",
"AetheryteShortcut": "Urqopacha - Wachunpelo" "AetheryteShortcut": "Urqopacha - Wachunpelo"
},
{
"DataId": 1050684,
"Position": {
"X": 391.37854,
"Y": -156.07434,
"Z": -388.50995
},
"TerritoryId": 1187,
"InteractionType": "CompleteQuest"
} }
] ]
} }

View File

@ -50,7 +50,7 @@
}, },
"StopDistance": 0.5, "StopDistance": 0.5,
"TerritoryId": 1187, "TerritoryId": 1187,
"InteractionType": "AcceptQuest", "InteractionType": "CompleteQuest",
"AetheryteShortcut": "Urqopacha - Wachunpelo", "AetheryteShortcut": "Urqopacha - Wachunpelo",
"Fly": true "Fly": true
} }

View File

@ -0,0 +1,56 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1048960,
"Position": {
"X": -405.84424,
"Y": 23.562847,
"Z": -476.61554
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -455.06216,
"Y": 20.027777,
"Z": 46.272446
},
"TerritoryId": 1189,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"KillEnemyDataIds": [
17268
],
"Fly": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1048960,
"Position": {
"X": -405.84424,
"Y": 23.562847,
"Z": -476.61554
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Yak T'el - Iq Br'aax"
}
]
}
]
}

View File

@ -0,0 +1,102 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1051071,
"Position": {
"X": -554.03986,
"Y": 1.3156406,
"Z": -489.3416
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -596.55597,
"Y": 2.3708515,
"Z": -493.64908
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true
},
{
"Position": {
"X": -615.2386,
"Y": -44.093876,
"Z": -495.7548
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true,
"DisableNavmesh": true
},
{
"DataId": 2014307,
"Position": {
"X": -729.7932,
"Y": -107.83557,
"Z": -674.8608
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"Position": {
"X": -615.2386,
"Y": -44.093876,
"Z": -495.7548
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true
},
{
"Position": {
"X": -596.55597,
"Y": 2.3708515,
"Z": -493.64908
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true,
"DisableNavmesh": true
},
{
"DataId": 1051071,
"Position": {
"X": -554.03986,
"Y": 1.3156406,
"Z": -489.3416
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"Fly": true,
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_KINGZD002_05091_Q1_000_000",
"Answer": "TEXT_KINGZD002_05091_A1_000_001"
}
]
}
]
}
]
}

View File

@ -0,0 +1,78 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1051057,
"Position": {
"X": -343.67902,
"Y": 18.885578,
"Z": -404.22675
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": 158.97704,
"Y": 0.80940175,
"Z": -773.5188
},
"StopDistance": 1,
"TerritoryId": 1189,
"InteractionType": "Combat",
"AetheryteShortcut": "Tuliyollal",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
17663
],
"AethernetShortcut": [
"[Tuliyollal] Aetheryte Plaza",
"[Tuliyollal] Dirigible Landing (Yak T'el)"
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1051058,
"Position": {
"X": 159.47205,
"Y": 0.81595546,
"Z": -770.19916
},
"StopDistance": 7,
"TerritoryId": 1189,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1051057,
"Position": {
"X": -343.67902,
"Y": 18.885578,
"Z": -404.22675
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Yak T'el - Iq Br'aax",
"Fly": true
}
]
}
]
}

View File

@ -0,0 +1,67 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1048928,
"Position": {
"X": 36.301147,
"Y": 8.205902,
"Z": -645.1362
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1051072,
"Position": {
"X": -39.07837,
"Y": 4.3051004,
"Z": -332.87555
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1051072,
"Position": {
"X": -39.07837,
"Y": 4.3051004,
"Z": -332.87555
},
"TerritoryId": 1189,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1048928,
"Position": {
"X": 36.301147,
"Y": 8.205902,
"Z": -645.1362
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,75 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1051061,
"Position": {
"X": -407.79742,
"Y": 28.068892,
"Z": -360.55542
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1051062,
"Position": {
"X": -489.5247,
"Y": -29.96456,
"Z": -94.83484
},
"TerritoryId": 1189,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
17664,
17665
],
"Fly": true
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1051062,
"Position": {
"X": -489.5247,
"Y": -29.96456,
"Z": -94.83484
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"StopDistance": 7
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1051061,
"Position": {
"X": -407.79742,
"Y": 28.068892,
"Z": -360.55542
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Yak T'el - Iq Br'aax",
"Fly": true
}
]
}
]
}

View File

@ -0,0 +1,99 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1051065,
"Position": {
"X": 380.7583,
"Y": 21.437008,
"Z": -496.84903
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2014264,
"Position": {
"X": 405.1422,
"Y": 20.85907,
"Z": -482.10883
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"DataId": 2014266,
"Position": {
"X": 430.83838,
"Y": 20.126648,
"Z": -456.71783
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 2014265,
"Position": {
"X": 395.92578,
"Y": 20.34021,
"Z": -453.02515
},
"TerritoryId": 1189,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
17666
],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1051065,
"Position": {
"X": 380.7583,
"Y": 21.437008,
"Z": -496.84903
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,103 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1051364,
"Position": {
"X": -9.353821,
"Y": 8.205902,
"Z": -652.9183
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1048961,
"Position": {
"X": -444.38855,
"Y": 28.068893,
"Z": -363.66827
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"AetheryteShortcut": "Yak T'el - Iq Br'aax",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"Position": {
"X": -632.6718,
"Y": 25.245409,
"Z": -159.94264
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
-128
]
},
{
"DataId": 1048995,
"Position": {
"X": -639.27673,
"Y": 26.716875,
"Z": -161.05902
},
"StopDistance": 7,
"TerritoryId": 1189,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1051410,
"Position": {
"X": -9.140198,
"Y": 8.205902,
"Z": -652.9183
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Tuliyollal",
"AethernetShortcut": [
"[Tuliyollal] Aetheryte Plaza",
"[Tuliyollal] Dirigible Landing (Yak T'el)"
]
}
]
}
]
}

View File

@ -0,0 +1,185 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1048996,
"Position": {
"X": -618.43286,
"Y": 25.709108,
"Z": -153.91785
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1051365,
"Position": {
"X": -738.3383,
"Y": 22.137896,
"Z": -85.404785
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 2,
"Steps": [
{
"Position": {
"X": -580.44604,
"Y": 22.457048,
"Z": -3.286837
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
-128
]
},
{
"DataId": 2014313,
"Position": {
"X": -581.75024,
"Y": 23.697266,
"Z": -2.9450073
},
"TerritoryId": 1189,
"InteractionType": "UseItem",
"ItemId": 2003683,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"Position": {
"X": -506.6366,
"Y": 22.817732,
"Z": 32.985153
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
-64
]
},
{
"DataId": 2014314,
"Position": {
"X": -505.9129,
"Y": 23.88031,
"Z": 32.455933
},
"TerritoryId": 1189,
"InteractionType": "UseItem",
"ItemId": 2003683,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"Position": {
"X": -414.84598,
"Y": 20.493914,
"Z": 74.74898
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
-32
]
},
{
"DataId": 2014315,
"Position": {
"X": -413.96204,
"Y": 21.896606,
"Z": 74.021484
},
"TerritoryId": 1189,
"InteractionType": "UseItem",
"ItemId": 2003683,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1051365,
"Position": {
"X": -738.3383,
"Y": 22.137896,
"Z": -85.404785
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1048996,
"Position": {
"X": -618.43286,
"Y": 25.709108,
"Z": -153.91785
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"Fly": true
}
]
}
]
}

View File

@ -0,0 +1,52 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1051366,
"Position": {
"X": -399.95422,
"Y": 20.145584,
"Z": -402.4262
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1051367,
"Position": {
"X": -503.95975,
"Y": 29.007706,
"Z": -394.43048
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1051368,
"Position": {
"X": -501.27414,
"Y": 28.982998,
"Z": -394.3084
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,53 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1048982,
"Position": {
"X": 595.45276,
"Y": -137.17401,
"Z": 564.8126
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2014250,
"Position": {
"X": 598.3214,
"Y": -137.19391,
"Z": 557.7018
},
"TerritoryId": 1189,
"InteractionType": "Instruction",
"Comment": "Inspect Flag, Red Head, Blue Head"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1048982,
"Position": {
"X": 595.45276,
"Y": -137.17401,
"Z": 564.8126
},
"StopDistance": 7,
"TerritoryId": 1189,
"InteractionType": "CompleteQuest"
}
]
}
]
}

View File

@ -0,0 +1,152 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1048984,
"Position": {
"X": 673.06006,
"Y": -135.17874,
"Z": 577.47766
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -92.00457,
"Y": -212.91975,
"Z": 624.4216
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
-128
]
},
{
"DataId": 1051049,
"Position": {
"X": -89.49426,
"Y": -213.64497,
"Z": 625.574
},
"StopDistance": 4,
"TerritoryId": 1189,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
-128
]
},
{
"Position": {
"X": -122.188805,
"Y": -214.08376,
"Z": 674.54083
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
-32
]
},
{
"DataId": 1051051,
"Position": {
"X": -122.88098,
"Y": -213.78055,
"Z": 673.39575
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
},
{
"Position": {
"X": -142.65875,
"Y": -213.42487,
"Z": 608.63165
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
-64
]
},
{
"DataId": 1051050,
"Position": {
"X": -143.63324,
"Y": -213.18237,
"Z": 609.0028
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1048984,
"Position": {
"X": 673.06006,
"Y": -135.17874,
"Z": 577.47766
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Yak T'el - Mamook",
"Fly": true
}
]
}
]
}

View File

@ -0,0 +1,116 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1048988,
"Position": {
"X": 584.4967,
"Y": -143.46597,
"Z": 648.64575
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2014369,
"Position": {
"X": 328.20618,
"Y": -157.21375,
"Z": 429.4651
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
]
},
{
"DataId": 2014368,
"Position": {
"X": 323.7201,
"Y": -157.76306,
"Z": 434.19543
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 2014256,
"Position": {
"X": 139.17749,
"Y": -162.24927,
"Z": 679.95715
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"DataId": 2014257,
"Position": {
"X": 144.67078,
"Y": -163.25635,
"Z": 663.84375
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1048988,
"Position": {
"X": 584.4967,
"Y": -143.46597,
"Z": 648.64575
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"Fly": true
}
]
}
]
}

View File

@ -0,0 +1,163 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1048987,
"Position": {
"X": 596.97876,
"Y": -142.60623,
"Z": 441.7334
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1051053,
"Position": {
"X": 257.1908,
"Y": -165.78062,
"Z": 146.74597
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true,
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_KINGZD105_05104_SYSTEM_100_004",
"Yes": true
}
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"Position": {
"X": 272.75598,
"Y": -161.77667,
"Z": 117.129616
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Mount": true,
"DisableNavmesh": true
},
{
"Position": {
"X": 255.7041,
"Y": -161.34225,
"Z": 101.95002
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"DisableNavmesh": true
},
{
"DataId": 1051053,
"Position": {
"X": 218.3051,
"Y": -160.72849,
"Z": 78.95244
},
"TerritoryId": 1189,
"InteractionType": "WaitForNpcAtPosition",
"DisableNavmesh": true
},
{
"DataId": 1051053,
"Position": {
"X": 168.0448,
"Y": -158.83824,
"Z": 31.171473
},
"TerritoryId": 1189,
"InteractionType": "WaitForNpcAtPosition",
"DisableNavmesh": true
},
{
"DataId": 1051053,
"Position": {
"X": 144.163,
"Y": -156.25887,
"Z": -57.818764
},
"TerritoryId": 1189,
"InteractionType": "WaitForNpcAtPosition",
"DisableNavmesh": true
},
{
"Position": {
"X": 83.32947,
"Y": -157.21858,
"Z": -67.64331
},
"StopDistance": 1,
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"DisableNavmesh": true
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1051054,
"Position": {
"X": 83.32947,
"Y": -157.21858,
"Z": -67.64331
},
"TerritoryId": 1189,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 2014259,
"Position": {
"X": 65.049194,
"Y": -184.1612,
"Z": -70.237305
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"DisableNavmesh": true,
"Mount": false
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1048987,
"Position": {
"X": 596.97876,
"Y": -142.60623,
"Z": 441.7334
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Yak T'el - Mamook",
"Fly": true
}
]
}
]
}

View File

@ -0,0 +1,92 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1051055,
"Position": {
"X": 563.5918,
"Y": -144.04688,
"Z": 702.26587
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": -45.87303,
"Y": -174.86252,
"Z": 649.25995
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true
},
{
"DataId": 1051056,
"Position": {
"X": -49.149292,
"Y": -174.58734,
"Z": 651.4839
},
"StopDistance": 5,
"TerritoryId": 1189,
"InteractionType": "Interact",
"DisableNavmesh": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1051056,
"Position": {
"X": -49.149292,
"Y": -174.58734,
"Z": 651.4839
},
"StopDistance": 5,
"TerritoryId": 1189,
"InteractionType": "Say",
"ChatMessage": {
"Key": "TEXT_KINGZD106_05105_SAYTODO_000_011"
}
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1051055,
"Position": {
"X": 563.5918,
"Y": -144.04688,
"Z": 702.26587
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Yak T'el - Mamook",
"Fly": true
}
]
}
]
}

View File

@ -0,0 +1,90 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1048991,
"Position": {
"X": 211.10852,
"Y": -160.27475,
"Z": 432.4253
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": 178.30347,
"Y": -195.42366,
"Z": 241.28633
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true
},
{
"DataId": 2014260,
"Position": {
"X": 177.44714,
"Y": -194.11005,
"Z": 239.61243
},
"TerritoryId": 1189,
"InteractionType": "UseItem",
"ItemId": 2003667,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"DataId": 2014261,
"Position": {
"X": 164.47693,
"Y": -194.2627,
"Z": 237.50659
},
"TerritoryId": 1189,
"InteractionType": "UseItem",
"ItemId": 2003667,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1048991,
"Position": {
"X": 211.10852,
"Y": -160.27475,
"Z": 432.4253
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"Fly": true
}
]
}
]
}

View File

@ -0,0 +1,107 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1048998,
"Position": {
"X": 220.29443,
"Y": -156.80957,
"Z": 457.02295
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1051408,
"Position": {
"X": 631.2809,
"Y": -137.12654,
"Z": 509.6665
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"AetheryteShortcut": "Yak T'el - Mamook",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 1048974,
"Position": {
"X": 621.51514,
"Y": -135.12726,
"Z": 531.1207
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
},
{
"DataId": 1048989,
"Position": {
"X": 523.4302,
"Y": -135.12724,
"Z": 578.14905
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1048998,
"Position": {
"X": 220.29443,
"Y": -156.80957,
"Z": 457.02295
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"Fly": true,
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_KINGZD108_05107_Q1_000_000",
"Answer": "TEXT_KINGZD108_05107_A1_000_001"
}
]
}
]
}
]
}

View File

@ -0,0 +1,60 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1051067,
"Position": {
"X": -372.70166,
"Y": -162.24626,
"Z": 546.25757
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest",
"Fly": true
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2014262,
"Position": {
"X": -443.83917,
"Y": -158.1903,
"Z": 343.34326
},
"TerritoryId": 1189,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
17743,
17744,
17745
],
"Fly": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1051067,
"Position": {
"X": -372.70166,
"Y": -162.24626,
"Z": 546.25757
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"Fly": true
}
]
}
]
}

View File

@ -0,0 +1,97 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1048997,
"Position": {
"X": -363.9124,
"Y": -162.23582,
"Z": 550.01135
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest",
"Fly": true
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1051387,
"Position": {
"X": -383.4745,
"Y": -166.23917,
"Z": 662.95874
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 2,
"Steps": [
{
"Position": {
"X": -433.617,
"Y": -156.24463,
"Z": 776.9229
},
"TerritoryId": 1189,
"InteractionType": "Instruction",
"Comment": "TODO Needs item use; manual for now (also unsure on health percent)",
"EnemySpawnType": "OverworldEnemies",
"ComplexCombatData": [
{
"DataId": 17267,
"MinimumKillCount": 2,
"ItemId": 2003669,
"ItemUseHealthMaxPercent": 25,
"RewardItemId": 2003670,
"RewardItemCount": 2
}
],
"Fly": true
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1051387,
"Position": {
"X": -383.4745,
"Y": -166.23917,
"Z": 662.95874
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1048997,
"Position": {
"X": -363.9124,
"Y": -162.23582,
"Z": 550.01135
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"Fly": true
}
]
}
]
}

View File

@ -0,0 +1,97 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1050873,
"Position": {
"X": -455.10034,
"Y": 17.027555,
"Z": -478.8739
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1050874,
"Position": {
"X": -508.87314,
"Y": 29.61908,
"Z": -350.1183
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1050876,
"Position": {
"X": -455.92438,
"Y": 30.374397,
"Z": -423.148
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"DataId": 1050875,
"Position": {
"X": -391.01245,
"Y": 28.068893,
"Z": -365.0111
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1050874,
"Position": {
"X": -508.87314,
"Y": 29.61908,
"Z": -350.1183
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"Fly": true,
"NextQuestId": 5112
}
]
}
]
}

View File

@ -0,0 +1,77 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1050874,
"Position": {
"X": -508.87314,
"Y": 29.61908,
"Z": -350.1183
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_KINGZD203_05112_Q1_000_000",
"Answer": "TEXT_KINGZD203_05112_A1_000_001"
}
]
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1050877,
"Position": {
"X": -39.871887,
"Y": 0.35915944,
"Z": -312.1233
},
"StopDistance": 1,
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2014144,
"Position": {
"X": -43.10681,
"Y": 0.503479,
"Z": -312.36743
},
"TerritoryId": 1189,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1050878,
"Position": {
"X": 475.30322,
"Y": 18.197147,
"Z": -326.95508
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"Fly": true,
"NextQuestId": 5113
}
]
}
]
}

View File

@ -0,0 +1,90 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1050878,
"Position": {
"X": 475.30322,
"Y": 18.197147,
"Z": -326.95508
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1050879,
"Position": {
"X": 595.7274,
"Y": 18.8562,
"Z": -85.55737
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 2,
"Steps": [
{
"Position": {
"X": 705.4334,
"Y": 28.302685,
"Z": 2.3153868
},
"StopDistance": 1,
"TerritoryId": 1189,
"InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
17671,
17672
],
"Fly": true
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1050881,
"Position": {
"X": 595.6052,
"Y": 18.84498,
"Z": -85.55737
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1050882,
"Position": {
"X": -408.31616,
"Y": 20.383144,
"Z": -399.28284
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Yak T'el - Iq Br'aax"
}
]
}
]
}

View File

@ -0,0 +1,125 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1050888,
"Position": {
"X": 515.58704,
"Y": -146.73436,
"Z": 477.0122
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2014147,
"Position": {
"X": 440.66528,
"Y": -150.77448,
"Z": 427.7256
},
"TerritoryId": 1189,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
17674
],
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
},
{
"DataId": 2014148,
"Position": {
"X": 395.4679,
"Y": -152.42242,
"Z": 372.7931
},
"TerritoryId": 1189,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
17674
],
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 2014149,
"Position": {
"X": 267.9026,
"Y": -160.05188,
"Z": 354.45166
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 2014150,
"Position": {
"X": 236.95728,
"Y": -167.52887,
"Z": 307.97278
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1050890,
"Position": {
"X": 661.7991,
"Y": -137.174,
"Z": 557.76294
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Yak T'el - Mamook",
"Fly": true,
"NextQuestId": 5116
}
]
}
]
}

View File

@ -0,0 +1,80 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1050891,
"Position": {
"X": 662.8672,
"Y": -137.17401,
"Z": 556.115
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1048985,
"Position": {
"X": 595.11694,
"Y": -143.83003,
"Z": 710.68884
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 2,
"Steps": [
{
"Position": {
"X": -61.729744,
"Y": -212.69492,
"Z": 523.0088
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"Fly": true
},
{
"DataId": 2014151,
"Position": {
"X": -60.95984,
"Y": -210.83392,
"Z": 522.02637
},
"TerritoryId": 1189,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1050891,
"Position": {
"X": 662.8672,
"Y": -137.17401,
"Z": 556.115
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Yak T'el - Mamook",
"Fly": true,
"NextQuestId": 5117
}
]
}
]
}

View File

@ -0,0 +1,86 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1050891,
"Position": {
"X": 662.8672,
"Y": -137.17401,
"Z": 556.115
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 2014153,
"Position": {
"X": 500.5111,
"Y": -150.04199,
"Z": 704.12744
},
"TerritoryId": 1189,
"InteractionType": "UseItem",
"ItemId": 2003624,
"GroundTarget": true,
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 2014152,
"Position": {
"X": 486.90015,
"Y": -150.04199,
"Z": 355.8556
},
"TerritoryId": 1189,
"InteractionType": "UseItem",
"ItemId": 2003624,
"GroundTarget": true,
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1050891,
"Position": {
"X": 662.8672,
"Y": -137.17401,
"Z": 556.115
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Yak T'el - Mamook",
"Fly": true,
"NextQuestId": 5118
}
]
}
]
}

View File

@ -0,0 +1,219 @@
{
"$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1050891,
"Position": {
"X": 662.8672,
"Y": -137.17401,
"Z": 556.115
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1050897,
"Position": {
"X": 755.94714,
"Y": -132.59648,
"Z": 505.94324
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true,
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_KINGZD401_05118_Q1_000_000",
"Answer": "TEXT_KINGZD401_05118_A1_000_001"
}
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1050891,
"Position": {
"X": 662.8672,
"Y": -137.17401,
"Z": 556.115
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1050901,
"Position": {
"X": 627.25244,
"Y": -137.174,
"Z": 591.8517
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 1050900,
"Position": {
"X": 575.55493,
"Y": -137.174,
"Z": 540.0929
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 1048989,
"Position": {
"X": 523.4302,
"Y": -135.12724,
"Z": 578.14905
},
"TerritoryId": 1189,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1050891,
"Position": {
"X": 662.8672,
"Y": -137.17401,
"Z": 556.115
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 6,
"Steps": [
{
"DataId": 1050904,
"Position": {
"X": 263.84375,
"Y": -157.31726,
"Z": 738.6129
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 7,
"Steps": [
{
"DataId": 2014154,
"Position": {
"X": 255.9701,
"Y": -150.68292,
"Z": 807.64465
},
"TerritoryId": 1189,
"InteractionType": "UseItem",
"ItemId": 2003625,
"Fly": true
}
]
},
{
"Sequence": 8,
"Steps": [
{
"DataId": 2014248,
"Position": {
"X": 255.9701,
"Y": -150.68292,
"Z": 807.64465
},
"TerritoryId": 1189,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
17675
]
}
]
},
{
"Sequence": 9,
"Steps": [
{
"DataId": 1050904,
"Position": {
"X": 263.84375,
"Y": -157.31726,
"Z": 738.6129
},
"TerritoryId": 1189,
"InteractionType": "Interact",
"Fly": true
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1050903,
"Position": {
"X": 663.9962,
"Y": -137.17401,
"Z": 554.589
},
"TerritoryId": 1189,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Yak T'el - Mamook",
"Fly": true
}
]
}
]
}

View File

@ -13,7 +13,7 @@
"Z": -52.99463 "Z": -52.99463
}, },
"TerritoryId": 1186, "TerritoryId": 1186,
"InteractionType": "Interact", "InteractionType": "AcceptQuest",
"Comment": "Quest is completed instantly" "Comment": "Quest is completed instantly"
} }
] ]

View File

@ -13,7 +13,7 @@
"Z": -38.132385 "Z": -38.132385
}, },
"TerritoryId": 1186, "TerritoryId": 1186,
"InteractionType": "Interact", "InteractionType": "AcceptQuest",
"Comment": "Quest is completed instantly" "Comment": "Quest is completed instantly"
} }
] ]

View File

@ -1,11 +1,14 @@
using System.Collections.Generic; using System.Collections.Generic;
using Questionable.Model.V1; using Questionable.Model.V1;
#if RELEASE
namespace Questionable.QuestPaths; namespace Questionable.QuestPaths;
public static partial class AssemblyQuestLoader public static partial class AssemblyQuestLoader
{ {
public static IReadOnlyDictionary<ushort, QuestRoot> GetQuests() => Quests; public static IReadOnlyDictionary<ushort, QuestRoot> GetQuests() =>
} #if RELEASE
Quests;
#else
new Dictionary<ushort, QuestRoot>();
#endif #endif
}

View File

@ -19,6 +19,9 @@
"type": "string" "type": "string"
} }
}, },
"Disabled": {
"type": "boolean"
},
"Comment": { "Comment": {
"type": "string" "type": "string"
}, },
@ -550,6 +553,10 @@
"description": "The enemy data id which is supposed to be killed", "description": "The enemy data id which is supposed to be killed",
"type": "integer" "type": "integer"
}, },
"MinimumKillCount": {
"description": "Overworld mobs: If this number of mobs has been killed, will wait a bit before attempting to pull another mob to see if the quest progresses",
"type": "integer"
},
"RewardItemId": { "RewardItemId": {
"type": "integer" "type": "integer"
}, },

View File

@ -5,6 +5,10 @@ namespace Questionable.Model.V1;
public sealed class ComplexCombatData public sealed class ComplexCombatData
{ {
public uint DataId { get; set; } public uint DataId { get; set; }
// TODO Use this
public uint? MinimumKillCount { get; set; }
public uint? RewardItemId { get; set; } public uint? RewardItemId { get; set; }
public int? RewardItemCount { get; set; } public int? RewardItemCount { get; set; }
public IList<short?> CompletionQuestVariablesFlags { get; set; } = new List<short?>(); public IList<short?> CompletionQuestVariablesFlags { get; set; } = new List<short?>();

View File

@ -6,6 +6,12 @@ public sealed class QuestRoot
{ {
public string Author { get; set; } = null!; public string Author { get; set; } = null!;
public List<string> Contributors { get; set; } = new(); public List<string> Contributors { get; set; } = new();
/// <summary>
/// This is only relevant for release builds.
/// </summary>
public bool Disabled { get; set; }
public string? Comment { get; set; } public string? Comment { get; set; }
public List<ushort> TerritoryBlacklist { get; set; } = new(); public List<ushort> TerritoryBlacklist { get; set; } = new();
public List<QuestSequence> QuestSequence { get; set; } = new(); public List<QuestSequence> QuestSequence { get; set; } = new();

View File

@ -22,11 +22,14 @@ internal sealed class CommandHandler : IDisposable
private readonly QuestWindow _questWindow; private readonly QuestWindow _questWindow;
private readonly QuestSelectionWindow _questSelectionWindow; private readonly QuestSelectionWindow _questSelectionWindow;
private readonly ITargetManager _targetManager; private readonly ITargetManager _targetManager;
private readonly GameFunctions _gameFunctions;
private readonly IClientState _clientState;
public CommandHandler(ICommandManager commandManager, IChatGui chatGui, QuestController questController, public CommandHandler(ICommandManager commandManager, IChatGui chatGui, QuestController questController,
MovementController movementController, QuestRegistry questRegistry, MovementController movementController, QuestRegistry questRegistry,
ConfigWindow configWindow, DebugOverlay debugOverlay, QuestWindow questWindow, ConfigWindow configWindow, DebugOverlay debugOverlay, QuestWindow questWindow,
QuestSelectionWindow questSelectionWindow, ITargetManager targetManager) QuestSelectionWindow questSelectionWindow, ITargetManager targetManager, GameFunctions gameFunctions,
IClientState clientState)
{ {
_commandManager = commandManager; _commandManager = commandManager;
_chatGui = chatGui; _chatGui = chatGui;
@ -38,6 +41,8 @@ internal sealed class CommandHandler : IDisposable
_questWindow = questWindow; _questWindow = questWindow;
_questSelectionWindow = questSelectionWindow; _questSelectionWindow = questSelectionWindow;
_targetManager = targetManager; _targetManager = targetManager;
_gameFunctions = gameFunctions;
_clientState = clientState;
_commandManager.AddHandler("/qst", new CommandInfo(ProcessCommand) _commandManager.AddHandler("/qst", new CommandInfo(ProcessCommand)
{ {
@ -77,7 +82,12 @@ internal sealed class CommandHandler : IDisposable
break; break;
case "which": case "which":
_questSelectionWindow.Open(_targetManager.Target); _questSelectionWindow.OpenForTarget(_targetManager.Target);
break;
case "z":
case "zone":
_questSelectionWindow.OpenForZone(_clientState.TerritoryType);
break; break;
default: default:
@ -96,7 +106,9 @@ internal sealed class CommandHandler : IDisposable
if (arguments.Length >= 1 && ushort.TryParse(arguments[0], out ushort questId)) if (arguments.Length >= 1 && ushort.TryParse(arguments[0], out ushort questId))
{ {
if (_questRegistry.TryGetQuest(questId, out Quest? quest)) if (_gameFunctions.IsQuestLocked(questId, 0))
_chatGui.PrintError($"[Questionable] Quest {questId} is locked.");
else if (_questRegistry.TryGetQuest(questId, out Quest? quest))
{ {
_debugOverlay.HighlightedQuest = questId; _debugOverlay.HighlightedQuest = questId;
_chatGui.Print($"[Questionable] Set highlighted quest to {questId} ({quest.Info.Name})."); _chatGui.Print($"[Questionable] Set highlighted quest to {questId} ({quest.Info.Name}).");

View File

@ -1,16 +1,21 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using System.IO; using System.IO;
using System.Numerics;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks;
using Dalamud.Plugin; using Dalamud.Plugin;
using Dalamud.Plugin.Services; using Dalamud.Plugin.Services;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Questionable.Controller.Utils;
using Questionable.Data; using Questionable.Data;
using Questionable.Model; using Questionable.Model;
using Questionable.Model.V1; using Questionable.Model.V1;
using Questionable.Validation;
namespace Questionable.Controller; namespace Questionable.Controller;
@ -18,25 +23,50 @@ internal sealed class QuestRegistry
{ {
private readonly IDalamudPluginInterface _pluginInterface; private readonly IDalamudPluginInterface _pluginInterface;
private readonly QuestData _questData; private readonly QuestData _questData;
private readonly IChatGui _chatGui;
private readonly QuestValidator _questValidator;
private readonly ILogger<QuestRegistry> _logger; private readonly ILogger<QuestRegistry> _logger;
private readonly Dictionary<ushort, Quest> _quests = new(); private readonly Dictionary<ushort, Quest> _quests = new();
public QuestRegistry(IDalamudPluginInterface pluginInterface, QuestData questData, public QuestRegistry(IDalamudPluginInterface pluginInterface, QuestData questData, IChatGui chatGui,
ILogger<QuestRegistry> logger) QuestValidator questValidator, ILogger<QuestRegistry> logger)
{ {
_pluginInterface = pluginInterface; _pluginInterface = pluginInterface;
_questData = questData; _questData = questData;
_chatGui = chatGui;
_questValidator = questValidator;
_logger = logger; _logger = logger;
} }
public IEnumerable<Quest> AllQuests => _quests.Values;
public int Count => _quests.Count; public int Count => _quests.Count;
public int ValidationIssueCount => _questValidator.IssueCount;
public void Reload() public void Reload()
{ {
_quests.Clear(); _quests.Clear();
#if RELEASE LoadQuestsFromAssembly();
LoadQuestsFromProjectDirectory();
try
{
LoadFromDirectory(new DirectoryInfo(Path.Combine(_pluginInterface.ConfigDirectory.FullName, "Quests")));
}
catch (Exception e)
{
_logger.LogError(e,
"Failed to load all quests from user directory (some may have been successfully loaded)");
}
ValidateQuests();
_logger.LogInformation("Loaded {Count} quests", _quests.Count);
}
[Conditional("RELEASE")]
private void LoadQuestsFromAssembly()
{
_logger.LogInformation("Loading quests from assembly"); _logger.LogInformation("Loading quests from assembly");
foreach ((ushort questId, QuestRoot questRoot) in QuestPaths.AssemblyQuestLoader.GetQuests()) foreach ((ushort questId, QuestRoot questRoot) in QuestPaths.AssemblyQuestLoader.GetQuests())
@ -49,7 +79,11 @@ internal sealed class QuestRegistry
}; };
_quests[questId] = quest; _quests[questId] = quest;
} }
#else }
[Conditional("DEBUG")]
private void LoadQuestsFromProjectDirectory()
{
DirectoryInfo? solutionDirectory = _pluginInterface.AssemblyLocation.Directory?.Parent?.Parent; DirectoryInfo? solutionDirectory = _pluginInterface.AssemblyLocation.Directory?.Parent?.Parent;
if (solutionDirectory != null) if (solutionDirectory != null)
{ {
@ -75,27 +109,13 @@ internal sealed class QuestRegistry
} }
} }
} }
#endif
try
{
LoadFromDirectory(new DirectoryInfo(Path.Combine(_pluginInterface.ConfigDirectory.FullName, "Quests")));
}
catch (Exception e)
{
_logger.LogError(e, "Failed to load all quests from user directory (some may have been successfully loaded)");
} }
#if !RELEASE [Conditional("DEBUG")]
foreach (var quest in _quests.Values) private void ValidateQuests()
{ {
int missingSteps = quest.Root.QuestSequence.Where(x => x.Sequence < 255).Max(x => x.Sequence) - quest.Root.QuestSequence.Count(x => x.Sequence < 255) + 1; _questValidator.ClearIssues();
if (missingSteps != 0) _questValidator.Validate(_quests.Values);
_logger.LogWarning("Quest has missing steps: {QuestId} / {QuestName} → {Count}", quest.QuestId, quest.Info.Name, missingSteps);
}
#endif
_logger.LogInformation("Loaded {Count} quests", _quests.Count);
} }

View File

@ -18,24 +18,33 @@ internal static class NextQuest
if (step.NextQuestId == null) if (step.NextQuestId == null)
return null; return null;
if (step.NextQuestId.Value == quest.QuestId)
return null;
return serviceProvider.GetRequiredService<SetQuest>() return serviceProvider.GetRequiredService<SetQuest>()
.With(step.NextQuestId.Value); .With(step.NextQuestId.Value, quest.QuestId);
} }
} }
internal sealed class SetQuest(QuestRegistry questRegistry, QuestController questController, ILogger<SetQuest> logger) : ITask internal sealed class SetQuest(QuestRegistry questRegistry, QuestController questController, GameFunctions gameFunctions, ILogger<SetQuest> logger) : ITask
{ {
public ushort NextQuestId { get; set; } public ushort NextQuestId { get; set; }
public ushort CurrentQuestId { get; set; }
public ITask With(ushort nextQuestId) public ITask With(ushort nextQuestId, ushort currentQuestId)
{ {
NextQuestId = nextQuestId; NextQuestId = nextQuestId;
CurrentQuestId = currentQuestId;
return this; return this;
} }
public bool Start() public bool Start()
{ {
if (questRegistry.TryGetQuest(NextQuestId, out Quest? quest)) if (gameFunctions.IsQuestLocked(NextQuestId, CurrentQuestId))
{
logger.LogInformation("Can't set next quest to {QuestId}, quest is locked", NextQuestId);
}
else if (questRegistry.TryGetQuest(NextQuestId, out Quest? quest))
{ {
logger.LogInformation("Setting next quest to {QuestId}: '{QuestName}'", NextQuestId, quest.Info.Name); logger.LogInformation("Setting next quest to {QuestId}: '{QuestName}'", NextQuestId, quest.Info.Name);
questController.SetNextQuest(quest); questController.SetNextQuest(quest);

View File

@ -1,11 +1,14 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Numerics;
using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Questionable.Controller.Steps.Common; using Questionable.Controller.Steps.Common;
using Questionable.Controller.Steps.Shared;
using Questionable.Model; using Questionable.Model;
using Questionable.Model.V1; using Questionable.Model.V1;
using AethernetShortcut = Questionable.Controller.Steps.Shared.AethernetShortcut;
namespace Questionable.Controller.Steps.Interactions; namespace Questionable.Controller.Steps.Interactions;
@ -13,7 +16,7 @@ internal static class UseItem
{ {
public const int VesperBayAetheryteTicket = 30362; public const int VesperBayAetheryteTicket = 30362;
internal sealed class Factory(IServiceProvider serviceProvider) : ITaskFactory internal sealed class Factory(IServiceProvider serviceProvider, ILogger<Factory> logger) : ITaskFactory
{ {
public IEnumerable<ITask> CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) public IEnumerable<ITask> CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step)
{ {
@ -22,6 +25,16 @@ internal static class UseItem
ArgumentNullException.ThrowIfNull(step.ItemId); ArgumentNullException.ThrowIfNull(step.ItemId);
if (step.ItemId == VesperBayAetheryteTicket)
{
unsafe
{
InventoryManager* inventoryManager = InventoryManager.Instance();
if (inventoryManager->GetInventoryItemCount(step.ItemId.Value) == 0)
return CreateVesperBayFallbackTask();
}
}
var unmount = serviceProvider.GetRequiredService<UnmountTask>(); var unmount = serviceProvider.GetRequiredService<UnmountTask>();
if (step.GroundTarget == true) if (step.GroundTarget == true)
{ {
@ -47,6 +60,23 @@ internal static class UseItem
public ITask CreateTask(Quest quest, QuestSequence sequence, QuestStep step) public ITask CreateTask(Quest quest, QuestSequence sequence, QuestStep step)
=> throw new InvalidOperationException(); => throw new InvalidOperationException();
private IEnumerable<ITask> CreateVesperBayFallbackTask()
{
logger.LogWarning("No vesper bay aetheryte tickets in inventory, navigating via ferry in Limsa instead");
uint npcId = 1003540;
ushort territoryId = 129;
Vector3 destination = new(-360.9217f, 8f, 38.92566f);
yield return serviceProvider.GetRequiredService<AetheryteShortcut.UseAetheryteShortcut>()
.With(null, EAetheryteLocation.Limsa, territoryId);
yield return serviceProvider.GetRequiredService<AethernetShortcut.UseAethernetShortcut>()
.With(EAetheryteLocation.Limsa, EAetheryteLocation.LimsaArcanist);
yield return serviceProvider.GetRequiredService<Move.MoveInternal>()
.With(territoryId, destination, dataId: npcId, sprint: false);
yield return serviceProvider.GetRequiredService<Interact.DoInteract>()
.With(npcId, true);
}
} }
internal abstract class UseItemBase(ILogger logger) : ITask internal abstract class UseItemBase(ILogger logger) : ITask

View File

@ -45,7 +45,7 @@ internal static class AetheryteShortcut
{ {
private DateTime _continueAt; private DateTime _continueAt;
public QuestStep Step { get; set; } = null!; public QuestStep? Step { get; set; }
public EAetheryteLocation TargetAetheryte { get; set; } public EAetheryteLocation TargetAetheryte { get; set; }
/// <summary> /// <summary>
@ -54,7 +54,7 @@ internal static class AetheryteShortcut
/// </summary> /// </summary>
public ushort ExpectedTerritoryId { get; set; } public ushort ExpectedTerritoryId { get; set; }
public ITask With(QuestStep step, EAetheryteLocation targetAetheryte, ushort expectedTerritoryId) public ITask With(QuestStep? step, EAetheryteLocation targetAetheryte, ushort expectedTerritoryId)
{ {
Step = step; Step = step;
TargetAetheryte = targetAetheryte; TargetAetheryte = targetAetheryte;
@ -66,7 +66,7 @@ internal static class AetheryteShortcut
{ {
_continueAt = DateTime.Now.AddSeconds(8); _continueAt = DateTime.Now.AddSeconds(8);
ushort territoryType = clientState.TerritoryType; ushort territoryType = clientState.TerritoryType;
if (ExpectedTerritoryId == territoryType) if (Step != null && ExpectedTerritoryId == territoryType)
{ {
if (Step.SkipIf.Contains(ESkipCondition.AetheryteShortcutIfInSameTerritory)) if (Step.SkipIf.Contains(ESkipCondition.AetheryteShortcutIfInSameTerritory))
{ {

View File

@ -99,15 +99,7 @@ internal static class Move
if (actualDistance > distance) if (actualDistance > distance)
{ {
yield return serviceProvider.GetRequiredService<MoveInternal>() yield return serviceProvider.GetRequiredService<MoveInternal>()
.With(Destination, m => .With(Step, Destination);
{
m.NavigateTo(EMovementType.Quest, Step.DataId, Destination,
fly: Step.Fly == true && gameFunctions.IsFlyingUnlocked(Step.TerritoryId),
sprint: Step.Sprint != false,
stopDistance: distance,
ignoreDistanceToObject: Step.IgnoreDistanceToObject == true,
land: Step.Land == true);
});
} }
} }
else else
@ -116,14 +108,7 @@ internal static class Move
if (actualDistance > distance) if (actualDistance > distance)
{ {
yield return serviceProvider.GetRequiredService<MoveInternal>() yield return serviceProvider.GetRequiredService<MoveInternal>()
.With(Destination, m => .With(Step, Destination);
{
m.NavigateTo(EMovementType.Quest, Step.DataId, [Destination],
fly: Step.Fly == true && gameFunctions.IsFlyingUnlockedInCurrentZone(),
sprint: Step.Sprint != false,
stopDistance: distance,
land: Step.Land == true);
});
} }
} }
@ -132,22 +117,68 @@ internal static class Move
} }
} }
internal sealed class MoveInternal(MovementController movementController, ILogger<MoveInternal> logger) : ITask internal sealed class MoveInternal(
MovementController movementController,
GameFunctions gameFunctions,
ILogger<MoveInternal> logger) : ITask
{ {
public Action<MovementController> StartAction { get; set; } = null!; public Action StartAction { get; set; } = null!;
public Vector3 Destination { get; set; } public Vector3 Destination { get; set; }
public ITask With(Vector3 destination, Action<MovementController> startAction) public ITask With(QuestStep step, Vector3 destination)
{
return With(
territoryId: step.TerritoryId,
destination: destination,
stopDistance: step.StopDistance,
dataId: step.DataId,
disableNavMesh: step.DisableNavmesh,
sprint: step.Sprint != false,
fly: step.Fly == true,
land: step.Land == true,
ignoreDistanceToObject: step.IgnoreDistanceToObject == true);
}
public ITask With(ushort territoryId, Vector3 destination, float? stopDistance = null, uint? dataId = null,
bool disableNavMesh = false, bool sprint = true, bool fly = false, bool land = false,
bool ignoreDistanceToObject = false)
{ {
Destination = destination; Destination = destination;
StartAction = startAction;
if (!gameFunctions.IsFlyingUnlocked(territoryId))
{
fly = false;
land = false;
}
if (!disableNavMesh)
{
StartAction = () =>
movementController.NavigateTo(EMovementType.Quest, dataId, Destination,
fly: fly,
sprint: sprint,
stopDistance: stopDistance,
ignoreDistanceToObject: ignoreDistanceToObject,
land: land);
}
else
{
StartAction = () =>
movementController.NavigateTo(EMovementType.Quest, dataId, [Destination],
fly: fly,
sprint: sprint,
stopDistance: stopDistance,
ignoreDistanceToObject: ignoreDistanceToObject,
land: land);
}
return this; return this;
} }
public bool Start() public bool Start()
{ {
logger.LogInformation("Moving to {Destination}", Destination.ToString("G", CultureInfo.InvariantCulture)); logger.LogInformation("Moving to {Destination}", Destination.ToString("G", CultureInfo.InvariantCulture));
StartAction(movementController); StartAction();
return true; return true;
} }

View File

@ -29,7 +29,8 @@ internal sealed class DalamudInitializer : IDisposable
QuestWindow questWindow, QuestWindow questWindow,
DebugOverlay debugOverlay, DebugOverlay debugOverlay,
ConfigWindow configWindow, ConfigWindow configWindow,
QuestSelectionWindow questSelectionWindow) QuestSelectionWindow questSelectionWindow,
QuestValidationWindow questValidationWindow)
{ {
_pluginInterface = pluginInterface; _pluginInterface = pluginInterface;
_framework = framework; _framework = framework;
@ -44,6 +45,7 @@ internal sealed class DalamudInitializer : IDisposable
_windowSystem.AddWindow(configWindow); _windowSystem.AddWindow(configWindow);
_windowSystem.AddWindow(debugOverlay); _windowSystem.AddWindow(debugOverlay);
_windowSystem.AddWindow(questSelectionWindow); _windowSystem.AddWindow(questSelectionWindow);
_windowSystem.AddWindow(questValidationWindow);
_pluginInterface.UiBuilder.Draw += _windowSystem.Draw; _pluginInterface.UiBuilder.Draw += _windowSystem.Draw;
_pluginInterface.UiBuilder.OpenMainUi += _questWindow.Toggle; _pluginInterface.UiBuilder.OpenMainUi += _questWindow.Toggle;

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq; using System.Linq;
using System.Numerics; using System.Numerics;
using Dalamud.Game.ClientState.Conditions; using Dalamud.Game.ClientState.Conditions;
@ -21,6 +22,8 @@ using Lumina.Excel.CustomSheets;
using Lumina.Excel.GeneratedSheets2; using Lumina.Excel.GeneratedSheets2;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Questionable.Controller; using Questionable.Controller;
using Questionable.Data;
using Questionable.Model;
using Questionable.Model.V1; using Questionable.Model.V1;
using Action = Lumina.Excel.GeneratedSheets2.Action; using Action = Lumina.Excel.GeneratedSheets2.Action;
using BattleChara = FFXIVClientStructs.FFXIV.Client.Game.Character.BattleChara; using BattleChara = FFXIVClientStructs.FFXIV.Client.Game.Character.BattleChara;
@ -45,6 +48,7 @@ internal sealed unsafe class GameFunctions
private readonly ICondition _condition; private readonly ICondition _condition;
private readonly IClientState _clientState; private readonly IClientState _clientState;
private readonly QuestRegistry _questRegistry; private readonly QuestRegistry _questRegistry;
private readonly QuestData _questData;
private readonly IGameGui _gameGui; private readonly IGameGui _gameGui;
private readonly Configuration _configuration; private readonly Configuration _configuration;
private readonly ILogger<GameFunctions> _logger; private readonly ILogger<GameFunctions> _logger;
@ -55,6 +59,7 @@ internal sealed unsafe class GameFunctions
ICondition condition, ICondition condition,
IClientState clientState, IClientState clientState,
QuestRegistry questRegistry, QuestRegistry questRegistry,
QuestData questData,
IGameGui gameGui, IGameGui gameGui,
Configuration configuration, Configuration configuration,
ILogger<GameFunctions> logger) ILogger<GameFunctions> logger)
@ -65,6 +70,7 @@ internal sealed unsafe class GameFunctions
_condition = condition; _condition = condition;
_clientState = clientState; _clientState = clientState;
_questRegistry = questRegistry; _questRegistry = questRegistry;
_questData = questData;
_gameGui = gameGui; _gameGui = gameGui;
_configuration = configuration; _configuration = configuration;
_logger = logger; _logger = logger;
@ -246,7 +252,7 @@ internal sealed unsafe class GameFunctions
public bool IsQuestAcceptedOrComplete(ushort questId) public bool IsQuestAcceptedOrComplete(ushort questId)
{ {
return QuestManager.IsQuestComplete(questId) || IsQuestAccepted(questId); return IsQuestComplete(questId) || IsQuestAccepted(questId);
} }
public bool IsQuestAccepted(ushort questId) public bool IsQuestAccepted(ushort questId)
@ -255,6 +261,39 @@ internal sealed unsafe class GameFunctions
return questManager->IsQuestAccepted(questId); return questManager->IsQuestAccepted(questId);
} }
[SuppressMessage("Performance", "CA1822")]
public bool IsQuestComplete(ushort questId)
{
return QuestManager.IsQuestComplete(questId);
}
public bool IsQuestLocked(ushort questId, ushort? extraCompletedQuest = null)
{
var questInfo = _questData.GetQuestInfo(questId);
if (questInfo.QuestLocks.Count > 0)
{
var completedQuests = questInfo.QuestLocks.Count(x => IsQuestComplete(x) || x == extraCompletedQuest);
if (questInfo.QuestLockJoin == QuestInfo.QuestJoin.All && questInfo.QuestLocks.Count == completedQuests)
return true;
else if (questInfo.QuestLockJoin == QuestInfo.QuestJoin.AtLeastOne && completedQuests > 0)
return true;
}
if (questInfo.PreviousQuests.Count > 0)
{
var completedQuests = questInfo.PreviousQuests.Count(x => IsQuestComplete(x) || x == extraCompletedQuest);
if (questInfo.PreviousQuestJoin == QuestInfo.QuestJoin.All &&
questInfo.PreviousQuests.Count == completedQuests)
return false;
else if (questInfo.PreviousQuestJoin == QuestInfo.QuestJoin.AtLeastOne && completedQuests > 0)
return false;
else
return true;
}
return false;
}
public bool IsAetheryteUnlocked(uint aetheryteId, out byte subIndex) public bool IsAetheryteUnlocked(uint aetheryteId, out byte subIndex)
{ {
subIndex = 0; subIndex = 0;

View File

@ -1,5 +1,9 @@
using System; using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using Dalamud.Game.Text; using Dalamud.Game.Text;
using JetBrains.Annotations;
using ExcelQuest = Lumina.Excel.GeneratedSheets.Quest; using ExcelQuest = Lumina.Excel.GeneratedSheets.Quest;
namespace Questionable.Model; namespace Questionable.Model;
@ -13,6 +17,11 @@ internal sealed class QuestInfo
Level = quest.ClassJobLevel0; Level = quest.ClassJobLevel0;
IssuerDataId = quest.IssuerStart; IssuerDataId = quest.IssuerStart;
IsRepeatable = quest.IsRepeatable; IsRepeatable = quest.IsRepeatable;
PreviousQuests = quest.PreviousQuest.Select(x => (ushort)(x.Row & 0xFFFF)).Where(x => x != 0).ToImmutableList();
PreviousQuestJoin = (QuestJoin)quest.PreviousQuestJoin;
QuestLocks = quest.QuestLock.Select(x => (ushort)(x.Row & 0xFFFFF)).Where(x => x != 0).ToImmutableList();
QuestLockJoin = (QuestJoin)quest.QuestLockJoin;
IsMainScenarioQuest = quest.JournalGenre?.Value?.JournalCategory?.Value?.JournalSection?.Row is 0 or 1;
} }
public ushort QuestId { get; } public ushort QuestId { get; }
@ -20,7 +29,20 @@ internal sealed class QuestInfo
public ushort Level { get; } public ushort Level { get; }
public uint IssuerDataId { get; } public uint IssuerDataId { get; }
public bool IsRepeatable { get; } public bool IsRepeatable { get; }
public ImmutableList<ushort> PreviousQuests { get; }
public QuestJoin PreviousQuestJoin { get; }
public bool IsMainScenarioQuest { get; }
public ImmutableList<ushort> QuestLocks { get; set; }
public QuestJoin QuestLockJoin { get; set; }
public string SimplifiedName => Name public string SimplifiedName => Name
.TrimStart(SeIconChar.QuestSync.ToIconChar(), SeIconChar.QuestRepeatable.ToIconChar(), ' '); .TrimStart(SeIconChar.QuestSync.ToIconChar(), SeIconChar.QuestRepeatable.ToIconChar(), ' ');
[UsedImplicitly(ImplicitUseKindFlags.Assign, ImplicitUseTargetFlags.Members)]
public enum QuestJoin : byte
{
None = 0,
All = 1,
AtLeastOne = 2,
}
} }

View File

@ -1,6 +1,6 @@
<Project Sdk="Dalamud.NET.Sdk/9.0.2"> <Project Sdk="Dalamud.NET.Sdk/9.0.2">
<PropertyGroup> <PropertyGroup>
<Version>1.7</Version> <Version>1.8</Version>
<OutputPath>dist</OutputPath> <OutputPath>dist</OutputPath>
<PathMap Condition="$(SolutionDir) != ''">$(SolutionDir)=X:\</PathMap> <PathMap Condition="$(SolutionDir) != ''">$(SolutionDir)=X:\</PathMap>
</PropertyGroup> </PropertyGroup>

View File

@ -16,6 +16,8 @@ using Questionable.Controller.Steps.Common;
using Questionable.Controller.Steps.Interactions; using Questionable.Controller.Steps.Interactions;
using Questionable.Data; using Questionable.Data;
using Questionable.External; using Questionable.External;
using Questionable.Validation;
using Questionable.Validation.Validators;
using Questionable.Windows; using Questionable.Windows;
using Action = Questionable.Controller.Steps.Interactions.Action; using Action = Questionable.Controller.Steps.Interactions.Action;
@ -128,6 +130,13 @@ public sealed class QuestionablePlugin : IDalamudPlugin
serviceCollection.AddSingleton<ConfigWindow>(); serviceCollection.AddSingleton<ConfigWindow>();
serviceCollection.AddSingleton<DebugOverlay>(); serviceCollection.AddSingleton<DebugOverlay>();
serviceCollection.AddSingleton<QuestSelectionWindow>(); serviceCollection.AddSingleton<QuestSelectionWindow>();
serviceCollection.AddSingleton<QuestValidationWindow>();
serviceCollection.AddSingleton<QuestValidator>();
serviceCollection.AddSingleton<IQuestValidator, QuestDisabledValidator>();
serviceCollection.AddSingleton<IQuestValidator, BasicSequenceValidator>();
serviceCollection.AddSingleton<IQuestValidator, UniqueStartStopValidator>();
serviceCollection.AddSingleton<IQuestValidator, CompletionFlagsValidator>();
serviceCollection.AddSingleton<CommandHandler>(); serviceCollection.AddSingleton<CommandHandler>();
serviceCollection.AddSingleton<DalamudInitializer>(); serviceCollection.AddSingleton<DalamudInitializer>();

View File

@ -0,0 +1,7 @@
namespace Questionable.Validation;
internal enum EIssueSeverity
{
None,
Error,
}

View File

@ -0,0 +1,9 @@
using System.Collections.Generic;
using Questionable.Model;
namespace Questionable.Validation;
internal interface IQuestValidator
{
IEnumerable<ValidationIssue> Validate(Quest quest);
}

View File

@ -0,0 +1,55 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Questionable.Model;
namespace Questionable.Validation;
internal sealed class QuestValidator
{
private readonly IReadOnlyList<IQuestValidator> _validators;
private readonly ILogger<QuestValidator> _logger;
private List<ValidationIssue> _validationIssues = new();
public QuestValidator(IEnumerable<IQuestValidator> validators, ILogger<QuestValidator> logger)
{
_validators = validators.ToList();
_logger = logger;
_logger.LogInformation("Validators: {Validators}",
string.Join(", ", _validators.Select(x => x.GetType().Name)));
}
public IReadOnlyList<ValidationIssue> Issues => _validationIssues;
public int IssueCount => _validationIssues.Count;
public void ClearIssues() => _validationIssues.Clear();
public void Validate(IReadOnlyCollection<Quest> quests)
{
Task.Run(() =>
{
foreach (var quest in quests)
{
foreach (var validator in _validators)
{
foreach (var issue in validator.Validate(quest))
{
_logger.LogWarning(
"Validation failed: {QuestId} ({QuestName}) / {QuestSequence} / {QuestStep} - {Description}",
issue.QuestId, quest.Info.Name, issue.Sequence, issue.Step, issue.Description);
_validationIssues.Add(issue);
}
}
}
_validationIssues = _validationIssues.OrderBy(x => x.QuestId)
.ThenBy(x => x.Sequence)
.ThenBy(x => x.Step)
.ThenBy(x => x.Description)
.ToList();
});
}
}

Some files were not shown because too many files have changed in this diff Show More