pull/5/head
Liza 2024-06-06 18:49:49 +02:00
parent a45cfda2e6
commit 9bbfbc54d3
Signed by: liza
GPG Key ID: 7199F8D727D55F67
66 changed files with 1352 additions and 165 deletions

View File

@ -29,7 +29,14 @@
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Elpis - Anagnorisis" "AetheryteShortcut": "Elpis - Anagnorisis",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKZH018_04313_Q1_000_100",
"Answer": "TEXT_AKTKZH018_04313_A2_000_100"
}
]
} }
] ]
}, },

View File

@ -90,7 +90,14 @@
}, },
"StopDistance": 7, "StopDistance": 7,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKZD008_04232_Q1_000_000",
"Answer": "TEXT_AKTKZD008_04232_A1_000_002"
}
]
} }
] ]
}, },

View File

@ -75,6 +75,21 @@
}, },
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
],
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMA103_04359_Q5_000_071",
"Yes": true
}
],
"$.0": "[1]", "$.0": "[1]",
"$.2": "QuestVariables if done after [3]: 2 0 0 0 0 96" "$.2": "QuestVariables if done after [3]: 2 0 0 0 0 96"
}, },
@ -87,6 +102,21 @@
}, },
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMA103_04359_Q2_000_049",
"Yes": true
}
],
"$.0": "[2]" "$.0": "[2]"
}, },
{ {
@ -98,6 +128,21 @@
}, },
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
],
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMA103_04359_Q3_000_055",
"Yes": true
}
],
"$.0": "[3]", "$.0": "[3]",
"$.2": "QuestVariables if used first: 1 0 0 0 0 64" "$.2": "QuestVariables if used first: 1 0 0 0 0 64"
} }

View File

@ -88,7 +88,14 @@
"Z": 130.47986 "Z": 130.47986
}, },
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMA104_04360_Q3_000_130",
"Answer": "TEXT_AKTKMA104_04360_A3_000_131"
}
]
} }
] ]
}, },
@ -103,7 +110,14 @@
"Z": 141.1001 "Z": 141.1001
}, },
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMA104_04360_Q5_000_150",
"Answer": "TEXT_AKTKMA104_04360_A5_000_151"
}
]
} }
] ]
}, },
@ -118,7 +132,14 @@
"Z": 148.11926 "Z": 148.11926
}, },
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMA104_04360_Q6_000_170",
"Answer": "TEXT_AKTKMA104_04360_A6_000_171"
}
]
} }
] ]
}, },

View File

@ -101,9 +101,9 @@
}, },
{ {
"Position": { "Position": {
"X": -425.43683, "X": -436.3368,
"Y": 38.413155, "Y": 38.647118,
"Z": 160.11292 "Z": 166.13683
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo" "InteractionType": "WalkTo"

View File

@ -43,7 +43,14 @@
"Z": 28.244385 "Z": 28.244385
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMA118_04374_Q1_000_041",
"Yes": true
}
]
} }
] ]
}, },
@ -108,7 +115,14 @@
"Z": -555.04694 "Z": -555.04694
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMA118_04374_Q2_000_141",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -105,7 +105,14 @@
"Z": -565.0569 "Z": -565.0569
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMA119_04375_Q1_000_056",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -1,6 +1,9 @@
{ {
"$schema": "https://carvel.li/questionable/quest-1.0", "$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza", "Author": "liza",
"TerritoryBlacklist": [
952
],
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,

View File

@ -119,7 +119,14 @@
}, },
"StopDistance": 6, "StopDistance": 6,
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMA123_04379_Q1_000_163",
"Yes": true
}
]
} }
] ]
} }

View File

@ -59,7 +59,14 @@
}, },
"TerritoryId": 129, "TerritoryId": 129,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Limsa Lominsa" "AetheryteShortcut": "Limsa Lominsa",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMB102_04381_Q1_000_067",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -30,7 +30,14 @@
}, },
"StopDistance": 7, "StopDistance": 7,
"TerritoryId": 621, "TerritoryId": 621,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMB103_04382_Q1_000_052",
"Yes": true
}
]
} }
] ]
}, },
@ -62,7 +69,15 @@
"StopDistance": 7, "StopDistance": 7,
"TerritoryId": 737, "TerritoryId": 737,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "A-Ruhn-Senna" "Comment": "A-Ruhn-Senna",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}, },
{ {
"DataId": 1038812, "DataId": 1038812,
@ -74,7 +89,15 @@
"StopDistance": 7, "StopDistance": 7,
"TerritoryId": 737, "TerritoryId": 737,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Sicard" "Comment": "Sicard",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}, },
{ {
"DataId": 1038813, "DataId": 1038813,
@ -86,7 +109,15 @@
"StopDistance": 7, "StopDistance": 7,
"TerritoryId": 737, "TerritoryId": 737,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Lyse" "Comment": "Lyse",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}, },
{ {
"DataId": 1038814, "DataId": 1038814,
@ -98,7 +129,15 @@
"StopDistance": 7, "StopDistance": 7,
"TerritoryId": 737, "TerritoryId": 737,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Lucia" "Comment": "Lucia",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
]
}, },
{ {
"DataId": 1038815, "DataId": 1038815,
@ -110,7 +149,15 @@
"StopDistance": 7, "StopDistance": 7,
"TerritoryId": 737, "TerritoryId": 737,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Cirina" "Comment": "Cirina",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
8
]
} }
] ]
}, },

View File

@ -32,7 +32,19 @@
}, },
"TerritoryId": 621, "TerritoryId": 621,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"Comment": "A Frosty Reception" "Comment": "A Frosty Reception",
"DialogueChoices": [
{
"Type": "ContentTalkList",
"Prompt": "264",
"Answer": "267"
},
{
"Type": "ContentTalkYesNo",
"Prompt": "268",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -45,10 +45,11 @@
}, },
{ {
"Position": { "Position": {
"X": -188.58397, "X": -188.84349,
"Y": 20.625948, "Y": 20.31553,
"Z": 408.3002 "Z": 406.13293
}, },
"StopDistance": 1,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
@ -75,6 +76,7 @@
"Y": 3.426586, "Y": 3.426586,
"Z": 360.1115 "Z": 360.1115
}, },
"StopDistance": 1,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"DisableNavmesh": true, "DisableNavmesh": true,
@ -158,7 +160,7 @@
"Z": 159.10571 "Z": 159.10571
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "WalkTo"
} }
] ]
}, },

View File

