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": {