diff --git a/QuestPaths/AssemblyQuestLoader.cs b/QuestPaths/AssemblyQuestLoader.cs
index 14264cf8..460e1971 100644
--- a/QuestPaths/AssemblyQuestLoader.cs
+++ b/QuestPaths/AssemblyQuestLoader.cs
@@ -1,4 +1,5 @@
-using System;
+#if RELEASE
+using System;
using System.IO;
using System.IO.Compression;
@@ -23,3 +24,4 @@ public static class AssemblyQuestLoader
}
}
}
+#endif
diff --git a/QuestPaths/Endwalker/AetherCurrents/Elpis/4507_Touring Anagnorisis Part 1.json b/QuestPaths/Endwalker/AetherCurrents/Elpis/4507_Touring Anagnorisis Part 1.json
index 63573553..96ea596d 100644
--- a/QuestPaths/Endwalker/AetherCurrents/Elpis/4507_Touring Anagnorisis Part 1.json
+++ b/QuestPaths/Endwalker/AetherCurrents/Elpis/4507_Touring Anagnorisis Part 1.json
@@ -59,6 +59,14 @@
},
"TerritoryId": 961,
"InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ],
"$.0": "[1]",
"$.1": "QuestVariables if done first: 17 0 0 0 0 64"
},
@@ -71,6 +79,14 @@
},
"TerritoryId": 961,
"InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ],
"$.0": "[2]",
"$.2": "QuestVariables if done after [1]: 33 16 0 0 0 96",
"$.3": "QuestVariables if done after [3]: 32 17 0 0 0 160"
@@ -84,6 +100,14 @@
},
"TerritoryId": 961,
"InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ],
"$.0": 3,
"$.1": "QuestVariables if done first: 16 1 0 0 0 128"
}
diff --git a/QuestPaths/Endwalker/AetherCurrents/Elpis/4511_An Expected Guest.json b/QuestPaths/Endwalker/AetherCurrents/Elpis/4511_An Expected Guest.json
index 6713a6f2..aed15bc8 100644
--- a/QuestPaths/Endwalker/AetherCurrents/Elpis/4511_An Expected Guest.json
+++ b/QuestPaths/Endwalker/AetherCurrents/Elpis/4511_An Expected Guest.json
@@ -20,6 +20,15 @@
{
"Sequence": 1,
"Steps": [
+ {
+ "Position": {
+ "X": -588.7367,
+ "Y": 158.76302,
+ "Z": -195.30913
+ },
+ "TerritoryId": 961,
+ "InteractionType": "WalkTo"
+ },
{
"Position": {
"X": -318.20203,
diff --git a/QuestPaths/Endwalker/AetherCurrents/Mare Lamentorum/4241_Carrots Its Whats for Dinner.json b/QuestPaths/Endwalker/AetherCurrents/Mare Lamentorum/4241_Carrots Its Whats for Dinner.json
index cb226cfe..a5096100 100644
--- a/QuestPaths/Endwalker/AetherCurrents/Mare Lamentorum/4241_Carrots Its Whats for Dinner.json
+++ b/QuestPaths/Endwalker/AetherCurrents/Mare Lamentorum/4241_Carrots Its Whats for Dinner.json
@@ -35,7 +35,9 @@
"StopDistance": 3,
"TerritoryId": 959,
"InteractionType": "Say",
- "ChatMessage": "carrot of happiness"
+ "ChatMessage": {
+ "Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
+ }
},
{
"DataId": 1041790,
@@ -47,7 +49,9 @@
"StopDistance": 3,
"TerritoryId": 959,
"InteractionType": "Say",
- "ChatMessage": "carrot of happiness",
+ "ChatMessage": {
+ "Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
+ },
"$.1": "QuestVariables if done after [1]: 2 0 0 0 0 192"
},
{
@@ -65,7 +69,9 @@
"StopDistance": 3,
"TerritoryId": 959,
"InteractionType": "Say",
- "ChatMessage": "carrot of happiness"
+ "ChatMessage": {
+ "Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
+ }
}
]
},
diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4358_Old Sharlayan New to You.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4358_Old Sharlayan New to You.json
index 41b4c872..fa29ba68 100644
--- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4358_Old Sharlayan New to You.json
+++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4358_Old Sharlayan New to You.json
@@ -236,7 +236,8 @@
"Z": 4.5318604
},
"TerritoryId": 962,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 987
},
{
"DataId": 1038586,
diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json
index e634e7db..641b2ced 100644
--- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json
+++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json
@@ -28,7 +28,8 @@
"Z": 14.81335
},
"TerritoryId": 987,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 962
},
{
"DataId": 185,
diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4367_Estate Visitor.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4367_Estate Visitor.json
index 8718794b..58fd3a90 100644
--- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4367_Estate Visitor.json
+++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4367_Estate Visitor.json
@@ -99,7 +99,8 @@
"AethernetShortcut": [
"[Old Sharlayan] The Leveilleur Estate",
"[Old Sharlayan] The Baldesion Annex"
- ]
+ ],
+ "TargetTerritoryId": 987
},
{
"DataId": 1040291,
diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4368_For Thavnair Bound.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4368_For Thavnair Bound.json
index 43983bf3..190c4e3f 100644
--- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4368_For Thavnair Bound.json
+++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4368_For Thavnair Bound.json
@@ -28,7 +28,8 @@
"Z": 14.785889
},
"TerritoryId": 987,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 962
},
{
"DataId": 1038592,
diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4370_A Fishermans Friend.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4370_A Fishermans Friend.json
index b8c61111..357f41b7 100644
--- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4370_A Fishermans Friend.json
+++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4370_A Fishermans Friend.json
@@ -46,15 +46,12 @@
"InteractionType": "CutsceneSelectString",
"DialogueChoices": [
{
- "ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A2_000_088"
},
{
- "ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A3_000_098"
},
{
- "ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A5_000_107"
}
]
@@ -75,15 +72,12 @@
"InteractionType": "CutsceneSelectString",
"DialogueChoices": [
{
- "ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A6_000_149"
},
{
- "ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A7_000_158"
},
{
- "ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A8_000_164"
}
]
@@ -104,15 +98,12 @@
"InteractionType": "CutsceneSelectString",
"DialogueChoices": [
{
- "ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A9_000_200"
},
{
- "ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A10_000_209"
},
{
- "ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A11_000_218"
}
]
diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4376_The Satrap of Radz at Han.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4376_The Satrap of Radz at Han.json
index e928ce09..460f35a7 100644
--- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4376_The Satrap of Radz at Han.json
+++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4376_The Satrap of Radz at Han.json
@@ -103,7 +103,8 @@
"AethernetShortcut": [
"[Old Sharlayan] Aetheryte Plaza",
"[Old Sharlayan] The Baldesion Annex"
- ]
+ ],
+ "TargetTerritoryId": 987
},
{
"DataId": 1038589,
diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4381_A Capital Idea.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4381_A Capital Idea.json
index a889d075..fa6d6a21 100644
--- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4381_A Capital Idea.json
+++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4381_A Capital Idea.json
@@ -32,7 +32,8 @@
"AethernetShortcut": [
"[Old Sharlayan] The Studium",
"[Old Sharlayan] The Baldesion Annex"
- ]
+ ],
+ "TargetTerritoryId": 987
},
{
"DataId": 1038784,
diff --git a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4408_Returning Home.json b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4408_Returning Home.json
index 52a8df53..b0e712a6 100644
--- a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4408_Returning Home.json
+++ b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4408_Returning Home.json
@@ -100,7 +100,8 @@
"Z": 4.5318604
},
"TerritoryId": 962,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 987
},
{
"DataId": 2012188,
diff --git a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4409_Skies Aflame.json b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4409_Skies Aflame.json
index dcc7ef9c..069e95df 100644
--- a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4409_Skies Aflame.json
+++ b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4409_Skies Aflame.json
@@ -29,7 +29,8 @@
"Z": 4.55803
},
"TerritoryId": 962,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 987
}
]
},
@@ -37,6 +38,11 @@
"Sequence": 2,
"Steps": [
{
+ "Position": {
+ "X": 0,
+ "Y": 0,
+ "Z": 0
+ },
"TerritoryId": 957,
"AetheryteShortcut": "Thavnair - Yedlihmad",
"InteractionType": "WalkTo",
diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4425_Their Greatest Contribution.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4425_Their Greatest Contribution.json
index 125576d4..39be27cd 100644
--- a/QuestPaths/Endwalker/MSQ/E-Elpis/4425_Their Greatest Contribution.json
+++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4425_Their Greatest Contribution.json
@@ -126,7 +126,9 @@
},
"TerritoryId": 961,
"InteractionType": "Say",
- "ChatMessage": "I have a favor to ask"
+ "ChatMessage": {
+ "Key": "TEXT_AKTKME107_04425_SAYTODO_000_190"
+ }
}
]
},
@@ -142,7 +144,9 @@
},
"TerritoryId": 961,
"InteractionType": "Say",
- "ChatMessage": "Please, Emet-Selch"
+ "ChatMessage": {
+ "Key": "TEXT_AKTKME107_04425_SAYTODO_000_210"
+ }
}
]
},
diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4438_Thou Must Live Die and Know.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4438_Thou Must Live Die and Know.json
index d6764c77..d21a65b0 100644
--- a/QuestPaths/Endwalker/MSQ/E-Elpis/4438_Thou Must Live Die and Know.json
+++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4438_Thou Must Live Die and Know.json
@@ -65,7 +65,8 @@
"AethernetShortcut": [
"[Old Sharlayan] Aetheryte Plaza",
"[Old Sharlayan] The Baldesion Annex"
- ]
+ ],
+ "TargetTerritoryId": 987
},
{
"DataId": 1040161,
diff --git a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4440_Outside Help.json b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4440_Outside Help.json
index b42a5831..7e488b39 100644
--- a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4440_Outside Help.json
+++ b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4440_Outside Help.json
@@ -49,7 +49,8 @@
"AethernetShortcut": [
"[Old Sharlayan] Aetheryte Plaza",
"[Old Sharlayan] The Baldesion Annex"
- ]
+ ],
+ "TargetTerritoryId": 987
}
]
},
@@ -64,7 +65,8 @@
"Z": 14.785889
},
"TerritoryId": 987,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 962
},
{
"DataId": 1039683,
diff --git a/QuestPaths/Endwalker/MSQ/H-6.1/4526_Newfound Adventure.json b/QuestPaths/Endwalker/MSQ/H-6.1/4526_Newfound Adventure.json
index 80a609d4..9a499661 100644
--- a/QuestPaths/Endwalker/MSQ/H-6.1/4526_Newfound Adventure.json
+++ b/QuestPaths/Endwalker/MSQ/H-6.1/4526_Newfound Adventure.json
@@ -14,7 +14,8 @@
},
"TerritoryId": 156,
"InteractionType": "Interact",
- "DisableNavmesh": true
+ "DisableNavmesh": true,
+ "TargetTerritoryId": 351
},
{
"DataId": 1041232,
@@ -39,7 +40,8 @@
"Z": 27.5
},
"TerritoryId": 351,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 156
},
{
"DataId": 1039570,
diff --git a/QuestPaths/Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json b/QuestPaths/Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json
index d6156e09..e7efd53a 100644
--- a/QuestPaths/Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json
+++ b/QuestPaths/Endwalker/MSQ/H-6.1/4531_Sharing the Wealth.json
@@ -66,7 +66,15 @@
},
"StopDistance": 5,
"TerritoryId": 957,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
},
{
"DataId": 1039606,
diff --git a/QuestPaths/Endwalker/MSQ/H-6.1/4533_Restricted Reading.json b/QuestPaths/Endwalker/MSQ/H-6.1/4533_Restricted Reading.json
index bf47298a..da7d334f 100644
--- a/QuestPaths/Endwalker/MSQ/H-6.1/4533_Restricted Reading.json
+++ b/QuestPaths/Endwalker/MSQ/H-6.1/4533_Restricted Reading.json
@@ -107,10 +107,15 @@
"Y": 1.2090492,
"Z": 118.133255
},
+ "StopDistance": 4,
"TerritoryId": 957,
"InteractionType": "WalkTo",
"AetheryteShortcut": "Thavnair - Palaka's Stand",
- "Fly": true
+ "Fly": true,
+ "SkipIf": [
+ "FlyingLocked"
+ ],
+ "Comment": "TODO Verify; there's some weird shenanigans happening with navmesh not moving to coords 'below' it"
},
{
"DataId": 2012847,
@@ -120,7 +125,8 @@
"Z": 119.43237
},
"TerritoryId": 957,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Mount": false
}
]
},
diff --git a/QuestPaths/Endwalker/MSQ/I-6.2/4593_Shadowed Remnants.json b/QuestPaths/Endwalker/MSQ/I-6.2/4593_Shadowed Remnants.json
index 276af52c..80552cbd 100644
--- a/QuestPaths/Endwalker/MSQ/I-6.2/4593_Shadowed Remnants.json
+++ b/QuestPaths/Endwalker/MSQ/I-6.2/4593_Shadowed Remnants.json
@@ -30,6 +30,14 @@
},
"TerritoryId": 1089,
"InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ],
"$.0": "[1]",
"$.1": "QuestVariables if done first: 1 0 0 0 0 128"
},
@@ -42,6 +50,14 @@
},
"TerritoryId": 1089,
"InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ],
"$.0": "[2]",
"$.1": "QuestVariables if done after [1]: 2 0 0 0 0 192"
},
@@ -54,6 +70,14 @@
},
"TerritoryId": 1089,
"InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ],
"$.0": "[3]",
"$.1": "QuestVariables if done after [1, 2]: 3 0 0 0 0 224"
},
@@ -65,7 +89,15 @@
"Z": -49.45453
},
"TerritoryId": 1089,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 16
+ ]
}
]
},
@@ -114,7 +146,7 @@
"Z": 206.78001
},
"TerritoryId": 1089,
- "InteractionType": "Interact"
+ "InteractionType": "WalkTo"
}
]
},
@@ -128,6 +160,7 @@
"Y": -718.4441,
"Z": 206.77502
},
+ "StopDistance": 5,
"TerritoryId": 1089,
"InteractionType": "Interact"
}
diff --git a/QuestPaths/Endwalker/MSQ/I-6.2/4594_Where Everything Begins.json b/QuestPaths/Endwalker/MSQ/I-6.2/4594_Where Everything Begins.json
index ffcd8b48..fd2435b9 100644
--- a/QuestPaths/Endwalker/MSQ/I-6.2/4594_Where Everything Begins.json
+++ b/QuestPaths/Endwalker/MSQ/I-6.2/4594_Where Everything Begins.json
@@ -12,7 +12,7 @@
"Y": -718.33905,
"Z": 207.87354
},
- "StopDistance": 5,
+ "StopDistance": 7,
"TerritoryId": 1089,
"InteractionType": "Interact"
}
diff --git a/QuestPaths/Endwalker/MSQ/I-6.2/4595_Groping in the Dark.json b/QuestPaths/Endwalker/MSQ/I-6.2/4595_Groping in the Dark.json
index f4c4b44a..f60e2a87 100644
--- a/QuestPaths/Endwalker/MSQ/I-6.2/4595_Groping in the Dark.json
+++ b/QuestPaths/Endwalker/MSQ/I-6.2/4595_Groping in the Dark.json
@@ -40,6 +40,14 @@
},
"TerritoryId": 1089,
"InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ],
"$.0": "[1]",
"$.1": "QuestVariables if done first: 1 0 0 0 0 32"
},
@@ -52,6 +60,14 @@
},
"TerritoryId": 1089,
"InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ],
"$.0": "[2]",
"$.1": "QuestVariables if done after [1]: 2 0 0 0 0 96"
},
@@ -64,6 +80,14 @@
},
"TerritoryId": 1089,
"InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ],
"$.0": "[3]"
}
]
diff --git a/QuestPaths/Endwalker/MSQ/I-6.2/4599_A World with Light and Life.json b/QuestPaths/Endwalker/MSQ/I-6.2/4599_A World with Light and Life.json
index d43ea26d..68e8801b 100644
--- a/QuestPaths/Endwalker/MSQ/I-6.2/4599_A World with Light and Life.json
+++ b/QuestPaths/Endwalker/MSQ/I-6.2/4599_A World with Light and Life.json
@@ -39,6 +39,7 @@
"Y": 1.7999947,
"Z": -180.07172
},
+ "StopDistance": 5,
"TerritoryId": 963,
"InteractionType": "Interact",
"AethernetShortcut": [
diff --git a/QuestPaths/Endwalker/MSQ/J-6.3/4672_Kindled Spirit.json b/QuestPaths/Endwalker/MSQ/J-6.3/4672_Kindled Spirit.json
index 56c68240..aa7203ab 100644
--- a/QuestPaths/Endwalker/MSQ/J-6.3/4672_Kindled Spirit.json
+++ b/QuestPaths/Endwalker/MSQ/J-6.3/4672_Kindled Spirit.json
@@ -50,6 +50,14 @@
16028,
16029
],
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ],
"$.0": "[1]",
"$.1": "QuestVariables if done first: 16 5(enemy kill count) 0 0 0 64"
},
@@ -62,6 +70,14 @@
},
"TerritoryId": 958,
"InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ],
"$.0": "[2]",
"$.1": "QuestVariables if done after [1]: 33 5 0 0 0 96"
},
@@ -74,6 +90,14 @@
},
"TerritoryId": 958,
"InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 16
+ ],
"$.0": "[3]",
"$.1": "QuestVariables if done after [1, 2]: 49 21 0 0 0 112"
},
@@ -89,7 +113,16 @@
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
16030
- ]
+ ],
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ],
+ "$.2": "QuestVariables if done first: 16 0 16 0 0 128"
}
]
},
diff --git a/QuestPaths/Endwalker/MSQ/J-6.3/4675_A Dragons Resolve.json b/QuestPaths/Endwalker/MSQ/J-6.3/4675_A Dragons Resolve.json
index dba2d1f3..97ce3779 100644
--- a/QuestPaths/Endwalker/MSQ/J-6.3/4675_A Dragons Resolve.json
+++ b/QuestPaths/Endwalker/MSQ/J-6.3/4675_A Dragons Resolve.json
@@ -12,6 +12,7 @@
"Y": -173,
"Z": 126.35986
},
+ "StopDistance": 7,
"TerritoryId": 1119,
"InteractionType": "Interact"
}
@@ -122,6 +123,7 @@
"Y": -17.202883,
"Z": 705.0431
},
+ "StopDistance": 5,
"TerritoryId": 958,
"InteractionType": "Interact"
}
diff --git a/QuestPaths/Endwalker/MSQ/J-6.3/4676_Paths Barred.json b/QuestPaths/Endwalker/MSQ/J-6.3/4676_Paths Barred.json
index 4fbfeeea..a730dfa4 100644
--- a/QuestPaths/Endwalker/MSQ/J-6.3/4676_Paths Barred.json
+++ b/QuestPaths/Endwalker/MSQ/J-6.3/4676_Paths Barred.json
@@ -12,6 +12,7 @@
"Y": -17.44166,
"Z": 707.3014
},
+ "StopDistance": 5,
"TerritoryId": 958,
"InteractionType": "Interact"
}
@@ -29,6 +30,7 @@
},
"TerritoryId": 963,
"InteractionType": "Interact",
+ "AetheryteShortcut": "Radz-at-Han",
"AethernetShortcut": [
"[Radz-at-Han] Aetheryte Plaza",
"[Radz-at-Han] Meghaduta"
@@ -62,7 +64,16 @@
"Z": -585.1987
},
"TerritoryId": 957,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Fly": true,
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
},
{
"DataId": 1037647,
diff --git a/QuestPaths/Endwalker/MSQ/J-6.3/4677_Desires Untold.json b/QuestPaths/Endwalker/MSQ/J-6.3/4677_Desires Untold.json
index c86a52a2..4d7218e3 100644
--- a/QuestPaths/Endwalker/MSQ/J-6.3/4677_Desires Untold.json
+++ b/QuestPaths/Endwalker/MSQ/J-6.3/4677_Desires Untold.json
@@ -28,7 +28,8 @@
"Z": -616.14404
},
"TerritoryId": 957,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Fly": true
}
]
},
@@ -43,12 +44,13 @@
"Z": -715.44977
},
"TerritoryId": 957,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Fly": true
}
]
},
{
- "Sequence": 3,
+ "Sequence": 4,
"Steps": [
{
"TerritoryId": 1125,
@@ -67,9 +69,9 @@
"Y": 89.42017,
"Z": -636.86584
},
+ "StopDistance": 5,
"TerritoryId": 957,
- "InteractionType": "Interact",
- "Comment": "Unsure if this is the right data id"
+ "InteractionType": "Interact"
}
]
}
diff --git a/QuestPaths/Endwalker/MSQ/J-6.3/4678_Gods Revel Lands Tremble.json b/QuestPaths/Endwalker/MSQ/J-6.3/4678_Gods Revel Lands Tremble.json
index f28d03f5..2af3b071 100644
--- a/QuestPaths/Endwalker/MSQ/J-6.3/4678_Gods Revel Lands Tremble.json
+++ b/QuestPaths/Endwalker/MSQ/J-6.3/4678_Gods Revel Lands Tremble.json
@@ -12,6 +12,7 @@
"Y": 89.42017,
"Z": -636.86584
},
+ "StopDistance": 5,
"TerritoryId": 957,
"InteractionType": "Interact"
}
@@ -29,6 +30,7 @@
},
"TerritoryId": 963,
"InteractionType": "Interact",
+ "AetheryteShortcut": "Radz-at-Han",
"AethernetShortcut": [
"[Radz-at-Han] Aetheryte Plaza",
"[Radz-at-Han] Meghaduta"
diff --git a/QuestPaths/Endwalker/MSQ/K-6.4/4735_Currying Flavor.json b/QuestPaths/Endwalker/MSQ/K-6.4/4735_Currying Flavor.json
index 43c8e26e..2c9dc168 100644
--- a/QuestPaths/Endwalker/MSQ/K-6.4/4735_Currying Flavor.json
+++ b/QuestPaths/Endwalker/MSQ/K-6.4/4735_Currying Flavor.json
@@ -46,6 +46,7 @@
"Y": 0.59503174,
"Z": -141.71057
},
+ "StopDistance": 5,
"TerritoryId": 963,
"InteractionType": "Interact"
}
@@ -61,7 +62,8 @@
"Z": -140.01839
},
"TerritoryId": 963,
- "InteractionType": "UseItem"
+ "InteractionType": "UseItem",
+ "ItemId": 2003461
}
]
},
diff --git a/QuestPaths/Endwalker/MSQ/K-6.4/4736_Going Haam.json b/QuestPaths/Endwalker/MSQ/K-6.4/4736_Going Haam.json
index 0d12835a..a4a44a7e 100644
--- a/QuestPaths/Endwalker/MSQ/K-6.4/4736_Going Haam.json
+++ b/QuestPaths/Endwalker/MSQ/K-6.4/4736_Going Haam.json
@@ -30,8 +30,10 @@
"Y": 1.2359009,
"Z": 5.9662476
},
+ "StopDistance": 4,
"TerritoryId": 1161,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 963
},
{
"DataId": 1039602,
@@ -78,6 +80,7 @@
"Y": 4.357494,
"Z": 0.7476196
},
+ "StopDistance": 5,
"TerritoryId": 962,
"InteractionType": "Interact"
}
@@ -86,6 +89,19 @@
{
"Sequence": 4,
"Steps": [
+ {
+ "Position": {
+ "X": 6.0711417,
+ "Y": -28.723347,
+ "Z": -43.467506
+ },
+ "TerritoryId": 956,
+ "InteractionType": "WalkTo",
+ "AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet",
+ "SkipIf": [
+ "FlyingUnlocked"
+ ]
+ },
{
"DataId": 1045407,
"Position": {
@@ -94,7 +110,8 @@
"Z": -125.96332
},
"TerritoryId": 956,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Fly": true
}
]
},
@@ -109,7 +126,8 @@
"Z": 54.276245
},
"TerritoryId": 956,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Fly": true
}
]
},
@@ -123,6 +141,7 @@
"Y": -16.146997,
"Z": 236.22485
},
+ "StopDistance": 5,
"TerritoryId": 962,
"InteractionType": "Interact"
}
@@ -148,6 +167,7 @@
"Y": -16.147,
"Z": 235.70605
},
+ "StopDistance": 7,
"TerritoryId": 962,
"InteractionType": "Interact"
}
diff --git a/QuestPaths/Endwalker/MSQ/K-6.4/4737_Like Fear to Flame.json b/QuestPaths/Endwalker/MSQ/K-6.4/4737_Like Fear to Flame.json
index 5969b787..0360fbc7 100644
--- a/QuestPaths/Endwalker/MSQ/K-6.4/4737_Like Fear to Flame.json
+++ b/QuestPaths/Endwalker/MSQ/K-6.4/4737_Like Fear to Flame.json
@@ -12,6 +12,7 @@
"Y": -16.147,
"Z": 235.70605
},
+ "StopDistance": 7,
"TerritoryId": 962,
"InteractionType": "Interact"
}
@@ -27,8 +28,10 @@
"Y": 23.803606,
"Z": 404.9286
},
+ "StopDistance": 7,
"TerritoryId": 958,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Garlemald - Camp Broken Glass"
}
]
},
@@ -43,7 +46,8 @@
"Z": -191.48547
},
"TerritoryId": 958,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Garlemald - Tertium"
}
]
},
@@ -58,7 +62,15 @@
"Z": -156.02356
},
"TerritoryId": 958,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
},
{
"DataId": 1045491,
@@ -68,7 +80,15 @@
"Z": -178.27118
},
"TerritoryId": 958,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
},
{
"DataId": 1037774,
@@ -78,7 +98,15 @@
"Z": -212.14618
},
"TerritoryId": 958,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 16
+ ]
},
{
"DataId": 1045489,
@@ -88,7 +116,15 @@
"Z": -213.18384
},
"TerritoryId": 958,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
},
{
"DataId": 1037766,
@@ -98,7 +134,16 @@
"Z": -265.00348
},
"TerritoryId": 958,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Comment": "TODO Check flags",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 8
+ ]
}
]
},
@@ -113,7 +158,8 @@
"Z": -637.56775
},
"TerritoryId": 958,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Fly": true
}
]
}
diff --git a/QuestPaths/Endwalker/MSQ/K-6.4/4738_The Fallen Empire.json b/QuestPaths/Endwalker/MSQ/K-6.4/4738_The Fallen Empire.json
index be4e80c0..81e38a8a 100644
--- a/QuestPaths/Endwalker/MSQ/K-6.4/4738_The Fallen Empire.json
+++ b/QuestPaths/Endwalker/MSQ/K-6.4/4738_The Fallen Empire.json
@@ -12,6 +12,7 @@
"Y": 15.5581665,
"Z": -638.3002
},
+ "StopDistance": 5,
"TerritoryId": 958,
"InteractionType": "Interact"
}
@@ -28,7 +29,8 @@
"Z": -620.08093
},
"TerritoryId": 958,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Fly": true
}
]
},
@@ -58,7 +60,16 @@
"Z": 67.063354
},
"TerritoryId": 1160,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Comment": "TODO Check Flags",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
},
{
"DataId": 1045493,
@@ -68,7 +79,15 @@
"Z": 42.435303
},
"TerritoryId": 1160,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 16
+ ]
},
{
"DataId": 2013350,
@@ -78,7 +97,15 @@
"Z": 26.382812
},
"TerritoryId": 1160,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
},
{
"DataId": 1045492,
@@ -88,7 +115,15 @@
"Z": -9.353821
},
"TerritoryId": 1160,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
}
]
},
@@ -117,8 +152,10 @@
"Y": 23.803606,
"Z": 406.05774
},
+ "StopDistance": 7,
"TerritoryId": 958,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Garlemald - Camp Broken Glass"
}
]
},
@@ -133,7 +170,8 @@
"Z": -202.99078
},
"TerritoryId": 958,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Garlemald - Tertium"
}
]
}
diff --git a/QuestPaths/Endwalker/MSQ/K-6.4/4739_Bonds of Trust.json b/QuestPaths/Endwalker/MSQ/K-6.4/4739_Bonds of Trust.json
index 38097802..bb8fb52f 100644
--- a/QuestPaths/Endwalker/MSQ/K-6.4/4739_Bonds of Trust.json
+++ b/QuestPaths/Endwalker/MSQ/K-6.4/4739_Bonds of Trust.json
@@ -12,6 +12,7 @@
"Y": -36.65,
"Z": -206.74457
},
+ "StopDistance": 7,
"TerritoryId": 958,
"InteractionType": "Interact"
}
@@ -26,11 +27,14 @@
"Y": 10.8,
"Z": -663.8825
},
+ "StopDistance": 1,
"TerritoryId": 958,
"InteractionType": "Combat",
+ "EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [
16332
- ]
+ ],
+ "Fly": true
}
]
},
@@ -44,6 +48,7 @@
"Y": 10.8,
"Z": -659.75433
},
+ "StopDistance": 7,
"TerritoryId": 958,
"InteractionType": "Interact"
}
diff --git a/QuestPaths/Endwalker/MSQ/K-6.4/4740_Lunar Rendezvous.json b/QuestPaths/Endwalker/MSQ/K-6.4/4740_Lunar Rendezvous.json
index d11cf33b..35d89bc3 100644
--- a/QuestPaths/Endwalker/MSQ/K-6.4/4740_Lunar Rendezvous.json
+++ b/QuestPaths/Endwalker/MSQ/K-6.4/4740_Lunar Rendezvous.json
@@ -12,6 +12,7 @@
"Y": -36.65,
"Z": -204.97449
},
+ "StopDistance": 5,
"TerritoryId": 958,
"InteractionType": "Interact"
}
@@ -28,7 +29,9 @@
"Z": 585.1072
},
"TerritoryId": 959,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
+ "Fly": true
}
]
},
@@ -43,13 +46,27 @@
"Z": 407.27856
},
"TerritoryId": 959,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Fly": true
}
]
},
{
"Sequence": 3,
"Steps": [
+ {
+ "DataId": 2012664,
+ "Position": {
+ "X": -26.901672,
+ "Y": -130.47992,
+ "Z": -580.4685
+ },
+ "TerritoryId": 959,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow",
+ "SkipIf": ["FlyingUnlocked"],
+ "Comment": "Check if the flying unlocked check is good enough"
+ },
{
"DataId": 1039686,
"Position": {
@@ -58,7 +75,8 @@
"Z": -494.31604
},
"TerritoryId": 959,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Fly": true
}
]
},
@@ -87,9 +105,18 @@
"Y": -49.589592,
"Z": -626.42865
},
+ "StopDistance": 6,
"TerritoryId": 959,
"InteractionType": "Emote",
- "Emote": "rally"
+ "Emote": "rally",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
},
{
"DataId": 1045470,
@@ -98,20 +125,18 @@
"Y": -49.589596,
"Z": -622.3087
},
+ "StopDistance": 6,
"TerritoryId": 959,
"InteractionType": "Emote",
- "Emote": "rally"
- },
- {
- "DataId": 1045473,
- "Position": {
- "X": 152.42236,
- "Y": -49.589592,
- "Z": -614.8623
- },
- "TerritoryId": 959,
- "InteractionType": "Emote",
- "Emote": "rally"
+ "Emote": "rally",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ]
},
{
"DataId": 1045472,
@@ -120,9 +145,39 @@
"Y": -49.589596,
"Z": -621.48474
},
+ "StopDistance": 6,
"TerritoryId": 959,
"InteractionType": "Emote",
- "Emote": "rally"
+ "Emote": "rally",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ],
+ "Comment": "TODO Check Flags"
+ },
+ {
+ "DataId": 1045473,
+ "Position": {
+ "X": 152.42236,
+ "Y": -49.589592,
+ "Z": -614.8623
+ },
+ "StopDistance": 6,
+ "TerritoryId": 959,
+ "InteractionType": "Emote",
+ "Emote": "rally",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 16
+ ]
}
]
},
@@ -136,6 +191,7 @@
"Y": -49.589592,
"Z": -619.9894
},
+ "StopDistance": 6,
"TerritoryId": 959,
"InteractionType": "Interact"
}
diff --git a/QuestPaths/Endwalker/MSQ/K-6.4/4741_The Red Side of the Moon.json b/QuestPaths/Endwalker/MSQ/K-6.4/4741_The Red Side of the Moon.json
index 0c009695..f9feb9c3 100644
--- a/QuestPaths/Endwalker/MSQ/K-6.4/4741_The Red Side of the Moon.json
+++ b/QuestPaths/Endwalker/MSQ/K-6.4/4741_The Red Side of the Moon.json
@@ -4,15 +4,18 @@
"QuestSequence": [
{
"Sequence": 0,
- "DataId": 1045611,
- "Position": {
- "X": 160.87585,
- "Y": -49.589592,
- "Z": -618.46344
- },
- "TerritoryId": 959,
- "InteractionType": "Interact",
- "Comment": "Unsure if correct id"
+ "Steps": [
+ {
+ "DataId": 1045611,
+ "Position": {
+ "X": 160.87585,
+ "Y": -49.589592,
+ "Z": -618.46344
+ },
+ "TerritoryId": 959,
+ "InteractionType": "Interact"
+ }
+ ]
},
{
"Sequence": 1,
@@ -25,7 +28,9 @@
"Z": 418.69226
},
"TerritoryId": 959,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
+ "Fly": true
}
]
},
@@ -40,7 +45,16 @@
"Z": 638.0254
},
"TerritoryId": 1162,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
+ ],
+ "Comment": "TODO Check Flags"
},
{
"DataId": 2013355,
@@ -50,7 +64,15 @@
"Z": 547.6615
},
"TerritoryId": 1162,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
+ ]
},
{
"DataId": 2013356,
@@ -60,7 +82,15 @@
"Z": 472.19043
},
"TerritoryId": 1162,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
}
]
},
diff --git a/QuestPaths/Endwalker/MSQ/K-6.4/4742_Abyssal Dark.json b/QuestPaths/Endwalker/MSQ/K-6.4/4742_Abyssal Dark.json
index b43e4031..524a09c2 100644
--- a/QuestPaths/Endwalker/MSQ/K-6.4/4742_Abyssal Dark.json
+++ b/QuestPaths/Endwalker/MSQ/K-6.4/4742_Abyssal Dark.json
@@ -12,6 +12,7 @@
"Y": 56.573345,
"Z": 436.0265
},
+ "StopDistance": 5,
"TerritoryId": 1162,
"InteractionType": "Interact"
}
diff --git a/QuestPaths/Endwalker/MSQ/K-6.4/4743_The Dark Throne.json b/QuestPaths/Endwalker/MSQ/K-6.4/4743_The Dark Throne.json
index c07ccc87..4817a889 100644
--- a/QuestPaths/Endwalker/MSQ/K-6.4/4743_The Dark Throne.json
+++ b/QuestPaths/Endwalker/MSQ/K-6.4/4743_The Dark Throne.json
@@ -12,6 +12,7 @@
"Y": 54.977272,
"Z": 432.02856
},
+ "StopDistance": 7,
"TerritoryId": 959,
"InteractionType": "Interact"
}
@@ -20,6 +21,18 @@
{
"Sequence": 1,
"Steps": [
+ {
+ "DataId": 2012664,
+ "Position": {
+ "X": -26.901672,
+ "Y": -130.47992,
+ "Z": -580.4685
+ },
+ "TerritoryId": 959,
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow",
+ "SkipIf": ["FlyingUnlocked"]
+ },
{
"DataId": 1045466,
"Position": {
@@ -28,7 +41,8 @@
"Z": -491.99664
},
"TerritoryId": 959,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "Fly": true
}
]
},
@@ -44,6 +58,7 @@
},
"TerritoryId": 963,
"InteractionType": "Interact",
+ "AetheryteShortcut": "Radz-at-Han",
"AethernetShortcut": [
"[Radz-at-Han] Aetheryte Plaza",
"[Radz-at-Han] Meghaduta"
diff --git a/QuestPaths/Endwalker/MSQ/L-6.5/4744_Seeking the Light.json b/QuestPaths/Endwalker/MSQ/L-6.5/4744_Seeking the Light.json
index 1a6c04a2..87f9eda5 100644
--- a/QuestPaths/Endwalker/MSQ/L-6.5/4744_Seeking the Light.json
+++ b/QuestPaths/Endwalker/MSQ/L-6.5/4744_Seeking the Light.json
@@ -27,6 +27,7 @@
"Y": 55,
"Z": -68.61987
},
+ "StopDistance": 5,
"TerritoryId": 963,
"InteractionType": "Interact"
}
@@ -44,6 +45,7 @@
},
"TerritoryId": 819,
"InteractionType": "Interact",
+ "AetheryteShortcut": "Crystarium",
"AethernetShortcut": [
"[Crystarium] Aetheryte Plaza",
"[Crystarium] The Cabinet of Curiosity"
diff --git a/QuestPaths/Endwalker/MSQ/L-6.5/4745_Appealing the Masses.json b/QuestPaths/Endwalker/MSQ/L-6.5/4745_Appealing the Masses.json
index a307df34..d45f6f2f 100644
--- a/QuestPaths/Endwalker/MSQ/L-6.5/4745_Appealing the Masses.json
+++ b/QuestPaths/Endwalker/MSQ/L-6.5/4745_Appealing the Masses.json
@@ -28,7 +28,8 @@
"Z": -8.255188
},
"TerritoryId": 820,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Eulmore"
}
]
},
@@ -58,7 +59,15 @@
"Z": -61.387024
},
"TerritoryId": 820,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 32
+ ]
},
{
"DataId": 1045633,
@@ -72,6 +81,14 @@
"AethernetShortcut": [
"[Eulmore] Aetheryte Plaza",
"[Eulmore] The Mainstay"
+ ],
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 64
]
},
{
@@ -86,6 +103,14 @@
"AethernetShortcut": [
"[Eulmore] The Mainstay",
"[Eulmore] Nightsoil Pots"
+ ],
+ "CompletionQuestVariablesFlags": [
+ null,
+ null,
+ null,
+ null,
+ null,
+ 128
]
}
]
diff --git a/QuestPaths/Endwalker/MSQ/L-6.5/4746_In Defiance of Fate.json b/QuestPaths/Endwalker/MSQ/L-6.5/4746_In Defiance of Fate.json
index 88414169..2d0f4d99 100644
--- a/QuestPaths/Endwalker/MSQ/L-6.5/4746_In Defiance of Fate.json
+++ b/QuestPaths/Endwalker/MSQ/L-6.5/4746_In Defiance of Fate.json
@@ -28,7 +28,8 @@
"Z": 298.20703
},
"TerritoryId": 817,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Rak'tika - Slitherbough"
}
]
},
@@ -44,7 +45,9 @@
},
"TerritoryId": 817,
"InteractionType": "Say",
- "ChatMessage": "allin tuta"
+ "ChatMessage": {
+ "Key": "TEXT_AKTKML103_04746_SAYTODO_000_140"
+ }
}
]
},
@@ -89,7 +92,8 @@
"Z": -224.5976
},
"TerritoryId": 815,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Amh Araeng - Twine"
}
]
},
diff --git a/QuestPaths/Endwalker/MSQ/L-6.5/4747_Back to Action.json b/QuestPaths/Endwalker/MSQ/L-6.5/4747_Back to Action.json
index 720f488c..39df81da 100644
--- a/QuestPaths/Endwalker/MSQ/L-6.5/4747_Back to Action.json
+++ b/QuestPaths/Endwalker/MSQ/L-6.5/4747_Back to Action.json
@@ -33,12 +33,7 @@
"[Crystarium] Aetheryte Plaza",
"[Crystarium] The Dossal Gate"
]
- }
- ]
- },
- {
- "Sequence": 2,
- "Steps": [
+ },
{
"DataId": 1033888,
"Position": {
@@ -48,7 +43,12 @@
},
"TerritoryId": 844,
"InteractionType": "Interact"
- },
+ }
+ ]
+ },
+ {
+ "Sequence": 2,
+ "Steps": [
{
"DataId": 1039645,
"Position": {
@@ -58,6 +58,7 @@
},
"TerritoryId": 963,
"InteractionType": "Interact",
+ "AetheryteShortcut": "Radz-at-Han",
"AethernetShortcut": [
"[Radz-at-Han] Aetheryte Plaza",
"[Radz-at-Han] Meghaduta"
@@ -76,7 +77,9 @@
"Z": 401.26636
},
"TerritoryId": 959,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
+ "Fly": true
}
]
},
diff --git a/QuestPaths/Endwalker/MSQ/L-6.5/4748_Down in the Dark.json b/QuestPaths/Endwalker/MSQ/L-6.5/4748_Down in the Dark.json
index 6fd4500a..206d1297 100644
--- a/QuestPaths/Endwalker/MSQ/L-6.5/4748_Down in the Dark.json
+++ b/QuestPaths/Endwalker/MSQ/L-6.5/4748_Down in the Dark.json
@@ -12,6 +12,7 @@
"Y": 56.682667,
"Z": 468.162
},
+ "StopDistance": 6,
"TerritoryId": 1162,
"InteractionType": "Interact"
}
diff --git a/QuestPaths/Endwalker/MSQ/M-6.55/4753_The Coming Dawn.json b/QuestPaths/Endwalker/MSQ/M-6.55/4753_The Coming Dawn.json
index 9c8d733c..3747b3b3 100644
--- a/QuestPaths/Endwalker/MSQ/M-6.55/4753_The Coming Dawn.json
+++ b/QuestPaths/Endwalker/MSQ/M-6.55/4753_The Coming Dawn.json
@@ -126,7 +126,8 @@
"Z": 4.55803
},
"TerritoryId": 962,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 987
},
{
"DataId": 2013420,
diff --git a/QuestPaths/QuestPaths.csproj b/QuestPaths/QuestPaths.csproj
index 0520512d..631070ba 100644
--- a/QuestPaths/QuestPaths.csproj
+++ b/QuestPaths/QuestPaths.csproj
@@ -10,19 +10,19 @@
$(SolutionDir)=X:\
-
+
-
+
-
+
diff --git a/QuestPaths/Shadowbringers/MSQ/F-Tempest/3654_Shadowbringers.json b/QuestPaths/Shadowbringers/MSQ/F-Tempest/3654_Shadowbringers.json
index 9deff6a9..23b3f745 100644
--- a/QuestPaths/Shadowbringers/MSQ/F-Tempest/3654_Shadowbringers.json
+++ b/QuestPaths/Shadowbringers/MSQ/F-Tempest/3654_Shadowbringers.json
@@ -50,7 +50,8 @@
},
"TerritoryId": 156,
"InteractionType": "Interact",
- "AetheryteShortcut": "Mor Dhona"
+ "AetheryteShortcut": "Mor Dhona",
+ "TargetTerritoryId": 351
},
{
"DataId": 1031257,
diff --git a/QuestPaths/Shadowbringers/MSQ/G-5.1/3673_Shaken Resolve.json b/QuestPaths/Shadowbringers/MSQ/G-5.1/3673_Shaken Resolve.json
index 3181b209..de3cd854 100644
--- a/QuestPaths/Shadowbringers/MSQ/G-5.1/3673_Shaken Resolve.json
+++ b/QuestPaths/Shadowbringers/MSQ/G-5.1/3673_Shaken Resolve.json
@@ -28,7 +28,8 @@
"Z": 27.5
},
"TerritoryId": 351,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 156
},
{
"Position": {
@@ -73,7 +74,8 @@
"Z": -631.281
},
"TerritoryId": 156,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 351
},
{
"DataId": 1032081,
diff --git a/QuestPaths/Shadowbringers/MSQ/G-5.1/3682_Vows of Virtue, Deeds of Cruelty.json b/QuestPaths/Shadowbringers/MSQ/G-5.1/3682_Vows of Virtue, Deeds of Cruelty.json
index a04c528b..d2c46e22 100644
--- a/QuestPaths/Shadowbringers/MSQ/G-5.1/3682_Vows of Virtue, Deeds of Cruelty.json
+++ b/QuestPaths/Shadowbringers/MSQ/G-5.1/3682_Vows of Virtue, Deeds of Cruelty.json
@@ -59,7 +59,8 @@
},
"TerritoryId": 156,
"InteractionType": "Interact",
- "AetheryteShortcut": "Mor Dhona"
+ "AetheryteShortcut": "Mor Dhona",
+ "TargetTerritoryId": 351
},
{
"DataId": 1032081,
diff --git a/QuestPaths/Shadowbringers/MSQ/I-5.3/3773_Fraying Threads.json b/QuestPaths/Shadowbringers/MSQ/I-5.3/3773_Fraying Threads.json
index 0551275f..5f437641 100644
--- a/QuestPaths/Shadowbringers/MSQ/I-5.3/3773_Fraying Threads.json
+++ b/QuestPaths/Shadowbringers/MSQ/I-5.3/3773_Fraying Threads.json
@@ -45,7 +45,8 @@
},
"TerritoryId": 156,
"InteractionType": "Interact",
- "AetheryteShortcut": "Mor Dhona"
+ "AetheryteShortcut": "Mor Dhona",
+ "TargetTerritoryId": 351
},
{
"DataId": 1032081,
diff --git a/QuestPaths/Shadowbringers/MSQ/I-5.3/3774_Food for the Soul.json b/QuestPaths/Shadowbringers/MSQ/I-5.3/3774_Food for the Soul.json
index be1bcded..17d48f9c 100644
--- a/QuestPaths/Shadowbringers/MSQ/I-5.3/3774_Food for the Soul.json
+++ b/QuestPaths/Shadowbringers/MSQ/I-5.3/3774_Food for the Soul.json
@@ -28,7 +28,8 @@
"Z": 27.5
},
"TerritoryId": 351,
- "InteractionType": "Interact"
+ "InteractionType": "Interact",
+ "TargetTerritoryId": 156
},
{
"Position": {
diff --git a/QuestPaths/Shadowbringers/MSQ/J-5.4/4009_Reviving the Legacy.json b/QuestPaths/Shadowbringers/MSQ/J-5.4/4009_Reviving the Legacy.json
index d8a1ea8b..c4448357 100644
--- a/QuestPaths/Shadowbringers/MSQ/J-5.4/4009_Reviving the Legacy.json
+++ b/QuestPaths/Shadowbringers/MSQ/J-5.4/4009_Reviving the Legacy.json
@@ -29,7 +29,8 @@
},
"TerritoryId": 156,
"InteractionType": "Interact",
- "AetheryteShortcut": "Mor Dhona"
+ "AetheryteShortcut": "Mor Dhona",
+ "TargetTerritoryId": 351
},
{
"DataId": 1035355,
diff --git a/QuestPaths/Shadowbringers/MSQ/J-5.4/4016_Futures Rewritten.json b/QuestPaths/Shadowbringers/MSQ/J-5.4/4016_Futures Rewritten.json
index 570bf1a4..bfd69d99 100644
--- a/QuestPaths/Shadowbringers/MSQ/J-5.4/4016_Futures Rewritten.json
+++ b/QuestPaths/Shadowbringers/MSQ/J-5.4/4016_Futures Rewritten.json
@@ -62,7 +62,8 @@
},
"TerritoryId": 156,
"InteractionType": "Interact",
- "AetheryteShortcut": "Mor Dhona"
+ "AetheryteShortcut": "Mor Dhona",
+ "TargetTerritoryId": 351
},
{
"DataId": 1032694,
diff --git a/QuestPaths/Shadowbringers/MSQ/K-5.5/4063_When the Dust Settles.json b/QuestPaths/Shadowbringers/MSQ/K-5.5/4063_When the Dust Settles.json
index 43ac6e17..c2b02fcb 100644
--- a/QuestPaths/Shadowbringers/MSQ/K-5.5/4063_When the Dust Settles.json
+++ b/QuestPaths/Shadowbringers/MSQ/K-5.5/4063_When the Dust Settles.json
@@ -79,7 +79,8 @@
},
"TerritoryId": 156,
"InteractionType": "Interact",
- "AetheryteShortcut": "Mor Dhona"
+ "AetheryteShortcut": "Mor Dhona",
+ "TargetTerritoryId": 351
}
]
},
diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json
index 4af20ea0..6162ef64 100644
--- a/QuestPaths/quest-v1.json
+++ b/QuestPaths/quest-v1.json
@@ -348,7 +348,9 @@
"type": "string",
"enum": [
"Never",
- "FlyingUnlocked"
+ "FlyingLocked",
+ "FlyingUnlocked",
+ "DifferentTerritory"
]
}
},
@@ -563,12 +565,22 @@
"then": {
"properties": {
"ChatMessage": {
- "type": "string",
- "description": "The text to use with /say"
+ "type": "object",
+ "description": "The text to use with /say",
+ "properties": {
+ "ExcelSheet": {
+ "type": "string"
+ },
+ "Key": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "Key"
+ ]
}
},
"required": [
- "Position",
"ChatMessage"
]
}
@@ -655,7 +667,6 @@
}
},
"required": [
- "ExcelSheet",
"Answer"
]
}
diff --git a/Questionable/Controller/MovementController.cs b/Questionable/Controller/MovementController.cs
index f4fa2e04..7b7bbee9 100644
--- a/Questionable/Controller/MovementController.cs
+++ b/Questionable/Controller/MovementController.cs
@@ -167,6 +167,8 @@ internal sealed class MovementController : IDisposable
public void NavigateTo(EMovementType type, uint? dataId, Vector3 to, bool fly, bool sprint, float? stopDistance = null)
{
PrepareNavigation(type, dataId, to, fly, sprint, stopDistance);
+ _pluginLog.Information($"Pathfinding to {Destination}");
+
_cancellationTokenSource = new();
_cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(10));
_pathfindTask =
@@ -176,6 +178,8 @@ internal sealed class MovementController : IDisposable
public void NavigateTo(EMovementType type, uint? dataId, List to, bool fly, bool sprint, float? stopDistance)
{
PrepareNavigation(type, dataId, to.Last(), fly, sprint, stopDistance);
+
+ _pluginLog.Information($"Moving to {Destination}");
_navmeshIpc.MoveTo(to);
}
diff --git a/Questionable/Controller/QuestController.cs b/Questionable/Controller/QuestController.cs
index 54572dff..ad9d91ec 100644
--- a/Questionable/Controller/QuestController.cs
+++ b/Questionable/Controller/QuestController.cs
@@ -1,9 +1,7 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
using System.Globalization;
using System.IO;
-using System.Linq;
using System.Numerics;
using System.Text.Json;
using Dalamud.Game.ClientState.Conditions;
@@ -14,7 +12,6 @@ using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
using FFXIVClientStructs.FFXIV.Client.Game;
using FFXIVClientStructs.FFXIV.Client.UI;
using LLib.GameUI;
-using Lumina.Excel.CustomSheets;
using Questionable.Data;
using Questionable.External;
using Questionable.Model;
@@ -251,10 +248,12 @@ internal sealed class QuestController
public void IncreaseStepCount()
{
(QuestSequence? seq, QuestStep? step) = GetNextStep();
- if (seq == null || step == null)
+ if (CurrentQuest == null || seq == null || step == null)
+ {
+ _pluginLog.Warning("Unable to retrieve next quest step, not increasing step count");
return;
+ }
- Debug.Assert(CurrentQuest != null, nameof(CurrentQuest) + " != null");
if (CurrentQuest.Step + 1 < seq.Steps.Count)
{
CurrentQuest = CurrentQuest with
@@ -276,10 +275,12 @@ internal sealed class QuestController
public unsafe void ExecuteNextStep()
{
(QuestSequence? seq, QuestStep? step) = GetNextStep();
- if (seq == null || step == null)
+ if (CurrentQuest == null || seq == null || step == null)
+ {
+ _pluginLog.Warning("Could not retrieve next quest step, not doing anything");
return;
+ }
- Debug.Assert(CurrentQuest != null, nameof(CurrentQuest) + " != null");
if (step.Disabled)
{
_pluginLog.Information("Skipping step, as it is disabled");
@@ -299,12 +300,14 @@ internal sealed class QuestController
(_aetheryteData.CalculateDistance(pos, territoryType, step.AethernetShortcut.From) < 20 ||
_aetheryteData.CalculateDistance(pos, territoryType, step.AethernetShortcut.To) < 20)))
{
+ _pluginLog.Information("Skipping aetheryte teleport");
skipTeleport = true;
}
}
if (skipTeleport)
{
+ _pluginLog.Information("Marking aetheryte shortcut as used");
CurrentQuest = CurrentQuest with
{
StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true }
@@ -312,20 +315,24 @@ internal sealed class QuestController
}
else
{
- if (step.AetheryteShortcut != null)
+ if (!_gameFunctions.IsAetheryteUnlocked(step.AetheryteShortcut.Value))
{
- if (!_gameFunctions.IsAetheryteUnlocked(step.AetheryteShortcut.Value))
- _chatGui.Print($"[Questionable] Aetheryte {step.AetheryteShortcut.Value} is not unlocked.");
- else if (_gameFunctions.TeleportAetheryte(step.AetheryteShortcut.Value))
- CurrentQuest = CurrentQuest with
- {
- StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true }
- };
- else
- _chatGui.Print("[Questionable] Unable to teleport to aetheryte.");
+ _pluginLog.Error($"Aetheryte {step.AetheryteShortcut.Value} is not unlocked.");
+ _chatGui.Print($"[Questionable] Aetheryte {step.AetheryteShortcut.Value} is not unlocked.");
+ }
+ else if (_gameFunctions.TeleportAetheryte(step.AetheryteShortcut.Value))
+ {
+ _pluginLog.Information("Travelling via aetheryte...");
+ CurrentQuest = CurrentQuest with
+ {
+ StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true }
+ };
}
else
- _chatGui.Print("[Questionable] No aetheryte for teleport set.");
+ {
+ _pluginLog.Warning("Unable to teleport to aetheryte");
+ _chatGui.Print("[Questionable] Unable to teleport to aetheryte.");
+ }
return;
}
@@ -343,6 +350,14 @@ internal sealed class QuestController
return;
}
+ if (step.SkipIf.Contains(ESkipCondition.FlyingLocked) &&
+ !_gameFunctions.IsFlyingUnlocked(step.TerritoryId))
+ {
+ _pluginLog.Information("Skipping step, as flying is locked");
+ IncreaseStepCount();
+ return;
+ }
+
if (step is
{
DataId: not null,
@@ -372,10 +387,9 @@ internal sealed class QuestController
}
}
- if (!CurrentQuest.StepProgress.AethernetShortcutUsed)
+ if (!CurrentQuest.StepProgress.AethernetShortcutUsed && step.AethernetShortcut != null)
{
- if (step.AethernetShortcut != null &&
- _gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.From) &&
+ if (_gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.From) &&
_gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.To))
{
EAetheryteLocation from = step.AethernetShortcut.From;
@@ -389,6 +403,7 @@ internal sealed class QuestController
{
if (_aetheryteData.CalculateDistance(playerPosition, territoryType, from) < 11)
{
+ _pluginLog.Information($"Using lifestream to teleport to {to}");
_lifestreamIpc.Teleport(to);
CurrentQuest = CurrentQuest with
{
@@ -396,22 +411,31 @@ internal sealed class QuestController
};
}
else
+ {
+ _pluginLog.Information("Moving to aethernet shortcut");
_movementController.NavigateTo(EMovementType.Quest, (uint)from, _aetheryteData.Locations[from],
false, true,
AetheryteConverter.IsLargeAetheryte(from) ? 10.9f : 6.9f);
+ }
return;
}
}
+ else
+ _pluginLog.Warning($"Aethernet shortcut not unlocked (from: {step.AethernetShortcut.From}, to: {step.AethernetShortcut.To}), walking manually");
}
- if (step.TargetTerritoryId == _clientState.TerritoryType)
+ if (step.TargetTerritoryId == _clientState.TerritoryType && !step.SkipIf.Contains(ESkipCondition.Never))
{
- _pluginLog.Information("Zone transition, skipping movement");
+ // we assume whatever e.g. interaction, walkto etc. we have will trigger the zone transition
+ _pluginLog.Information("Zone transition, skipping rest of step");
+ IncreaseStepCount();
+ return;
}
- else if (step.InteractionType == EInteractionType.Jump && step.JumpDestination != null &&
- (_clientState.LocalPlayer!.Position - step.JumpDestination.Position).Length() <=
- (step.JumpDestination.StopDistance ?? 1f))
+
+ if (step.InteractionType == EInteractionType.Jump && step.JumpDestination != null &&
+ (_clientState.LocalPlayer!.Position - step.JumpDestination.Position).Length() <=
+ (step.JumpDestination.StopDistance ?? 1f))
{
_pluginLog.Information("We're at the jump destination, skipping movement");
}
@@ -433,16 +457,17 @@ internal sealed class QuestController
if (step.Mount == true && !_gameFunctions.HasStatusPreventingSprintOrMount())
{
+ _pluginLog.Information("Step explicitly wants a mount, trying to mount...");
if (!_condition[ConditionFlag.Mounted] && !_condition[ConditionFlag.InCombat] &&
_territoryData.CanUseMount(_clientState.TerritoryType))
{
- if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0)
- ActionManager.Instance()->UseAction(ActionType.Mount, 71);
+ _gameFunctions.Mount();
return;
}
}
else if (step.Mount == false)
{
+ _pluginLog.Information("Step explicitly wants no mount, trying to unmount...");
if (_condition[ConditionFlag.Mounted])
{
_gameFunctions.Unmount();
@@ -456,9 +481,7 @@ internal sealed class QuestController
!_condition[ConditionFlag.InCombat] && _territoryData.CanUseMount(_clientState.TerritoryType) &&
!_gameFunctions.HasStatusPreventingSprintOrMount())
{
- if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0)
- ActionManager.Instance()->UseAction(ActionType.Mount, 71);
-
+ _gameFunctions.Mount();
return;
}
@@ -495,10 +518,12 @@ internal sealed class QuestController
if (gameObject == null ||
(gameObject.Position - _clientState.LocalPlayer!.Position).Length() > step.StopDistance)
{
+ _pluginLog.Warning("Object not found or too far away, no position so we can't move");
return;
}
}
+ _pluginLog.Information($"Running logic for {step.InteractionType}");
switch (step.InteractionType)
{
case EInteractionType.Interact:
@@ -506,7 +531,10 @@ internal sealed class QuestController
{
GameObject? gameObject = _gameFunctions.FindObjectByDataId(step.DataId.Value);
if (gameObject == null)
+ {
+ _pluginLog.Warning($"No game object with dataId {step.DataId}");
return;
+ }
if (!gameObject.IsTargetable && _condition[ConditionFlag.Mounted])
{
@@ -623,9 +651,14 @@ internal sealed class QuestController
return;
}
- if (!string.IsNullOrEmpty(step.ChatMessage))
+ if (step.ChatMessage != null)
{
- _gameFunctions.ExecuteCommand($"/say {step.ChatMessage}");
+ string? excelString = _gameFunctions.GetExcelString(CurrentQuest.Quest, step.ChatMessage.ExcelSheet,
+ step.ChatMessage.Key);
+ if (excelString == null)
+ return;
+
+ _gameFunctions.ExecuteCommand($"/say {excelString}");
IncreaseStepCount();
}
@@ -686,23 +719,10 @@ internal sealed class QuestController
{
foreach (DialogueChoice dialogueChoice in step.DialogueChoices)
{
- var excelSheet = _dataManager.Excel.GetSheet(dialogueChoice.ExcelSheet);
- if (excelSheet == null)
- {
- _pluginLog.Error($"Unknown excel sheet '{dialogueChoice.ExcelSheet}'");
- continue;
- }
-
- string? excelString = excelSheet
- .FirstOrDefault(x => x.Key == dialogueChoice.Answer)
- ?.Value
- ?.ToString();
+ string? excelString = _gameFunctions.GetExcelString(CurrentQuest.Quest,
+ dialogueChoice.ExcelSheet, dialogueChoice.Answer);
if (excelString == null)
- {
- _pluginLog.Error(
- $"Could not extract '{dialogueChoice.Answer}' from sheet '{dialogueChoice.ExcelSheet}'");
return;
- }
_pluginLog.Verbose($"Looking for option '{excelString}'");
for (int i = 5; i < addon->AtkUnitBase.AtkValuesCount; ++i)
diff --git a/Questionable/GameFunctions.cs b/Questionable/GameFunctions.cs
index c6c540eb..79d728cd 100644
--- a/Questionable/GameFunctions.cs
+++ b/Questionable/GameFunctions.cs
@@ -9,7 +9,6 @@ using System.Text;
using Dalamud.Game;
using Dalamud.Game.ClientState.Conditions;
using Dalamud.Game.ClientState.Objects;
-using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
using FFXIVClientStructs.FFXIV.Client.Game;
@@ -20,11 +19,13 @@ using FFXIVClientStructs.FFXIV.Client.System.Framework;
using FFXIVClientStructs.FFXIV.Client.System.Memory;
using FFXIVClientStructs.FFXIV.Client.System.String;
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
+using Lumina.Excel.CustomSheets;
using Lumina.Excel.GeneratedSheets;
using Questionable.Controller;
using Questionable.Model.V1;
using BattleChara = FFXIVClientStructs.FFXIV.Client.Game.Character.BattleChara;
using GameObject = Dalamud.Game.ClientState.Objects.Types.GameObject;
+using Quest = Questionable.Model.Quest;
namespace Questionable;
@@ -44,6 +45,7 @@ internal sealed unsafe class GameFunctions
private readonly ReadOnlyDictionary _emoteCommands;
private readonly ReadOnlyDictionary _contentFinderConditionToContentId;
+ private readonly IDataManager _dataManager;
private readonly IObjectTable _objectTable;
private readonly ITargetManager _targetManager;
private readonly ICondition _condition;
@@ -53,6 +55,7 @@ internal sealed unsafe class GameFunctions
public GameFunctions(IDataManager dataManager, IObjectTable objectTable, ISigScanner sigScanner,
ITargetManager targetManager, ICondition condition, IClientState clientState, IPluginLog pluginLog)
{
+ _dataManager = dataManager;
_objectTable = objectTable;
_targetManager = targetManager;
_condition = condition;
@@ -399,6 +402,11 @@ internal sealed unsafe class GameFunctions
if (_condition[ConditionFlag.Swimming] && !IsFlyingUnlocked(_clientState.TerritoryType))
return true;
+ // company chocobo is locked
+ var playerState = PlayerState.Instance();
+ if (playerState != null && !playerState->IsMountUnlocked(1))
+ return true;
+
var gameObject = GameObjectManager.GetGameObjectByIndex(0);
if (gameObject != null && gameObject->ObjectKind == 1)
{
@@ -410,12 +418,41 @@ internal sealed unsafe class GameFunctions
return false;
}
+ public void Mount()
+ {
+ if (!_condition[ConditionFlag.Mounted])
+ {
+ var playerState = PlayerState.Instance();
+ if (playerState != null && playerState->IsMountUnlocked(71))
+ {
+ if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0)
+ {
+ _pluginLog.Information("Using SDS Fenrir as mount");
+ ActionManager.Instance()->UseAction(ActionType.Mount, 71);
+ }
+ }
+ else
+ {
+ if (ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 9) == 0)
+ {
+ _pluginLog.Information("Using mount roulette");
+ ActionManager.Instance()->UseAction(ActionType.GeneralAction, 9);
+ }
+ }
+ }
+ }
+
public bool Unmount()
{
if (_condition[ConditionFlag.Mounted])
{
if (ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 23) == 0)
+ {
+ _pluginLog.Information("Unmounting...");
ActionManager.Instance()->UseAction(ActionType.GeneralAction, 23);
+ }
+ else
+ _pluginLog.Warning("Can't unmount right now?");
return true;
}
@@ -430,9 +467,38 @@ internal sealed unsafe class GameFunctions
if (UIState.IsInstanceContentUnlocked(contentId))
AgentContentsFinder.Instance()->OpenRegularDuty(contentFinderConditionId);
else
- _pluginLog.Error($"Trying to access a locked duty (cf: {contentFinderConditionId}, content: {contentId})");
+ _pluginLog.Error(
+ $"Trying to access a locked duty (cf: {contentFinderConditionId}, content: {contentId})");
}
else
_pluginLog.Error($"Could not find content for content finder condition (cf: {contentFinderConditionId})");
}
+
+ public string? GetExcelString(Quest currentQuestQuest, string? excelSheetName, string key)
+ {
+ if (excelSheetName == null)
+ {
+ string questPrefix = $"quest/{(currentQuestQuest.QuestId / 100):000}/";
+ string questSuffix = $"_{currentQuestQuest.QuestId:00000}";
+ excelSheetName = _dataManager.Excel
+ .GetSheetNames()
+ .SingleOrDefault(x =>
+ x.StartsWith(questPrefix, StringComparison.Ordinal) &&
+ x.EndsWith(questSuffix, StringComparison.Ordinal));
+ if (excelSheetName == null)
+ {
+ _pluginLog.Error($"Could not find sheet matching '{questPrefix}*{questSuffix}");
+ return null;
+ }
+ }
+
+ var excelSheet = _dataManager.Excel.GetSheet(excelSheetName);
+ if (excelSheet == null)
+ {
+ _pluginLog.Error($"Unknown excel sheet '{excelSheetName}'");
+ return null;
+ }
+
+ return excelSheet.FirstOrDefault(x => x.Key == key)?.Value?.ToString();
+ }
}
diff --git a/Questionable/Model/V1/ChatMessage.cs b/Questionable/Model/V1/ChatMessage.cs
new file mode 100644
index 00000000..71721380
--- /dev/null
+++ b/Questionable/Model/V1/ChatMessage.cs
@@ -0,0 +1,7 @@
+namespace Questionable.Model.V1;
+
+public sealed class ChatMessage
+{
+ public string? ExcelSheet { get; set; }
+ public string Key { get; set; } = null!;
+}
diff --git a/Questionable/Model/V1/Converter/SkipConditionConverter.cs b/Questionable/Model/V1/Converter/SkipConditionConverter.cs
index 644e0dea..dd38ac4f 100644
--- a/Questionable/Model/V1/Converter/SkipConditionConverter.cs
+++ b/Questionable/Model/V1/Converter/SkipConditionConverter.cs
@@ -7,6 +7,7 @@ public sealed class SkipConditionConverter() : EnumConverter(Val
private static readonly Dictionary Values = new()
{
{ ESkipCondition.Never, "Never" },
+ { ESkipCondition.FlyingLocked, "FlyingLocked" },
{ ESkipCondition.FlyingUnlocked, "FlyingUnlocked" },
};
}
diff --git a/Questionable/Model/V1/DialogueChoice.cs b/Questionable/Model/V1/DialogueChoice.cs
index 1c32f218..d4c607e7 100644
--- a/Questionable/Model/V1/DialogueChoice.cs
+++ b/Questionable/Model/V1/DialogueChoice.cs
@@ -2,6 +2,6 @@
public sealed class DialogueChoice
{
- public string ExcelSheet { get; set; } = null!;
+ public string? ExcelSheet { get; set; }
public string Answer { get; set; } = null!;
}
diff --git a/Questionable/Model/V1/ESkipCondition.cs b/Questionable/Model/V1/ESkipCondition.cs
index bced035a..4f2639d4 100644
--- a/Questionable/Model/V1/ESkipCondition.cs
+++ b/Questionable/Model/V1/ESkipCondition.cs
@@ -8,5 +8,6 @@ public enum ESkipCondition
{
None,
Never,
+ FlyingLocked,
FlyingUnlocked,
}
diff --git a/Questionable/Model/V1/QuestStep.cs b/Questionable/Model/V1/QuestStep.cs
index 6462f0ef..d16cccd5 100644
--- a/Questionable/Model/V1/QuestStep.cs
+++ b/Questionable/Model/V1/QuestStep.cs
@@ -35,7 +35,7 @@ public class QuestStep
public bool? GroundTarget { get; set; }
public EEmote? Emote { get; set; }
- public string? ChatMessage { get; set; }
+ public ChatMessage? ChatMessage { get; set; }
public EEnemySpawnType? EnemySpawnType { get; set; }
diff --git a/Questionable/Questionable.csproj b/Questionable/Questionable.csproj
index 47bc84b0..ac0f229b 100644
--- a/Questionable/Questionable.csproj
+++ b/Questionable/Questionable.csproj
@@ -1,7 +1,7 @@
net8.0-windows
- 0.1
+ 0.2
12
enable
true