@ -110,14 +110,123 @@
}, },
{ {
"Position": { "Position": {
"X": 393.71204, "X": 394.97046,
"Y": 4.142438, "Y": 3.652959,
"Z": 251.71986 "Z": 254.77034
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "ShouldBeAJump", "InteractionType": "Jump",
"DisableNavmesh": true, "DisableNavmesh": true,
"Comment": "Jump on Pipeline and move near the Aether Current" "JumpDestination": {
"Position": {
"X": 405.0264,
"Y": -2.2185562,
"Z": 267.40506
},
"StopDistance": 3
}
},
{
"Position": {
"X": 405.01987,
"Y": -2.2185562,
"Z": 298.9302
},
"TerritoryId": 958,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": 405.01382,
"Y": -2.2185562,
"Z": 308.17484
},
"StopDistance": 3
}
},
{
"Position": {
"X": 404.9343,
"Y": -2.2185562,
"Z": 338.46368
},
"TerritoryId": 958,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": 404.9452,
"Y": -2.2185562,
"Z": 347.15533
},
"StopDistance": 3
}
},
{
"Position": {
"X": 405.0104,
"Y": -2.2185562,
"Z": 379.0302
},
"TerritoryId": 958,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": 404.98633,
"Y": -2.2185562,
"Z": 388.4368
},
"StopDistance": 3
}
},
{
"Position": {
"X": 405.02594,
"Y": -2.2185562,
"Z": 419.30426
},
"TerritoryId": 958,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": 405.00076,
"Y": -2.2185562,
"Z": 427.6698
},
"StopDistance": 3
}
},
{
"Position": {
"X": 405.03207,
"Y": -2.2185562,
"Z": 457.66095
},
"TerritoryId": 958,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": 404.94934,
"Y": -2.2185562,
"Z": 467.3867
},
"StopDistance": 3
}
},
{
"Position": {
"X": 405.04044,
"Y": -2.2185562,
"Z": 498.37363
},
"TerritoryId": 958,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": 405.158,
"Y": -2.2185564,
"Z": 508.9487
},
"StopDistance": 3
}
}, },
{ {
"DataId": 2012003, "DataId": 2012003,

View File

@ -78,7 +78,14 @@
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "WaitForManualProgress", "InteractionType": "WaitForManualProgress",
"Comment": "Follow Alphinaud and Alisaie" "Comment": "Follow Alphinaud and Alisaie",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMB108_04387_Q1_000_161",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -30,6 +30,14 @@
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Caeso", "Comment": "Caeso",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
],
"$.0": "[1]", "$.0": "[1]",
"$.1": "QuestVariables if done first: 17 0 0 0 0 64" "$.1": "QuestVariables if done first: 17 0 0 0 0 64"
}, },
@ -43,6 +51,14 @@
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Octavia", "Comment": "Octavia",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
],
"$.0": "[2]", "$.0": "[2]",
"$.2": "QuestVariables if done after [1]: 33 1 0 0 0 80" "$.2": "QuestVariables if done after [1]: 33 1 0 0 0 80"
}, },
@ -53,7 +69,15 @@
"Z": -178.38684 "Z": -178.38684
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "WalkTo" "InteractionType": "WalkTo",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}, },
{ {
"DataId": 1037715, "DataId": 1037715,
@ -65,6 +89,14 @@
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Sabinianus", "Comment": "Sabinianus",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"$.0": "[3]", "$.0": "[3]",
"$.2": "QuestVariables if done after [1, 2]: 49 1 16 0 0 206" "$.2": "QuestVariables if done after [1, 2]: 49 1 16 0 0 206"
}, },
@ -78,6 +110,14 @@
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Marcellinus", "Comment": "Marcellinus",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
],
"$.0": "[4]", "$.0": "[4]",
"$.2": "QuestVariables if done after [1, 2, 3]: 65 17 16 0 0 240" "$.2": "QuestVariables if done after [1, 2, 3]: 65 17 16 0 0 240"
}, },
@ -91,6 +131,14 @@
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Magitek Radio", "Comment": "Magitek Radio",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
8
],
"$.0": "[5]" "$.0": "[5]"
} }
] ]

View File

@ -31,6 +31,14 @@
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Marcellinus", "Comment": "Marcellinus",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"$.1": "QuestVariables if done first: 16 16 0 0 0 128" "$.1": "QuestVariables if done first: 16 16 0 0 0 128"
}, },
{ {
@ -42,7 +50,15 @@
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Octavia" "Comment": "Octavia",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
} }
] ]
}, },
@ -57,7 +73,14 @@
"Z": -422.62915 "Z": -422.62915
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMB113_04392_Q1_000_031",
"Answer": "TEXT_AKTKMB113_04392_A1_000_032"
}
]
} }
] ]
}, },
@ -72,7 +95,14 @@
"Z": -232.98999 "Z": -232.98999
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMB113_04392_Q2_000_051",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -215,6 +215,14 @@
"KillEnemyDataIds": [ "KillEnemyDataIds": [
14078 14078
], ],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
],
"$.0": "[1]", "$.0": "[1]",
"$.1": "QuestVariables if done first: (before) 0 0 2 0 0 0 (after) 16 16 2 0 0 64" "$.1": "QuestVariables if done first: (before) 0 0 2 0 0 0 (after) 16 16 2 0 0 64"
}, },
@ -234,6 +242,14 @@
"Comment": "TODO Needs item use?", "Comment": "TODO Needs item use?",
"ItemId": 2003231, "ItemId": 2003231,
"ItemUseHealthMaxPercent": 10, "ItemUseHealthMaxPercent": 10,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
],
"$.0": "[2]", "$.0": "[2]",
"$.1": "QuestVariables if done after [1]: 32 17 1 0 0 96" "$.1": "QuestVariables if done after [1]: 32 17 1 0 0 96"
}, },
@ -246,7 +262,14 @@
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "TODO Maybe move the train station aether current interaction before this", "CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"$.0": "[3]", "$.0": "[3]",
"$.1": "QuestVariables if done after [1, 2]: 49 17 1 0 0 224" "$.1": "QuestVariables if done after [1, 2]: 49 17 1 0 0 224"
}, },
@ -266,6 +289,14 @@
"Comment": "TODO Needs item use?", "Comment": "TODO Needs item use?",
"ItemId": 2003231, "ItemId": 2003231,
"ItemUseHealthMaxPercent": 10, "ItemUseHealthMaxPercent": 10,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
],
"$.0": "[4]" "$.0": "[4]"
} }
] ]

View File

@ -1,6 +1,9 @@
{ {
"$schema": "https://carvel.li/questionable/quest-1.0", "$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza", "Author": "liza",
"TerritoryBlacklist": [
1011
],
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
@ -29,7 +32,14 @@
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"Comment": "In from the Cold" "Comment": "In from the Cold",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMB115_04394_Q1_000_042",
"Yes": true
}
]
} }
] ]
}, },
@ -43,6 +53,7 @@
"Y": 22.20836, "Y": 22.20836,
"Z": 403.76892 "Z": 403.76892
}, },
"StopDistance": 5,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact"
} }

View File

@ -1,6 +1,9 @@
{ {
"$schema": "https://carvel.li/questionable/quest-1.0", "$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza", "Author": "liza",
"TerritoryBlacklist": [
969
],
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
@ -80,7 +83,14 @@
"Z": -677.4243 "Z": -677.4243
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMB116_04395_Q3_000_206",
"Yes": true
}
]
}, },
{ {
"DataId": 2012112, "DataId": 2012112,
@ -114,6 +124,7 @@
"Y": 0, "Y": 0,
"Z": 33.585083 "Z": 33.585083
}, },
"StopDistance": 4,
"TerritoryId": 1024, "TerritoryId": 1024,
"InteractionType": "Interact" "InteractionType": "Interact"
} }

View File

@ -28,7 +28,14 @@
"Z": -0.00103838 "Z": -0.00103838
}, },
"TerritoryId": 1024, "TerritoryId": 1024,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMB117_04396_Q1_000_060",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -16,7 +16,14 @@
"Z": 467.46008 "Z": 467.46008
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMB119_04398_Q1_000_001",
"Answer": "TEXT_AKTKMB119_04398_A1_000_002"
}
]
} }
] ]
}, },
@ -31,7 +38,14 @@
"Z": 467.46008 "Z": 467.46008
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMB119_04398_Q2_000_010",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -137,7 +137,14 @@
}, },
"StopDistance": 5, "StopDistance": 5,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMC102_04400_Q1_000_151",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -1,6 +1,7 @@
{ {
"$schema": "https://carvel.li/questionable/quest-1.0", "$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza", "Author": "liza",
"Comment": "TODO add aether current (2818368) here since it can't be reached later with mount speed 0",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
@ -97,6 +98,15 @@
{ {
"Sequence": 255, "Sequence": 255,
"Steps": [ "Steps": [
{
"Position": {
"X": -9.783533,
"Y": -49.589592,
"Z": -339.60205
},
"TerritoryId": 959,
"InteractionType": "WalkTo"
},
{ {
"Position": { "Position": {
"X": -72.39724, "X": -72.39724,

View File

@ -81,7 +81,20 @@
{ {
"DataId": 2012178, "DataId": 2012178,
"TerritoryId": 959, "TerritoryId": 959,
"StopDistance": 3,
"InteractionType": "Interact", "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMC104_04402_Q1_000_071",
"Answer": "TEXT_AKTKMC104_04402_A1_000_074"
},
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMC104_04402_Q2_000_081",
"Yes": true
}
],
"Comment": "Navmesh can't jump" "Comment": "Navmesh can't jump"
} }
] ]
@ -102,10 +115,33 @@
}, },
{ {
"DataId": 1038912, "DataId": 1038912,
"StopDistance": 5, "Position": {
"X": -462.06528,
"Y": -155.5629,
"Z": -625.5277
},
"TerritoryId": 959,
"InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": -453.99258,
"Y": -168,
"Z": -618.5703
},
"StopDistance": 8
}
},
{
"DataId": 1038912,
"Position": {
"X": -455.40552,
"Y": -168,
"Z": -620.05035
},
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Navmesh can't jump" "DialogueChoices": [
]
} }
] ]
}, },

