diff --git a/QuestPathGenerator/QuestPathGenerator.csproj b/QuestPathGenerator/QuestPathGenerator.csproj
index ffeca7c1..8ee14a8f 100644
--- a/QuestPathGenerator/QuestPathGenerator.csproj
+++ b/QuestPathGenerator/QuestPathGenerator.csproj
@@ -17,15 +17,15 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/QuestPathGenerator/QuestSourceGenerator.cs b/QuestPathGenerator/QuestSourceGenerator.cs
index c5837885..8cdd4562 100644
--- a/QuestPathGenerator/QuestSourceGenerator.cs
+++ b/QuestPathGenerator/QuestSourceGenerator.cs
@@ -65,7 +65,7 @@ public class QuestSourceGenerator : ISourceGenerator
continue;
var questNode = JsonNode.Parse(text.ToString());
- var evaluationResult = questSchema.Evaluate(questNode, new EvaluationOptions()
+ var evaluationResult = questSchema.Evaluate(questNode, new EvaluationOptions
{
Culture = CultureInfo.InvariantCulture,
OutputFormat = OutputFormat.List
@@ -323,6 +323,10 @@ public class QuestSourceGenerator : ISourceGenerator
.AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.Comment), step.Comment, emptyStep.Comment)
.AsSyntaxNodeOrToken(),
+ Assignment(nameof(QuestStep.Aetheryte), step.Aetheryte, emptyStep.Aetheryte)
+ .AsSyntaxNodeOrToken(),
+ Assignment(nameof(QuestStep.AethernetShard), step.AethernetShard, emptyStep.AethernetShard)
+ .AsSyntaxNodeOrToken(),
Assignment(nameof(QuestStep.AetheryteShortcut), step.AetheryteShortcut,
emptyStep.AetheryteShortcut)
.AsSyntaxNodeOrToken(),
diff --git a/QuestPathGenerator/packages.lock.json b/QuestPathGenerator/packages.lock.json
index c47bf119..ffdfcd94 100644
--- a/QuestPathGenerator/packages.lock.json
+++ b/QuestPathGenerator/packages.lock.json
@@ -13,9 +13,9 @@
},
"JsonPointer.Net": {
"type": "Direct",
- "requested": "[5.0.0, )",
- "resolved": "5.0.0",
- "contentHash": "fm4T5w20AY6C+p5/pJr0vrXRNGgtSfHl34I1LxC9zdPwS9S3j0GiR1Mz/CVPWKDXXGDpCt1APHpCq7kn5adCfA==",
+ "requested": "[5.0.2, )",
+ "resolved": "5.0.2",
+ "contentHash": "H/OtixKadr+ja1j7Fru3WG56V9zP0AKT1Bd0O7RWN/zH1bl8ZIwW9aCa4+xvzuVvt4SPmrvBu3G6NpAkNOwNAA==",
"dependencies": {
"Humanizer.Core": "2.14.1",
"Json.More.Net": "2.0.1.2"
@@ -23,9 +23,9 @@
},
"JsonSchema.Net": {
"type": "Direct",
- "requested": "[7.0.4, )",
- "resolved": "7.0.4",
- "contentHash": "R0Hk2Tr/np4Q1NO8CBjyQsoiD1iFJyEQP20Sw7JnZCNGJoaSBe+g4b+nZqnBXPQhiqY5LGZ8JZwZkRh/eKZhEQ==",
+ "requested": "[7.1.2, )",
+ "resolved": "7.1.2",
+ "contentHash": "tvM82Wpsyk+C5aUWkqPZLo2ANDjEfCoDa9R24k7jRkCrwxbXnSBb7NpU1pz0ufp6qw+jIekHD9xJdUkjUtnZxQ==",
"dependencies": {
"JsonPointer.Net": "5.0.0"
}
@@ -68,9 +68,9 @@
},
"System.Text.Json": {
"type": "Direct",
- "requested": "[8.0.3, )",
- "resolved": "8.0.3",
- "contentHash": "hpagS9joOwv6efWfrMmV9MjQXpiXZH72PgN067Ysfr6AWMSD1/1hEcvh/U5mUpPLezEWsOJSuVrmqDIVD958iA==",
+ "requested": "[8.0.4, )",
+ "resolved": "8.0.4",
+ "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "8.0.0",
"System.Buffers": "4.5.1",
@@ -264,7 +264,7 @@
"questionable.model": {
"type": "Project",
"dependencies": {
- "System.Text.Json": "[8.0.3, )"
+ "System.Text.Json": "[8.0.4, )"
}
}
}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1097_Forgotten but Not Gone.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1097_Forgotten but Not Gone.json
new file mode 100644
index 00000000..e5f83d3e
--- /dev/null
+++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1097_Forgotten but Not Gone.json
@@ -0,0 +1,30 @@
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "Position": {
+ "X": -336.41187,
+ "Y": 12.899764,
+ "Z": 3.5517142
+ },
+ "TerritoryId": 129,
+ "InteractionType": "WalkTo"
+ },
+ {
+ "DataId": 1000895,
+ "Position": {
+ "X": -335.74432,
+ "Y": 12.899764,
+ "Z": 1.3884888
+ },
+ "TerritoryId": 129,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ }
+ ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/123_ARC_Close to Home.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/123_ARC_Close to Home.json
index 7d5749d3..31dc0077 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/123_ARC_Close to Home.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/123_ARC_Close to Home.json
@@ -31,15 +31,9 @@
"$": "New Gridania Navmesh workaround"
},
{
- "DataId": 2,
- "Position": {
- "X": 32.913696,
- "Y": 2.670288,
- "Z": 30.014404
- },
- "StopDistance": 10,
"TerritoryId": 132,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Gridania",
"CompletionQuestVariablesFlags": [
null,
null,
@@ -50,15 +44,9 @@
]
},
{
- "DataId": 25,
- "Position": {
- "X": 166.58276,
- "Y": -1.7243042,
- "Z": 86.13721
- },
"TerritoryId": 132,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Archers' Guild"
+ "AethernetShard": "[Gridania] Archers' Guild"
},
{
"DataId": 1000197,
@@ -110,41 +98,23 @@
"Sequence": 255,
"Steps": [
{
- "DataId": 26,
- "Position": {
- "X": 101.27405,
- "Y": 9.018005,
- "Z": -111.31464
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Leatherworkers' Guild"
+ "AethernetShard": "[Gridania] Leatherworkers' Guild & Shaded Bower"
},
{
- "DataId": 27,
- "Position": {
- "X": 121.23291,
- "Y": 12.649658,
- "Z": -229.63306
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Lancers' Guild"
+ "AethernetShard": "[Gridania] Lancers' Guild"
},
{
- "DataId": 30,
- "Position": {
- "X": -73.92999,
- "Y": 7.9804688,
- "Z": -140.15417
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Gridania] Mih Khetto's Amphitheatre",
"AethernetShortcut": [
"[Gridania] Lancers' Guild",
"[Gridania] Leatherworkers' Guild & Shaded Bower"
- ],
- "Comment": "Mih Khetto's Amphitheatre"
+ ]
},
{
"Position": {
@@ -156,30 +126,18 @@
"InteractionType": "WalkTo"
},
{
- "DataId": 29,
- "Position": {
- "X": -311.0857,
- "Y": 7.94989,
- "Z": -177.05048
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Botanists' Guild"
+ "AethernetShard": "[Gridania] Botanists' Guild"
},
{
- "DataId": 28,
- "Position": {
- "X": -145.15906,
- "Y": 4.9591064,
- "Z": -11.7647705
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Gridania] Conjurers' Guild",
"AethernetShortcut": [
"[Gridania] Botanists' Guild",
"[Gridania] Mih Khetto's Amphitheatre"
- ],
- "Comment": "Conjurers' Guild"
+ ]
},
{
"DataId": 1000100,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/124_CNJ_Close to Home.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/124_CNJ_Close to Home.json
index cf8fea44..4511ffc6 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/124_CNJ_Close to Home.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/124_CNJ_Close to Home.json
@@ -31,15 +31,9 @@
"$": "New Gridania Navmesh workaround"
},
{
- "DataId": 2,
- "Position": {
- "X": 32.913696,
- "Y": 2.670288,
- "Z": 30.014404
- },
- "StopDistance": 10,
"TerritoryId": 132,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Gridania",
"CompletionQuestVariablesFlags": [
null,
null,
@@ -50,15 +44,9 @@
]
},
{
- "DataId": 25,
- "Position": {
- "X": 166.58276,
- "Y": -1.7243042,
- "Z": 86.13721
- },
"TerritoryId": 132,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Archers' Guild"
+ "AethernetShard": "[Gridania] Archers' Guild"
},
{
"Position": {
@@ -83,41 +71,23 @@
"$": "If done after aetheryte: 33 1 0 0 0 128"
},
{
- "DataId": 26,
- "Position": {
- "X": 101.27405,
- "Y": 9.018005,
- "Z": -111.31464
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Leatherworkers' Guild"
+ "AethernetShard": "[Gridania] Leatherworkers' Guild & Shaded Bower"
},
{
- "DataId": 27,
- "Position": {
- "X": 121.23291,
- "Y": 12.649658,
- "Z": -229.63306
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Lancers' Guild"
+ "AethernetShard": "[Gridania] Lancers' Guild"
},
{
- "DataId": 30,
- "Position": {
- "X": -73.92999,
- "Y": 7.9804688,
- "Z": -140.15417
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Gridania] Mih Khetto's Amphitheatre",
"AethernetShortcut": [
"[Gridania] Lancers' Guild",
"[Gridania] Leatherworkers' Guild & Shaded Bower"
- ],
- "Comment": "Mih Khetto's Amphitheatre"
+ ]
},
{
"Position": {
@@ -129,30 +99,18 @@
"InteractionType": "WalkTo"
},
{
- "DataId": 29,
- "Position": {
- "X": -311.0857,
- "Y": 7.94989,
- "Z": -177.05048
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Botanists' Guild"
+ "AethernetShard": "[Gridania] Botanists' Guild"
},
{
- "DataId": 28,
- "Position": {
- "X": -145.15906,
- "Y": 4.9591064,
- "Z": -11.7647705
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Gridania] Conjurers' Guild",
"AethernetShortcut": [
"[Gridania] Botanists' Guild",
"[Gridania] Mih Khetto's Amphitheatre"
- ],
- "Comment": "Conjurers' Guild"
+ ]
},
{
"DataId": 1000323,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/176_On to Bentbranch.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/176_On to Bentbranch.json
index c40499d4..08b6d172 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/176_On to Bentbranch.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/176_On to Bentbranch.json
@@ -21,15 +21,9 @@
"Sequence": 255,
"Steps": [
{
- "DataId": 3,
- "Position": {
- "X": 13.076904,
- "Y": 0.56451416,
- "Z": 35.90442
- },
- "StopDistance": 10,
"TerritoryId": 148,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Central Shroud - Bentbranch Meadows",
"AethernetShortcut": [
"[Gridania] Aetheryte Plaza",
"[Gridania] Blue Badger Gate (Central Shroud)"
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/507_The Gridanian Envoy.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/507_The Gridanian Envoy.json
index 77325e76..d5e9de32 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/507_The Gridanian Envoy.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/507_The Gridanian Envoy.json
@@ -162,48 +162,24 @@
"Sequence": 6,
"Steps": [
{
- "DataId": 8,
- "Position": {
- "X": -84.00108,
- "Y": 20.77683,
- "Z": 0.03414845
- },
- "StopDistance": 10,
"TerritoryId": 129,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Limsa Lominsa"
},
{
- "DataId": 49,
- "Position": {
- "X": -213.61108,
- "Y": 16.739136,
- "Z": 51.80432
- },
"TerritoryId": 129,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Hawkers' Alley"
+ "AethernetShard": "[Limsa Lominsa] Hawkers' Alley"
},
{
- "DataId": 43,
- "Position": {
- "X": -335.1645,
- "Y": 12.619202,
- "Z": 56.381958
- },
"TerritoryId": 129,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Arcanists' Guild"
+ "AethernetShard": "[Limsa Lominsa] Arcanists' Guild"
},
{
- "DataId": 44,
- "Position": {
- "X": -179.40033,
- "Y": 4.8065186,
- "Z": 182.97095
- },
"TerritoryId": 129,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Fishermens' Guild",
+ "AethernetShard": "[Limsa Lominsa] Fishermens' Guild",
"AethernetShortcut": [
"[Limsa Lominsa] Arcanists' Guild",
"[Limsa Lominsa] Hawkers' Alley"
@@ -225,37 +201,19 @@
]
},
{
- "DataId": 42,
- "Position": {
- "X": -56.50421,
- "Y": 44.47998,
- "Z": -131.45648
- },
"TerritoryId": 128,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Culinarians' Guild"
+ "AethernetShard": "[Limsa Lominsa] Culinarians' Guild"
},
{
- "DataId": 48,
- "Position": {
- "X": -5.1728516,
- "Y": 44.63257,
- "Z": -218.06671
- },
"TerritoryId": 128,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Marauders' Guild"
+ "AethernetShard": "[Limsa Lominsa] Marauders' Guild"
},
{
- "DataId": 41,
- "Position": {
- "X": 16.067688,
- "Y": 40.787354,
- "Z": 68.80286
- },
"TerritoryId": 128,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Aftcastle"
+ "AethernetShard": "[Limsa Lominsa] The Aftcastle"
},
{
"DataId": 1002695,
@@ -358,14 +316,9 @@
]
},
{
- "DataId": 51,
- "Position": {
- "X": 6.6376343,
- "Y": 30.655273,
- "Z": -24.826477
- },
"TerritoryId": 131,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Ul'dah] The Chamber of Rule"
},
{
"DataId": 1001821,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/85_LNC_Close to Home.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/85_LNC_Close to Home.json
index 22051447..6c9df7ad 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/85_LNC_Close to Home.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Gridania/85_LNC_Close to Home.json
@@ -31,15 +31,9 @@
"$": "New Gridania Navmesh workaround"
},
{
- "DataId": 2,
- "Position": {
- "X": 32.913696,
- "Y": 2.670288,
- "Z": 30.014404
- },
- "StopDistance": 10,
"TerritoryId": 132,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Gridania",
"CompletionQuestVariablesFlags": [
null,
null,
@@ -50,15 +44,9 @@
]
},
{
- "DataId": 25,
- "Position": {
- "X": 166.58276,
- "Y": -1.7243042,
- "Z": 86.13721
- },
"TerritoryId": 132,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Archers' Guild"
+ "AethernetShard": "[Gridania] Archers' Guild"
},
{
"Position": {
@@ -83,26 +71,14 @@
"$": "If done after aetheryte: 33 1 0 0 0 128"
},
{
- "DataId": 26,
- "Position": {
- "X": 101.27405,
- "Y": 9.018005,
- "Z": -111.31464
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Leatherworkers' Guild"
+ "AethernetShard": "[Gridania] Leatherworkers' Guild & Shaded Bower"
},
{
- "DataId": 27,
- "Position": {
- "X": 121.23291,
- "Y": 12.649658,
- "Z": -229.63306
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Lancers' Guild"
+ "AethernetShard": "[Gridania] Lancers' Guild"
},
{
"DataId": 1000251,
@@ -132,19 +108,13 @@
"Comment": "Pick up Class Quest"
},
{
- "DataId": 30,
- "Position": {
- "X": -73.92999,
- "Y": 7.9804688,
- "Z": -140.15417
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Gridania] Mih Khetto's Amphitheatre",
"AethernetShortcut": [
"[Gridania] Lancers' Guild",
"[Gridania] Leatherworkers' Guild & Shaded Bower"
- ],
- "Comment": "Mih Khetto's Amphitheatre"
+ ]
},
{
"Position": {
@@ -156,38 +126,20 @@
"InteractionType": "WalkTo"
},
{
- "DataId": 29,
- "Position": {
- "X": -311.0857,
- "Y": 7.94989,
- "Z": -177.05048
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Botanists' Guild"
+ "AethernetShard": "[Gridania] Botanists' Guild"
},
{
- "DataId": 28,
- "Position": {
- "X": -145.15906,
- "Y": 4.9591064,
- "Z": -11.7647705
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Gridania] Conjurers' Guild",
"AethernetShortcut": [
"[Gridania] Botanists' Guild",
"[Gridania] Mih Khetto's Amphitheatre"
- ],
- "Comment": "Conjurers' Guild"
+ ]
},
{
- "DataId": 1000100,
- "Position": {
- "X": 23.819275,
- "Y": -8,
- "Z": 115.92273
- },
"TerritoryId": 132,
"InteractionType": "CompleteQuest",
"AethernetShortcut": [
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/108_MRD_Close to Home.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/108_MRD_Close to Home.json
index ebe54b38..37b12c3e 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/108_MRD_Close to Home.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/108_MRD_Close to Home.json
@@ -127,15 +127,9 @@
"Comment": "Quest Turn-In (Making a Name)"
},
{
- "DataId": 8,
- "Position": {
- "X": -84.031494,
- "Y": 20.767456,
- "Z": 0.015197754
- },
- "StopDistance": 10,
"TerritoryId": 129,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Limsa Lominsa",
"CompletionQuestVariablesFlags": [
null,
null,
@@ -164,37 +158,19 @@
]
},
{
- "DataId": 49,
- "Position": {
- "X": -213.61108,
- "Y": 16.739136,
- "Z": 51.80432
- },
"TerritoryId": 129,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Hawkers' Alley"
+ "AethernetShard": "[Limsa Lominsa] Hawkers' Alley"
},
{
- "DataId": 43,
- "Position": {
- "X": -335.1645,
- "Y": 12.619202,
- "Z": 56.381958
- },
"TerritoryId": 129,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Arcanists' Guild"
+ "AethernetShard": "[Limsa Lominsa] Arcanists' Guild"
},
{
- "DataId": 44,
- "Position": {
- "X": -179.40033,
- "Y": 4.8065186,
- "Z": 182.97095
- },
"TerritoryId": 129,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Fishermens' Guild",
+ "AethernetShard": "[Limsa Lominsa] Fishermens' Guild",
"AethernetShortcut": [
"[Limsa Lominsa] Arcanists' Guild",
"[Limsa Lominsa] Hawkers' Alley"
@@ -216,26 +192,14 @@
]
},
{
- "DataId": 42,
- "Position": {
- "X": -56.50421,
- "Y": 44.47998,
- "Z": -131.45648
- },
"TerritoryId": 128,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Culinarians' Guild"
+ "AethernetShard": "[Limsa Lominsa] Culinarians' Guild"
},
{
- "DataId": 48,
- "Position": {
- "X": -5.1728516,
- "Y": 44.63257,
- "Z": -218.06671
- },
"TerritoryId": 128,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Marauders' Guild"
+ "AethernetShard": "[Limsa Lominsa] Marauders' Guild"
},
{
"DataId": 1000926,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/109_ACN_Close to Home.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/109_ACN_Close to Home.json
index aced709c..23a804e4 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/109_ACN_Close to Home.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/109_ACN_Close to Home.json
@@ -127,15 +127,9 @@
"Comment": "Quest Turn-In (Making a Name)"
},
{
- "DataId": 8,
- "Position": {
- "X": -84.031494,
- "Y": 20.767456,
- "Z": 0.015197754
- },
- "StopDistance": 10,
"TerritoryId": 129,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Gridania",
"CompletionQuestVariablesFlags": [
null,
null,
@@ -164,26 +158,14 @@
]
},
{
- "DataId": 49,
- "Position": {
- "X": -213.61108,
- "Y": 16.739136,
- "Z": 51.80432
- },
"TerritoryId": 129,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Hawkers' Alley"
+ "AethernetShard": "[Limsa Lominsa] Hawkers' Alley"
},
{
- "DataId": 43,
- "Position": {
- "X": -335.1645,
- "Y": 12.619202,
- "Z": 56.381958
- },
"TerritoryId": 129,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Arcanists' Guild"
+ "AethernetShard": "[Limsa Lominsa] Arcanists' Guild"
},
{
"DataId": 1000895,
@@ -221,15 +203,9 @@
"Comment": "Pick up Class Quest"
},
{
- "DataId": 44,
- "Position": {
- "X": -179.40033,
- "Y": 4.8065186,
- "Z": 182.97095
- },
"TerritoryId": 129,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Fishermens' Guild",
+ "AethernetShard": "[Limsa Lominsa] Fishermens' Guild",
"AethernetShortcut": [
"[Limsa Lominsa] Arcanists' Guild",
"[Limsa Lominsa] Hawkers' Alley"
@@ -251,26 +227,14 @@
]
},
{
- "DataId": 42,
- "Position": {
- "X": -56.50421,
- "Y": 44.47998,
- "Z": -131.45648
- },
"TerritoryId": 128,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Culinarians' Guild"
+ "AethernetShard": "[Limsa Lominsa] Culinarians' Guild"
},
{
- "DataId": 48,
- "Position": {
- "X": -5.1728516,
- "Y": 44.63257,
- "Z": -218.06671
- },
"TerritoryId": 128,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Marauders' Guild"
+ "AethernetShard": "[Limsa Lominsa] Marauders' Guild"
},
{
"DataId": 1000972,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/402_Thanks a Million.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/402_Thanks a Million.json
index 4c1c9a48..dd6db84e 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/402_Thanks a Million.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/402_Thanks a Million.json
@@ -47,15 +47,9 @@
"TargetTerritoryId": 138
},
{
- "DataId": 13,
- "Position": {
- "X": 651.5449,
- "Y": 11.734131,
- "Z": 513.35913
- },
- "StopDistance": 10,
"TerritoryId": 138,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Western La Noscea - Swiftperch"
},
{
"Position": {
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/406_On to the Drydocks.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/406_On to the Drydocks.json
index 8fa03f3d..1dfa7be2 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/406_On to the Drydocks.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/406_On to the Drydocks.json
@@ -31,15 +31,9 @@
"TargetTerritoryId": 135
},
{
- "DataId": 10,
- "Position": {
- "X": 156.11499,
- "Y": 15.518433,
- "Z": 673.21277
- },
- "StopDistance": 10,
"TerritoryId": 135,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Lower La Noscea - Moraby Drydocks"
},
{
"DataId": 1002238,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/462_On to Summerford.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/462_On to Summerford.json
index 369f54a9..4358b60f 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/462_On to Summerford.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/462_On to Summerford.json
@@ -21,25 +21,14 @@
"Sequence": 255,
"Steps": [
{
- "DataId": 41,
- "Position": {
- "X": 16.067688,
- "Y": 40.787354,
- "Z": 68.80286
- },
"TerritoryId": 128,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Limsa Lominsa] The Aftcastle"
},
{
- "DataId": 52,
- "Position": {
- "X": 227.98499,
- "Y": 115.526,
- "Z": -257.0382
- },
- "StopDistance": 10,
"TerritoryId": 134,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Middle La Noscea - Summerford Farms",
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Zephyr Gate (Middle La Noscea)"
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/546_The Lominsan Envoy.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/546_The Lominsan Envoy.json
index c155d8ac..e9b7bda9 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/546_The Lominsan Envoy.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/546_The Lominsan Envoy.json
@@ -162,26 +162,14 @@
"Sequence": 5,
"Steps": [
{
- "DataId": 2,
- "Position": {
- "X": 32.913696,
- "Y": 2.670288,
- "Z": 30.014404
- },
- "StopDistance": 10,
"TerritoryId": 132,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Gridania"
},
{
- "DataId": 25,
- "Position": {
- "X": 166.58276,
- "Y": -1.7243042,
- "Z": 86.13721
- },
"TerritoryId": 132,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Archers' Guild"
+ "AethernetShard": "[Gridania] Archers' Guild"
},
{
"Position": {
@@ -198,41 +186,23 @@
]
},
{
- "DataId": 26,
- "Position": {
- "X": 101.27405,
- "Y": 9.018005,
- "Z": -111.31464
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Leatherworkers' Guild"
+ "AethernetShard": "[Gridania] Leatherworkers' Guild & Shaded Bower"
},
{
- "DataId": 27,
- "Position": {
- "X": 121.23291,
- "Y": 12.649658,
- "Z": -229.63306
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Lancers' Guild"
+ "AethernetShard": "[Gridania] Lancers' Guild"
},
{
- "DataId": 30,
- "Position": {
- "X": -73.92999,
- "Y": 7.9804688,
- "Z": -140.15417
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Gridania] Mih Khetto's Amphitheatre",
"AethernetShortcut": [
"[Gridania] Lancers' Guild",
"[Gridania] Leatherworkers' Guild & Shaded Bower"
- ],
- "Comment": "Mih Khetto's Amphitheatre"
+ ]
},
{
"Position": {
@@ -244,30 +214,18 @@
"InteractionType": "WalkTo"
},
{
- "DataId": 29,
- "Position": {
- "X": -311.0857,
- "Y": 7.94989,
- "Z": -177.05048
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Botanists' Guild"
+ "AethernetShard": "[Gridania] Botanists' Guild"
},
{
- "DataId": 28,
- "Position": {
- "X": -145.15906,
- "Y": 4.9591064,
- "Z": -11.7647705
- },
"TerritoryId": 133,
"InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Gridania] Conjurers' Guild",
"AethernetShortcut": [
"[Gridania] Botanists' Guild",
"[Gridania] Mih Khetto's Amphitheatre"
- ],
- "Comment": "Conjurers' Guild"
+ ]
},
{
"DataId": 1000460,
@@ -385,14 +343,9 @@
]
},
{
- "DataId": 51,
- "Position": {
- "X": 6.6376343,
- "Y": 30.655273,
- "Z": -24.826477
- },
"TerritoryId": 131,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Ul'dah] The Chamber of Rule"
},
{
"DataId": 1001821,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/674_Call of the Sea.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/674_Call of the Sea.json
index 0633ce02..34393531 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/674_Call of the Sea.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Limsa/674_Call of the Sea.json
@@ -22,15 +22,9 @@
"Sequence": 255,
"Steps": [
{
- "DataId": 37,
- "Position": {
- "X": -98.22869,
- "Y": 42.37336,
- "Z": 88.46719
- },
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Alchemists' Guild"
+ "AethernetShard": "[Ul'dah] Alchemists' Guild"
},
{
"Position": {
@@ -54,59 +48,29 @@
]
},
{
- "DataId": 35,
- "Position": {
- "X": -53.8269,
- "Y": 10.72502,
- "Z": 12.24082
- },
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Gladiators' Guild"
+ "AethernetShard": "[Ul'dah] Gladiators' Guild"
},
{
- "DataId": 50,
- "Position": {
- "X": -19.31449,
- "Y": 14.63075,
- "Z": 72.0533
- },
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Goldsmiths' Guild"
+ "AethernetShard": "[Ul'dah] Goldsmiths' Guild"
},
{
- "DataId": 36,
- "Position": {
- "X": 33.52188,
- "Y": 13.23228,
- "Z": 113.2191
- },
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Miners' Guild"
+ "AethernetShard": "[Ul'dah] Miners' Guild"
},
{
- "DataId": 47,
- "Position": {
- "X": 89.67633,
- "Y": 12.93493,
- "Z": 58.2767
- },
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Weavers' Guild"
+ "AethernetShard": "[Ul'dah] Weavers' Guild"
},
{
- "DataId": 125,
- "Position": {
- "X": 131.9447,
- "Y": 4.714966,
- "Z": -29.800903
- },
"TerritoryId": 131,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Sapphire Avenue Exchange"
+ "AethernetShard": "[Ul'dah] Sapphire Avenue Exchange"
},
{
"Position": {
@@ -119,36 +83,19 @@
"TargetTerritoryId": 130
},
{
- "DataId": 33,
- "Position": {
- "X": 64.22522,
- "Y": 4.5318604,
- "Z": -115.31244
- },
"TerritoryId": 130,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Adventurers' Guild"
+ "AethernetShard": "[Ul'dah] Adventurers' Guild"
},
{
- "DataId": 9,
- "Position": {
- "X": -144.51825,
- "Y": -1.3580933,
- "Z": -169.6651
- },
- "StopDistance": 10,
"TerritoryId": 130,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Ul'dah"
},
{
- "DataId": 34,
- "Position": {
- "X": -154.83331,
- "Y": 14.633362,
- "Z": 73.07532
- },
"TerritoryId": 130,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Ul'dah] Thaumaturges' Guild"
},
{
"DataId": 1000972,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/245_It's Probably Pirates.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/245_It's Probably Pirates.json
index 26246353..7c630a79 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/245_It's Probably Pirates.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/245_It's Probably Pirates.json
@@ -88,15 +88,9 @@
"TargetTerritoryId": 138
},
{
- "DataId": 14,
- "Position": {
- "X": 260.94446,
- "Y": -19.60791,
- "Z": 218.52441
- },
- "StopDistance": 10,
"TerritoryId": 138,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Western La Noscea - Aleport"
},
{
"DataId": 1017075,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/510_A Wild Rose By Any Other Name.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/510_A Wild Rose By Any Other Name.json
index 855214bd..4ba2e3cb 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/510_A Wild Rose By Any Other Name.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/510_A Wild Rose By Any Other Name.json
@@ -44,15 +44,9 @@
"Sequence": 255,
"Steps": [
{
- "DataId": 53,
- "Position": {
- "X": -16.159302,
- "Y": 0.32037354,
- "Z": -166.58276
- },
- "StopDistance": 10,
"TerritoryId": 141,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Central Thanalan - Black Brush Station",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
@@ -80,15 +74,9 @@
"$": "Camp Drybone Lantern"
},
{
- "DataId": 18,
- "Position": {
- "X": -386.3432,
- "Y": -57.1756,
- "Z": 142.59558
- },
- "StopDistance": 10,
"TerritoryId": 145,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Eastern Thanalan - Camp Drybone"
},
{
"DataId": 1003929,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/660_Into a Copper Hell.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/660_Into a Copper Hell.json
index c0126c0d..7fdc48b2 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/660_Into a Copper Hell.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/660_Into a Copper Hell.json
@@ -40,15 +40,9 @@
"Sequence": 2,
"Steps": [
{
- "DataId": 17,
- "Position": {
- "X": 68.0094,
- "Y": 48.203125,
- "Z": -227.039
- },
- "StopDistance": 10,
"TerritoryId": 140,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Western Thanalan - Horizon",
"AethernetShortcut": [
"[Ul'dah] Adventurers' Guild",
"[Ul'dah] Gate of the Sultana (Western Thanalan)"
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/677_Fire in the Gloom.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/677_Fire in the Gloom.json
index b63a8aba..f296b5c6 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/677_Fire in the Gloom.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Shared/677_Fire in the Gloom.json
@@ -34,15 +34,9 @@
"$": "New Gridania Navmesh workaround"
},
{
- "DataId": 3,
- "Position": {
- "X": 13.076904,
- "Y": 0.56451416,
- "Z": 35.90442
- },
- "StopDistance": 10,
"TerritoryId": 148,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Central Shroud - Bentbranch Meadows",
"AethernetShortcut": [
"[Gridania] Aetheryte Plaza",
"[Gridania] Blue Badger Gate (Central Shroud)"
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/1037_A Hero in Need.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/1037_A Hero in Need.json
index 0047cff6..d0e61fe9 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/1037_A Hero in Need.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/1037_A Hero in Need.json
@@ -32,15 +32,10 @@
"AetheryteShortcut": "Central Thanalan - Black Brush Station"
},
{
- "DataId": 21,
- "Position": {
- "X": 20.98108,
- "Y": 8.8349,
- "Z": 454.0321
- },
"TerritoryId": 147,
"StopDistance": 5,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Northern Thanalan - Camp Bluefog"
},
{
"DataId": 1006638,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/3872_Hearts on Fire.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/3872_Hearts on Fire.json
index c4abe93a..de3f260f 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/3872_Hearts on Fire.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/3872_Hearts on Fire.json
@@ -25,15 +25,10 @@
"Sequence": 1,
"Steps": [
{
- "DataId": 22,
- "Position": {
- "X": -26.596497,
- "Y": 49.881714,
- "Z": -30.838562
- },
"TerritoryId": 147,
"StopDistance": 5,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Northern Thanalan - Ceruleum Processing Plant"
},
{
"DataId": 1006647,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/890_The Rose and the Unicorn.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/890_The Rose and the Unicorn.json
index 419b7584..aad48278 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/890_The Rose and the Unicorn.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/890_The Rose and the Unicorn.json
@@ -44,15 +44,10 @@
"Sequence": 255,
"Steps": [
{
- "DataId": 23,
- "Position": {
- "X": 223.98718,
- "Y": 315.7854,
- "Z": -234.85168
- },
"TerritoryId": 155,
"StopDistance": 5,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Coerthas Central Highlands - Camp Dragonhead"
},
{
"DataId": 1006384,
diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/984_Come-Into-My-Castrum.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/984_Come-Into-My-Castrum.json
index a919d044..976a0cf9 100644
--- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/984_Come-Into-My-Castrum.json
+++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/984_Come-Into-My-Castrum.json
@@ -52,15 +52,10 @@
"InteractionType": "WalkTo"
},
{
- "DataId": 24,
- "Position": {
- "X": 40.024292,
- "Y": 24.002441,
- "Z": -668.0247
- },
"TerritoryId": 156,
"StopDistance": 5,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Mor Dhona"
},
{
"DataId": 1006530,
diff --git a/QuestPaths/4.x - Stormblood/MSQ/F - 4.5/3183_The Face of War.json b/QuestPaths/4.x - Stormblood/MSQ/F - 4.5/3183_The Face of War.json
deleted file mode 100644
index 53b8b0d3..00000000
--- a/QuestPaths/4.x - Stormblood/MSQ/F - 4.5/3183_The Face of War.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "$schema": "https://carvel.li/questionable/quest-1.0",
- "Author": "liza",
- "QuestSequence": [
- {
- "Sequence": 1,
- "Steps": [
- {
- "TerritoryId": 829,
- "InteractionType": "Duty",
- "ContentFinderConditionId": 611
- }
- ]
- }
- ]
-}
diff --git a/QuestPaths/4.x - Stormblood/MSQ/F-4.5/3183_The Face of War.json b/QuestPaths/4.x - Stormblood/MSQ/F-4.5/3183_The Face of War.json
new file mode 100644
index 00000000..7cdc0e64
--- /dev/null
+++ b/QuestPaths/4.x - Stormblood/MSQ/F-4.5/3183_The Face of War.json
@@ -0,0 +1,74 @@
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "TerritoryId": 829,
+ "InteractionType": "Duty",
+ "ContentFinderConditionId": 611
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0,
+ "Z": 0
+ },
+ "TerritoryId": 1,
+ "InteractionType": "WalkTo",
+ "Comment": "Filler"
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 1026845,
+ "Position": {
+ "X": -476.67664,
+ "Y": 107.63,
+ "Z": 103.74609
+ },
+ "StopDistance": 7,
+ "TerritoryId": 829,
+ "InteractionType": "Interact"
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 2002881,
+ "Position": {
+ "X": 21.133728,
+ "Y": 22.323914,
+ "Z": -631.281
+ },
+ "TerritoryId": 156,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 351,
+ "AetheryteShortcut": "Mor Dhona"
+ },
+ {
+ "DataId": 1026846,
+ "Position": {
+ "X": -1.6022339,
+ "Y": 0,
+ "Z": -9.658997
+ },
+ "TerritoryId": 351,
+ "InteractionType": "CompleteQuest"
+ }
+ ]
+ }
+ ]
+}
diff --git a/QuestPaths/4.x - Stormblood/MSQ/H-4.55/3184_A Brief Reprieve.json b/QuestPaths/4.x - Stormblood/MSQ/H-4.55/3184_A Brief Reprieve.json
new file mode 100644
index 00000000..75a214e8
--- /dev/null
+++ b/QuestPaths/4.x - Stormblood/MSQ/H-4.55/3184_A Brief Reprieve.json
@@ -0,0 +1,73 @@
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1026846,
+ "Position": {
+ "X": -1.6022339,
+ "Y": 0,
+ "Z": -9.658997
+ },
+ "TerritoryId": 351,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 2002879,
+ "Position": {
+ "X": 0,
+ "Y": 3,
+ "Z": 27.5
+ },
+ "TerritoryId": 351,
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 156
+ },
+ {
+ "Position": {
+ "X": 30.917934,
+ "Y": 20.495003,
+ "Z": -656.1909
+ },
+ "TerritoryId": 156,
+ "InteractionType": "WalkTo",
+ "Mount": true
+ },
+ {
+ "DataId": 1026794,
+ "Position": {
+ "X": 124.193115,
+ "Y": -15.239566,
+ "Z": -424.30762
+ },
+ "TerritoryId": 156,
+ "InteractionType": "Interact",
+ "Fly": true
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1026797,
+ "Position": {
+ "X": -528.2521,
+ "Y": 8.691104,
+ "Z": -13.53479
+ },
+ "TerritoryId": 621,
+ "InteractionType": "CompleteQuest"
+ }
+ ]
+ }
+ ]
+}
diff --git a/QuestPaths/4.x - Stormblood/MSQ/H-4.55/3185_A Requiem for Heroes.json b/QuestPaths/4.x - Stormblood/MSQ/H-4.55/3185_A Requiem for Heroes.json
new file mode 100644
index 00000000..11aeb5f7
--- /dev/null
+++ b/QuestPaths/4.x - Stormblood/MSQ/H-4.55/3185_A Requiem for Heroes.json
@@ -0,0 +1,106 @@
+{
+ "$schema": "https://carvel.li/questionable/quest-1.0",
+ "Author": "liza",
+ "TerritoryBlacklist": [
+ 830
+ ],
+ "QuestSequence": [
+ {
+ "Sequence": 0,
+ "Steps": [
+ {
+ "DataId": 1026804,
+ "Position": {
+ "X": -524.55945,
+ "Y": 8.698304,
+ "Z": -15.487976
+ },
+ "StopDistance": 7,
+ "TerritoryId": 621,
+ "InteractionType": "AcceptQuest"
+ }
+ ]
+ },
+ {
+ "Sequence": 1,
+ "Steps": [
+ {
+ "DataId": 1026804,
+ "Position": {
+ "X": -524.55945,
+ "Y": 8.698304,
+ "Z": -15.487976
+ },
+ "StopDistance": 7,
+ "TerritoryId": 621,
+ "InteractionType": "Interact",
+ "DialogueChoices": [
+ {
+ "Type": "YesNo",
+ "Prompt": "TEXT_STMBDG102_03185_Q1_000_002",
+ "Yes": true
+ }
+ ]
+ },
+ {
+ "DataId": 1026845,
+ "Position": {
+ "X": -476.67664,
+ "Y": 107.63,
+ "Z": 103.74609
+ },
+ "TerritoryId": 829,
+ "InteractionType": "SinglePlayerDuty"
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
+ {
+ "Position": {
+ "X": 0,
+ "Y": 0,
+ "Z": 0
+ },
+ "TerritoryId": 1,
+ "InteractionType": "WalkTo",
+ "Comment": "Filler"
+ }
+ ]
+ },
+ {
+ "Sequence": 3,
+ "Steps": [
+ {
+ "DataId": 2002881,
+ "Position": {
+ "X": 21.133728,
+ "Y": 22.323914,
+ "Z": -631.281
+ },
+ "TerritoryId": 156,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Mor Dhona",
+ "TargetTerritoryId": 351
+ }
+ ]
+ },
+ {
+ "Sequence": 255,
+ "Steps": [
+ {
+ "DataId": 1026990,
+ "Position": {
+ "X": -2.4262085,
+ "Y": 0,
+ "Z": -9.10968
+ },
+ "StopDistance": 7,
+ "TerritoryId": 351,
+ "InteractionType": "CompleteQuest"
+ }
+ ]
+ }
+ ]
+}
diff --git a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4358_Old Sharlayan New to You.json b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4358_Old Sharlayan New to You.json
index 2d27822a..a5df5294 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4358_Old Sharlayan New to You.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4358_Old Sharlayan New to You.json
@@ -52,14 +52,9 @@
"Sequence": 3,
"Steps": [
{
- "DataId": 189,
- "Position": {
- "X": 16.49812,
- "Y": -16.247,
- "Z": 127.753
- },
"TerritoryId": 962,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Old Sharlayan] Scholar's Harbor"
},
{
"DataId": 1038578,
@@ -103,15 +98,9 @@
"Sequence": 5,
"Steps": [
{
- "DataId": 182,
- "Position": {
- "X": 0.08138847,
- "Y": 4.818894,
- "Z": -0.1004486
- },
- "StopDistance": 10,
"TerritoryId": 962,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Old Sharlayan"
},
{
"DataId": 1038578,
@@ -164,14 +153,9 @@
"Sequence": 7,
"Steps": [
{
- "DataId": 186,
- "Position": {
- "X": -36.94214,
- "Y": 41.367188,
- "Z": -156.6034
- },
"TerritoryId": 962,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Old Sharlayan] The Rostra"
},
{
"DataId": 1038578,
@@ -190,24 +174,14 @@
"Sequence": 8,
"Steps": [
{
- "DataId": 187,
- "Position": {
- "X": 204.79126,
- "Y": 21.774597,
- "Z": -118.73047
- },
"TerritoryId": 962,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Old Sharlayan] The Leveilleur Estate"
},
{
- "DataId": 188,
- "Position": {
- "X": 206.22559,
- "Y": 1.8463135,
- "Z": 13.77887
- },
"TerritoryId": 962,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Old Sharlayan] Journey's End"
},
{
"DataId": 1038578,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json
index 60212ed8..353698e1 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json
@@ -33,24 +33,14 @@
"TargetTerritoryId": 962
},
{
- "DataId": 185,
- "Position": {
- "X": -92.21033,
- "Y": 2.304016,
- "Z": 29.709229
- },
"TerritoryId": 962,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Old Sharlayan] The Baldesion Annex"
},
{
- "DataId": 184,
- "Position": {
- "X": -291.1574,
- "Y": 20.004517,
- "Z": -74.143616
- },
"TerritoryId": 962,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Old Sharlayan] The Studium"
},
{
"DataId": 1038675,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4363_Deeper into the Maze.json b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4363_Deeper into the Maze.json
index 1c5d6da9..bcab46f9 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4363_Deeper into the Maze.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4363_Deeper into the Maze.json
@@ -21,14 +21,9 @@
"Sequence": 1,
"Steps": [
{
- "DataId": 166,
- "Position": {
- "X": 443.5338,
- "Y": 170.6416,
- "Z": -476.18835
- },
"TerritoryId": 956,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Labyrinthos - Archeion"
},
{
"DataId": 1037475,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4369_On Low Tide.json b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4369_On Low Tide.json
index 2f4cfe3d..ff22a994 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4369_On Low Tide.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4369_On Low Tide.json
@@ -21,15 +21,10 @@
"Sequence": 1,
"Steps": [
{
- "DataId": 169,
- "Position": {
- "X": 193.529,
- "Y": 6.991216,
- "Z": 629.2394
- },
"StopDistance": 5,
"TerritoryId": 957,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Thavnair - Yedlihmad"
},
{
"DataId": 2011948,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4372_The Great Work.json b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4372_The Great Work.json
index 613a4430..2339d61a 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4372_The Great Work.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4372_The Great Work.json
@@ -36,15 +36,10 @@
"Sequence": 2,
"Steps": [
{
- "DataId": 170,
- "Position": {
- "X": -527.4888,
- "Y": 4.785123,
- "Z": 36.76496
- },
"StopDistance": 5,
"TerritoryId": 957,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Thavnair - Great Work"
},
{
"DataId": 1038631,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4378_The Jewel of Thavnair.json b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4378_The Jewel of Thavnair.json
index 64ee72b5..76beecd6 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4378_The Jewel of Thavnair.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4378_The Jewel of Thavnair.json
@@ -52,14 +52,9 @@
"Sequence": 3,
"Steps": [
{
- "DataId": 194,
- "Position": {
- "X": 6.6071167,
- "Y": -2.02948,
- "Z": 110.55151
- },
"TerritoryId": 963,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Radz-at-Han] Alzadaal's Peace"
},
{
"DataId": 1040256,
@@ -107,24 +102,14 @@
"Sequence": 6,
"Steps": [
{
- "DataId": 193,
- "Position": {
- "X": -144.33508,
- "Y": 27.969727,
- "Z": 202.2583
- },
"TerritoryId": 963,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Radz-at-Han] Airship Landing"
},
{
- "DataId": 191,
- "Position": {
- "X": -365.95715,
- "Y": 44.99878,
- "Z": -31.815125
- },
"TerritoryId": 963,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Radz-at-Han] Meghaduta"
},
{
"DataId": 1040259,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4379_The Color of Joy.json b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4379_The Color of Joy.json
index dbf13385..c7ea300c 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4379_The Color of Joy.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4379_The Color of Joy.json
@@ -36,14 +36,9 @@
"Sequence": 2,
"Steps": [
{
- "DataId": 192,
- "Position": {
- "X": -156.14563,
- "Y": 35.99597,
- "Z": 27.725586
- },
"TerritoryId": 963,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Radz-at-Han] Ruveydah Fibers"
},
{
"DataId": 1040264,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4383_A Frosty Reception.json b/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4383_A Frosty Reception.json
index f28918e4..814743dc 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4383_A Frosty Reception.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4383_A Frosty Reception.json
@@ -67,15 +67,10 @@
"Sequence": 3,
"Steps": [
{
- "DataId": 172,
- "Position": {
- "X": -408.0791,
- "Y": 24.18463,
- "Z": 479.9764
- },
"StopDistance": 7,
"TerritoryId": 958,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Garlemald - Camp Broken Glass"
},
{
"DataId": 1038826,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json b/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json
index 7a8dadae..198ab7ce 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json
@@ -51,15 +51,10 @@
"Sequence": 3,
"Steps": [
{
- "DataId": 173,
- "Position": {
- "X": 518.9136,
- "Y": -35.324707,
- "Z": -178.36273
- },
"StopDistance": 7,
"TerritoryId": 958,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Garlemald - Tertium",
"DisableNavmesh": true
},
{
diff --git a/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4396_A Trip to the Moon.json b/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4396_A Trip to the Moon.json
index d5b2d1f5..9c83d8c0 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4396_A Trip to the Moon.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/B-Garlemald/4396_A Trip to the Moon.json
@@ -58,15 +58,9 @@
"Sequence": 3,
"Steps": [
{
- "DataId": 174,
- "Position": {
- "X": -566.2438,
- "Y": 134.6656,
- "Z": 650.6459
- },
- "StopDistance": 10,
"TerritoryId": 959,
"InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Mare Lamentorum - Sinus Lacrimarum",
"Mount": true,
"DisableNavmesh": true
},
diff --git a/QuestPaths/6.x - Endwalker/MSQ/C-MareLamentorum/4401_A Harey Situation.json b/QuestPaths/6.x - Endwalker/MSQ/C-MareLamentorum/4401_A Harey Situation.json
index c64201aa..f35f8018 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/C-MareLamentorum/4401_A Harey Situation.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/C-MareLamentorum/4401_A Harey Situation.json
@@ -47,15 +47,9 @@
"Sequence": 2,
"Steps": [
{
- "DataId": 175,
- "Position": {
- "X": -0.01531982,
- "Y": -128.8109,
- "Z": -512.0165
- },
- "StopDistance": 10,
"TerritoryId": 959,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Mare Lamentorum - Bestways Burrow"
},
{
"Position": {
diff --git a/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json b/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json
index 0cc3b6a2..ff78c6ff 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json
@@ -149,14 +149,9 @@
"Sequence": 5,
"Steps": [
{
- "DataId": 196,
- "Position": {
- "X": -42.61847,
- "Y": -0.015319824,
- "Z": -197.61963
- },
"TerritoryId": 963,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Radz-at-Han] Mehryde's Meyhane"
},
{
"DataId": 1039001,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4411_Amidst the Apocalypse.json b/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4411_Amidst the Apocalypse.json
index 0cf92f46..7fcde7cc 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4411_Amidst the Apocalypse.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4411_Amidst the Apocalypse.json
@@ -51,14 +51,9 @@
"InteractionType": "Interact"
},
{
- "DataId": 198,
- "Position": {
- "X": 129.59485,
- "Y": 26.993164,
- "Z": 13.473633
- },
"TerritoryId": 963,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Radz-at-Han] Kama"
},
{
"DataId": 1039540,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4412_Beyond the Depths of Despair.json b/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4412_Beyond the Depths of Despair.json
index 76f3be81..54171b16 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4412_Beyond the Depths of Despair.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4412_Beyond the Depths of Despair.json
@@ -137,15 +137,9 @@
"InteractionType": "Interact"
},
{
- "DataId": 171,
- "Position": {
- "X": 405.1422,
- "Y": 5.2643433,
- "Z": -244.4953
- },
- "StopDistance": 10,
"TerritoryId": 957,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Thavnair - Palaka's Stand"
},
{
"DataId": 1039016,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4418_At Worlds End.json b/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4418_At Worlds End.json
index 15e713b5..d44bf4dc 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4418_At Worlds End.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/D-Thavnair2/4418_At Worlds End.json
@@ -36,26 +36,15 @@
"Sequence": 2,
"Steps": [
{
- "DataId": 183,
- "Position": {
- "X": 25.986084,
- "Y": 3.250122,
- "Z": -27.023743
- },
"TerritoryId": 963,
"InteractionType": "AttuneAetheryte",
- "StopDistance": 10,
+ "Aetheryte": "Radz-at-Han",
"DisableNavmesh": true
},
{
- "DataId": 195,
- "Position": {
- "X": -141.3616,
- "Y": 3.999954,
- "Z": -98.43509
- },
"TerritoryId": 963,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Radz-at-Han] Hall of the Radiant Host"
},
{
"DataId": 1040374,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4423_Ponder Warrant Cherish Welcome.json b/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4423_Ponder Warrant Cherish Welcome.json
index 0041d1b8..068a7edc 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4423_Ponder Warrant Cherish Welcome.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4423_Ponder Warrant Cherish Welcome.json
@@ -37,15 +37,10 @@
"Sequence": 2,
"Steps": [
{
- "DataId": 176,
- "Position": {
- "X": 159.96033,
- "Y": 11.703674,
- "Z": 126.878784
- },
"StopDistance": 6,
"TerritoryId": 961,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Elpis - Anagnorisis"
},
{
"DataId": 1040018,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4426_Aether to Aether.json b/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4426_Aether to Aether.json
index 3fcbe3ac..ef4ab3be 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4426_Aether to Aether.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4426_Aether to Aether.json
@@ -52,14 +52,9 @@
"Sequence": 3,
"Steps": [
{
- "DataId": 177,
- "Position": {
- "X": -633.7225,
- "Y": -19.821533,
- "Z": 542.56494
- },
"TerritoryId": 961,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Elpis - Twelve Wonders"
},
{
"DataId": 1040081,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4430_A Past Not Yet Come to Pass.json b/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4430_A Past Not Yet Come to Pass.json
index d5b68a15..d5110052 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4430_A Past Not Yet Come to Pass.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/E-Elpis/4430_A Past Not Yet Come to Pass.json
@@ -21,15 +21,10 @@
"Sequence": 1,
"Steps": [
{
- "DataId": 178,
- "Position": {
- "X": -529.9001,
- "Y": 161.24207,
- "Z": -222.2782
- },
"StopDistance": 7,
"TerritoryId": 961,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Elpis - Poieten Oikos"
},
{
"DataId": 1040112,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/F-Labyrinthos2/4442_No Job Too Small.json b/QuestPaths/6.x - Endwalker/MSQ/F-Labyrinthos2/4442_No Job Too Small.json
index e340f5c6..5d9d42d9 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/F-Labyrinthos2/4442_No Job Too Small.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/F-Labyrinthos2/4442_No Job Too Small.json
@@ -100,15 +100,10 @@
"Sequence": 255,
"Steps": [
{
- "DataId": 167,
- "Position": {
- "X": 8.377136,
- "Y": -27.542603,
- "Z": -46.67737
- },
"StopDistance": 7,
"TerritoryId": 956,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Labyrinthos - Sharlayan Hamlet"
},
{
"DataId": 1039761,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/F-Labyrinthos2/4446_Hither and Yarns.json b/QuestPaths/6.x - Endwalker/MSQ/F-Labyrinthos2/4446_Hither and Yarns.json
index 66a0ccc0..73bf083a 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/F-Labyrinthos2/4446_Hither and Yarns.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/F-Labyrinthos2/4446_Hither and Yarns.json
@@ -67,15 +67,10 @@
"Sequence": 4,
"Steps": [
{
- "DataId": 168,
- "Position": {
- "X": -729.18286,
- "Y": -27.634155,
- "Z": 302.1438
- },
"StopDistance": 6,
"TerritoryId": 956,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Labyrinthos - Aporia"
},
{
"DataId": 1040447,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4454_On Burdened Wings.json b/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4454_On Burdened Wings.json
index 2ed153b2..14f12e52 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4454_On Burdened Wings.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4454_On Burdened Wings.json
@@ -64,15 +64,10 @@
"$.1": "QuestVariables if done after [1]: 2 0 0 0 0 96"
},
{
- "DataId": 179,
- "Position": {
- "X": -544.1215,
- "Y": 74.34187,
- "Z": 269.6726
- },
"StopDistance": 10,
"TerritoryId": 960,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Ultima Thule - Reah Tahra"
},
{
"DataId": 1038006,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4456_Roads Paved of Sacrifice.json b/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4456_Roads Paved of Sacrifice.json
index ad0c553e..5aa4b402 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4456_Roads Paved of Sacrifice.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4456_Roads Paved of Sacrifice.json
@@ -162,15 +162,10 @@
"$.1": "QuestVariables if done after [1]: 2 0 0 0 0 192"
},
{
- "DataId": 180,
- "Position": {
- "X": 64.286255,
- "Y": 272.48022,
- "Z": -657.49603
- },
"StopDistance": 8,
"TerritoryId": 960,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Ultima Thule - Abode of the Ea"
},
{
"DataId": 2012356,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4459_Victory x Lost.json b/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4459_Victory x Lost.json
index 7d723af8..fea444db 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4459_Victory x Lost.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/G-UltimaThule/4459_Victory x Lost.json
@@ -224,15 +224,10 @@
"Sequence": 255,
"Steps": [
{
- "DataId": 181,
- "Position": {
- "X": 489.2804,
- "Y": 437.5829,
- "Z": 333.63843
- },
"StopDistance": 5,
"TerritoryId": 960,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Ultima Thule - Base Omicron"
},
{
"DataId": 1039791,
diff --git a/QuestPaths/6.x - Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json b/QuestPaths/6.x - Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json
index fe187b27..19154119 100644
--- a/QuestPaths/6.x - Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json
+++ b/QuestPaths/6.x - Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json
@@ -21,14 +21,9 @@
"Sequence": 1,
"Steps": [
{
- "DataId": 199,
- "Position": {
- "X": 57.91655,
- "Y": -24.69344,
- "Z": -210.6151
- },
"TerritoryId": 963,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Radz-at-Han] The High Crucible of Al-Kimiya"
},
{
"DataId": 1039589,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4861_The Nation of Tuliyollal.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4861_The Nation of Tuliyollal.json
index 203eee27..611c90d4 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4861_The Nation of Tuliyollal.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4861_The Nation of Tuliyollal.json
@@ -70,16 +70,10 @@
"Sequence": 4,
"Steps": [
{
- "DataId": 216,
- "Position": {
- "X": -24.06776,
- "Y": 0.8,
- "Z": 7.599182
- },
"StopDistance": 7,
"TerritoryId": 1185,
"InteractionType": "AttuneAetheryte",
- "DisableNavmesh": true
+ "Aetheryte": "Tuliyollal"
},
{
"Position": {
@@ -91,15 +85,9 @@
"InteractionType": "WalkTo"
},
{
- "DataId": 224,
- "Position": {
- "X": 71.7937,
- "Y": 47.074097,
- "Z": -333.21124
- },
"TerritoryId": 1185,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Brightploom Post"
+ "AethernetShard": "[Tuliyollal] Brightploom Post"
},
{
"DataId": 1046504,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4862_A City of Stairs.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4862_A City of Stairs.json
index 95eaff80..9132c121 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4862_A City of Stairs.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4862_A City of Stairs.json
@@ -70,15 +70,9 @@
"Sequence": 4,
"Steps": [
{
- "DataId": 219,
- "Position": {
- "X": -187.1214,
- "Y": 39.93274,
- "Z": 6.088318
- },
"TerritoryId": 1185,
"InteractionType": "AttuneAethernetShard",
- "Comment": "The Resplendent Quarter"
+ "AethernetShard": "[Tuliyollal] The Resplendent Quarter"
},
{
"DataId": 1046509,
@@ -97,15 +91,10 @@
"Sequence": 5,
"Steps": [
{
- "DataId": 218,
- "Position": {
- "X": -413.68738,
- "Y": 2.9754639,
- "Z": -45.975464
- },
"TerritoryId": 1185,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Dirigible Landing"
+ "Comment": "Dirigible Landing",
+ "AethernetShard": "[Tuliyollal] Dirigible Landing"
},
{
"DataId": 1046509,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4863_A Saga in Stone.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4863_A Saga in Stone.json
index ba5c7a98..bca5f650 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4863_A Saga in Stone.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4863_A Saga in Stone.json
@@ -64,14 +64,9 @@
"Sequence": 2,
"Steps": [
{
- "DataId": 220,
- "Position": {
- "X": -149.73682,
- "Y": -15.030151,
- "Z": 198.90125
- },
"TerritoryId": 1185,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Tuliyollal] The For'ard Cabins"
},
{
"DataId": 1046512,
@@ -120,14 +115,9 @@
"Sequence": 255,
"Steps": [
{
- "DataId": 221,
- "Position": {
- "X": -14.98317,
- "Y": -10.00001,
- "Z": 135.5848
- },
"TerritoryId": 1185,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Tuliyollal] Bayside Bevy Marketplace"
},
{
"Position": {
@@ -144,14 +134,9 @@
"Comment": "Resplentend Quarter Lamp nav"
},
{
- "DataId": 222,
- "Position": {
- "X": -99.13794,
- "Y": 100.72473,
- "Z": -222.03406
- },
"TerritoryId": 1185,
- "InteractionType": "AttuneAethernetShard"
+ "InteractionType": "AttuneAethernetShard",
+ "AethernetShard": "[Tuliyollal] Vollok Shoonsa"
},
{
"DataId": 1046517,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4866_A Festive People.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4866_A Festive People.json
index b737858c..ae92a025 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4866_A Festive People.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4866_A Festive People.json
@@ -30,15 +30,9 @@
"InteractionType": "WalkTo"
},
{
- "DataId": 202,
- "Position": {
- "X": -169.51251,
- "Y": 6.576599,
- "Z": -479.42322
- },
- "StopDistance": 11,
"TerritoryId": 1188,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Kozama'uka - Ok'hanu"
},
{
"DataId": 1046699,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4872_Traders of Happiness.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4872_Traders of Happiness.json
index 5f987a11..5a8da687 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4872_Traders of Happiness.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4872_Traders of Happiness.json
@@ -40,15 +40,9 @@
]
},
{
- "DataId": 200,
- "Position": {
- "X": 332.9855,
- "Y": -160.0985,
- "Z": -416.1924
- },
- "StopDistance": 10,
"TerritoryId": 1187,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Urqopacha - Wachunpelo"
},
{
"DataId": 1046559,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4878_The Success of Others.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4878_The Success of Others.json
index 9a8138f2..bd80eff9 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4878_The Success of Others.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4878_The Success of Others.json
@@ -51,15 +51,9 @@
"Sequence": 3,
"Steps": [
{
- "DataId": 223,
- "Position": {
- "X": 166.27747,
- "Y": -17.990417,
- "Z": 38.742676
- },
"TerritoryId": 1185,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Wachumeqimeqi"
+ "AethernetShard": "[Tuliyollal] Wachumeqimeqi"
},
{
"Position": {
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4880_A Leaking Workpot.json b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4880_A Leaking Workpot.json
index 20faf30d..a9b3124c 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4880_A Leaking Workpot.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4880_A Leaking Workpot.json
@@ -22,15 +22,9 @@
"Sequence": 1,
"Steps": [
{
- "DataId": 203,
- "Position": {
- "X": 541.1674,
- "Y": 117.4462,
- "Z": 203.6108
- },
- "StopDistance": 10,
"TerritoryId": 1188,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Kozama'uka - Many Fires"
},
{
"Position": {
@@ -110,15 +104,9 @@
"Sequence": 255,
"Steps": [
{
- "DataId": 204,
- "Position": {
- "X": -477.53113,
- "Y": 124.04053,
- "Z": 311.32983
- },
- "StopDistance": 10,
"TerritoryId": 1188,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Kozama'uka - Earthenshire"
},
{
"DataId": 1046613,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4889_History's Keepers.json b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4889_History's Keepers.json
index 5fb8769c..58d1bd57 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4889_History's Keepers.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4889_History's Keepers.json
@@ -62,15 +62,9 @@
"Sequence": 3,
"Steps": [
{
- "DataId": 201,
- "Position": {
- "X": 465.62903,
- "Y": 114.94617,
- "Z": 634.9126
- },
- "StopDistance": 10,
"TerritoryId": 1187,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Urqopacha - Worlar's Echo"
},
{
"DataId": 1046819,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4898_Village of the Hunt.json b/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4898_Village of the Hunt.json
index 3fed7a14..3797eaca 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4898_Village of the Hunt.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4898_Village of the Hunt.json
@@ -91,15 +91,9 @@
]
},
{
- "DataId": 205,
- "Position": {
- "X": -397.0547,
- "Y": 23.53558,
- "Z": -431.921
- },
- "StopDistance": 10,
"TerritoryId": 1189,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Yak T'el - Iq Br'aax"
},
{
"DataId": 2013645,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4904_City of Silence.json b/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4904_City of Silence.json
index 70659de1..8525c249 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4904_City of Silence.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4904_City of Silence.json
@@ -21,15 +21,9 @@
"Sequence": 1,
"Steps": [
{
- "DataId": 206,
- "Position": {
- "X": 721.40076,
- "Y": -132.31104,
- "Z": 526.1769
- },
- "StopDistance": 10,
"TerritoryId": 1189,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Yak T'el - Mamook"
},
{
"DataId": 2013953,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4913_Saddled Up.json b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4913_Saddled Up.json
index 7210560c..4fb9580b 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4913_Saddled Up.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4913_Saddled Up.json
@@ -22,15 +22,10 @@
"Sequence": 1,
"Steps": [
{
- "DataId": 207,
- "Position": {
- "X": 386.4091,
- "Y": -0.1697721,
- "Z": 467.6294
- },
"StopDistance": 8,
"TerritoryId": 1190,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Shaaloani - Hhusatahwi"
},
{
"DataId": 1046953,
@@ -70,15 +65,10 @@
"Sequence": 3,
"Steps": [
{
- "DataId": 208,
- "Position": {
- "X": -291.70673,
- "Y": 19.08899,
- "Z": -114.54956
- },
"StopDistance": 8,
"TerritoryId": 1190,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Shaaloani - Sheshenewezi Springs"
},
{
"Position": {
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4918_One With Nature.json b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4918_One With Nature.json
index a5e0205f..77411fc7 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4918_One With Nature.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4918_One With Nature.json
@@ -51,15 +51,10 @@
"Sequence": 3,
"Steps": [
{
- "DataId": 209,
- "Position": {
- "X": 311.36023,
- "Y": -14.175659,
- "Z": -567.74243
- },
"StopDistance": 8,
"TerritoryId": 1190,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Shaaloani - Mehwahhetsoan"
},
{
"DataId": 2013960,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4927_The Land of Levin.json b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4927_The Land of Levin.json
index e531b0fb..e78757a7 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4927_The Land of Levin.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4927_The Land of Levin.json
@@ -53,15 +53,10 @@
"Sequence": 3,
"Steps": [
{
- "DataId": 210,
- "Position": {
- "X": 514.6105,
- "Y": 145.86096,
- "Z": 207.56836
- },
"StopDistance": 8,
"TerritoryId": 1191,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Heritage Found - Yyasulani Station"
},
{
"DataId": 2013817,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4928_A Royal Welcome.json b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4928_A Royal Welcome.json
index cdd98121..2e140d5e 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4928_A Royal Welcome.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4928_A Royal Welcome.json
@@ -62,15 +62,9 @@
"Sequence": 255,
"Steps": [
{
- "DataId": 211,
- "Position": {
- "X": -223.0173,
- "Y": 31.94039,
- "Z": -584.0194
- },
- "StopDistance": 10,
"TerritoryId": 1191,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Heritage Found - The Outskirts"
},
{
"DataId": 1047403,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4933_Solution Nine.json b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4933_Solution Nine.json
index 7d3d23e7..b0ce5f88 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4933_Solution Nine.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4933_Solution Nine.json
@@ -69,15 +69,9 @@
"Sequence": 4,
"Steps": [
{
- "DataId": 230,
- "Position": {
- "X": -30.41562,
- "Y": -6.050003,
- "Z": 209.3459
- },
"TerritoryId": 1186,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Information Center"
+ "AethernetShard": "[Solution Nine] Information Center"
},
{
"DataId": 1048060,
@@ -104,15 +98,10 @@
"InteractionType": "WalkTo"
},
{
- "DataId": 217,
- "Position": {
- "X": -0.015319824,
- "Y": 8.987488,
- "Z": -0.015319824
- },
"StopDistance": 11,
"TerritoryId": 1186,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Solution Nine"
},
{
"DataId": 1048061,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4934_The Queen's Tour.json b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4934_The Queen's Tour.json
index 59abad93..c4114a88 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4934_The Queen's Tour.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4934_The Queen's Tour.json
@@ -84,15 +84,9 @@
"Sequence": 4,
"Steps": [
{
- "DataId": 235,
- "Position": {
- "X": -160.0287,
- "Y": 0,
- "Z": 21.5968
- },
"TerritoryId": 1186,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Nexus Arcade"
+ "AethernetShard": "[Solution Nine] Nexus Arcade"
},
{
"DataId": 1048065,
@@ -127,15 +121,9 @@
"Sequence": 6,
"Steps": [
{
- "DataId": 236,
- "Position": {
- "X": -378.13385,
- "Y": 13.992493,
- "Z": 136.49194
- },
"TerritoryId": 1186,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Residential Sector"
+ "AethernetShard": "[Solution Nine] Residential Sector"
},
{
"DataId": 1048065,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4935_Her People, Her Family.json b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4935_Her People, Her Family.json
index f218060e..70c6474d 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4935_Her People, Her Family.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4935_Her People, Her Family.json
@@ -47,15 +47,9 @@
"InteractionType": "WalkTo"
},
{
- "DataId": 234,
- "Position": {
- "X": -32.059265,
- "Y": 38.04065,
- "Z": -345.2354
- },
"TerritoryId": 1186,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Resolution"
+ "AethernetShard": "[Solution Nine] Resolution"
},
{
"DataId": 1048073,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4937_Gives You Teeth.json b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4937_Gives You Teeth.json
index 8bb04ed0..b6c1ee3e 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4937_Gives You Teeth.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4937_Gives You Teeth.json
@@ -48,26 +48,14 @@
"TargetTerritoryId": 1186
},
{
- "DataId": 232,
- "Position": {
- "X": 258.28943,
- "Y": 50.736206,
- "Z": 148.72961
- },
"TerritoryId": 1186,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Neon Stein"
+ "AethernetShard": "[Solution Nine] Neon Stein"
},
{
- "DataId": 231,
- "Position": {
- "X": 382.6809,
- "Y": 59.983154,
- "Z": 76.67651
- },
"TerritoryId": 1186,
"InteractionType": "AttuneAethernetShard",
- "Comment": "True Vue"
+ "AethernetShard": "[Solution Nine] True Vue"
},
{
"DataId": 1048090,
@@ -116,15 +104,9 @@
"Sequence": 5,
"Steps": [
{
- "DataId": 233,
- "Position": {
- "X": 374.77686,
- "Y": 60.01367,
- "Z": 325.67322
- },
"TerritoryId": 1186,
"InteractionType": "AttuneAethernetShard",
- "Comment": "Arcadion"
+ "AethernetShard": "[Solution Nine] The Arcadion"
},
{
"DataId": 1048083,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4939_Drowned Vestiges.json b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4939_Drowned Vestiges.json
index 1d0fc93b..4515a031 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4939_Drowned Vestiges.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4939_Drowned Vestiges.json
@@ -206,15 +206,9 @@
"Sequence": 5,
"Steps": [
{
- "DataId": 212,
- "Position": {
- "X": -219.53156,
- "Y": 32.913696,
- "Z": 120.77515
- },
- "StopDistance": 10,
"TerritoryId": 1191,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Heritage Found - Electrope Strike"
},
{
"DataId": 2013972,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4954_The Taste of Family.json b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4954_The Taste of Family.json
index 96e9737a..e54dc5c9 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4954_The Taste of Family.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4954_The Taste of Family.json
@@ -70,15 +70,9 @@
]
},
{
- "DataId": 214,
- "Position": {
- "X": 657.98413,
- "Y": 28.976807,
- "Z": -284.01617
- },
- "StopDistance": 10,
"TerritoryId": 1192,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Living Memory - Leynode Pyro"
},
{
"DataId": 1047943,
diff --git a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4957_In Search of Discovery.json b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4957_In Search of Discovery.json
index 50df03aa..5b6c99cf 100644
--- a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4957_In Search of Discovery.json
+++ b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4957_In Search of Discovery.json
@@ -95,15 +95,9 @@
]
},
{
- "DataId": 215,
- "Position": {
- "X": -255.26825,
- "Y": 59.433838,
- "Z": -397.6654
- },
- "StopDistance": 10,
"TerritoryId": 1192,
- "InteractionType": "AttuneAetheryte"
+ "InteractionType": "AttuneAetheryte",
+ "Aetheryte": "Living Memory - Leynode Aero"
},
{
"DataId": 1047993,
diff --git a/QuestPaths/AssemblyQuestLoader.cs b/QuestPaths/AssemblyQuestLoader.cs
index 3c8b7b71..086e4ad9 100644
--- a/QuestPaths/AssemblyQuestLoader.cs
+++ b/QuestPaths/AssemblyQuestLoader.cs
@@ -1,5 +1,7 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using System.IO;
+using System.Reflection;
using Questionable.Model.V1;
namespace Questionable.QuestPaths;
@@ -13,4 +15,7 @@ public static partial class AssemblyQuestLoader
#else
new Dictionary();
#endif
+
+ public static Stream QuestSchema =>
+ typeof(AssemblyQuestLoader).Assembly.GetManifestResourceStream("Questionable.QuestPaths.QuestSchema")!;
}
diff --git a/QuestPaths/QuestPaths.csproj b/QuestPaths/QuestPaths.csproj
index 1ffde5ce..cb63fbaa 100644
--- a/QuestPaths/QuestPaths.csproj
+++ b/QuestPaths/QuestPaths.csproj
@@ -18,6 +18,13 @@
ReferenceOutputAssembly="false"/>
+
+
+
+ Questionable.QuestPaths.QuestSchema
+
+
+
@@ -25,7 +32,6 @@
-
@@ -34,4 +40,12 @@
+
+
+
+
+
+
+
+
diff --git a/QuestPaths/README.md b/QuestPaths/README.md
index b969cf17..0b7fdcfc 100644
--- a/QuestPaths/README.md
+++ b/QuestPaths/README.md
@@ -20,6 +20,10 @@ Generally, the folder name is derived from SE's classification of quests.
### Stormblood
+- `MSQ`: `StmBd@@` with `@@` being the letter/number used as part of the folder name
+ - `StmBdA1`: `A1 - xxx`
+ - `StmBdB`: `B - 4.1` (and so on for later patches)
+
### Shadowbringers
- `MSQ`: `LucKm@` with `@` being the letter used as part of the folder name
diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json
index 40c85966..14f1a4d1 100644
--- a/QuestPaths/quest-v1.json
+++ b/QuestPaths/quest-v1.json
@@ -152,116 +152,8 @@
]
},
"AetheryteShortcut": {
- "type": "string",
"description": "The Aetheryte to teleport to (before moving)",
- "enum": [
- "Gridania",
- "Central Shroud - Bentbranch Meadows",
- "East Shroud - Hawthorne Hut",
- "South Shroud - Quarrymill",
- "South Shroud - Camp Tranquil",
- "North Shroud - Fallgourd Float",
- "Ul'dah",
- "Western Thanalan - Horizon",
- "Central Thanalan - Black Brush Station",
- "Eastern Thanalan - Camp Drybone",
- "Southern Thanalan - Little Ala Mhigo",
- "Southern Thanalan - Forgotten Springs",
- "Northern Thanalan - Camp Bluefog",
- "Northern Thanalan - Ceruleum Processing Plant",
- "Limsa Lominsa",
- "Middle La Noscea - Summerford Farms",
- "Lower La Noscea - Moraby Drydocks",
- "Eastern La Noscea - Costa Del Sol",
- "Eastern La Noscea - Wineport",
- "Western La Noscea - Swiftperch",
- "Western La Noscea - Aleport",
- "Upper La Noscea - Camp Bronze Lake",
- "Outer La Noscea - Camp Overlook",
- "Coerthas Central Highlands - Camp Dragonhead",
- "Mor Dhona",
- "Gold Saucer",
- "Wolves' Den Pier",
- "Ishgard",
- "Idyllshire",
- "Coerthas Western Highlands - Falcon's Nest",
- "The Sea of Clouds - Camp Cloudtop",
- "The Sea of Clouds - Ok' Zundu",
- "Azys Lla - Helix",
- "The Dravanian Forelands - Tailfeather",
- "The Dravanian Forelands - Anyx Trine",
- "The Churning Mists - Moghome",
- "The Churning Mists - Zenith",
- "Rhalgr's Reach",
- "Fringes - Castrum Oriens",
- "Fringes - Peering Stones",
- "Peaks - Ala Gannha",
- "Peaks - Ala Ghiri",
- "Lochs - Porta Praetoria",
- "Lochs - Ala Mhigan Quarter",
- "Kugane",
- "Ruby Sea - Tamamizu",
- "Ruby Sea - Onokoro",
- "Yanxia - Namai",
- "Yanxia - House of the Fierce",
- "Azim Steppe - Reunion",
- "Azim Steppe - Dawn Throne",
- "Azim Steppe - Dhoro Iloh",
- "Doman Enclave",
- "Crystarium",
- "Eulmore",
- "Lakeland - Fort Jobb",
- "Lakeland - Ostall Imperative",
- "Kholusia - Stilltide",
- "Kholusia - Wright",
- "Kholusia - Tomra",
- "Amh Araeng - Mord Souq",
- "Amh Araeng - Inn at Journey's Head",
- "Amh Araeng - Twine",
- "Rak'tika - Slitherbough",
- "Rak'tika - Fanow",
- "Il Mheg - Lydha Lran",
- "Il Mheg - Pia Enni",
- "Il Mheg - Wolekdorf",
- "Tempest - Ondo Cups",
- "Tempest - Macarenses Angle",
- "Old Sharlayan",
- "Radz-at-Han",
- "Labyrinthos - Archeion",
- "Labyrinthos - Sharlayan Hamlet",
- "Labyrinthos - Aporia",
- "Thavnair - Yedlihmad",
- "Thavnair - Great Work",
- "Thavnair - Palaka's Stand",
- "Garlemald - Camp Broken Glass",
- "Garlemald - Tertium",
- "Mare Lamentorum - Sinus Lacrimarum",
- "Mare Lamentorum - Bestways Burrow",
- "Elpis - Anagnorisis",
- "Elpis - Twelve Wonders",
- "Elpis - Poieten Oikos",
- "Ultima Thule - Reah Tahra",
- "Ultima Thule - Abode of the Ea",
- "Ultima Thule - Base Omicron",
- "Tuliyollal",
- "Solution Nine",
- "Urqopacha - Wachunpelo",
- "Urqopacha - Worlar's Echo",
- "Kozama'uka - Ok'hanu",
- "Kozama'uka - Many Fires",
- "Kozama'uka - Earthenshire",
- "Yak T'el - Iq Br'aax",
- "Yak T'el - Mamook",
- "Shaaloani - Hhusatahwi",
- "Shaaloani - Sheshenewezi Springs",
- "Shaaloani - Mehwahhetsoan",
- "Heritage Found - Yyasulani Station",
- "Heritage Found - The Outskirts",
- "Heritage Found - Electrope Strike",
- "Living Memory - Leynode Mnemo",
- "Living Memory - Leynode Pyro",
- "Living Memory - Leynode Aero"
- ]
+ "$ref": "#/$defs/Aetheryte"
},
"AethernetShortcut": {
"type": "array",
@@ -269,129 +161,7 @@
"minItems": 2,
"maxItems": 2,
"items": {
- "type": "string",
- "enum": [
- "[Gridania] Aetheryte Plaza",
- "[Gridania] Archers' Guild",
- "[Gridania] Leatherworkers' Guild & Shaded Bower",
- "[Gridania] Lancers' Guild",
- "[Gridania] Conjurers' Guild",
- "[Gridania] Botanists' Guild",
- "[Gridania] Mih Khetto's Amphitheatre",
- "[Gridania] Blue Badger Gate (Central Shroud)",
- "[Gridania] Yellow Serpent Gate (North Shroud)",
- "[Gridania] White Wolf Gate (Central Shroud)",
- "[Gridania] Airship Landing",
- "[Ul'dah] Aetheryte Plaza",
- "[Ul'dah] Adventurers' Guild",
- "[Ul'dah] Thaumaturges' Guild",
- "[Ul'dah] Gladiators' Guild",
- "[Ul'dah] Miners' Guild",
- "[Ul'dah] Weavers' Guild",
- "[Ul'dah] Goldsmiths' Guild",
- "[Ul'dah] Sapphire Avenue Exchange",
- "[Ul'dah] Alchemists' Guild",
- "[Ul'dah] Gate of the Sultana (Western Thanalan)",
- "[Ul'dah] Gate of Nald (Central Thanalan)",
- "[Ul'dah] Gate of Thal (Central Thanalan)",
- "[Ul'dah] The Chamber of Rule",
- "[Ul'dah] Airship Landing",
- "[Limsa Lominsa] Aetheryte Plaza",
- "[Limsa Lominsa] Arcanists' Guild",
- "[Limsa Lominsa] Fishermens' Guild",
- "[Limsa Lominsa] Hawkers' Alley",
- "[Limsa Lominsa] The Aftcastle",
- "[Limsa Lominsa] Culinarians' Guild",
- "[Limsa Lominsa] Marauders' Guild",
- "[Limsa Lominsa] Zephyr Gate (Middle La Noscea)",
- "[Limsa Lominsa] Tempest Gate (Lower La Noscea)",
- "[Limsa Lominsa] Airship Landing",
- "[Ishgard] Aetheryte Plaza",
- "[Ishgard] The Forgotten Knight",
- "[Ishgard] Skysteel Manufactory",
- "[Ishgard] The Brume",
- "[Ishgard] Athenaeum Astrologicum",
- "[Ishgard] The Jeweled Crozier",
- "[Ishgard] Saint Reymanaud's Cathedral",
- "[Ishgard] The Tribunal",
- "[Ishgard] The Last Vigil",
- "[Ishgard] The Gates of Judgement (Coerthas Central Highlands)",
- "[Idyllshire] Aetheryte Plaza",
- "[Idyllshire] West Idyllshire",
- "[Idyllshire] Prologue Gate",
- "[Idyllshire] Epilogue Gate",
- "[Rhalgr's Reach] Aetheryte Plaza",
- "[Rhalgr's Reach] Western Rhalgr's Reach",
- "[Rhalgr's Reach] Northeastern Rhalgr's Reach",
- "[Rhalgr's Reach] Fringes Gate",
- "[Rhalgr's Reach] Peaks Gate",
- "[Kugane] Aetheryte Plaza",
- "[Kugane] Shiokaze Hostelry",
- "[Kugane] Pier #1",
- "[Kugane] Thavnairian Consulate",
- "[Kugane] Kogane Dori Markets",
- "[Kugane] Bokairo Inn",
- "[Kugane] The Ruby Bazaar",
- "[Kugane] Sekiseigumi Barracks",
- "[Kugane] Rakuza District",
- "[Kugane] The Ruby Price",
- "[Kugane] Airship Landing",
- "[Crystarium] Aetheryte Plaza",
- "[Crystarium] Musica Universalis Markets",
- "[Crystarium] Themenos Rookery",
- "[Crystarium] The Dossal Gate",
- "[Crystarium] The Pendants",
- "[Crystarium] The Amaro Launch",
- "[Crystarium] The Crystalline Mean",
- "[Crystarium] The Cabinet of Curiosity",
- "[Crystarium] Tessellation (Lakeland)",
- "[Eulmore] Aetheryte Plaza",
- "[Eulmore] Southeast Derelicts",
- "[Eulmore] Nightsoil Pots",
- "[Eulmore] The Glory Gate",
- "[Eulmore] The Mainstay",
- "[Eulmore] The Path to Glory (Kholusia)",
- "[Old Sharlayan] Aetheryte Plaza",
- "[Old Sharlayan] The Studium",
- "[Old Sharlayan] The Baldesion Annex",
- "[Old Sharlayan] The Rostra",
- "[Old Sharlayan] The Leveilleur Estate",
- "[Old Sharlayan] Journey's End",
- "[Old Sharlayan] Scholar's Harbor",
- "[Old Sharlayan] The Hall of Artifice (Labyrinthos)",
- "[Radz-at-Han] Aetheryte Plaza",
- "[Radz-at-Han] Meghaduta",
- "[Radz-at-Han] Ruveydah Fibers",
- "[Radz-at-Han] Airship Landing",
- "[Radz-at-Han] Alzadaal's Peace",
- "[Radz-at-Han] Hall of the Radiant Host",
- "[Radz-at-Han] Mehryde's Meyhane",
- "[Radz-at-Han] Kama",
- "[Radz-at-Han] The High Crucible of Al-Kimiya",
- "[Radz-at-Han] The Gate of First Sight (Thavnair)",
- "[Tuliyollal] Aetheryte Plaza",
- "[Tuliyollal] Dirigible Landing",
- "[Tuliyollal] The Resplendent Quarter",
- "[Tuliyollal] The For'ard Cabins",
- "[Tuliyollal] Bayside Bevy Marketplace",
- "[Tuliyollal] Vollok Shoonsa",
- "[Tuliyollal] Wachumeqimeqi",
- "[Tuliyollal] Brightploom Post",
- "[Tuliyollal] Arch of the Dawn (Urqopacha)",
- "[Tuliyollal] Arch of the Dawn (Kozama'uka)",
- "[Tuliyollal] Ihuykatumu (Kozama'uka)",
- "[Tuliyollal] Dirigible Landing (Yak T'el)",
- "[Tuliyollal] Xak Tural Skygate (Shaaloani)",
- "[Solution Nine] Aetheryte Plaza",
- "[Solution Nine] Information Center",
- "[Solution Nine] True Vue",
- "[Solution Nine] Neon Stein",
- "[Solution Nine] The Arcadion",
- "[Solution Nine] Resolution",
- "[Solution Nine] Nexus Arcade",
- "[Solution Nine] Residential Sector",
- "[Solution Nine] Scanning Port Nine (Heritage Found)"
- ]
+ "$ref": "#/$defs/AethernetShard"
}
},
"ItemId": {
@@ -475,21 +245,49 @@
"if": {
"properties": {
"InteractionType": {
- "anyOf": [
- {
- "const": "AttuneAethernetShard"
- },
- {
- "const": "AttuneAetheryte"
- }
- ]
+ "const": "AttuneAetheryte"
}
}
},
"then": {
+ "properties": {
+ "Aetheryte": {
+ "$ref": "#/$defs/Aetheryte"
+ },
+ "DataId": {
+ "type": "null"
+ },
+ "Position": {
+ "type": "null"
+ }
+ },
"required": [
- "DataId",
- "Position"
+ "Aetheryte"
+ ]
+ }
+ },
+ {
+ "if": {
+ "properties": {
+ "InteractionType": {
+ "const": "AttuneAethernetShard"
+ }
+ }
+ },
+ "then": {
+ "properties": {
+ "AethernetShard": {
+ "$ref": "#/$defs/AethernetShard"
+ },
+ "DataId": {
+ "type": "null"
+ },
+ "Position": {
+ "type": "null"
+ }
+ },
+ "required": [
+ "AethernetShard"
]
}
},
@@ -952,7 +750,14 @@
"properties": {
"ContentFinderConditionId": {
"type": "integer",
- "exclusiveMinimum": 0
+ "exclusiveMinimum": 0,
+ "exclusiveMaximum": 3000
+ },
+ "DataId": {
+ "type": "null"
+ },
+ "Position": {
+ "type": "null"
}
},
"required": [
@@ -1045,6 +850,242 @@
],
"additionalProperties": false,
"$defs": {
+ "Aetheryte": {
+ "type": "string",
+ "enum": [
+ "Gridania",
+ "Central Shroud - Bentbranch Meadows",
+ "East Shroud - Hawthorne Hut",
+ "South Shroud - Quarrymill",
+ "South Shroud - Camp Tranquil",
+ "North Shroud - Fallgourd Float",
+ "Ul'dah",
+ "Western Thanalan - Horizon",
+ "Central Thanalan - Black Brush Station",
+ "Eastern Thanalan - Camp Drybone",
+ "Southern Thanalan - Little Ala Mhigo",
+ "Southern Thanalan - Forgotten Springs",
+ "Northern Thanalan - Camp Bluefog",
+ "Northern Thanalan - Ceruleum Processing Plant",
+ "Limsa Lominsa",
+ "Middle La Noscea - Summerford Farms",
+ "Lower La Noscea - Moraby Drydocks",
+ "Eastern La Noscea - Costa Del Sol",
+ "Eastern La Noscea - Wineport",
+ "Western La Noscea - Swiftperch",
+ "Western La Noscea - Aleport",
+ "Upper La Noscea - Camp Bronze Lake",
+ "Outer La Noscea - Camp Overlook",
+ "Coerthas Central Highlands - Camp Dragonhead",
+ "Mor Dhona",
+ "Gold Saucer",
+ "Wolves' Den Pier",
+ "Ishgard",
+ "Idyllshire",
+ "Coerthas Western Highlands - Falcon's Nest",
+ "The Sea of Clouds - Camp Cloudtop",
+ "The Sea of Clouds - Ok' Zundu",
+ "Azys Lla - Helix",
+ "The Dravanian Forelands - Tailfeather",
+ "The Dravanian Forelands - Anyx Trine",
+ "The Churning Mists - Moghome",
+ "The Churning Mists - Zenith",
+ "Rhalgr's Reach",
+ "Fringes - Castrum Oriens",
+ "Fringes - Peering Stones",
+ "Peaks - Ala Gannha",
+ "Peaks - Ala Ghiri",
+ "Lochs - Porta Praetoria",
+ "Lochs - Ala Mhigan Quarter",
+ "Kugane",
+ "Ruby Sea - Tamamizu",
+ "Ruby Sea - Onokoro",
+ "Yanxia - Namai",
+ "Yanxia - House of the Fierce",
+ "Azim Steppe - Reunion",
+ "Azim Steppe - Dawn Throne",
+ "Azim Steppe - Dhoro Iloh",
+ "Doman Enclave",
+ "Crystarium",
+ "Eulmore",
+ "Lakeland - Fort Jobb",
+ "Lakeland - Ostall Imperative",
+ "Kholusia - Stilltide",
+ "Kholusia - Wright",
+ "Kholusia - Tomra",
+ "Amh Araeng - Mord Souq",
+ "Amh Araeng - Inn at Journey's Head",
+ "Amh Araeng - Twine",
+ "Rak'tika - Slitherbough",
+ "Rak'tika - Fanow",
+ "Il Mheg - Lydha Lran",
+ "Il Mheg - Pia Enni",
+ "Il Mheg - Wolekdorf",
+ "Tempest - Ondo Cups",
+ "Tempest - Macarenses Angle",
+ "Old Sharlayan",
+ "Radz-at-Han",
+ "Labyrinthos - Archeion",
+ "Labyrinthos - Sharlayan Hamlet",
+ "Labyrinthos - Aporia",
+ "Thavnair - Yedlihmad",
+ "Thavnair - Great Work",
+ "Thavnair - Palaka's Stand",
+ "Garlemald - Camp Broken Glass",
+ "Garlemald - Tertium",
+ "Mare Lamentorum - Sinus Lacrimarum",
+ "Mare Lamentorum - Bestways Burrow",
+ "Elpis - Anagnorisis",
+ "Elpis - Twelve Wonders",
+ "Elpis - Poieten Oikos",
+ "Ultima Thule - Reah Tahra",
+ "Ultima Thule - Abode of the Ea",
+ "Ultima Thule - Base Omicron",
+ "Tuliyollal",
+ "Solution Nine",
+ "Urqopacha - Wachunpelo",
+ "Urqopacha - Worlar's Echo",
+ "Kozama'uka - Ok'hanu",
+ "Kozama'uka - Many Fires",
+ "Kozama'uka - Earthenshire",
+ "Yak T'el - Iq Br'aax",
+ "Yak T'el - Mamook",
+ "Shaaloani - Hhusatahwi",
+ "Shaaloani - Sheshenewezi Springs",
+ "Shaaloani - Mehwahhetsoan",
+ "Heritage Found - Yyasulani Station",
+ "Heritage Found - The Outskirts",
+ "Heritage Found - Electrope Strike",
+ "Living Memory - Leynode Mnemo",
+ "Living Memory - Leynode Pyro",
+ "Living Memory - Leynode Aero"
+ ]
+ },
+ "AethernetShard": {
+ "type": "string",
+ "enum": [
+ "[Gridania] Aetheryte Plaza",
+ "[Gridania] Archers' Guild",
+ "[Gridania] Leatherworkers' Guild & Shaded Bower",
+ "[Gridania] Lancers' Guild",
+ "[Gridania] Conjurers' Guild",
+ "[Gridania] Botanists' Guild",
+ "[Gridania] Mih Khetto's Amphitheatre",
+ "[Gridania] Blue Badger Gate (Central Shroud)",
+ "[Gridania] Yellow Serpent Gate (North Shroud)",
+ "[Gridania] White Wolf Gate (Central Shroud)",
+ "[Gridania] Airship Landing",
+ "[Ul'dah] Aetheryte Plaza",
+ "[Ul'dah] Adventurers' Guild",
+ "[Ul'dah] Thaumaturges' Guild",
+ "[Ul'dah] Gladiators' Guild",
+ "[Ul'dah] Miners' Guild",
+ "[Ul'dah] Weavers' Guild",
+ "[Ul'dah] Goldsmiths' Guild",
+ "[Ul'dah] Sapphire Avenue Exchange",
+ "[Ul'dah] Alchemists' Guild",
+ "[Ul'dah] Gate of the Sultana (Western Thanalan)",
+ "[Ul'dah] Gate of Nald (Central Thanalan)",
+ "[Ul'dah] Gate of Thal (Central Thanalan)",
+ "[Ul'dah] The Chamber of Rule",
+ "[Ul'dah] Airship Landing",
+ "[Limsa Lominsa] Aetheryte Plaza",
+ "[Limsa Lominsa] Arcanists' Guild",
+ "[Limsa Lominsa] Fishermens' Guild",
+ "[Limsa Lominsa] Hawkers' Alley",
+ "[Limsa Lominsa] The Aftcastle",
+ "[Limsa Lominsa] Culinarians' Guild",
+ "[Limsa Lominsa] Marauders' Guild",
+ "[Limsa Lominsa] Zephyr Gate (Middle La Noscea)",
+ "[Limsa Lominsa] Tempest Gate (Lower La Noscea)",
+ "[Limsa Lominsa] Airship Landing",
+ "[Ishgard] Aetheryte Plaza",
+ "[Ishgard] The Forgotten Knight",
+ "[Ishgard] Skysteel Manufactory",
+ "[Ishgard] The Brume",
+ "[Ishgard] Athenaeum Astrologicum",
+ "[Ishgard] The Jeweled Crozier",
+ "[Ishgard] Saint Reymanaud's Cathedral",
+ "[Ishgard] The Tribunal",
+ "[Ishgard] The Last Vigil",
+ "[Ishgard] The Gates of Judgement (Coerthas Central Highlands)",
+ "[Idyllshire] Aetheryte Plaza",
+ "[Idyllshire] West Idyllshire",
+ "[Idyllshire] Prologue Gate",
+ "[Idyllshire] Epilogue Gate",
+ "[Rhalgr's Reach] Aetheryte Plaza",
+ "[Rhalgr's Reach] Western Rhalgr's Reach",
+ "[Rhalgr's Reach] Northeastern Rhalgr's Reach",
+ "[Rhalgr's Reach] Fringes Gate",
+ "[Rhalgr's Reach] Peaks Gate",
+ "[Kugane] Aetheryte Plaza",
+ "[Kugane] Shiokaze Hostelry",
+ "[Kugane] Pier #1",
+ "[Kugane] Thavnairian Consulate",
+ "[Kugane] Kogane Dori Markets",
+ "[Kugane] Bokairo Inn",
+ "[Kugane] The Ruby Bazaar",
+ "[Kugane] Sekiseigumi Barracks",
+ "[Kugane] Rakuza District",
+ "[Kugane] The Ruby Price",
+ "[Kugane] Airship Landing",
+ "[Crystarium] Aetheryte Plaza",
+ "[Crystarium] Musica Universalis Markets",
+ "[Crystarium] Temenos Rookery",
+ "[Crystarium] The Dossal Gate",
+ "[Crystarium] The Pendants",
+ "[Crystarium] The Amaro Launch",
+ "[Crystarium] The Crystalline Mean",
+ "[Crystarium] The Cabinet of Curiosity",
+ "[Crystarium] Tessellation (Lakeland)",
+ "[Eulmore] Aetheryte Plaza",
+ "[Eulmore] Southeast Derelicts",
+ "[Eulmore] Nightsoil Pots",
+ "[Eulmore] The Glory Gate",
+ "[Eulmore] The Mainstay",
+ "[Eulmore] The Path to Glory (Kholusia)",
+ "[Old Sharlayan] Aetheryte Plaza",
+ "[Old Sharlayan] The Studium",
+ "[Old Sharlayan] The Baldesion Annex",
+ "[Old Sharlayan] The Rostra",
+ "[Old Sharlayan] The Leveilleur Estate",
+ "[Old Sharlayan] Journey's End",
+ "[Old Sharlayan] Scholar's Harbor",
+ "[Old Sharlayan] The Hall of Artifice (Labyrinthos)",
+ "[Radz-at-Han] Aetheryte Plaza",
+ "[Radz-at-Han] Meghaduta",
+ "[Radz-at-Han] Ruveydah Fibers",
+ "[Radz-at-Han] Airship Landing",
+ "[Radz-at-Han] Alzadaal's Peace",
+ "[Radz-at-Han] Hall of the Radiant Host",
+ "[Radz-at-Han] Mehryde's Meyhane",
+ "[Radz-at-Han] Kama",
+ "[Radz-at-Han] The High Crucible of Al-Kimiya",
+ "[Radz-at-Han] The Gate of First Sight (Thavnair)",
+ "[Tuliyollal] Aetheryte Plaza",
+ "[Tuliyollal] Dirigible Landing",
+ "[Tuliyollal] The Resplendent Quarter",
+ "[Tuliyollal] The For'ard Cabins",
+ "[Tuliyollal] Bayside Bevy Marketplace",
+ "[Tuliyollal] Vollok Shoonsa",
+ "[Tuliyollal] Wachumeqimeqi",
+ "[Tuliyollal] Brightploom Post",
+ "[Tuliyollal] Arch of the Dawn (Urqopacha)",
+ "[Tuliyollal] Arch of the Dawn (Kozama'uka)",
+ "[Tuliyollal] Ihuykatumu (Kozama'uka)",
+ "[Tuliyollal] Dirigible Landing (Yak T'el)",
+ "[Tuliyollal] Xak Tural Skygate (Shaaloani)",
+ "[Solution Nine] Aetheryte Plaza",
+ "[Solution Nine] Information Center",
+ "[Solution Nine] True Vue",
+ "[Solution Nine] Neon Stein",
+ "[Solution Nine] The Arcadion",
+ "[Solution Nine] Resolution",
+ "[Solution Nine] Nexus Arcade",
+ "[Solution Nine] Residential Sector",
+ "[Solution Nine] Scanning Port Nine (Heritage Found)"
+ ]
+ },
"CompletionFlags": {
"type": "array",
"description": "Quest Variables that dictate whether or not this step is skipped: null is don't check, positive values need to be set, negative values need to be unset",
diff --git a/Questionable.Model/Questionable.Model.csproj b/Questionable.Model/Questionable.Model.csproj
index c1fcd0f1..8909f97e 100644
--- a/Questionable.Model/Questionable.Model.csproj
+++ b/Questionable.Model/Questionable.Model.csproj
@@ -10,6 +10,6 @@
-
+
diff --git a/Questionable.Model/V1/Converter/AethernetShardConverter.cs b/Questionable.Model/V1/Converter/AethernetShardConverter.cs
new file mode 100644
index 00000000..93b84a9e
--- /dev/null
+++ b/Questionable.Model/V1/Converter/AethernetShardConverter.cs
@@ -0,0 +1,142 @@
+using System.Collections.Generic;
+
+namespace Questionable.Model.V1.Converter;
+
+public sealed class AethernetShardConverter() : EnumConverter(Values)
+{
+ public static readonly Dictionary Values = new()
+ {
+ { EAetheryteLocation.Gridania, "[Gridania] Aetheryte Plaza" },
+ { EAetheryteLocation.GridaniaArcher, "[Gridania] Archers' Guild" },
+ { EAetheryteLocation.GridaniaLeatherworker, "[Gridania] Leatherworkers' Guild & Shaded Bower" },
+ { EAetheryteLocation.GridaniaLancer, "[Gridania] Lancers' Guild" },
+ { EAetheryteLocation.GridaniaConjurer, "[Gridania] Conjurers' Guild" },
+ { EAetheryteLocation.GridaniaBotanist, "[Gridania] Botanists' Guild" },
+ { EAetheryteLocation.GridaniaAmphitheatre, "[Gridania] Mih Khetto's Amphitheatre" },
+ { EAetheryteLocation.GridaniaBlueBadgerGate, "[Gridania] Blue Badger Gate (Central Shroud)" },
+ { EAetheryteLocation.GridaniaYellowSerpentGate, "[Gridania] Yellow Serpent Gate (North Shroud)" },
+ { EAetheryteLocation.GridaniaWhiteWolfGate, "[Gridania] White Wolf Gate (Central Shroud)" },
+ { EAetheryteLocation.GridaniaAirship, "[Gridania] Airship Landing" },
+
+ { EAetheryteLocation.Uldah, "[Ul'dah] Aetheryte Plaza" },
+ { EAetheryteLocation.UldahAdventurers, "[Ul'dah] Adventurers' Guild" },
+ { EAetheryteLocation.UldahThaumaturge, "[Ul'dah] Thaumaturges' Guild" },
+ { EAetheryteLocation.UldahGladiator, "[Ul'dah] Gladiators' Guild" },
+ { EAetheryteLocation.UldahMiner, "[Ul'dah] Miners' Guild" },
+ { EAetheryteLocation.UldahWeaver, "[Ul'dah] Weavers' Guild" },
+ { EAetheryteLocation.UldahGoldsmith, "[Ul'dah] Goldsmiths' Guild" },
+ { EAetheryteLocation.UldahSapphireAvenue, "[Ul'dah] Sapphire Avenue Exchange" },
+ { EAetheryteLocation.UldahAlchemist, "[Ul'dah] Alchemists' Guild" },
+ { EAetheryteLocation.UldahChamberOfRule, "[Ul'dah] The Chamber of Rule" },
+ { EAetheryteLocation.UldahGateOfTheSultana, "[Ul'dah] Gate of the Sultana (Western Thanalan)" },
+ { EAetheryteLocation.UldahGateOfNald, "[Ul'dah] Gate of Nald (Central Thanalan)" },
+ { EAetheryteLocation.UldahGateOfThal, "[Ul'dah] Gate of Thal (Central Thanalan)" },
+ { EAetheryteLocation.UldahAirship, "[Ul'dah] Airship Landing" },
+
+ { EAetheryteLocation.Limsa, "[Limsa Lominsa] Aetheryte Plaza" },
+ { EAetheryteLocation.LimsaArcanist, "[Limsa Lominsa] Arcanists' Guild" },
+ { EAetheryteLocation.LimsaFisher, "[Limsa Lominsa] Fishermens' Guild" },
+ { EAetheryteLocation.LimsaHawkersAlley, "[Limsa Lominsa] Hawkers' Alley" },
+ { EAetheryteLocation.LimsaAftcastle, "[Limsa Lominsa] The Aftcastle" },
+ { EAetheryteLocation.LimsaCulinarian, "[Limsa Lominsa] Culinarians' Guild" },
+ { EAetheryteLocation.LimsaMarauder, "[Limsa Lominsa] Marauders' Guild" },
+ { EAetheryteLocation.LimsaZephyrGate, "[Limsa Lominsa] Zephyr Gate (Middle La Noscea)" },
+ { EAetheryteLocation.LimsaTempestGate, "[Limsa Lominsa] Tempest Gate (Lower La Noscea)" },
+ { EAetheryteLocation.LimsaAirship, "[Limsa Lominsa] Airship Landing" },
+
+ { EAetheryteLocation.Ishgard, "[Ishgard] Aetheryte Plaza" },
+ { EAetheryteLocation.IshgardForgottenKnight, "[Ishgard] The Forgotten Knight" },
+ { EAetheryteLocation.IshgardSkysteelManufactory, "[Ishgard] Skysteel Manufactory" },
+ { EAetheryteLocation.IshgardBrume, "[Ishgard] The Brume" },
+ { EAetheryteLocation.IshgardAthenaeumAstrologicum, "[Ishgard] Athenaeum Astrologicum" },
+ { EAetheryteLocation.IshgardJeweledCrozier, "[Ishgard] The Jeweled Crozier" },
+ { EAetheryteLocation.IshgardSaintReymanaudsCathedral, "[Ishgard] Saint Reymanaud's Cathedral" },
+ { EAetheryteLocation.IshgardTribunal, "[Ishgard] The Tribunal" },
+ { EAetheryteLocation.IshgardLastVigil, "[Ishgard] The Last Vigil" },
+ { EAetheryteLocation.IshgardGatesOfJudgement, "[Ishgard] The Gates of Judgement (Coerthas Central Highlands)" },
+
+ { EAetheryteLocation.Idyllshire, "[Idyllshire] Aetheryte Plaza" },
+ { EAetheryteLocation.IdyllshireWest, "[Idyllshire] West Idyllshire" },
+ { EAetheryteLocation.IdyllshirePrologueGate, "[Idyllshire] Prologue Gate" },
+ { EAetheryteLocation.IdyllshireEpilogueGate, "[Idyllshire] Epilogue Gate" },
+
+ { EAetheryteLocation.RhalgrsReach, "[Rhalgr's Reach] Aetheryte Plaza" },
+ { EAetheryteLocation.RhalgrsReachWest, "[Rhalgr's Reach] Western Rhalgr's Reach" },
+ { EAetheryteLocation.RhalgrsReachNorthEast, "[Rhalgr's Reach] Northeastern Rhalgr's Reach" },
+ { EAetheryteLocation.RhalgrsReachFringesGate, "[Rhalgr's Reach] Fringes Gate" },
+ { EAetheryteLocation.RhalgrsReachPeaksGate, "[Rhalgr's Reach] Peaks Gate" },
+
+ { EAetheryteLocation.Kugane, "[Kugane] Aetheryte Plaza" },
+ { EAetheryteLocation.KuganeShiokazeHostelry, "[Kugane] Shiokaze Hostelry" },
+ { EAetheryteLocation.KuganePier1, "[Kugane] Pier #1" },
+ { EAetheryteLocation.KuganeThavnairianConsulate, "[Kugane] Thavnairian Consulate" },
+ { EAetheryteLocation.KuganeMarkets, "[Kugane] Kogane Dori Markets" },
+ { EAetheryteLocation.KuganeBokairoInn, "[Kugane] Bokairo Inn" },
+ { EAetheryteLocation.KuganeRubyBazaar, "[Kugane] The Ruby Bazaar" },
+ { EAetheryteLocation.KuganeSekiseigumiBarracks, "[Kugane] Sekiseigumi Barracks" },
+ { EAetheryteLocation.KuganeRakuzaDistrict, "[Kugane] Rakuza District" },
+ { EAetheryteLocation.KuganeRubyPrice, "[Kugane] The Ruby Price" },
+ { EAetheryteLocation.KuganeAirship, "[Kugane] Airship Landing" },
+
+ { EAetheryteLocation.Crystarium, "[Crystarium] Aetheryte Plaza" },
+ { EAetheryteLocation.CrystariumMarkets, "[Crystarium] Musica Universalis Markets" },
+ { EAetheryteLocation.CrystariumTemenosRookery, "[Crystarium] Temenos Rookery" },
+ { EAetheryteLocation.CrystariumDossalGate, "[Crystarium] The Dossal Gate" },
+ { EAetheryteLocation.CrystariumPendants, "[Crystarium] The Pendants" },
+ { EAetheryteLocation.CrystariumAmaroLaunch, "[Crystarium] The Amaro Launch" },
+ { EAetheryteLocation.CrystariumCrystallineMean, "[Crystarium] The Crystalline Mean" },
+ { EAetheryteLocation.CrystariumCabinetOfCuriosity, "[Crystarium] The Cabinet of Curiosity" },
+ { EAetheryteLocation.CrystariumTessellation, "[Crystarium] Tessellation (Lakeland)" },
+
+ { EAetheryteLocation.Eulmore, "[Eulmore] Aetheryte Plaza" },
+ { EAetheryteLocation.EulmoreSoutheastDerelict, "[Eulmore] Southeast Derelicts" },
+ { EAetheryteLocation.EulmoreNightsoilPots, "[Eulmore] Nightsoil Pots" },
+ { EAetheryteLocation.EulmoreGloryGate, "[Eulmore] The Glory Gate" },
+ { EAetheryteLocation.EulmoreMainstay, "[Eulmore] The Mainstay" },
+ { EAetheryteLocation.EulmorePathToGlory, "[Eulmore] The Path to Glory (Kholusia)" },
+
+ { EAetheryteLocation.OldSharlayan, "[Old Sharlayan] Aetheryte Plaza" },
+ { EAetheryteLocation.OldSharlayanStudium, "[Old Sharlayan] The Studium" },
+ { EAetheryteLocation.OldSharlayanBaldesionAnnex, "[Old Sharlayan] The Baldesion Annex" },
+ { EAetheryteLocation.OldSharlayanRostra, "[Old Sharlayan] The Rostra" },
+ { EAetheryteLocation.OldSharlayanLeveilleurEstate, "[Old Sharlayan] The Leveilleur Estate" },
+ { EAetheryteLocation.OldSharlayanJourneysEnd, "[Old Sharlayan] Journey's End" },
+ { EAetheryteLocation.OldSharlayanScholarsHarbor, "[Old Sharlayan] Scholar's Harbor" },
+ { EAetheryteLocation.OldSharlayanHallOfArtifice, "[Old Sharlayan] The Hall of Artifice (Labyrinthos)" },
+
+ { EAetheryteLocation.RadzAtHan, "[Radz-at-Han] Aetheryte Plaza" },
+ { EAetheryteLocation.RadzAtHanMeghaduta, "[Radz-at-Han] Meghaduta" },
+ { EAetheryteLocation.RadzAtHanRuveydahFibers, "[Radz-at-Han] Ruveydah Fibers" },
+ { EAetheryteLocation.RadzAtHanAirship, "[Radz-at-Han] Airship Landing" },
+ { EAetheryteLocation.RadzAtHanAlzadaalsPeace, "[Radz-at-Han] Alzadaal's Peace" },
+ { EAetheryteLocation.RadzAtHanHallOfTheRadiantHost, "[Radz-at-Han] Hall of the Radiant Host" },
+ { EAetheryteLocation.RadzAtHanMehrydesMeyhane, "[Radz-at-Han] Mehryde's Meyhane" },
+ { EAetheryteLocation.RadzAtHanKama, "[Radz-at-Han] Kama" },
+ { EAetheryteLocation.RadzAtHanHighCrucible, "[Radz-at-Han] The High Crucible of Al-Kimiya" },
+ { EAetheryteLocation.RadzAtHanGateOfFirstSight, "[Radz-at-Han] The Gate of First Sight (Thavnair)" },
+
+ { EAetheryteLocation.Tuliyollal, "[Tuliyollal] Aetheryte Plaza" },
+ { EAetheryteLocation.TuliyollalDirigibleLanding, "[Tuliyollal] Dirigible Landing" },
+ { EAetheryteLocation.TuliyollalTheResplendentQuarter, "[Tuliyollal] The Resplendent Quarter" },
+ { EAetheryteLocation.TuliyollalTheForardCabins, "[Tuliyollal] The For'ard Cabins" },
+ { EAetheryteLocation.TuliyollalBaysideBevyMarketplace, "[Tuliyollal] Bayside Bevy Marketplace" },
+ { EAetheryteLocation.TuliyollalVollokShoonsa, "[Tuliyollal] Vollok Shoonsa" },
+ { EAetheryteLocation.TuliyollalWachumeqimeqi, "[Tuliyollal] Wachumeqimeqi" },
+ { EAetheryteLocation.TuliyollalBrightploomPost, "[Tuliyollal] Brightploom Post" },
+ { EAetheryteLocation.TuliyollalArchOfTheDawnUrqopacha, "[Tuliyollal] Arch of the Dawn (Urqopacha)" },
+ { EAetheryteLocation.TuliyollalArchOfTheDawnKozamauka, "[Tuliyollal] Arch of the Dawn (Kozama'uka)" },
+ { EAetheryteLocation.TuliyollalIhuykatumu, "[Tuliyollal] Ihuykatumu (Kozama'uka)" },
+ { EAetheryteLocation.TuliyollalDirigibleLandingYakTel, "[Tuliyollal] Dirigible Landing (Yak T'el)" },
+ { EAetheryteLocation.TuliyollalXakTuralSkygate, "[Tuliyollal] Xak Tural Skygate (Shaaloani)" },
+
+ { EAetheryteLocation.SolutionNine, "[Solution Nine] Aetheryte Plaza" },
+ { EAetheryteLocation.SolutionNineInformationCenter, "[Solution Nine] Information Center" },
+ { EAetheryteLocation.SolutionNineTrueVue, "[Solution Nine] True Vue" },
+ { EAetheryteLocation.SolutionNineNeonStein, "[Solution Nine] Neon Stein" },
+ { EAetheryteLocation.SolutionNineTheArcadion, "[Solution Nine] The Arcadion" },
+ { EAetheryteLocation.SolutionNineResolution, "[Solution Nine] Resolution" },
+ { EAetheryteLocation.SolutionNineNexusArcade, "[Solution Nine] Nexus Arcade" },
+ { EAetheryteLocation.SolutionNineResidentialSector, "[Solution Nine] Residential Sector" },
+ { EAetheryteLocation.SolutionNineScanningPortNine, "[Solution Nine] Scanning Port Nine (Heritage Found)" },
+ };
+}
diff --git a/Questionable.Model/V1/Converter/AethernetShortcutConverter.cs b/Questionable.Model/V1/Converter/AethernetShortcutConverter.cs
index d85f7479..8b90769f 100644
--- a/Questionable.Model/V1/Converter/AethernetShortcutConverter.cs
+++ b/Questionable.Model/V1/Converter/AethernetShortcutConverter.cs
@@ -8,142 +8,7 @@ namespace Questionable.Model.V1.Converter;
public sealed class AethernetShortcutConverter : JsonConverter
{
- private static readonly Dictionary EnumToString = new()
- {
- { EAetheryteLocation.Gridania, "[Gridania] Aetheryte Plaza" },
- { EAetheryteLocation.GridaniaArcher, "[Gridania] Archers' Guild" },
- { EAetheryteLocation.GridaniaLeatherworker, "[Gridania] Leatherworkers' Guild & Shaded Bower" },
- { EAetheryteLocation.GridaniaLancer, "[Gridania] Lancers' Guild" },
- { EAetheryteLocation.GridaniaConjurer, "[Gridania] Conjurers' Guild" },
- { EAetheryteLocation.GridaniaBotanist, "[Gridania] Botanists' Guild" },
- { EAetheryteLocation.GridaniaAmphitheatre, "[Gridania] Mih Khetto's Amphitheatre" },
- { EAetheryteLocation.GridaniaBlueBadgerGate, "[Gridania] Blue Badger Gate (Central Shroud)" },
- { EAetheryteLocation.GridaniaYellowSerpentGate, "[Gridania] Yellow Serpent Gate (North Shroud)" },
- { EAetheryteLocation.GridaniaWhiteWolfGate, "[Gridania] White Wolf Gate (Central Shroud)" },
- { EAetheryteLocation.GridaniaAirship, "[Gridania] Airship Landing" },
-
- { EAetheryteLocation.Uldah, "[Ul'dah] Aetheryte Plaza" },
- { EAetheryteLocation.UldahAdventurers, "[Ul'dah] Adventurers' Guild" },
- { EAetheryteLocation.UldahThaumaturge, "[Ul'dah] Thaumaturges' Guild" },
- { EAetheryteLocation.UldahGladiator, "[Ul'dah] Gladiators' Guild" },
- { EAetheryteLocation.UldahMiner, "[Ul'dah] Miners' Guild" },
- { EAetheryteLocation.UldahWeaver, "[Ul'dah] Weavers' Guild" },
- { EAetheryteLocation.UldahGoldsmith, "[Ul'dah] Goldsmiths' Guild" },
- { EAetheryteLocation.UldahSapphireAvenue, "[Ul'dah] Sapphire Avenue Exchange" },
- { EAetheryteLocation.UldahAlchemist, "[Ul'dah] Alchemists' Guild" },
- { EAetheryteLocation.UldahChamberOfRule, "[Ul'dah] The Chamber of Rule" },
- { EAetheryteLocation.UldahGateOfTheSultana, "[Ul'dah] Gate of the Sultana (Western Thanalan)" },
- { EAetheryteLocation.UldahGateOfNald, "[Ul'dah] Gate of Nald (Central Thanalan)" },
- { EAetheryteLocation.UldahGateOfThal, "[Ul'dah] Gate of Thal (Central Thanalan)" },
- { EAetheryteLocation.UldahAirship, "[Ul'dah] Airship Landing" },
-
- { EAetheryteLocation.Limsa, "[Limsa Lominsa] Aetheryte Plaza" },
- { EAetheryteLocation.LimsaArcanist, "[Limsa Lominsa] Arcanists' Guild" },
- { EAetheryteLocation.LimsaFisher, "[Limsa Lominsa] Fishermens' Guild" },
- { EAetheryteLocation.LimsaHawkersAlley, "[Limsa Lominsa] Hawkers' Alley" },
- { EAetheryteLocation.LimsaAftcastle, "[Limsa Lominsa] The Aftcastle" },
- { EAetheryteLocation.LimsaCulinarian, "[Limsa Lominsa] Culinarians' Guild" },
- { EAetheryteLocation.LimsaMarauder, "[Limsa Lominsa] Marauders' Guild" },
- { EAetheryteLocation.LimsaZephyrGate, "[Limsa Lominsa] Zephyr Gate (Middle La Noscea)" },
- { EAetheryteLocation.LimsaTempestGate, "[Limsa Lominsa] Tempest Gate (Lower La Noscea)" },
- { EAetheryteLocation.LimsaAirship, "[Limsa Lominsa] Airship Landing" },
-
- { EAetheryteLocation.Ishgard, "[Ishgard] Aetheryte Plaza" },
- { EAetheryteLocation.IshgardForgottenKnight, "[Ishgard] The Forgotten Knight" },
- { EAetheryteLocation.IshgardSkysteelManufactory, "[Ishgard] Skysteel Manufactory" },
- { EAetheryteLocation.IshgardBrume, "[Ishgard] The Brume" },
- { EAetheryteLocation.IshgardAthenaeumAstrologicum, "[Ishgard] Athenaeum Astrologicum" },
- { EAetheryteLocation.IshgardJeweledCrozier, "[Ishgard] The Jeweled Crozier" },
- { EAetheryteLocation.IshgardSaintReymanaudsCathedral, "[Ishgard] Saint Reymanaud's Cathedral" },
- { EAetheryteLocation.IshgardTribunal, "[Ishgard] The Tribunal" },
- { EAetheryteLocation.IshgardLastVigil, "[Ishgard] The Last Vigil" },
- { EAetheryteLocation.IshgardGatesOfJudgement, "[Ishgard] The Gates of Judgement (Coerthas Central Highlands)" },
-
- { EAetheryteLocation.Idyllshire, "[Idyllshire] Aetheryte Plaza" },
- { EAetheryteLocation.IdyllshireWest, "[Idyllshire] West Idyllshire" },
- { EAetheryteLocation.IdyllshirePrologueGate, "[Idyllshire] Prologue Gate" },
- { EAetheryteLocation.IdyllshireEpilogueGate, "[Idyllshire] Epilogue Gate" },
-
- { EAetheryteLocation.RhalgrsReach, "[Rhalgr's Reach] Aetheryte Plaza" },
- { EAetheryteLocation.RhalgrsReachWest, "[Rhalgr's Reach] Western Rhalgr's Reach" },
- { EAetheryteLocation.RhalgrsReachNorthEast, "[Rhalgr's Reach] Northeastern Rhalgr's Reach" },
- { EAetheryteLocation.RhalgrsReachFringesGate, "[Rhalgr's Reach] Fringes Gate" },
- { EAetheryteLocation.RhalgrsReachPeaksGate, "[Rhalgr's Reach] Peaks Gate" },
-
- { EAetheryteLocation.Kugane, "[Kugane] Aetheryte Plaza" },
- { EAetheryteLocation.KuganeShiokazeHostelry, "[Kugane] Shiokaze Hostelry" },
- { EAetheryteLocation.KuganePier1, "[Kugane] Pier #1" },
- { EAetheryteLocation.KuganeThavnairianConsulate, "[Kugane] Thavnairian Consulate" },
- { EAetheryteLocation.KuganeMarkets, "[Kugane] Kogane Dori Markets" },
- { EAetheryteLocation.KuganeBokairoInn, "[Kugane] Bokairo Inn" },
- { EAetheryteLocation.KuganeRubyBazaar, "[Kugane] The Ruby Bazaar" },
- { EAetheryteLocation.KuganeSekiseigumiBarracks, "[Kugane] Sekiseigumi Barracks" },
- { EAetheryteLocation.KuganeRakuzaDistrict, "[Kugane] Rakuza District" },
- { EAetheryteLocation.KuganeRubyPrice, "[Kugane] The Ruby Price" },
- { EAetheryteLocation.KuganeAirship, "[Kugane] Airship Landing" },
-
- { EAetheryteLocation.Crystarium, "[Crystarium] Aetheryte Plaza" },
- { EAetheryteLocation.CrystariumMarkets, "[Crystarium] Musica Universalis Markets" },
- { EAetheryteLocation.CrystariumThemenosRookery, "[Crystarium] Themenos Rookery" },
- { EAetheryteLocation.CrystariumDossalGate, "[Crystarium] The Dossal Gate" },
- { EAetheryteLocation.CrystariumPendants, "[Crystarium] The Pendants" },
- { EAetheryteLocation.CrystariumAmaroLaunch, "[Crystarium] The Amaro Launch" },
- { EAetheryteLocation.CrystariumCrystallineMean, "[Crystarium] The Crystalline Mean" },
- { EAetheryteLocation.CrystariumCabinetOfCuriosity, "[Crystarium] The Cabinet of Curiosity" },
- { EAetheryteLocation.CrystariumTessellation, "[Crystarium] Tessellation (Lakeland)" },
-
- { EAetheryteLocation.Eulmore, "[Eulmore] Aetheryte Plaza" },
- { EAetheryteLocation.EulmoreSoutheastDerelict, "[Eulmore] Southeast Derelicts" },
- { EAetheryteLocation.EulmoreNightsoilPots, "[Eulmore] Nightsoil Pots" },
- { EAetheryteLocation.EulmoreGloryGate, "[Eulmore] The Glory Gate" },
- { EAetheryteLocation.EulmoreMainstay, "[Eulmore] The Mainstay" },
- { EAetheryteLocation.EulmorePathToGlory, "[Eulmore] The Path to Glory (Kholusia)" },
-
- { EAetheryteLocation.OldSharlayan, "[Old Sharlayan] Aetheryte Plaza" },
- { EAetheryteLocation.OldSharlayanStudium, "[Old Sharlayan] The Studium" },
- { EAetheryteLocation.OldSharlayanBaldesionAnnex, "[Old Sharlayan] The Baldesion Annex" },
- { EAetheryteLocation.OldSharlayanRostra, "[Old Sharlayan] The Rostra" },
- { EAetheryteLocation.OldSharlayanLeveilleurEstate, "[Old Sharlayan] The Leveilleur Estate" },
- { EAetheryteLocation.OldSharlayanJourneysEnd, "[Old Sharlayan] Journey's End" },
- { EAetheryteLocation.OldSharlayanScholarsHarbor, "[Old Sharlayan] Scholar's Harbor" },
- { EAetheryteLocation.OldSharlayanHallOfArtifice, "[Old Sharlayan] The Hall of Artifice (Labyrinthos)" },
-
- { EAetheryteLocation.RadzAtHan, "[Radz-at-Han] Aetheryte Plaza" },
- { EAetheryteLocation.RadzAtHanMeghaduta, "[Radz-at-Han] Meghaduta" },
- { EAetheryteLocation.RadzAtHanRuveydahFibers, "[Radz-at-Han] Ruveydah Fibers" },
- { EAetheryteLocation.RadzAtHanAirship, "[Radz-at-Han] Airship Landing" },
- { EAetheryteLocation.RadzAtHanAlzadaalsPeace, "[Radz-at-Han] Alzadaal's Peace" },
- { EAetheryteLocation.RadzAtHanHallOfTheRadiantHost, "[Radz-at-Han] Hall of the Radiant Host" },
- { EAetheryteLocation.RadzAtHanMehrydesMeyhane, "[Radz-at-Han] Mehryde's Meyhane" },
- { EAetheryteLocation.RadzAtHanKama, "[Radz-at-Han] Kama" },
- { EAetheryteLocation.RadzAtHanHighCrucible, "[Radz-at-Han] The High Crucible of Al-Kimiya" },
- { EAetheryteLocation.RadzAtHanGateOfFirstSight, "[Radz-at-Han] The Gate of First Sight (Thavnair)" },
-
- { EAetheryteLocation.Tuliyollal, "[Tuliyollal] Aetheryte Plaza" },
- { EAetheryteLocation.TuliyollalDirigibleLanding, "[Tuliyollal] Dirigible Landing" },
- { EAetheryteLocation.TuliyollalTheResplendentQuarter, "[Tuliyollal] The Resplendent Quarter" },
- { EAetheryteLocation.TuliyollalTheForardCabins, "[Tuliyollal] The For'ard Cabins" },
- { EAetheryteLocation.TuliyollalBaysideBevyMarketplace, "[Tuliyollal] Bayside Bevy Marketplace" },
- { EAetheryteLocation.TuliyollalVollokShoonsa, "[Tuliyollal] Vollok Shoonsa" },
- { EAetheryteLocation.TuliyollalWachumeqimeqi, "[Tuliyollal] Wachumeqimeqi" },
- { EAetheryteLocation.TuliyollalBrightploomPost, "[Tuliyollal] Brightploom Post" },
- { EAetheryteLocation.TuliyollalArchOfTheDawnUrqopacha, "[Tuliyollal] Arch of the Dawn (Urqopacha)" },
- { EAetheryteLocation.TuliyollalArchOfTheDawnKozamauka, "[Tuliyollal] Arch of the Dawn (Kozama'uka)" },
- { EAetheryteLocation.TuliyollalIhuykatumu, "[Tuliyollal] Ihuykatumu (Kozama'uka)" },
- { EAetheryteLocation.TuliyollalDirigibleLandingYakTel, "[Tuliyollal] Dirigible Landing (Yak T'el)" },
- { EAetheryteLocation.TuliyollalXakTuralSkygate, "[Tuliyollal] Xak Tural Skygate (Shaaloani)" },
-
- { EAetheryteLocation.SolutionNine, "[Solution Nine] Aetheryte Plaza" },
- { EAetheryteLocation.SolutionNineInformationCenter, "[Solution Nine] Information Center" },
- { EAetheryteLocation.SolutionNineTrueVue, "[Solution Nine] True Vue" },
- { EAetheryteLocation.SolutionNineNeonStein, "[Solution Nine] Neon Stein" },
- { EAetheryteLocation.SolutionNineTheArcadion, "[Solution Nine] The Arcadion" },
- { EAetheryteLocation.SolutionNineResolution, "[Solution Nine] Resolution" },
- { EAetheryteLocation.SolutionNineNexusArcade, "[Solution Nine] Nexus Arcade" },
- { EAetheryteLocation.SolutionNineResidentialSector, "[Solution Nine] Residential Sector" },
- { EAetheryteLocation.SolutionNineScanningPortNine, "[Solution Nine] Scanning Port Nine (Heritage Found)" },
- };
-
+ private static readonly Dictionary EnumToString = AethernetShardConverter.Values;
private static readonly Dictionary StringToEnum =
EnumToString.ToDictionary(x => x.Value, x => x.Key);
diff --git a/Questionable.Model/V1/EAetheryteLocation.cs b/Questionable.Model/V1/EAetheryteLocation.cs
index dc51f575..1ddde305 100644
--- a/Questionable.Model/V1/EAetheryteLocation.cs
+++ b/Questionable.Model/V1/EAetheryteLocation.cs
@@ -139,7 +139,7 @@ public enum EAetheryteLocation
Crystarium = 133,
CrystariumMarkets = 149,
- CrystariumThemenosRookery = 150,
+ CrystariumTemenosRookery = 150,
CrystariumDossalGate = 151,
CrystariumPendants = 152,
CrystariumAmaroLaunch = 153,
diff --git a/Questionable.Model/V1/QuestStep.cs b/Questionable.Model/V1/QuestStep.cs
index 55ee70c0..dc932f65 100644
--- a/Questionable.Model/V1/QuestStep.cs
+++ b/Questionable.Model/V1/QuestStep.cs
@@ -33,6 +33,17 @@ public sealed class QuestStep
public bool? IgnoreDistanceToObject { get; set; }
public string? Comment { get; set; }
+ ///
+ /// Only used when attuning to an aetheryte.
+ ///
+ public EAetheryteLocation? Aetheryte { get; set; }
+
+ ///
+ /// Only used when attuning to an aethernet shard.
+ ///
+ [JsonConverter(typeof(AethernetShardConverter))]
+ public EAetheryteLocation? AethernetShard { get; set; }
+
public EAetheryteLocation? AetheryteShortcut { get; set; }
public AethernetShortcut? AethernetShortcut { get; set; }
@@ -80,6 +91,8 @@ public sealed class QuestStep
{
if (InteractionType == EInteractionType.WalkTo)
return StopDistance ?? 0.25f;
+ if (InteractionType == EInteractionType.AttuneAetheryte)
+ return StopDistance ?? 10f;
else
return StopDistance ?? DefaultStopDistance;
}
diff --git a/Questionable.Model/packages.lock.json b/Questionable.Model/packages.lock.json
index 7bcc7e48..c609cb4f 100644
--- a/Questionable.Model/packages.lock.json
+++ b/Questionable.Model/packages.lock.json
@@ -13,9 +13,9 @@
},
"System.Text.Json": {
"type": "Direct",
- "requested": "[8.0.3, )",
- "resolved": "8.0.3",
- "contentHash": "hpagS9joOwv6efWfrMmV9MjQXpiXZH72PgN067Ysfr6AWMSD1/1hEcvh/U5mUpPLezEWsOJSuVrmqDIVD958iA==",
+ "requested": "[8.0.4, )",
+ "resolved": "8.0.4",
+ "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "8.0.0",
"System.Buffers": "4.5.1",
diff --git a/Questionable/Controller/QuestRegistry.cs b/Questionable/Controller/QuestRegistry.cs
index a0632997..99cb4800 100644
--- a/Questionable/Controller/QuestRegistry.cs
+++ b/Questionable/Controller/QuestRegistry.cs
@@ -6,11 +6,15 @@ using System.Globalization;
using System.IO;
using System.Linq;
using System.Text.Json;
+using System.Text.Json.Nodes;
+using System.Threading.Tasks;
using Dalamud.Plugin;
+using Json.Schema;
using Microsoft.Extensions.Logging;
using Questionable.Data;
using Questionable.Model;
using Questionable.Model.V1;
+using Questionable.QuestPaths;
using Questionable.Validation;
namespace Questionable.Controller;
@@ -21,6 +25,7 @@ internal sealed class QuestRegistry
private readonly QuestData _questData;
private readonly QuestValidator _questValidator;
private readonly ILogger _logger;
+ private readonly JsonSchema _questSchema;
private readonly Dictionary _quests = new();
@@ -31,6 +36,7 @@ internal sealed class QuestRegistry
_questData = questData;
_questValidator = questValidator;
_logger = logger;
+ _questSchema = JsonSchema.FromStream(AssemblyQuestLoader.QuestSchema).AsTask().Result;
}
public IEnumerable AllQuests => _quests.Values;
@@ -40,6 +46,7 @@ internal sealed class QuestRegistry
public void Reload()
{
+ _questValidator.ClearIssues();
_quests.Clear();
LoadQuestsFromAssembly();
@@ -64,7 +71,7 @@ internal sealed class QuestRegistry
{
_logger.LogInformation("Loading quests from assembly");
- foreach ((ushort questId, QuestRoot questRoot) in QuestPaths.AssemblyQuestLoader.GetQuests())
+ foreach ((ushort questId, QuestRoot questRoot) in AssemblyQuestLoader.GetQuests())
{
Quest quest = new()
{
@@ -113,7 +120,6 @@ internal sealed class QuestRegistry
private void ValidateQuests()
{
- _questValidator.ClearIssues();
_questValidator.Validate(_quests.Values.Where(x => !x.ReadOnly));
}
@@ -124,10 +130,31 @@ internal sealed class QuestRegistry
if (questId == null)
return;
+ var questNode = JsonNode.Parse(stream);
+ Task.Run(() =>
+ {
+ var evaluationResult = _questSchema.Evaluate(questNode, new EvaluationOptions
+ {
+ Culture = CultureInfo.InvariantCulture,
+ OutputFormat = OutputFormat.List
+ });
+ if (!evaluationResult.IsValid)
+ {
+ _questValidator.AddIssue(new ValidationIssue
+ {
+ QuestId = questId.Value,
+ Sequence = null,
+ Step = null,
+ Severity = EIssueSeverity.Error,
+ Description = "JSON Validation failed"
+ });
+ }
+ });
+
Quest quest = new Quest
{
QuestId = questId.Value,
- Root = JsonSerializer.Deserialize(stream)!,
+ Root = questNode.Deserialize()!,
Info = _questData.GetQuestInfo(questId.Value),
ReadOnly = false,
};
diff --git a/Questionable/Controller/Steps/Interactions/AethernetShard.cs b/Questionable/Controller/Steps/Interactions/AethernetShard.cs
index ec3969c9..87a4f348 100644
--- a/Questionable/Controller/Steps/Interactions/AethernetShard.cs
+++ b/Questionable/Controller/Steps/Interactions/AethernetShard.cs
@@ -17,10 +17,10 @@ internal static class AethernetShard
if (step.InteractionType != EInteractionType.AttuneAethernetShard)
return null;
- ArgumentNullException.ThrowIfNull(step.DataId);
+ ArgumentNullException.ThrowIfNull(step.AethernetShard);
return serviceProvider.GetRequiredService()
- .With((EAetheryteLocation)step.DataId);
+ .With(step.AethernetShard.Value);
}
}
diff --git a/Questionable/Controller/Steps/Interactions/Aetheryte.cs b/Questionable/Controller/Steps/Interactions/Aetheryte.cs
index 6babf233..a6bccc4c 100644
--- a/Questionable/Controller/Steps/Interactions/Aetheryte.cs
+++ b/Questionable/Controller/Steps/Interactions/Aetheryte.cs
@@ -15,10 +15,10 @@ internal static class Aetheryte
if (step.InteractionType != EInteractionType.AttuneAetheryte)
return null;
- ArgumentNullException.ThrowIfNull(step.DataId);
+ ArgumentNullException.ThrowIfNull(step.Aetheryte);
return serviceProvider.GetRequiredService()
- .With((EAetheryteLocation)step.DataId.Value);
+ .With(step.Aetheryte.Value);
}
}
diff --git a/Questionable/Controller/Steps/Shared/Move.cs b/Questionable/Controller/Steps/Shared/Move.cs
index 71d1a00e..b6794405 100644
--- a/Questionable/Controller/Steps/Shared/Move.cs
+++ b/Questionable/Controller/Steps/Shared/Move.cs
@@ -19,7 +19,7 @@ namespace Questionable.Controller.Steps.Shared;
internal static class Move
{
- internal sealed class Factory(IServiceProvider serviceProvider) : ITaskFactory
+ internal sealed class Factory(IServiceProvider serviceProvider, AetheryteData aetheryteData) : ITaskFactory
{
public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step)
{
@@ -37,6 +37,20 @@ internal static class Move
task.StopDistance = step.StopDistance.Value;
return [task];
}
+ else if (step is { InteractionType: EInteractionType.AttuneAetheryte, Aetheryte: not null })
+ {
+ var builder = serviceProvider.GetRequiredService();
+ builder.Step = step;
+ builder.Destination = aetheryteData.Locations[step.Aetheryte.Value];
+ return builder.Build();
+ }
+ else if (step is { InteractionType: EInteractionType.AttuneAethernetShard, AethernetShard: not null })
+ {
+ var builder = serviceProvider.GetRequiredService();
+ builder.Step = step;
+ builder.Destination = aetheryteData.Locations[step.AethernetShard.Value];
+ return builder.Build();
+ }
return [];
}
diff --git a/Questionable/Data/AetheryteData.cs b/Questionable/Data/AetheryteData.cs
index e69adc4a..3aa1d728 100644
--- a/Questionable/Data/AetheryteData.cs
+++ b/Questionable/Data/AetheryteData.cs
@@ -151,7 +151,7 @@ internal sealed class AetheryteData
{ EAetheryteLocation.Crystarium, new(-65.0188f, 4.5318604f, 0.015197754f) },
{ EAetheryteLocation.CrystariumMarkets, new(-6.149414f, -7.736328f, 148.72961f) },
- { EAetheryteLocation.CrystariumThemenosRookery, new(-107.37775f, -0.015319824f, -58.762512f) },
+ { EAetheryteLocation.CrystariumTemenosRookery, new(-107.37775f, -0.015319824f, -58.762512f) },
{ EAetheryteLocation.CrystariumDossalGate, new(64.86609f, -0.015319824f, -18.173523f) },
{ EAetheryteLocation.CrystariumPendants, new(35.477173f, -0.015319824f, 222.58337f) },
{ EAetheryteLocation.CrystariumAmaroLaunch, new(66.60559f, 35.99597f, -131.09033f) },
diff --git a/Questionable/Questionable.csproj b/Questionable/Questionable.csproj
index 7561523e..1e2c3f0c 100644
--- a/Questionable/Questionable.csproj
+++ b/Questionable/Questionable.csproj
@@ -10,9 +10,10 @@
-
+
+
-
+
diff --git a/Questionable/Validation/QuestValidator.cs b/Questionable/Validation/QuestValidator.cs
index f6047a67..1e6d6201 100644
--- a/Questionable/Validation/QuestValidator.cs
+++ b/Questionable/Validation/QuestValidator.cs
@@ -54,4 +54,6 @@ internal sealed class QuestValidator
.ToList();
});
}
+
+ public void AddIssue(ValidationIssue issue) => _validationIssues.Add(issue);
}
diff --git a/Questionable/Windows/DebugOverlay.cs b/Questionable/Windows/DebugOverlay.cs
index 2c27dc69..5d60f4a7 100644
--- a/Questionable/Windows/DebugOverlay.cs
+++ b/Questionable/Windows/DebugOverlay.cs
@@ -1,4 +1,5 @@
using System;
+using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Linq;
using System.Numerics;
@@ -8,6 +9,7 @@ using Dalamud.Interface.Windowing;
using Dalamud.Plugin.Services;
using ImGuiNET;
using Questionable.Controller;
+using Questionable.Data;
using Questionable.Model;
using Questionable.Model.V1;
@@ -20,10 +22,11 @@ internal sealed class DebugOverlay : Window
private readonly IGameGui _gameGui;
private readonly IClientState _clientState;
private readonly ICondition _condition;
+ private readonly AetheryteData _aetheryteData;
private readonly Configuration _configuration;
public DebugOverlay(QuestController questController, QuestRegistry questRegistry, IGameGui gameGui,
- IClientState clientState, ICondition condition, Configuration configuration)
+ IClientState clientState, ICondition condition, AetheryteData aetheryteData, Configuration configuration)
: base("Questionable Debug Overlay###QuestionableDebugOverlay",
ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoScrollbar | ImGuiWindowFlags.NoBackground |
ImGuiWindowFlags.NoInputs | ImGuiWindowFlags.NoSavedSettings, true)
@@ -33,6 +36,7 @@ internal sealed class DebugOverlay : Window
_gameGui = gameGui;
_clientState = clientState;
_condition = condition;
+ _aetheryteData = aetheryteData;
_configuration = configuration;
Position = Vector2.Zero;
@@ -75,14 +79,14 @@ internal sealed class DebugOverlay : Window
for (int i = currentQuest.Step; i <= sequence.Steps.Count; ++i)
{
QuestStep? step = sequence.FindStep(i);
- if (step == null || step.Position == null)
- continue;
-
- DrawStep(i.ToString(CultureInfo.InvariantCulture), step,
- Vector3.Distance(_clientState.LocalPlayer!.Position, step.Position.Value) <
- step.CalculateActualStopDistance()
- ? 0xFF00FF00
- : 0xFF0000FF);
+ if (step != null && TryGetPosition(step, out Vector3? position))
+ {
+ DrawStep(i.ToString(CultureInfo.InvariantCulture), step, position.Value,
+ Vector3.Distance(_clientState.LocalPlayer!.Position, position.Value) <
+ step.CalculateActualStopDistance()
+ ? 0xFF00FF00
+ : 0xFF0000FF);
+ }
}
}
@@ -96,25 +100,49 @@ internal sealed class DebugOverlay : Window
for (int i = 0; i < sequence.Steps.Count; ++i)
{
QuestStep? step = sequence.FindStep(i);
- DrawStep($"{quest.QuestId} / {sequence.Sequence} / {i}", step, 0xFFFFFFFF);
+ if (step != null && TryGetPosition(step, out Vector3? position))
+ {
+ DrawStep($"{quest.QuestId} / {sequence.Sequence} / {i}", step, position.Value, 0xFFFFFFFF);
+ }
}
}
}
- private void DrawStep(string counter, QuestStep? step, uint color)
+ private void DrawStep(string counter, QuestStep step, Vector3 position, uint color)
{
- if (step == null ||
- step.Position == null ||
- step.Disabled ||
- step.TerritoryId != _clientState.TerritoryType)
+ if (step.Disabled || step.TerritoryId != _clientState.TerritoryType)
return;
- bool visible = _gameGui.WorldToScreen(step.Position.Value, out Vector2 screenPos);
+ bool visible = _gameGui.WorldToScreen(position, out Vector2 screenPos);
if (!visible)
return;
ImGui.GetWindowDrawList().AddCircleFilled(screenPos, 3f, color);
ImGui.GetWindowDrawList().AddText(screenPos + new Vector2(10, -8), color,
- $"{counter}: {step.InteractionType}\n{step.Position.Value.ToString("G", CultureInfo.InvariantCulture)} [{(step.Position.Value - _clientState.LocalPlayer!.Position).Length():N2}]\n{step.Comment}");
+ $"{counter}: {step.InteractionType}\n{position.ToString("G", CultureInfo.InvariantCulture)} [{(position - _clientState.LocalPlayer!.Position).Length():N2}]\n{step.Comment}");
+ }
+
+ private bool TryGetPosition(QuestStep step, [NotNullWhen(true)] out Vector3? position)
+ {
+ if (step.Position != null)
+ {
+ position = step.Position;
+ return true;
+ }
+ else if (step.InteractionType == EInteractionType.AttuneAetheryte && step.Aetheryte != null)
+ {
+ position = _aetheryteData.Locations[step.Aetheryte.Value];
+ return true;
+ }
+ else if (step.InteractionType == EInteractionType.AttuneAethernetShard && step.AethernetShard != null)
+ {
+ position = _aetheryteData.Locations[step.AethernetShard.Value];
+ return true;
+ }
+ else
+ {
+ position = null;
+ return false;
+ }
}
}
diff --git a/Questionable/Windows/QuestWindow.cs b/Questionable/Windows/QuestWindow.cs
index 84a89e98..73f242e0 100644
--- a/Questionable/Windows/QuestWindow.cs
+++ b/Questionable/Windows/QuestWindow.cs
@@ -9,6 +9,7 @@ using Dalamud.Game.Text;
using Dalamud.Interface;
using Dalamud.Interface.Colors;
using Dalamud.Interface.Components;
+using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
@@ -277,7 +278,8 @@ internal sealed class QuestWindow : LWindow, IPersistableWindowConfig
{
ImGui.SameLine();
if (ImGuiComponents.IconButton(FontAwesomeIcon.Atlas))
- _commandManager.DispatchCommand("/questinfo", currentQuest.Quest.QuestId.ToString(CultureInfo.InvariantCulture), commandInfo);
+ _commandManager.DispatchCommand("/questinfo",
+ currentQuest.Quest.QuestId.ToString(CultureInfo.InvariantCulture), commandInfo);
}
bool autoAcceptNextQuest = _configuration.General.AutoAcceptNextQuest;
@@ -596,20 +598,72 @@ internal sealed class QuestWindow : LWindow, IPersistableWindowConfig
if (_questRegistry.ValidationIssueCount > 0)
{
ImGui.SameLine();
-
- bool colored = _questRegistry.ValidationErrorCount > 0;
- if (colored)
- ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudRed);
-
- if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Flag,
- $"{_questRegistry.ValidationIssueCount}"))
+ if (DrawValidationIssuesButton())
_questValidationWindow.IsOpen = true;
-
- if (colored)
- ImGui.PopStyleColor();
}
}
+ private bool DrawValidationIssuesButton()
+ {
+ int errorCount = _questRegistry.ValidationErrorCount;
+ int infoCount = _questRegistry.ValidationIssueCount - _questRegistry.ValidationErrorCount;
+ if (errorCount == 0 && infoCount == 0)
+ return false;
+
+ int partsToRender = errorCount == 0 || infoCount == 0 ? 1 : 2;
+ using var id = ImRaii.PushId("validationissues");
+
+ ImGui.PushFont(UiBuilder.IconFont);
+ var icon1 = FontAwesomeIcon.TimesCircle;
+ var icon2 = FontAwesomeIcon.InfoCircle;
+ Vector2 iconSize1 = errorCount > 0 ? ImGui.CalcTextSize(icon1.ToIconString()) : Vector2.Zero;
+ Vector2 iconSize2 = infoCount > 0 ? ImGui.CalcTextSize(icon2.ToIconString()) : Vector2.Zero;
+ ImGui.PopFont();
+
+ string text1 = errorCount > 0 ? errorCount.ToString(CultureInfo.InvariantCulture) : string.Empty;
+ string text2 = infoCount > 0 ? infoCount.ToString(CultureInfo.InvariantCulture) : string.Empty;
+ Vector2 textSize1 = errorCount > 0 ? ImGui.CalcTextSize(text1) : Vector2.Zero;
+ Vector2 textSize2 = infoCount > 0 ? ImGui.CalcTextSize(text2) : Vector2.Zero;
+ var dl = ImGui.GetWindowDrawList();
+ var cursor = ImGui.GetCursorScreenPos();
+
+ var iconPadding = 3 * ImGuiHelpers.GlobalScale;
+
+ // Draw an ImGui button with the icon and text
+ var buttonWidth = iconSize1.X + iconSize2.X + textSize1.X + textSize2.X +
+ (ImGui.GetStyle().FramePadding.X * 2) + iconPadding * 2 * partsToRender;
+ var buttonHeight = ImGui.GetFrameHeight();
+ var button = ImGui.Button(string.Empty, new Vector2(buttonWidth, buttonHeight));
+
+ // Draw the icon on the window drawlist
+ Vector2 position = new Vector2(cursor.X + ImGui.GetStyle().FramePadding.X,
+ cursor.Y + ImGui.GetStyle().FramePadding.Y);
+ if (errorCount > 0)
+ {
+ ImGui.PushFont(UiBuilder.IconFont);
+ dl.AddText(position, ImGui.GetColorU32(ImGuiColors.DalamudRed), icon1.ToIconString());
+ ImGui.PopFont();
+ position = position with { X = position.X + iconSize1.X + iconPadding };
+
+ // Draw the text on the window drawlist
+ dl.AddText(position, ImGui.GetColorU32(ImGuiCol.Text), text1);
+ position = position with { X = position.X + textSize1.X + 2 * iconPadding };
+ }
+
+ if (infoCount > 0)
+ {
+ ImGui.PushFont(UiBuilder.IconFont);
+ dl.AddText(position, ImGui.GetColorU32(ImGuiColors.ParsedBlue), icon2.ToIconString());
+ ImGui.PopFont();
+ position = position with { X = position.X + iconSize2.X + iconPadding };
+
+ // Draw the text on the window drawlist
+ dl.AddText(position, ImGui.GetColorU32(ImGuiCol.Text), text2);
+ }
+
+ return button;
+ }
+
private void DrawRemainingTasks()
{
var remainingTasks = _questController.GetRemainingTaskNames();
diff --git a/Questionable/packages.lock.json b/Questionable/packages.lock.json
index a2ba101c..53ca99c0 100644
--- a/Questionable/packages.lock.json
+++ b/Questionable/packages.lock.json
@@ -31,9 +31,18 @@
},
"JetBrains.Annotations": {
"type": "Direct",
- "requested": "[2023.3.0, )",
- "resolved": "2023.3.0",
- "contentHash": "PHfnvdBUdGaTVG9bR/GEfxgTwWM0Z97Y6X3710wiljELBISipSfF5okn/vz+C2gfO+ihoEyVPjaJwn8ZalVukA=="
+ "requested": "[2024.2.0, )",
+ "resolved": "2024.2.0",
+ "contentHash": "GNnqCFW/163p1fOehKx0CnAqjmpPrUSqrgfHM6qca+P+RN39C9rhlfZHQpJhxmQG/dkOYe/b3Z0P8b6Kv5m1qw=="
+ },
+ "JsonSchema.Net": {
+ "type": "Direct",
+ "requested": "[7.1.2, )",
+ "resolved": "7.1.2",
+ "contentHash": "tvM82Wpsyk+C5aUWkqPZLo2ANDjEfCoDa9R24k7jRkCrwxbXnSBb7NpU1pz0ufp6qw+jIekHD9xJdUkjUtnZxQ==",
+ "dependencies": {
+ "JsonPointer.Net": "5.0.0"
+ }
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Direct",
@@ -56,13 +65,32 @@
},
"System.Text.Json": {
"type": "Direct",
- "requested": "[8.0.3, )",
- "resolved": "8.0.3",
- "contentHash": "hpagS9joOwv6efWfrMmV9MjQXpiXZH72PgN067Ysfr6AWMSD1/1hEcvh/U5mUpPLezEWsOJSuVrmqDIVD958iA==",
+ "requested": "[8.0.4, )",
+ "resolved": "8.0.4",
+ "contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==",
"dependencies": {
"System.Text.Encodings.Web": "8.0.0"
}
},
+ "Humanizer.Core": {
+ "type": "Transitive",
+ "resolved": "2.14.1",
+ "contentHash": "lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw=="
+ },
+ "Json.More.Net": {
+ "type": "Transitive",
+ "resolved": "2.0.1.2",
+ "contentHash": "uF3QeiaXEfH92emz0/BWUiNtMSfxIIvgynuB0Bf1vF4s8eWTcZitBx9l+g/FDaJk5XxqBv9buQXizXKQcXFG1w=="
+ },
+ "JsonPointer.Net": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "fm4T5w20AY6C+p5/pJr0vrXRNGgtSfHl34I1LxC9zdPwS9S3j0GiR1Mz/CVPWKDXXGDpCt1APHpCq7kn5adCfA==",
+ "dependencies": {
+ "Humanizer.Core": "2.14.1",
+ "Json.More.Net": "2.0.1.2"
+ }
+ },
"Microsoft.Build.Tasks.Git": {
"type": "Transitive",
"resolved": "8.0.0",
@@ -160,7 +188,7 @@
"questionable.model": {
"type": "Project",
"dependencies": {
- "System.Text.Json": "[8.0.3, )"
+ "System.Text.Json": "[8.0.4, )"
}
},
"questpaths": {