diff --git a/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs b/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs index 6307020f3..02084db16 100644 --- a/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs +++ b/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs @@ -109,6 +109,9 @@ internal static class SkipConditionsExtensions .AsSyntaxNodeOrToken(), Assignment(nameof(NearPositionCondition.MaximumDistance), nearPositionCondition.MaximumDistance, emptyCondition.MaximumDistance) + .AsSyntaxNodeOrToken(), + Assignment(nameof(NearPositionCondition.TerritoryId), + nearPositionCondition.TerritoryId, emptyCondition.TerritoryId) .AsSyntaxNodeOrToken())))); } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1080_Only You Can Prevent Forest Ire.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1080_Only You Can Prevent Forest Ire.json index 729b4b3f0..7ebd65e2a 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1080_Only You Can Prevent Forest Ire.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1080_Only You Can Prevent Forest Ire.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -150,7 +151,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1082_Following in His Footsteps.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1082_Following in His Footsteps.json index 4be0c9dfd..5b4cd8243 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1082_Following in His Footsteps.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1082_Following in His Footsteps.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -202,7 +203,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -293,7 +295,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -409,7 +412,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1083_Yearn for the Urn.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1083_Yearn for the Urn.json index c71f25c43..af4380985 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1083_Yearn for the Urn.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1083_Yearn for the Urn.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -194,7 +195,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1084_Heart of the Forest.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1084_Heart of the Forest.json index 727f16852..77a1c6163 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1084_Heart of the Forest.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1084_Heart of the Forest.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -117,7 +118,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json index fe8075f0b..7843c2cf2 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json index 637c7e44a..a109c03cd 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json @@ -56,7 +56,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json index 1a7b66ca5..e5222cab5 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -116,7 +117,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -244,7 +246,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WAR/2904_The Heart of the Problem.json b/QuestPaths/4.x - Stormblood/Class Quests/WAR/2904_The Heart of the Problem.json index c4710dc44..f3cb71d0a 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/WAR/2904_The Heart of the Problem.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/WAR/2904_The Heart of the Problem.json @@ -13,7 +13,21 @@ "Z": 403.3722 }, "TerritoryId": 622, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Azim Steppe - Reunion", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 525.10876, + "Y": -19.50681, + "Z": 403.3722 + }, + "MaximumDistance": 100, + "TerritoryId": 622 + } + } + } } ] }, diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json index 35041f7ac..c7385a023 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3624_A Voice from the Void.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3624_A Voice from the Void.json index c2dced214..5d58303bd 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3624_A Voice from the Void.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3624_A Voice from the Void.json @@ -23,7 +23,8 @@ "Y": 7.1558266, "Z": -249.1341 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 815 } } } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3625_Echoes of the Past.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3625_Echoes of the Past.json index 9b7b8ddee..2eeb073d7 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3625_Echoes of the Past.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3625_Echoes of the Past.json @@ -23,7 +23,8 @@ "Y": 7.1558266, "Z": -249.1341 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 815 } } } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3626_Nyelbert's Lament.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3626_Nyelbert's Lament.json index 43368dbd5..ca1f720b9 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3626_Nyelbert's Lament.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3626_Nyelbert's Lament.json @@ -23,7 +23,8 @@ "Y": 7.1558266, "Z": -249.1341 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 815 } } } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3627_Taynor's Training Day.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3627_Taynor's Training Day.json index 370c4fc15..45c3f6725 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3627_Taynor's Training Day.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3627_Taynor's Training Day.json @@ -23,7 +23,8 @@ "Y": 7.1558266, "Z": -249.1341 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 815 } } } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3628_A Tearful Reunion.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3628_A Tearful Reunion.json index 1895ba164..f5e70ecff 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3628_A Tearful Reunion.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3628_A Tearful Reunion.json @@ -23,7 +23,8 @@ "Y": 7.1558266, "Z": -249.1341 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 815 } } } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4610_A Brewing Reputation.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4610_A Brewing Reputation.json index 1e9036a21..8834ff367 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4610_A Brewing Reputation.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4610_A Brewing Reputation.json @@ -157,7 +157,8 @@ "Y": 437.5829, "Z": 333.63843 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 960 } } } diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 69b6c8548..ad911e724 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -261,11 +261,15 @@ }, "MaximumDistance": { "type": "number" + }, + "TerritoryId": { + "type": "number" } }, "required": [ "Position", - "MaximumDistance" + "MaximumDistance", + "TerritoryId" ], "additionalProperties": false }, @@ -323,11 +327,15 @@ }, "MaximumDistance": { "type": "number" + }, + "TerritoryId": { + "type": "number" } }, "required": [ "Position", - "MaximumDistance" + "MaximumDistance", + "TerritoryId" ], "additionalProperties": false } diff --git a/Questionable.Model/Questing/NearPositionCondition.cs b/Questionable.Model/Questing/NearPositionCondition.cs index 7c5885eda..ecfba871e 100644 --- a/Questionable.Model/Questing/NearPositionCondition.cs +++ b/Questionable.Model/Questing/NearPositionCondition.cs @@ -9,4 +9,5 @@ public sealed class NearPositionCondition [JsonConverter(typeof(VectorConverter))] public Vector3 Position { get; set; } public float MaximumDistance { get; set; } + public ushort TerritoryId { get; set; } } diff --git a/Questionable/Validation/Validators/ClassQuestShouldHaveShortcutValidator.cs b/Questionable/Validation/Validators/ClassQuestShouldHaveShortcutValidator.cs new file mode 100644 index 000000000..405c8f88a --- /dev/null +++ b/Questionable/Validation/Validators/ClassQuestShouldHaveShortcutValidator.cs @@ -0,0 +1,6 @@ +namespace Questionable.Validation.Validators; + +public class ClassQuestShouldHaveShortcut +{ + +}