View File

@ -49,6 +49,13 @@
"StopDistance": 5, "StopDistance": 5,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact", "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMC105_04403_Q1_000_073",
"Answer": "TEXT_AKTKMC105_04403_A1_000_075"
}
],
"Comment": "Navmesh can't jump" "Comment": "Navmesh can't jump"
} }
] ]
@ -70,6 +77,13 @@
"StopDistance": 5, "StopDistance": 5,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact", "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMC105_04403_Q1_000_118",
"Answer": "TEXT_AKTKMC105_04403_A1_000_120"
}
],
"Comment": "Navmesh can't jump" "Comment": "Navmesh can't jump"
} }
] ]
@ -116,7 +130,14 @@
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Mare Lamentorum - Bestways Burrow" "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMC105_04403_SYSTEM_000_215",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -64,7 +64,14 @@
"Z": -494.13293 "Z": -494.13293
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMC106_04404_Q1_000_021",
"Answer": "TEXT_AKTKMC106_04404_A1_000_022"
}
]
} }
] ]
}, },

View File

@ -46,7 +46,7 @@
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"Comment": "Follow Urianger" "Comment": "Follow Urianger (TODO is this sequence used?)"
} }
] ]
}, },
@ -62,7 +62,7 @@
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"Comment": "Follow Urianger (but you failed the first time)" "Comment": "Follow Urianger"
} }
] ]
}, },

View File

@ -136,9 +136,16 @@
"Z": -558.8681 "Z": -558.8681
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "ShouldBeAJump", "InteractionType": "Jump",
"AetheryteShortcut": "Mare Lamentorum - Bestways Burrow", "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow",
"Comment": "Navmesh can't jump" "JumpDestination": {
"Position": {
"X": 307.72073,
"Y": -143.15913,
"Z": -563.4788
},
"StopDistance": 5
}
}, },
{ {
"DataId": 2012012, "DataId": 2012012,

View File

@ -31,7 +31,10 @@
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Mare Lamentorum - Bestways Burrow", "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow",
"Comment": "Teleporter" "TargetTerritoryId": 959,
"SkipIf": [
"Never"
]
}, },
{ {
"Position": { "Position": {

View File

@ -39,7 +39,8 @@
"Z": 728.96924 "Z": 728.96924
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 1024
}, },
{ {
"DataId": 1038960, "DataId": 1038960,
@ -111,7 +112,14 @@
"Z": -5.081299 "Z": -5.081299
}, },
"TerritoryId": 987, "TerritoryId": 987,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMC110_04408_Q3_000_170",
"Yes": true
}
]
} }
] ]
}, },
@ -130,6 +138,13 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Old Sharlayan] Aetheryte Plaza", "[Old Sharlayan] Aetheryte Plaza",
"[Old Sharlayan] The Baldesion Annex" "[Old Sharlayan] The Baldesion Annex"
],
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMC110_04408_Q4_000_204",
"Yes": true
}
] ]
} }
] ]

View File

@ -1,6 +1,9 @@
{ {
"$schema": "https://carvel.li/questionable/quest-1.0", "$schema": "https://carvel.li/questionable/quest-1.0",
"Author": "liza", "Author": "liza",
"TerritoryBlacklist": [
970
],
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,

View File

@ -60,6 +60,14 @@
}, },
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"Comment": "Varsra" "Comment": "Varsra"
}, },
{ {
@ -71,6 +79,14 @@
}, },
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
],
"Comment": "Zeytahnur" "Comment": "Zeytahnur"
}, },
{ {
@ -82,6 +98,14 @@
}, },
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
],
"Comment": "Rahdvira" "Comment": "Rahdvira"
} }
] ]

View File

@ -66,7 +66,14 @@
"Z": -330.46472 "Z": -330.46472
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMD105_04413_Q1_000_095",
"Answer": "TEXT_AKTKMD105_04413_A1_000_096"
}
]
} }
] ]
}, },

View File

@ -140,6 +140,14 @@
"KillEnemyDataIds": [ "KillEnemyDataIds": [
13987 13987
], ],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"$.0": "[1]", "$.0": "[1]",
"$.1": "QuestVariables if done first: 16 1 0 0 0 128" "$.1": "QuestVariables if done first: 16 1 0 0 0 128"
}, },
@ -155,6 +163,14 @@
"KillEnemyDataIds": [ "KillEnemyDataIds": [
13986 13986
], ],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
],
"$.0": "[2]", "$.0": "[2]",
"$.1": "QuestVariables if done after [1]: 33 1 0 0 0 192", "$.1": "QuestVariables if done after [1]: 33 1 0 0 0 192",
"$.2": "QuestVariables if done after [3]: 33 32 0 0 0 96" "$.2": "QuestVariables if done after [3]: 33 32 0 0 0 96"
@ -172,6 +188,14 @@
13985, 13985,
13984 13984
], ],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
],
"$.0": "[3]", "$.0": "[3]",
"$.2": "QuestVariables if done first: 16 32 0 0 0 32" "$.2": "QuestVariables if done first: 16 32 0 0 0 32"
} }

View File

@ -52,6 +52,7 @@
}, },
{ {
"Sequence": 3, "Sequence": 3,
"Comment": "TODO Check flags",
"Steps": [ "Steps": [
{ {
"DataId": 1037628, "DataId": 1037628,
@ -61,7 +62,15 @@
"Z": -243.76288 "Z": -243.76288
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}, },
{ {
"DataId": 1040449, "DataId": 1040449,
@ -71,7 +80,15 @@
"Z": -238.3612 "Z": -238.3612
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}, },
{ {
"DataId": 1037629, "DataId": 1037629,
@ -81,7 +98,15 @@
"Z": -200.85455 "Z": -200.85455
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
} }
] ]
}, },

View File

@ -95,7 +95,14 @@
"Z": -87.90729 "Z": -87.90729
}, },
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMD110_04418_Q2_000_172",
"Answer": "TEXT_AKTKMD110_04418_A2_000_173"
}
]
} }
] ]
}, },
@ -114,6 +121,13 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Radz-at-Han] Hall of the Radiant Host", "[Radz-at-Han] Hall of the Radiant Host",
"[Radz-at-Han] Mehryde's Meyhane" "[Radz-at-Han] Mehryde's Meyhane"
],
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMD110_04418_Q3_000_223",
"Answer": "TEXT_AKTKMD110_04418_A3_000_225"
}
] ]
} }
] ]

View File

@ -50,12 +50,33 @@
"Z": -210.52875 "Z": -210.52875
}, },
"TerritoryId": 819, "TerritoryId": 819,
"InteractionType": "WaitForManualProgress", "InteractionType": "Interact",
"Comment": "Cutscene Interaction needed",
"AetheryteShortcut": "Crystarium", "AetheryteShortcut": "Crystarium",
"AethernetShortcut": [ "AethernetShortcut": [
"[Crystarium] Aetheryte Plaza", "[Crystarium] Aetheryte Plaza",
"[Crystarium] The Cabinet of Curiosity" "[Crystarium] The Cabinet of Curiosity"
],
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKME101_04419_Q2_000_071",
"Yes": true
},
{
"Type": "List",
"Prompt": "TEXT_AKTKME101_04419_Q3_000_083",
"Answer": "TEXT_AKTKME101_04419_A3_000_087"
},
{
"Type": "List",
"Prompt": "TEXT_AKTKME101_04419_Q4_000_113",
"Answer": "TEXT_AKTKME101_04419_A4_000_114"
},
{
"Type": "List",
"Prompt": "TEXT_AKTKME101_04419_Q5_000_129",
"Answer": "TEXT_AKTKME101_04419_A5_000_131"
}
] ]
} }
] ]

