forked from liza/Questionable
Support PointMenu' (e.g. the stone tablet interaction near DT's beginning) + Update DT paths till mid-Yak T'el
This commit is contained in:
parent
72740677e5
commit
7485923506
@ -350,6 +350,8 @@ public class QuestSourceGenerator : ISourceGenerator
|
||||
.AsSyntaxNodeOrToken(),
|
||||
AssignmentList(nameof(QuestStep.DialogueChoices), step.DialogueChoices)
|
||||
.AsSyntaxNodeOrToken(),
|
||||
AssignmentList(nameof(QuestStep.PointMenuChoices), step.PointMenuChoices)
|
||||
.AsSyntaxNodeOrToken(),
|
||||
Assignment(nameof(QuestStep.QuestId), step.QuestId, emptyStep.QuestId)
|
||||
.AsSyntaxNodeOrToken()))))),
|
||||
Token(SyntaxKind.CommaToken),
|
||||
|
@ -26,6 +26,7 @@
|
||||
"Y": -129.27074,
|
||||
"Z": -351.33496
|
||||
},
|
||||
"StopDistance": 0.25,
|
||||
"TerritoryId": 1187,
|
||||
"InteractionType": "Combat",
|
||||
"EnemySpawnType": "AutoOnEnterArea",
|
||||
|
@ -59,6 +59,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 4,
|
||||
"Steps": [
|
||||
|
@ -29,8 +29,7 @@
|
||||
"Z": 129.80847
|
||||
},
|
||||
"TerritoryId": 1185,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"Comment": "Click all tablets (PointMenu)",
|
||||
"InteractionType": "Interact",
|
||||
"DialogueChoices": [
|
||||
{
|
||||
"Type": "YesNo",
|
||||
@ -47,6 +46,16 @@
|
||||
"Prompt": "TEXT_KINGMA104_04863_Q2_000_000",
|
||||
"Answer": "TEXT_KINGMA104_04863_A2_000_001"
|
||||
}
|
||||
],
|
||||
"PointMenuChoices": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3
|
||||
]
|
||||
}
|
||||
]
|
||||
|
@ -33,6 +33,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
|
@ -85,7 +85,8 @@
|
||||
"Z": -388.50995
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "Interact"
|
||||
"InteractionType": "Interact",
|
||||
"AetheryteShortcut": "Kozama'uka - Ok'hanu"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -148,6 +149,16 @@
|
||||
{
|
||||
"Sequence": 8,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": -510.96463,
|
||||
"Y": -0.47684515,
|
||||
"Z": -305.96155
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Waypoint after swimming through the river"
|
||||
},
|
||||
{
|
||||
"DataId": 2013936,
|
||||
"Position": {
|
||||
|
@ -73,6 +73,17 @@
|
||||
{
|
||||
"Sequence": 4,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 303.21774,
|
||||
"Y": 7.475274,
|
||||
"Z": -215.19496
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "WalkTo",
|
||||
"DisableNavmesh": true,
|
||||
"Mount": true
|
||||
},
|
||||
{
|
||||
"DataId": 2013632,
|
||||
"Position": {
|
||||
|
@ -84,14 +84,16 @@
|
||||
"Z": -171.58777
|
||||
},
|
||||
"TerritoryId": 1187,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"Comment": "Pick Disconcerted Hoobigo",
|
||||
"InteractionType": "Interact",
|
||||
"DialogueChoices": [
|
||||
{
|
||||
"Type": "List",
|
||||
"Prompt": "TEXT_KINGMA114_04873_Q1_000_000",
|
||||
"Answer": "TEXT_KINGMA114_04873_A1_000_001"
|
||||
}
|
||||
],
|
||||
"PointMenuChoices": [
|
||||
3
|
||||
]
|
||||
}
|
||||
]
|
||||
|
@ -61,6 +61,29 @@
|
||||
"InteractionType": "AttuneAethernetShard",
|
||||
"Comment": "Wachumeqimeqi"
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"X": -130.34163,
|
||||
"Y": -14.999287,
|
||||
"Z": 198.40685
|
||||
},
|
||||
"TerritoryId": 1185,
|
||||
"InteractionType": "WalkTo",
|
||||
"AethernetShortcut": [
|
||||
"[Tuliyollal] Wachumeqimeqi",
|
||||
"[Tuliyollal] The For'ard Cabins"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"X": -122.40268,
|
||||
"Y": -19.754322,
|
||||
"Z": 202.20439
|
||||
},
|
||||
"TerritoryId": 1185,
|
||||
"InteractionType": "WalkTo",
|
||||
"DisableNavmesh": true
|
||||
},
|
||||
{
|
||||
"DataId": 1046763,
|
||||
"Position": {
|
||||
@ -69,11 +92,7 @@
|
||||
"Z": 201.12915
|
||||
},
|
||||
"TerritoryId": 1185,
|
||||
"InteractionType": "Interact",
|
||||
"AethernetShortcut": [
|
||||
"[Tuliyollal] Wachumeqimeqi",
|
||||
"[Tuliyollal] The For'ard Cabins"
|
||||
]
|
||||
"InteractionType": "Interact"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -64,6 +64,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 4,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 5,
|
||||
"Steps": [
|
||||
|
@ -21,17 +21,6 @@
|
||||
{
|
||||
"Sequence": 1,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 2013943,
|
||||
"Position": {
|
||||
"X": 485.89294,
|
||||
"Y": 121.3855,
|
||||
"Z": 831.29626
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "AttuneAetherCurrent",
|
||||
"AetherCurrentId": 2818428
|
||||
},
|
||||
{
|
||||
"DataId": 203,
|
||||
"Position": {
|
||||
@ -43,6 +32,41 @@
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "AttuneAetheryte"
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"X": 533.37555,
|
||||
"Y": 122.98077,
|
||||
"Z": 790.01416
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "WalkTo",
|
||||
"AetheryteShortcut": "Tuliyollal",
|
||||
"AethernetShortcut": [
|
||||
"[Tuliyollal] Aetheryte Plaza",
|
||||
"[Tuliyollal] Ihuykatumu (Kozama'uka)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"X": 522.3003,
|
||||
"Y": 120.81023,
|
||||
"Z": 803.62744
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "WalkTo",
|
||||
"DisableNavmesh": true
|
||||
},
|
||||
{
|
||||
"DataId": 2013943,
|
||||
"Position": {
|
||||
"X": 485.89294,
|
||||
"Y": 121.3855,
|
||||
"Z": 831.29626
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "AttuneAetherCurrent",
|
||||
"AetherCurrentId": 2818428
|
||||
},
|
||||
{
|
||||
"DataId": 1046603,
|
||||
"Position": {
|
||||
@ -51,7 +75,8 @@
|
||||
"Z": 259.66272
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "Interact"
|
||||
"InteractionType": "Interact",
|
||||
"AetheryteShortcut": "Kozama'uka - Many Fires"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -115,6 +115,7 @@
|
||||
"Y": 122.89019,
|
||||
"Z": 348.47034
|
||||
},
|
||||
"StopDistance": 5,
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "CompleteQuest"
|
||||
}
|
||||
|
@ -12,6 +12,7 @@
|
||||
"Y": 122.950645,
|
||||
"Z": 345.6626
|
||||
},
|
||||
"StopDistance": 5,
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "AcceptQuest"
|
||||
}
|
||||
@ -42,6 +43,7 @@
|
||||
"Y": -17.964504,
|
||||
"Z": 166.55212
|
||||
},
|
||||
"StopDistance": 5,
|
||||
"TerritoryId": 1185,
|
||||
"InteractionType": "Interact"
|
||||
}
|
||||
|
@ -45,6 +45,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
|
@ -188,7 +188,7 @@
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "WaitForNpcAtPosition",
|
||||
"NpcWaitDistance": 1
|
||||
"NpcWaitDistance": 3
|
||||
},
|
||||
{
|
||||
"DataId": 1046648,
|
||||
|
@ -21,6 +21,15 @@
|
||||
{
|
||||
"Sequence": 1,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 531.60944,
|
||||
"Y": 116.17938,
|
||||
"Z": 166.65599
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "WalkTo"
|
||||
},
|
||||
{
|
||||
"DataId": 2013610,
|
||||
"Position": {
|
||||
@ -42,6 +51,7 @@
|
||||
"Y": 110.795235,
|
||||
"Z": 256.5983
|
||||
},
|
||||
"StopDistance": 0.25,
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "Combat",
|
||||
"EnemySpawnType": "AutoOnEnterArea",
|
||||
@ -79,8 +89,7 @@
|
||||
"Z": 229.96863
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "Interact",
|
||||
"Comment": "TODO Verify this is the correct sequence"
|
||||
"InteractionType": "Interact"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -28,7 +28,8 @@
|
||||
"Z": 465.87305
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "Interact"
|
||||
"InteractionType": "Interact",
|
||||
"AetheryteShortcut": "Kozama'uka - Earthenshire"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -166,9 +166,18 @@
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"X": 282.9373,
|
||||
"Y": 47.77521,
|
||||
"Z": 140.4986
|
||||
"X": 341.56342,
|
||||
"Y": 57.53834,
|
||||
"Z": 10.309054
|
||||
},
|
||||
"TerritoryId": 1187,
|
||||
"InteractionType": "WalkTo"
|
||||
},
|
||||
{
|
||||
"Position": {
|
||||
"X": 308.72827,
|
||||
"Y": 60.2934,
|
||||
"Z": 111.43004
|
||||
},
|
||||
"TerritoryId": 1187,
|
||||
"InteractionType": "WalkTo"
|
||||
|
@ -27,6 +27,7 @@
|
||||
"Y": 129.04724,
|
||||
"Z": 652.12476
|
||||
},
|
||||
"StopDistance": 5,
|
||||
"TerritoryId": 1187,
|
||||
"InteractionType": "Interact",
|
||||
"CompletionQuestVariablesFlags": [
|
||||
@ -62,6 +63,7 @@
|
||||
"Y": 111.135,
|
||||
"Z": 557.7324
|
||||
},
|
||||
"StopDistance": 5,
|
||||
"TerritoryId": 1187,
|
||||
"InteractionType": "Interact",
|
||||
"CompletionQuestVariablesFlags": [
|
||||
@ -80,6 +82,7 @@
|
||||
"Y": 111.135,
|
||||
"Z": 697.4745
|
||||
},
|
||||
"StopDistance": 5,
|
||||
"TerritoryId": 1187,
|
||||
"InteractionType": "Interact",
|
||||
"CompletionQuestVariablesFlags": [
|
||||
|
@ -157,6 +157,7 @@
|
||||
"Y": 109.359344,
|
||||
"Z": 395.2364
|
||||
},
|
||||
"StopDistance": 0.25,
|
||||
"TerritoryId": 1187,
|
||||
"InteractionType": "Combat",
|
||||
"EnemySpawnType": "AutoOnEnterArea",
|
||||
|
@ -45,6 +45,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
|
@ -43,8 +43,7 @@
|
||||
"Z": -403.21973
|
||||
},
|
||||
"TerritoryId": 1189,
|
||||
"InteractionType": "Interact",
|
||||
"Comment": "TODO Verify this shouldn't have a teleport (was removed due to AC moving)"
|
||||
"InteractionType": "Interact"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -12,6 +12,7 @@
|
||||
"Y": 19.501463,
|
||||
"Z": -358.05298
|
||||
},
|
||||
"StopDistance": 5,
|
||||
"TerritoryId": 1189,
|
||||
"InteractionType": "AcceptQuest"
|
||||
}
|
||||
|
@ -32,6 +32,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
|
@ -37,6 +37,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
|
@ -42,6 +42,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
|
@ -34,6 +34,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
|
@ -46,6 +46,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 4,
|
||||
"Steps": [
|
||||
@ -56,6 +71,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 5,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 6,
|
||||
"Steps": [
|
||||
|
@ -56,6 +56,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
@ -71,6 +86,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 4,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 5,
|
||||
"Steps": [
|
||||
|
@ -48,6 +48,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 4,
|
||||
"Steps": [
|
||||
|
@ -13,7 +13,7 @@
|
||||
"Z": 201.28174
|
||||
},
|
||||
"TerritoryId": 1185,
|
||||
"InteractionType": "Interact"
|
||||
"InteractionType": "AcceptQuest"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -13,9 +13,71 @@
|
||||
"Z": 194.72034
|
||||
},
|
||||
"TerritoryId": 1185,
|
||||
"InteractionType": "AcceptQuest"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 1,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048335,
|
||||
"Position": {
|
||||
"X": -16.739136,
|
||||
"Y": 0.5999997,
|
||||
"Z": -55.10034
|
||||
},
|
||||
"TerritoryId": 963,
|
||||
"InteractionType": "Interact",
|
||||
"AetheryteShortcut": "Radz-at-Han"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048337,
|
||||
"Position": {
|
||||
"X": 155.87085,
|
||||
"Y": 5.297462,
|
||||
"Z": 618.2803
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Interact"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 2013708,
|
||||
"Position": {
|
||||
"X": 48.90515,
|
||||
"Y": 90.22656,
|
||||
"Z": -83.024414
|
||||
},
|
||||
"StopDistance": 0.5,
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Interact"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 255,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048331,
|
||||
"Position": {
|
||||
"X": 214.03821,
|
||||
"Y": 5.2600574,
|
||||
"Z": 628.3817
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "CompleteQuest"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -0,0 +1,141 @@
|
||||
{
|
||||
"$schema": "https://carvel.li/questionable/quest-1.0",
|
||||
"Author": "liza",
|
||||
"QuestSequence": [
|
||||
{
|
||||
"Sequence": 0,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048331,
|
||||
"Position": {
|
||||
"X": 214.03821,
|
||||
"Y": 5.2600574,
|
||||
"Z": 628.3817
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "AcceptQuest"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 1,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048332,
|
||||
"Position": {
|
||||
"X": 52.506226,
|
||||
"Y": -5.20688E-07,
|
||||
"Z": -54.154297
|
||||
},
|
||||
"TerritoryId": 963,
|
||||
"InteractionType": "Interact",
|
||||
"AetheryteShortcut": "Radz-at-Han"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048340,
|
||||
"Position": {
|
||||
"X": -186.69415,
|
||||
"Y": 4.0499983,
|
||||
"Z": -108.11017
|
||||
},
|
||||
"TerritoryId": 963,
|
||||
"InteractionType": "Interact",
|
||||
"AethernetShortcut": [
|
||||
"[Radz-at-Han] Aetheryte Plaza",
|
||||
"[Radz-at-Han] Hall of the Radiant Host"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048332,
|
||||
"Position": {
|
||||
"X": 52.506226,
|
||||
"Y": -5.20688E-07,
|
||||
"Z": -54.154297
|
||||
},
|
||||
"TerritoryId": 963,
|
||||
"InteractionType": "Interact",
|
||||
"AethernetShortcut": [
|
||||
"[Radz-at-Han] Hall of the Radiant Host",
|
||||
"[Radz-at-Han] Aetheryte Plaza"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 4,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048343,
|
||||
"Position": {
|
||||
"X": -336.53772,
|
||||
"Y": 52.243706,
|
||||
"Z": -165.05688
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Interact",
|
||||
"AetheryteShortcut": "Thavnair - Great Work"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 5,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": -427.5108,
|
||||
"Y": -0.015813708,
|
||||
"Z": -710.37146
|
||||
},
|
||||
"StopDistance": 0.25,
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Combat",
|
||||
"EnemySpawnType": "AutoOnEnterArea",
|
||||
"KillEnemyDataIds": [
|
||||
17625
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 6,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048344,
|
||||
"Position": {
|
||||
"X": -419.028,
|
||||
"Y": 0.06509568,
|
||||
"Z": -710.9331
|
||||
},
|
||||
"StopDistance": 7,
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Interact"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 255,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048331,
|
||||
"Position": {
|
||||
"X": 214.03821,
|
||||
"Y": 5.2600574,
|
||||
"Z": 628.3817
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "CompleteQuest"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,163 @@
|
||||
{
|
||||
"$schema": "https://carvel.li/questionable/quest-1.0",
|
||||
"Author": "liza",
|
||||
"QuestSequence": [
|
||||
{
|
||||
"Sequence": 0,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048331,
|
||||
"Position": {
|
||||
"X": 214.03821,
|
||||
"Y": 5.2600574,
|
||||
"Z": 628.3817
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "AcceptQuest"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 1,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048348,
|
||||
"Position": {
|
||||
"X": -118.76105,
|
||||
"Y": 88.94139,
|
||||
"Z": -556.90857
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Interact"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 2,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 77.94611,
|
||||
"Y": 82.44486,
|
||||
"Z": -548.9286
|
||||
},
|
||||
"StopDistance": 10,
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Instruction",
|
||||
"EnemySpawnType": "AutoOnEnterArea",
|
||||
"KillEnemyDataIds": [
|
||||
17626
|
||||
],
|
||||
"ItemId": 2003495,
|
||||
"Comment": "TODO Needs item use?"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048348,
|
||||
"Position": {
|
||||
"X": -118.76105,
|
||||
"Y": 88.94139,
|
||||
"Z": -556.90857
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Interact"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 4,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048350,
|
||||
"Position": {
|
||||
"X": -508.53745,
|
||||
"Y": 12.375278,
|
||||
"Z": 97.3678
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Interact",
|
||||
"AetheryteShortcut": "Thavnair - Great Work"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 5,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048354,
|
||||
"Position": {
|
||||
"X": 154.28394,
|
||||
"Y": 5.2641535,
|
||||
"Z": 618.40234
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Interact",
|
||||
"AetheryteShortcut": "Thavnair - Yedlihmad",
|
||||
"CompletionQuestVariablesFlags": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
32
|
||||
]
|
||||
},
|
||||
{
|
||||
"DataId": 1048355,
|
||||
"Position": {
|
||||
"X": 227.98499,
|
||||
"Y": 10.19656,
|
||||
"Z": 563.31726
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Interact",
|
||||
"CompletionQuestVariablesFlags": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
64
|
||||
]
|
||||
},
|
||||
{
|
||||
"DataId": 1048352,
|
||||
"Position": {
|
||||
"X": 195.5138,
|
||||
"Y": 15.136732,
|
||||
"Z": 529.015
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "Interact",
|
||||
"CompletionQuestVariablesFlags": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
128
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 255,
|
||||
"Steps": [
|
||||
{
|
||||
"DataId": 1048331,
|
||||
"Position": {
|
||||
"X": 214.03821,
|
||||
"Y": 5.2600574,
|
||||
"Z": 628.3817
|
||||
},
|
||||
"TerritoryId": 957,
|
||||
"InteractionType": "CompleteQuest"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -13,7 +13,7 @@
|
||||
"Z": 198.68762
|
||||
},
|
||||
"TerritoryId": 1185,
|
||||
"InteractionType": "Interact"
|
||||
"InteractionType": "AcceptQuest"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -13,7 +13,7 @@
|
||||
"Z": 203.38745
|
||||
},
|
||||
"TerritoryId": 1185,
|
||||
"InteractionType": "Interact"
|
||||
"InteractionType": "AcceptQuest"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -53,6 +53,21 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 3,
|
||||
"Steps": [
|
||||
{
|
||||
"Position": {
|
||||
"X": 0,
|
||||
"Y": 0,
|
||||
"Z": 0
|
||||
},
|
||||
"TerritoryId": 1,
|
||||
"InteractionType": "WalkTo",
|
||||
"Comment": "Filler"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"Sequence": 4,
|
||||
"Steps": [
|
||||
|
@ -866,6 +866,13 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"PointMenuChoices": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"minimum": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -49,6 +49,7 @@ public sealed class QuestStep
|
||||
public IList<ESkipCondition> SkipIf { get; set; } = new List<ESkipCondition>();
|
||||
public IList<short?> CompletionQuestVariablesFlags { get; set; } = new List<short?>();
|
||||
public IList<DialogueChoice> DialogueChoices { get; set; } = new List<DialogueChoice>();
|
||||
public IList<uint> PointMenuChoices { get; set; } = new List<uint>();
|
||||
public ushort? QuestId { get; set; }
|
||||
|
||||
[JsonConstructor]
|
||||
|
@ -48,6 +48,7 @@ internal sealed class GameUiController : IDisposable
|
||||
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "CutSceneSelectString", CutsceneSelectStringPostSetup);
|
||||
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectIconString", SelectIconStringPostSetup);
|
||||
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup);
|
||||
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "PointMenu", PointMenuPostSetup);
|
||||
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "Credit", CreditPostSetup);
|
||||
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "AkatsukiNote", UnendingCodexPostSetup);
|
||||
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "ContentsTutorial", ContentsTutorialPostSetup);
|
||||
@ -80,6 +81,12 @@ internal sealed class GameUiController : IDisposable
|
||||
_logger.LogInformation("SelectYesno window is open");
|
||||
SelectYesnoPostSetup(addonSelectYesno, true);
|
||||
}
|
||||
|
||||
if (_gameGui.TryGetAddonByName("PointMenu", out AtkUnitBase* addonPointMenu))
|
||||
{
|
||||
_logger.LogInformation("PointMenu is open");
|
||||
PointMenuPostSetup(addonPointMenu);
|
||||
}
|
||||
}
|
||||
|
||||
private unsafe void SelectStringPostSetup(AddonEvent type, AddonArgs args)
|
||||
@ -380,6 +387,61 @@ internal sealed class GameUiController : IDisposable
|
||||
}
|
||||
}
|
||||
|
||||
private unsafe void PointMenuPostSetup(AddonEvent type, AddonArgs args)
|
||||
{
|
||||
AtkUnitBase* addonPointMenu = (AtkUnitBase*)args.Addon;
|
||||
PointMenuPostSetup(addonPointMenu);
|
||||
}
|
||||
|
||||
private unsafe void PointMenuPostSetup(AtkUnitBase* addonPointMenu)
|
||||
{
|
||||
var currentQuest = _questController.CurrentQuest;
|
||||
if (currentQuest == null)
|
||||
{
|
||||
_logger.LogInformation("Ignoring point menu, no active quest");
|
||||
return;
|
||||
}
|
||||
|
||||
var sequence = currentQuest.Quest.FindSequence(currentQuest.Sequence);
|
||||
if (sequence == null)
|
||||
return;
|
||||
|
||||
QuestStep? step = sequence.FindStep(currentQuest.Step);
|
||||
if (step == null)
|
||||
return;
|
||||
|
||||
if (step.PointMenuChoices.Count == 0)
|
||||
{
|
||||
_logger.LogWarning("No point menu choices");
|
||||
return;
|
||||
}
|
||||
|
||||
int counter = currentQuest.StepProgress.PointMenuCounter;
|
||||
if (counter >= step.PointMenuChoices.Count)
|
||||
{
|
||||
_logger.LogWarning("No remaining point menu choices");
|
||||
return;
|
||||
}
|
||||
|
||||
uint choice = step.PointMenuChoices[counter];
|
||||
|
||||
_logger.LogInformation("Handling point menu, picking choice {Choice} (index = {Index})", choice, counter);
|
||||
var selectChoice = stackalloc AtkValue[]
|
||||
{
|
||||
new() { Type = ValueType.Int, Int = 13 },
|
||||
new() { Type = ValueType.UInt, UInt = choice }
|
||||
};
|
||||
addonPointMenu->FireCallback(2, selectChoice);
|
||||
|
||||
_questController.CurrentQuest = currentQuest with
|
||||
{
|
||||
StepProgress = currentQuest.StepProgress with
|
||||
{
|
||||
PointMenuCounter = counter + 1,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private unsafe void CreditPostSetup(AddonEvent type, AddonArgs args)
|
||||
{
|
||||
_logger.LogInformation("Closing Credits sequence");
|
||||
@ -451,6 +513,7 @@ internal sealed class GameUiController : IDisposable
|
||||
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "ContentsTutorial", ContentsTutorialPostSetup);
|
||||
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "AkatsukiNote", UnendingCodexPostSetup);
|
||||
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "Credit", CreditPostSetup);
|
||||
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "PointMenu", PointMenuPostSetup);
|
||||
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup);
|
||||
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectIconString", SelectIconStringPostSetup);
|
||||
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "CutSceneSelectString", CutsceneSelectStringPostSetup);
|
||||
|
@ -399,7 +399,8 @@ internal sealed class QuestController
|
||||
(QuestSequence? seq, QuestStep? step) = GetNextStep();
|
||||
if (CurrentQuest == null || seq == null || step == null)
|
||||
{
|
||||
_logger.LogWarning("Could not retrieve next quest step, not doing anything");
|
||||
_logger.LogWarning("Could not retrieve next quest step, not doing anything [{QuestId}, {Sequence}, {Step}]",
|
||||
CurrentQuest?.Quest.QuestId, CurrentQuest?.Sequence, CurrentQuest?.Step);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -492,5 +493,6 @@ internal sealed class QuestController
|
||||
}
|
||||
|
||||
public sealed record StepProgress(
|
||||
DateTime StartedAt);
|
||||
DateTime StartedAt,
|
||||
int PointMenuCounter = 0);
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.IO;
|
||||
using System.Text.Json;
|
||||
using Dalamud.Plugin;
|
||||
@ -72,6 +73,12 @@ internal sealed class QuestRegistry
|
||||
|
||||
quest.Name = questData.Name.ToString();
|
||||
quest.Level = questData.ClassJobLevel0;
|
||||
|
||||
#if !RELEASE
|
||||
int missingSteps = quest.Data.QuestSequence.Where(x => x.Sequence < 255).Max(x => x.Sequence) - quest.Data.QuestSequence.Count(x => x.Sequence < 255) + 1;
|
||||
if (missingSteps != 0)
|
||||
_logger.LogWarning("Quest has missing steps: {QuestId} / {QuestName} → {Count}", quest.QuestId, quest.Name, missingSteps);
|
||||
#endif
|
||||
}
|
||||
|
||||
_logger.LogInformation("Loaded {Count} quests", _quests.Count);
|
||||
|
@ -7,6 +7,7 @@ using Dalamud.Plugin.Services;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Questionable.Controller.Steps.BaseTasks;
|
||||
using Questionable.Data;
|
||||
using Questionable.Model;
|
||||
using Questionable.Model.V1;
|
||||
|
||||
@ -45,7 +46,8 @@ internal static class Move
|
||||
ILogger<MoveBuilder> logger,
|
||||
GameFunctions gameFunctions,
|
||||
IClientState clientState,
|
||||
MovementController movementController)
|
||||
MovementController movementController,
|
||||
TerritoryData territoryData)
|
||||
{
|
||||
public QuestStep Step { get; set; } = null!;
|
||||
public Vector3 Destination { get; set; }
|
||||
@ -61,7 +63,7 @@ internal static class Move
|
||||
}
|
||||
|
||||
yield return new WaitConditionTask(() => clientState.TerritoryType == Step.TerritoryId,
|
||||
$"Wait(territory: {Step.TerritoryId})");
|
||||
$"Wait(territory: {territoryData.GetNameAndId(Step.TerritoryId)})");
|
||||
|
||||
if (!Step.DisableNavmesh)
|
||||
yield return new WaitConditionTask(() => movementController.IsNavmeshReady,
|
||||
|
@ -9,6 +9,7 @@ using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
|
||||
using FFXIVClientStructs.FFXIV.Client.Game;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Questionable.Controller.Steps.BaseTasks;
|
||||
using Questionable.Data;
|
||||
using Questionable.Model;
|
||||
using Questionable.Model.V1;
|
||||
|
||||
@ -16,7 +17,8 @@ namespace Questionable.Controller.Steps.BaseFactory;
|
||||
|
||||
internal static class WaitAtEnd
|
||||
{
|
||||
internal sealed class Factory(IServiceProvider serviceProvider, IClientState clientState, ICondition condition)
|
||||
internal sealed class Factory(IServiceProvider serviceProvider, IClientState clientState, ICondition condition,
|
||||
TerritoryData territoryData)
|
||||
: ITaskFactory
|
||||
{
|
||||
public IEnumerable<ITask> CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step)
|
||||
@ -76,7 +78,7 @@ internal static class WaitAtEnd
|
||||
// interaction moves to a different territory
|
||||
waitInteraction = new WaitConditionTask(
|
||||
() => clientState.TerritoryType == step.TargetTerritoryId,
|
||||
$"Wait(tp to territory: {step.TargetTerritoryId})");
|
||||
$"Wait(tp to territory: {territoryData.GetNameAndId(step.TargetTerritoryId.Value)})");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1,6 +1,8 @@
|
||||
using System.Collections.Immutable;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using Dalamud.Plugin.Services;
|
||||
using FFXIVClientStructs.FFXIV.Client.Game.Character;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
|
||||
namespace Questionable.Data;
|
||||
@ -31,5 +33,14 @@ internal sealed class TerritoryData
|
||||
|
||||
public string? GetName(ushort territoryId) => _territoryNames.GetValueOrDefault(territoryId);
|
||||
|
||||
public string GetNameAndId(ushort territoryId)
|
||||
{
|
||||
string? territoryName = GetName(territoryId);
|
||||
if (territoryName != null)
|
||||
return string.Create(CultureInfo.InvariantCulture, $"{territoryName} ({territoryId})");
|
||||
else
|
||||
return territoryId.ToString(CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
public bool CanUseMount(ushort territoryId) => _territoriesWithMount.Contains(territoryId);
|
||||
}
|
||||
|
@ -211,13 +211,9 @@ internal sealed class QuestWindow : LWindow, IPersistableWindowConfig
|
||||
{
|
||||
Debug.Assert(_clientState.LocalPlayer != null, "_clientState.LocalPlayer != null");
|
||||
|
||||
string? territoryName = _territoryData.GetName(_clientState.TerritoryType);
|
||||
if (territoryName != null)
|
||||
territoryName += string.Create(CultureInfo.InvariantCulture, $" ({_clientState.TerritoryType})");
|
||||
else
|
||||
territoryName = _clientState.TerritoryType.ToString(CultureInfo.InvariantCulture);
|
||||
|
||||
string territoryName = _territoryData.GetNameAndId(_clientState.TerritoryType);
|
||||
ImGui.Text(territoryName);
|
||||
|
||||
if (_gameFunctions.IsFlyingUnlockedInCurrentZone())
|
||||
{
|
||||
ImGui.SameLine();
|
||||
@ -294,9 +290,9 @@ internal sealed class QuestWindow : LWindow, IPersistableWindowConfig
|
||||
{
|
||||
string interactionType = gameObject->NamePlateIconId switch
|
||||
{
|
||||
71201 or 71211 or 71221 or 71231 or 71341 => "AcceptQuest",
|
||||
71202 or 71212 or 71222 or 71232 or 71342 => "AcceptQuest", // repeatable
|
||||
71205 or 71215 or 71225 or 71235 or 71345 => "CompleteQuest",
|
||||
71201 or 71211 or 71221 or 71231 or 71341 or 71351 => "AcceptQuest",
|
||||
71202 or 71212 or 71222 or 71232 or 71342 or 71352 => "AcceptQuest", // repeatable
|
||||
71205 or 71215 or 71225 or 71235 or 71345 or 71355 => "CompleteQuest",
|
||||
_ => "Interact",
|
||||
};
|
||||
ImGui.SetClipboardText($$"""
|
||||
|
Loading…
Reference in New Issue
Block a user