View File

@ -33,7 +33,9 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Crystarium] The Cabinet of Curiosity", "[Crystarium] The Cabinet of Curiosity",
"[Crystarium] The Dossal Gate" "[Crystarium] The Dossal Gate"
] ],
"Comment": "TODO Check target territory id",
"TargetTerritoryId": 844
} }
] ]
}, },
@ -47,13 +49,40 @@
"Z": -4.654831 "Z": -4.654831
}, },
"TerritoryId": 1031, "TerritoryId": 1031,
"InteractionType": "WalkTo" "InteractionType": "Jump",
"JumpDestination": {
"Position": {
"X": -1.5539734,
"Y": 3.6164591,
"Z": -1.1141448
}
},
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
]
}, },
{ {
"DataId": 2012128, "DataId": 2012128,
"Position": {
"X": -0.001528129,
"Y": 4.931927,
"Z": 0.01416349
},
"TerritoryId": 1031, "TerritoryId": 1031,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Interact with Aetheryte (Navmesh can't jump)", "CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
],
"$.0": "[1]", "$.0": "[1]",
"$.1": "QuestVariables if done first: 16 0 16 0 0 16" "$.1": "QuestVariables if done first: 16 0 16 0 0 16"
}, },
@ -66,6 +95,14 @@
}, },
"TerritoryId": 1031, "TerritoryId": 1031,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"$.0": "[2]", "$.0": "[2]",
"$": "QuestVariables after: 32 1 16 0 0 144" "$": "QuestVariables after: 32 1 16 0 0 144"
}, },
@ -78,6 +115,14 @@
}, },
"TerritoryId": 1031, "TerritoryId": 1031,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
],
"$.0": "[3]", "$.0": "[3]",
"$.1": "QuestVariables after: 49 1 16 0 0 208" "$.1": "QuestVariables after: 49 1 16 0 0 208"
}, },
@ -90,6 +135,14 @@
}, },
"TerritoryId": 1031, "TerritoryId": 1031,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
],
"$.0": "[4]", "$.0": "[4]",
"$.2": "QuestVariables if done first: 16 16 0 0 0 32" "$.2": "QuestVariables if done first: 16 16 0 0 0 32"
} }

View File

@ -58,7 +58,14 @@
"Z": 157.61035 "Z": 157.61035
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKME104_04422_Q1_000_094",
"Answer": "TEXT_AKTKME104_04422_A1_000_095"
}
]
} }
] ]
} }

View File

@ -85,7 +85,14 @@
"Z": 73.258545 "Z": 73.258545
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKME105_04423_Q1_000_106",
"Answer": "TEXT_AKTKME105_04423_A1_000_107"
}
]
} }
] ]
}, },
@ -100,7 +107,14 @@
"Z": 121.47705 "Z": 121.47705
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKME105_04423_Q4_000_178",
"Answer": "TEXT_AKTKME105_04423_A4_000_180"
}
]
} }
] ]
}, },
@ -130,7 +144,14 @@
"Z": 107.133545 "Z": 107.133545
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKME105_04423_Q7_000_313",
"Answer": "TEXT_AKTKME105_04423_A7_000_314"
}
]
} }
] ]
}, },

View File

@ -13,7 +13,14 @@
"Z": 63.70642 "Z": 63.70642
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKME107_04425_Q1_000_024",
"Answer": "TEXT_AKTKME107_04425_A1_000_025"
}
]
} }
] ]
}, },

View File

@ -46,6 +46,14 @@
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"$.1": "QuestVariables if done first: 1 0 0 0 0 128" "$.1": "QuestVariables if done first: 1 0 0 0 0 128"
}, },
{ {
@ -56,7 +64,15 @@
"Z": 543.572 "Z": 543.572
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
} }
] ]
}, },
@ -116,7 +132,14 @@
"Z": 460.77673 "Z": 460.77673
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKME109_04427_Q3_000_163",
"Answer": "TEXT_AKTKME109_04427_A3_000_164"
}
]
} }
] ]
}, },

View File

@ -102,7 +102,14 @@
"Z": -113.81708 "Z": -113.81708
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKME111_04429_Q2_000_094",
"Answer": "TEXT_AKTKME111_04429_A2_000_096"
}
]
} }
] ]
} }

View File

@ -84,8 +84,29 @@
"Z": -173.75458 "Z": -173.75458
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "WaitForManualProgress", "InteractionType": "Interact",
"Comment": "Talk (1, 2, 1)" "DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKME112_04430_Q1_000_072",
"Yes": true
},
{
"Type": "List",
"Prompt": "TEXT_AKTKME112_04430_Q2_000_076",
"Answer": "TEXT_AKTKME112_04430_A2_000_077"
},
{
"Type": "List",
"Prompt": "TEXT_AKTKME112_04430_Q3_000_089",
"Answer": "TEXT_AKTKME112_04430_A3_000_091"
},
{
"Type": "List",
"Prompt": "TEXT_AKTKME112_04430_Q4_000_098",
"Answer": "TEXT_AKTKME112_04430_A4_000_099"
}
]
} }
] ]
}, },
@ -125,7 +146,29 @@
"Z": -155.5047 "Z": -155.5047
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "WaitForManualProgress", "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKME112_04430_Q5_000_152",
"Yes": true
},
{
"Type": "List",
"Prompt": "TEXT_AKTKME112_04430_Q6_000_154",
"Answer": "TEXT_AKTKME112_04430_A6_000_156"
},
{
"Type": "List",
"Prompt": "TEXT_AKTKME112_04430_Q7_000_168",
"Answer": "TEXT_AKTKME112_04430_A7_000_170"
},
{
"Type": "List",
"Prompt": "TEXT_AKTKME112_04430_Q8_000_181",
"Answer": "TEXT_AKTKME112_04430_A8_000_182"
}
],
"Comment": "Talk (2, 2, 1)" "Comment": "Talk (2, 2, 1)"
} }
] ]

View File

@ -13,7 +13,14 @@
"Z": -175.24994 "Z": -175.24994
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKME113_04431_Q1_000_014",
"Answer": "TEXT_AKTKME113_04431_A1_000_016"
}
]
} }
] ]
}, },

View File

@ -40,7 +40,14 @@
"Z": 198.68762 "Z": 198.68762
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKME115_04433_Q1_000_021",
"Yes": true
}
]
} }
] ]
}, },
@ -82,7 +89,14 @@
"Z": -367.48303 "Z": -367.48303
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKME115_04433_Q2_000_062",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -29,7 +29,14 @@
"Z": -653.13196 "Z": -653.13196
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKME116_04434_Q1_000_021",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -30,7 +30,14 @@
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact", "InteractionType": "Interact",
"Fly": true "Fly": true,
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKME120_04438_Q1_000_008",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -45,7 +45,14 @@
"Z": -393.36237 "Z": -393.36237
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMF103_04441_Q1_000_096",
"Yes": true
}
]
}, },
{ {
"DataId": 1039711, "DataId": 1039711,
@ -85,7 +92,14 @@
"Z": 302.11328 "Z": 302.11328
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMF103_04441_Q1_000_181",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -65,6 +65,14 @@
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
],
"$.0": "[1] Navmesh navigates here first, even if you feed it [2]", "$.0": "[1] Navmesh navigates here first, even if you feed it [2]",
"$.1": "QuestVariables if done first: 1 0 0 0 0 64" "$.1": "QuestVariables if done first: 1 0 0 0 0 64"
}, },
@ -77,6 +85,14 @@
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"$.0": "[2]", "$.0": "[2]",
"$.1": "QuestVariables after: 2 0 0 0 0 192" "$.1": "QuestVariables after: 2 0 0 0 0 192"
}, },
@ -88,7 +104,15 @@
"Z": -14.450317 "Z": -14.450317
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
} }
] ]
}, },

View File

@ -110,7 +110,11 @@
"Z": 298.72583 "Z": 298.72583
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 956,
"SkipIf": [
"Never"
]
}, },
{ {
"DataId": 1040397, "DataId": 1040397,

View File

@ -60,7 +60,14 @@
}, },
"StopDistance": 0.25, "StopDistance": 0.25,
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMF106_04444_Q3_000_125",
"Answer": "TEXT_AKTKMF106_04444_A3_000_126"
}
]
} }
] ]
}, },
@ -138,7 +145,14 @@
"Z": 299.8855 "Z": 299.8855
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_AKTKMF106_04444_Q4_000_272",
"Answer": "TEXT_AKTKMF106_04444_A4_000_273"
}
]
} }
] ]
} }

View File

@ -72,6 +72,14 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Distracted Researcher", "Comment": "Distracted Researcher",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
2,
null
],
"$.0": "[1]", "$.0": "[1]",
"$.1": "QuestVariables if done first: 1 0 0 0 2 0" "$.1": "QuestVariables if done first: 1 0 0 0 2 0"
}, },
@ -85,6 +93,14 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Hyperventilating Engineer", "Comment": "Hyperventilating Engineer",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
128,
null
],
"$.0": "[2]", "$.0": "[2]",
"$.1": "QuestVariables if done after [1]: 2 0 0 0 130 0" "$.1": "QuestVariables if done after [1]: 2 0 0 0 130 0"
}, },
@ -98,6 +114,14 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Harried Aetherologist", "Comment": "Harried Aetherologist",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
8,
null
],
"$.0": "[3]", "$.0": "[3]",
"$.1": "QuestVariables if done after [2]: 3 0 0 0 138 0" "$.1": "QuestVariables if done after [2]: 3 0 0 0 138 0"
}, },
@ -111,6 +135,15 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Grimacing Naturalist", "Comment": "Grimacing Naturalist",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
4,
null
],
"Mount": true,
"$.0": "[4]", "$.0": "[4]",
"$.1": "QuestVariables if done after [3]: 4 0 0 0 142 0" "$.1": "QuestVariables if done after [3]: 4 0 0 0 142 0"
}, },
@ -124,6 +157,14 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Ponderous Mathematician", "Comment": "Ponderous Mathematician",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
64,
null
],
"$.0": "[5]", "$.0": "[5]",
"$.1": "QuestVariables if done after [4]: 5 0 0 0 206 0" "$.1": "QuestVariables if done after [4]: 5 0 0 0 206 0"
}, },
@ -137,6 +178,14 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Despondent Engineer", "Comment": "Despondent Engineer",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
32,
null
],
"Mount": true, "Mount": true,
"$.0": "[6]", "$.0": "[6]",
"$.1": "QuestVariables if done after [5]: 6 0 0 0 238 0" "$.1": "QuestVariables if done after [5]: 6 0 0 0 238 0"
@ -151,6 +200,14 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Skeptical Researcher", "Comment": "Skeptical Researcher",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
1,
null
],
"Mount": true, "Mount": true,
"$.0": "[7]", "$.0": "[7]",
"$.1": "QuestVariables if done after [6]: 7 0 0 0 239 0" "$.1": "QuestVariables if done after [6]: 7 0 0 0 239 0"
@ -165,6 +222,14 @@
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact", "InteractionType": "Interact",
"Comment": "Anxious Engineer", "Comment": "Anxious Engineer",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
16,
null
],
"$.0": "[8]", "$.0": "[8]",
"$.2": "QuestVariables if done first: 1 0 0 0 16 0" "$.2": "QuestVariables if done first: 1 0 0 0 16 0"
} }

View File

@ -39,7 +39,14 @@
"Z": -81.28485 "Z": -81.28485
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMF110_04448_Q1_000_031",
"Yes": true
}
]
} }
] ]
}, },
@ -85,7 +92,14 @@
"Z": 302.17432 "Z": 302.17432
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_AKTKMF110_04448_Q2_000_111",
"Yes": true
}
]
} }
] ]
}, },

View File

@ -647,7 +647,17 @@
"if": { "if": {
"properties": { "properties": {
"InteractionType": { "InteractionType": {
"const": "Interact" "anyOf": [
{
"const": "Interact"
},
{
"const": "SinglePlayerDuty"
},
{
"const": "WaitForManualProgress"
}
]
} }
} }
}, },
@ -662,14 +672,19 @@
"type": "string", "type": "string",
"enum": [ "enum": [
"YesNo", "YesNo",
"List" "List",
"ContentTalkYesNo",
"ContentTalkList"
] ]
}, },
"ExcelSheet": { "ExcelSheet": {
"type": "string" "type": "string"
}, },
"Prompt": { "Prompt": {
"type": "string" "type": [
"string",
"null"
]
} }
}, },
"required": [ "required": [
@ -681,7 +696,14 @@
"if": { "if": {
"properties": { "properties": {
"Type": { "Type": {
"const": "YesNo" "anyOf": [
{
"const": "YesNo"
},
{
"const": "ContentTalkYesNo"
}
]
} }
} }
}, },
@ -701,7 +723,14 @@
"if": { "if": {
"properties": { "properties": {
"Type": { "Type": {
"const": "List" "anyOf": [
{
"const": "List"
},
{
"const": "ContentTalkList"
}
]
} }
} }
}, },

View File

@ -1,4 +1,6 @@
using System; using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq; using System.Linq;
using Dalamud.Game.Addon.Lifecycle; using Dalamud.Game.Addon.Lifecycle;
using Dalamud.Game.Addon.Lifecycle.AddonArgTypes; using Dalamud.Game.Addon.Lifecycle.AddonArgTypes;
@ -19,110 +21,216 @@ internal sealed class GameUiController : IDisposable
private readonly IDataManager _dataManager; private readonly IDataManager _dataManager;
private readonly GameFunctions _gameFunctions; private readonly GameFunctions _gameFunctions;
private readonly QuestController _questController; private readonly QuestController _questController;
private readonly IGameGui _gameGui;
private readonly IPluginLog _pluginLog; private readonly IPluginLog _pluginLog;
public GameUiController(IClientState clientState, IAddonLifecycle addonLifecycle, IDataManager dataManager, public GameUiController(IClientState clientState, IAddonLifecycle addonLifecycle, IDataManager dataManager,
GameFunctions gameFunctions, QuestController questController, IPluginLog pluginLog) GameFunctions gameFunctions, QuestController questController, IGameGui gameGui, IPluginLog pluginLog)
{ {
_clientState = clientState; _clientState = clientState;
_addonLifecycle = addonLifecycle; _addonLifecycle = addonLifecycle;
_dataManager = dataManager; _dataManager = dataManager;
_gameFunctions = gameFunctions; _gameFunctions = gameFunctions;
_questController = questController; _questController = questController;
_gameGui = gameGui;
_pluginLog = pluginLog; _pluginLog = pluginLog;
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectString", SelectStringPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectString", SelectStringPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "CutSceneSelectString", CutsceneSelectStringPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "CutSceneSelectString", CutsceneSelectStringPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectIconString", SelectIconStringPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "Credit", CreditPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "Credit", CreditPostSetup);
_addonLifecycle.RegisterListener(AddonEvent.PostSetup, "AkatsukiNote", UnendingCodexPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "AkatsukiNote", UnendingCodexPostSetup);
} }
internal unsafe void HandleCurrentDialogueChoices()
{
if (_gameGui.TryGetAddonByName("SelectString", out AddonSelectString* addonSelectString))
{
_pluginLog.Information("SelectString window is open");
SelectStringPostSetup(addonSelectString);
}
if (_gameGui.TryGetAddonByName("CutSceneSelectString",
out AddonCutSceneSelectString* addonCutSceneSelectString))
{
_pluginLog.Information("CutSceneSelectString window is open");
CutsceneSelectStringPostSetup(addonCutSceneSelectString);
}
if (_gameGui.TryGetAddonByName("SelectIconString", out AddonSelectIconString* addonSelectIconString))
{
_pluginLog.Information("SelectIconString window is open");
SelectIconStringPostSetup(addonSelectIconString);
}
if (_gameGui.TryGetAddonByName("SelectYesno", out AddonSelectYesno* addonSelectYesno))
{
_pluginLog.Information("SelectYesno window is open");
SelectYesnoPostSetup(addonSelectYesno);
}
}
private unsafe void SelectStringPostSetup(AddonEvent type, AddonArgs args) private unsafe void SelectStringPostSetup(AddonEvent type, AddonArgs args)
{ {
AddonSelectString* addonSelectString = (AddonSelectString*)args.Addon; AddonSelectString* addonSelectString = (AddonSelectString*)args.Addon;
SelectStringPostSetup(addonSelectString);
}
private unsafe void SelectStringPostSetup(AddonSelectString* addonSelectString)
{
string? actualPrompt = addonSelectString->AtkUnitBase.AtkValues[2].ReadAtkString(); string? actualPrompt = addonSelectString->AtkUnitBase.AtkValues[2].ReadAtkString();
if (actualPrompt == null) if (actualPrompt == null)
return; return;
var currentQuest = _questController.CurrentQuest; List<string?> answers = new();
if (currentQuest == null) for (ushort i = 7; i < addonSelectString->AtkUnitBase.AtkValuesCount; ++i)
return; answers.Add(addonSelectString->AtkUnitBase.AtkValues[i].ReadAtkString());
var quest = currentQuest.Quest; int? answer = HandleListChoice(actualPrompt, answers);
var step = quest.FindSequence(currentQuest.Sequence)?.FindStep(currentQuest.Step); if (answer != null)
if (step == null)
return;
foreach (var dialogueChoice in step.DialogueChoices)
{ {
if (dialogueChoice.Answer == null) _questController.IncreaseDialogueChoicesSelected();
continue; addonSelectString->AtkUnitBase.FireCallbackInt(answer.Value);
string? excelPrompt =
_gameFunctions.GetExcelString(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt);
string? excelAnswer =
_gameFunctions.GetExcelString(quest, dialogueChoice.ExcelSheet, dialogueChoice.Answer);
if (excelPrompt == null || actualPrompt != excelPrompt)
continue;
for (ushort i = 7; i <= addonSelectString->AtkUnitBase.AtkValuesCount; ++i)
{
string? actualAnswer = addonSelectString->AtkUnitBase.AtkValues[i].ReadAtkString();
if (actualAnswer == null || actualAnswer != excelAnswer)
continue;
_questController.IncreaseDialogueChoicesSelected();
addonSelectString->AtkUnitBase.FireCallbackInt(i - 7);
return;
}
} }
} }
private unsafe void CutsceneSelectStringPostSetup(AddonEvent type, AddonArgs args) private unsafe void CutsceneSelectStringPostSetup(AddonEvent type, AddonArgs args)
{ {
AddonCutSceneSelectString* addonCutSceneSelectString = (AddonCutSceneSelectString*)args.Addon; AddonCutSceneSelectString* addonCutSceneSelectString = (AddonCutSceneSelectString*)args.Addon;
CutsceneSelectStringPostSetup(addonCutSceneSelectString);
}
private unsafe void CutsceneSelectStringPostSetup(AddonCutSceneSelectString* addonCutSceneSelectString)
{
string? actualPrompt = addonCutSceneSelectString->AtkUnitBase.AtkValues[2].ReadAtkString(); string? actualPrompt = addonCutSceneSelectString->AtkUnitBase.AtkValues[2].ReadAtkString();
if (actualPrompt == null) if (actualPrompt == null)
return; return;
List<string?> answers = new();
for (int i = 5; i < addonCutSceneSelectString->AtkUnitBase.AtkValuesCount; ++i)
answers.Add(addonCutSceneSelectString->AtkUnitBase.AtkValues[i].ReadAtkString());
int? answer = HandleListChoice(actualPrompt, answers);
if (answer != null)
{
_questController.IncreaseDialogueChoicesSelected();
addonCutSceneSelectString->AtkUnitBase.FireCallbackInt(answer.Value);
}
}
private unsafe void SelectIconStringPostSetup(AddonEvent type, AddonArgs args)
{
AddonSelectIconString* addonSelectIconString = (AddonSelectIconString*)args.Addon;
SelectIconStringPostSetup(addonSelectIconString);
}
private unsafe void SelectIconStringPostSetup(AddonSelectIconString* addonSelectIconString)
{
string? actualPrompt = addonSelectIconString->AtkUnitBase.AtkValues[3].ReadAtkString();
if (string.IsNullOrEmpty(actualPrompt))
actualPrompt = null;
List<string?> answers = new();
for (ushort i = 0; i < addonSelectIconString->AtkUnitBase.AtkValues[5].Int; i++)
answers.Add(addonSelectIconString->AtkUnitBase.AtkValues[i * 3 + 7].ReadAtkString());
int? answer = HandleListChoice(actualPrompt, answers);
if (answer != null)
{
_questController.IncreaseDialogueChoicesSelected();
addonSelectIconString->AtkUnitBase.FireCallbackInt(answer.Value);
}
}
private int? HandleListChoice(string? actualPrompt, List<string?> answers)
{
var currentQuest = _questController.CurrentQuest; var currentQuest = _questController.CurrentQuest;
if (currentQuest == null) if (currentQuest == null)
return; {
_pluginLog.Information("Ignoring list choice, no active quest");
return null;
}
var quest = currentQuest.Quest; var quest = currentQuest.Quest;
var step = quest.FindSequence(currentQuest.Sequence)?.FindStep(currentQuest.Step); var step = quest.FindSequence(currentQuest.Sequence)?.FindStep(currentQuest.Step);
if (step == null) if (step == null)
return; {
_pluginLog.Information("Ignoring list choice, no active step");
return null;
}
foreach (DialogueChoice dialogueChoice in step.DialogueChoices) foreach (var dialogueChoice in step.DialogueChoices)
{ {
if (dialogueChoice.Answer == null) if (dialogueChoice.Answer == null)
continue;
string? excelPrompt =
_gameFunctions.GetExcelString(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt);
string? excelAnswer =
_gameFunctions.GetExcelString(quest, dialogueChoice.ExcelSheet, dialogueChoice.Answer);
if (excelPrompt == null || actualPrompt != excelPrompt)
continue;
for (int i = 5; i < addonCutSceneSelectString->AtkUnitBase.AtkValuesCount; ++i)
{ {
string? actualAnswer = addonCutSceneSelectString->AtkUnitBase.AtkValues[i].ReadAtkString(); _pluginLog.Information("Ignoring entry in DialogueChoices, no answer");
if (actualAnswer == null || actualAnswer != excelAnswer) continue;
continue; }
_questController.IncreaseDialogueChoicesSelected(); string? excelPrompt = null, excelAnswer;
addonCutSceneSelectString->AtkUnitBase.FireCallbackInt(i - 5); switch (dialogueChoice.Type)
return; {
case EDialogChoiceType.ContentTalkList:
if (dialogueChoice.Prompt != null)
{
excelPrompt =
_gameFunctions.GetContentTalk(uint.Parse(dialogueChoice.Prompt,
CultureInfo.InvariantCulture));
}
excelAnswer =
_gameFunctions.GetContentTalk(uint.Parse(dialogueChoice.Answer, CultureInfo.InvariantCulture));
break;
case EDialogChoiceType.List:
if (dialogueChoice.Prompt != null)
{
excelPrompt =
_gameFunctions.GetDialogueText(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt);
}
excelAnswer =
_gameFunctions.GetDialogueText(quest, dialogueChoice.ExcelSheet, dialogueChoice.Answer);
break;
default:
continue;
}
if (actualPrompt == null && !string.IsNullOrEmpty(excelPrompt))
{
_pluginLog.Information($"Unexpected excelPrompt: {excelPrompt}");
continue;
}
if (actualPrompt != null && (excelPrompt == null || !GameStringEquals(actualPrompt, excelPrompt)))
{
_pluginLog.Information($"Unexpected excelPrompt: {excelPrompt}, actualPrompt: {actualPrompt}");
continue;
}
for (int i = 0; i < answers.Count; ++i)
{
if (GameStringEquals(answers[i], excelAnswer))
{
_pluginLog.Information($"Returning {i}: '{answers[i]}' for '{actualPrompt}'");
return i;
}
} }
} }
_pluginLog.Information($"No matching answer found for {actualPrompt}.");
return null;
} }
private unsafe void SelectYesnoPostSetup(AddonEvent type, AddonArgs args) private unsafe void SelectYesnoPostSetup(AddonEvent type, AddonArgs args)
{ {
AddonSelectYesno* addonSelectYesno = (AddonSelectYesno*)args.Addon; AddonSelectYesno* addonSelectYesno = (AddonSelectYesno*)args.Addon;
SelectYesnoPostSetup(addonSelectYesno);
}
private unsafe void SelectYesnoPostSetup(AddonSelectYesno* addonSelectYesno)
{
string? actualPrompt = addonSelectYesno->AtkUnitBase.AtkValues[0].ReadAtkString(); string? actualPrompt = addonSelectYesno->AtkUnitBase.AtkValues[0].ReadAtkString();
if (actualPrompt == null) if (actualPrompt == null)
return; return;
@ -147,9 +255,22 @@ internal sealed class GameUiController : IDisposable
_pluginLog.Verbose($"DefaultYesNo: Choice count: {step.DialogueChoices.Count}"); _pluginLog.Verbose($"DefaultYesNo: Choice count: {step.DialogueChoices.Count}");
foreach (var dialogueChoice in step.DialogueChoices) foreach (var dialogueChoice in step.DialogueChoices)
{ {
string? excelPrompt = string? excelPrompt;
_gameFunctions.GetExcelString(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt); switch (dialogueChoice.Type)
if (excelPrompt == null || actualPrompt != excelPrompt) {
case EDialogChoiceType.ContentTalkYesNo:
excelPrompt =
_gameFunctions.GetContentTalk(uint.Parse(dialogueChoice.Prompt, CultureInfo.InvariantCulture));
break;
case EDialogChoiceType.YesNo:
excelPrompt =
_gameFunctions.GetDialogueText(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt);
break;
default:
continue;
}
if (excelPrompt == null || !GameStringEquals(actualPrompt, excelPrompt))
continue; continue;
addonSelectYesno->AtkUnitBase.FireCallbackInt(dialogueChoice.Yes ? 0 : 1); addonSelectYesno->AtkUnitBase.FireCallbackInt(dialogueChoice.Yes ? 0 : 1);
@ -174,7 +295,7 @@ internal sealed class GameUiController : IDisposable
if (step != null) if (step != null)
_pluginLog.Verbose($"Current step: {step.TerritoryId}, {step.TargetTerritoryId}"); _pluginLog.Verbose($"Current step: {step.TerritoryId}, {step.TargetTerritoryId}");
if (step == null || step.TargetTerritoryId == null || step.TerritoryId != _clientState.TerritoryType) if (step == null || step.TargetTerritoryId == null)
{ {
_pluginLog.Verbose("TravelYesNo: Checking previous step..."); _pluginLog.Verbose("TravelYesNo: Checking previous step...");
step = sequence.FindStep(currentQuest.Step == 255 ? (sequence.Steps.Count - 1) : (currentQuest.Step - 1)); step = sequence.FindStep(currentQuest.Step == 255 ? (sequence.Steps.Count - 1) : (currentQuest.Step - 1));
@ -184,7 +305,7 @@ internal sealed class GameUiController : IDisposable
_pluginLog.Verbose($"Previous step: {step.TerritoryId}, {step.TargetTerritoryId}"); _pluginLog.Verbose($"Previous step: {step.TerritoryId}, {step.TargetTerritoryId}");
} }
if (step == null || step.TargetTerritoryId == null || step.TerritoryId != _clientState.TerritoryType) if (step == null || step.TargetTerritoryId == null)
{ {
_pluginLog.Verbose("TravelYesNo: Not found"); _pluginLog.Verbose("TravelYesNo: Not found");
return false; return false;
@ -196,7 +317,7 @@ internal sealed class GameUiController : IDisposable
foreach (var entry in warps) foreach (var entry in warps)
{ {
string? excelPrompt = entry.Question?.ToString(); string? excelPrompt = entry.Question?.ToString();
if (excelPrompt == null || excelPrompt != actualPrompt) if (excelPrompt == null || !GameStringEquals(excelPrompt, actualPrompt))
{ {
_pluginLog.Information($"Ignoring prompt '{excelPrompt}'"); _pluginLog.Information($"Ignoring prompt '{excelPrompt}'");
continue; continue;
@ -229,11 +350,26 @@ internal sealed class GameUiController : IDisposable
} }
} }
/// <summary>
/// Ensures characters like '-' are handled equally in both strings.
/// </summary>
private bool GameStringEquals(string? a, string? b)
{
if (a == null)
return b == null;
if (b == null)
return false;
return a.ReplaceLineEndings().Replace('\u2013', '-') == b.ReplaceLineEndings().Replace('\u2013', '-');
}
public void Dispose() public void Dispose()
{ {
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "AkatsukiNote", UnendingCodexPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "AkatsukiNote", UnendingCodexPostSetup);
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "Credit", CreditPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "Credit", CreditPostSetup);
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup);
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectIconString", SelectIconStringPostSetup);
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "CutSceneSelectString", CutsceneSelectStringPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "CutSceneSelectString", CutsceneSelectStringPostSetup);
_addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectString", SelectStringPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectString", SelectStringPostSetup);
} }

View File

@ -88,7 +88,7 @@ internal sealed class MovementController : IDisposable
} }
} }
_navmeshIpc.MoveTo(navPoints); _navmeshIpc.MoveTo(navPoints, Destination.IsFlying);
ResetPathfinding(); ResetPathfinding();
} }
else if (_pathfindTask.IsCompleted) else if (_pathfindTask.IsCompleted)
@ -166,6 +166,7 @@ internal sealed class MovementController : IDisposable
public void NavigateTo(EMovementType type, uint? dataId, Vector3 to, bool fly, bool sprint, float? stopDistance = null) public void NavigateTo(EMovementType type, uint? dataId, Vector3 to, bool fly, bool sprint, float? stopDistance = null)
{ {
fly |= _condition[ConditionFlag.Diving];
PrepareNavigation(type, dataId, to, fly, sprint, stopDistance); PrepareNavigation(type, dataId, to, fly, sprint, stopDistance);
_pluginLog.Information($"Pathfinding to {Destination}"); _pluginLog.Information($"Pathfinding to {Destination}");
@ -177,10 +178,11 @@ internal sealed class MovementController : IDisposable
public void NavigateTo(EMovementType type, uint? dataId, List<Vector3> to, bool fly, bool sprint, float? stopDistance) public void NavigateTo(EMovementType type, uint? dataId, List<Vector3> to, bool fly, bool sprint, float? stopDistance)
{ {
fly |= _condition[ConditionFlag.Diving];
PrepareNavigation(type, dataId, to.Last(), fly, sprint, stopDistance); PrepareNavigation(type, dataId, to.Last(), fly, sprint, stopDistance);
_pluginLog.Information($"Moving to {Destination}"); _pluginLog.Information($"Moving to {Destination}");
_navmeshIpc.MoveTo(to); _navmeshIpc.MoveTo(to, fly);
} }
public void ResetPathfinding() public void ResetPathfinding()

View File

@ -513,11 +513,6 @@ internal sealed class QuestController
// navmesh won't move close enough // navmesh won't move close enough
if (actualDistance > distance) if (actualDistance > distance)
{ {
// picking up Mehvan's baby, not sure if navmesh ignores y distance but it thinks you're close
// enough
if (step.DataId == 2012208)
distance /= 2;
_movementController.NavigateTo(EMovementType.Quest, step.DataId, [step.Position.Value], _movementController.NavigateTo(EMovementType.Quest, step.DataId, [step.Position.Value],
fly: step.Fly == true && _gameFunctions.IsFlyingUnlocked(_clientState.TerritoryType), fly: step.Fly == true && _gameFunctions.IsFlyingUnlocked(_clientState.TerritoryType),
sprint: step.Sprint != false, sprint: step.Sprint != false,
@ -670,7 +665,7 @@ internal sealed class QuestController
if (step.ChatMessage != null) if (step.ChatMessage != null)
{ {
string? excelString = _gameFunctions.GetExcelString(CurrentQuest.Quest, step.ChatMessage.ExcelSheet, string? excelString = _gameFunctions.GetDialogueText(CurrentQuest.Quest, step.ChatMessage.ExcelSheet,
step.ChatMessage.Key); step.ChatMessage.Key);
if (excelString == null) if (excelString == null)
return; return;

View File

@ -60,11 +60,11 @@ internal sealed class NavmeshIpc
return _navPathfind.InvokeFunc(localPlayerPosition, targetPosition, fly, cancellationToken); return _navPathfind.InvokeFunc(localPlayerPosition, targetPosition, fly, cancellationToken);
} }
public void MoveTo(List<Vector3> position) public void MoveTo(List<Vector3> position, bool fly)
{ {
Stop(); Stop();
_pathMoveTo.InvokeAction(position, false); _pathMoveTo.InvokeAction(position, fly);
} }
public Vector3? GetPointOnFloor(Vector3 position) public Vector3? GetPointOnFloor(Vector3 position)

View File

@ -10,6 +10,7 @@ using Dalamud.Game;
using Dalamud.Game.ClientState.Conditions; using Dalamud.Game.ClientState.Conditions;
using Dalamud.Game.ClientState.Objects; using Dalamud.Game.ClientState.Objects;
using Dalamud.Plugin.Services; using Dalamud.Plugin.Services;
using Dalamud.Utility;
using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions; using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game;
using FFXIVClientStructs.FFXIV.Client.Game.Control; using FFXIVClientStructs.FFXIV.Client.Game.Control;
@ -474,7 +475,7 @@ internal sealed unsafe class GameFunctions
_pluginLog.Error($"Could not find content for content finder condition (cf: {contentFinderConditionId})"); _pluginLog.Error($"Could not find content for content finder condition (cf: {contentFinderConditionId})");
} }
public string? GetExcelString(Quest currentQuest, string? excelSheetName, string key) public string? GetDialogueText(Quest currentQuest, string? excelSheetName, string key)
{ {
if (excelSheetName == null) if (excelSheetName == null)
{ {
@ -495,6 +496,12 @@ internal sealed unsafe class GameFunctions
return null; return null;
} }
return excelSheet.FirstOrDefault(x => x.Key == key)?.Value?.ToString(); return excelSheet.FirstOrDefault(x => x.Key == key)?.Value?.ToDalamudString().ToString();
}
public string? GetContentTalk(uint rowId)
{
var questRow = _dataManager.GetExcelSheet<ContentTalk>()!.GetRow(rowId);
return questRow?.Text?.ToString();
} }
} }

View File

@ -8,5 +8,7 @@ public sealed class DialogueChoiceTypeConverter() : EnumConverter<EDialogChoiceT
{ {
{ EDialogChoiceType.YesNo, "YesNo" }, { EDialogChoiceType.YesNo, "YesNo" },
{ EDialogChoiceType.List, "List" }, { EDialogChoiceType.List, "List" },
{ EDialogChoiceType.ContentTalkYesNo, "ContentTalkYesNo" },
{ EDialogChoiceType.ContentTalkList, "ContentTalkList" },
}; };
} }

View File

@ -8,7 +8,7 @@ public class DialogueChoice
[JsonConverter(typeof(DialogueChoiceTypeConverter))] [JsonConverter(typeof(DialogueChoiceTypeConverter))]
public EDialogChoiceType Type { get; set; } public EDialogChoiceType Type { get; set; }
public string? ExcelSheet { get; set; } public string? ExcelSheet { get; set; }
public string Prompt { get; set; } = null!; public string? Prompt { get; set; } = null!;
public bool Yes { get; set; } = true; public bool Yes { get; set; } = true;
public string? Answer { get; set; } public string? Answer { get; set; }
} }

View File

@ -4,5 +4,7 @@ public enum EDialogChoiceType
{ {
None, None,
YesNo, YesNo,
List List,
ContentTalkYesNo,
ContentTalkList,
} }

View File

@ -56,14 +56,17 @@ public sealed class QuestionablePlugin : IDalamudPlugin
_questController = new QuestController(pluginInterface, dataManager, _clientState, _gameFunctions, _questController = new QuestController(pluginInterface, dataManager, _clientState, _gameFunctions,
_movementController, pluginLog, condition, chatGui, framework, gameGui, aetheryteData, lifestreamIpc); _movementController, pluginLog, condition, chatGui, framework, gameGui, aetheryteData, lifestreamIpc);
_gameUiController = _gameUiController =
new GameUiController(clientState, addonLifecycle, dataManager, _gameFunctions, _questController, pluginLog); new GameUiController(clientState, addonLifecycle, dataManager, _gameFunctions, _questController, gameGui,
pluginLog);
_windowSystem.AddWindow(new DebugWindow(_movementController, _questController, _gameFunctions, clientState, _windowSystem.AddWindow(new DebugWindow(_movementController, _questController, _gameFunctions, clientState,
targetManager)); framework, targetManager, _gameUiController));
_pluginInterface.UiBuilder.Draw += _windowSystem.Draw; _pluginInterface.UiBuilder.Draw += _windowSystem.Draw;
_framework.Update += FrameworkUpdate; _framework.Update += FrameworkUpdate;
_commandManager.AddHandler("/qst", new CommandInfo(ProcessCommand)); _commandManager.AddHandler("/qst", new CommandInfo(ProcessCommand));
_framework.RunOnTick(() => _gameUiController.HandleCurrentDialogueChoices(), TimeSpan.FromMilliseconds(200));
} }
private void FrameworkUpdate(IFramework framework) private void FrameworkUpdate(IFramework framework)

View File

@ -1,4 +1,5 @@
using System.Globalization; using System;
using System.Globalization;
using System.Numerics; using System.Numerics;
using Dalamud.Game.ClientState.Objects; using Dalamud.Game.ClientState.Objects;
using Dalamud.Interface; using Dalamud.Interface;
@ -21,18 +22,22 @@ internal sealed class DebugWindow : Window
private readonly QuestController _questController; private readonly QuestController _questController;
private readonly GameFunctions _gameFunctions; private readonly GameFunctions _gameFunctions;
private readonly IClientState _clientState; private readonly IClientState _clientState;
private readonly IFramework _framework;
private readonly ITargetManager _targetManager; private readonly ITargetManager _targetManager;
private readonly GameUiController _gameUiController;
public DebugWindow(MovementController movementController, QuestController questController, public DebugWindow(MovementController movementController, QuestController questController,
GameFunctions gameFunctions, IClientState clientState, GameFunctions gameFunctions, IClientState clientState, IFramework framework,
ITargetManager targetManager) ITargetManager targetManager, GameUiController gameUiController)
: base("Questionable", ImGuiWindowFlags.AlwaysAutoResize) : base("Questionable", ImGuiWindowFlags.AlwaysAutoResize)
{ {
_movementController = movementController; _movementController = movementController;
_questController = questController; _questController = questController;
_gameFunctions = gameFunctions; _gameFunctions = gameFunctions;
_clientState = clientState; _clientState = clientState;
_framework = framework;
_targetManager = targetManager; _targetManager = targetManager;
_gameUiController = gameUiController;
IsOpen = true; IsOpen = true;
SizeConstraints = new WindowSizeConstraints SizeConstraints = new WindowSizeConstraints
@ -230,6 +235,10 @@ internal sealed class DebugWindow : Window
ImGui.EndDisabled(); ImGui.EndDisabled();
if (ImGui.Button("Reload Data")) if (ImGui.Button("Reload Data"))
{
_questController.Reload(); _questController.Reload();
_framework.RunOnTick(() => _gameUiController.HandleCurrentDialogueChoices(),
TimeSpan.FromMilliseconds(200));
}
} }
} }