1
0
forked from liza/Questionable

Fix mount selection, make chat-messages multilingual, various path updates

This commit is contained in:
Liza 2024-06-03 14:20:02 +02:00
parent a5861b1639
commit 51e5faae69
Signed by: liza
GPG Key ID: 7199F8D727D55F67
62 changed files with 720 additions and 176 deletions

View File

@ -1,4 +1,5 @@
using System; #if RELEASE
using System;
using System.IO; using System.IO;
using System.IO.Compression; using System.IO.Compression;
@ -23,3 +24,4 @@ public static class AssemblyQuestLoader
} }
} }
} }
#endif

View File

@ -59,6 +59,14 @@
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact", "InteractionType": "Interact",
"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"
}, },
@ -71,6 +79,14 @@
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
],
"$.0": "[2]", "$.0": "[2]",
"$.2": "QuestVariables if done after [1]: 33 16 0 0 0 96", "$.2": "QuestVariables if done after [1]: 33 16 0 0 0 96",
"$.3": "QuestVariables if done after [3]: 32 17 0 0 0 160" "$.3": "QuestVariables if done after [3]: 32 17 0 0 0 160"
@ -84,6 +100,14 @@
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"$.0": 3, "$.0": 3,
"$.1": "QuestVariables if done first: 16 1 0 0 0 128" "$.1": "QuestVariables if done first: 16 1 0 0 0 128"
} }

View File

@ -20,6 +20,15 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"Position": {
"X": -588.7367,
"Y": 158.76302,
"Z": -195.30913
},
"TerritoryId": 961,
"InteractionType": "WalkTo"
},
{ {
"Position": { "Position": {
"X": -318.20203, "X": -318.20203,

View File

@ -35,7 +35,9 @@
"StopDistance": 3, "StopDistance": 3,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Say", "InteractionType": "Say",
"ChatMessage": "carrot of happiness" "ChatMessage": {
"Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
}
}, },
{ {
"DataId": 1041790, "DataId": 1041790,
@ -47,7 +49,9 @@
"StopDistance": 3, "StopDistance": 3,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Say", "InteractionType": "Say",
"ChatMessage": "carrot of happiness", "ChatMessage": {
"Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
},
"$.1": "QuestVariables if done after [1]: 2 0 0 0 0 192" "$.1": "QuestVariables if done after [1]: 2 0 0 0 0 192"
}, },
{ {
@ -65,7 +69,9 @@
"StopDistance": 3, "StopDistance": 3,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Say", "InteractionType": "Say",
"ChatMessage": "carrot of happiness" "ChatMessage": {
"Key": "TEXT_AKTKZE002_04241_SYSTEM_000_010"
}
} }
] ]
}, },

View File

@ -236,7 +236,8 @@
"Z": 4.5318604 "Z": 4.5318604
}, },
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 987
}, },
{ {
"DataId": 1038586, "DataId": 1038586,

View File

@ -28,7 +28,8 @@
"Z": 14.81335 "Z": 14.81335
}, },
"TerritoryId": 987, "TerritoryId": 987,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 962
}, },
{ {
"DataId": 185, "DataId": 185,

View File

@ -99,7 +99,8 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Old Sharlayan] The Leveilleur Estate", "[Old Sharlayan] The Leveilleur Estate",
"[Old Sharlayan] The Baldesion Annex" "[Old Sharlayan] The Baldesion Annex"
] ],
"TargetTerritoryId": 987
}, },
{ {
"DataId": 1040291, "DataId": 1040291,

View File

@ -28,7 +28,8 @@
"Z": 14.785889 "Z": 14.785889
}, },
"TerritoryId": 987, "TerritoryId": 987,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 962
}, },
{ {
"DataId": 1038592, "DataId": 1038592,

View File

@ -46,15 +46,12 @@
"InteractionType": "CutsceneSelectString", "InteractionType": "CutsceneSelectString",
"DialogueChoices": [ "DialogueChoices": [
{ {
"ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A2_000_088" "Answer": "TEXT_AKTKMA114_04370_A2_000_088"
}, },
{ {
"ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A3_000_098" "Answer": "TEXT_AKTKMA114_04370_A3_000_098"
}, },
{ {
"ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A5_000_107" "Answer": "TEXT_AKTKMA114_04370_A5_000_107"
} }
] ]
@ -75,15 +72,12 @@
"InteractionType": "CutsceneSelectString", "InteractionType": "CutsceneSelectString",
"DialogueChoices": [ "DialogueChoices": [
{ {
"ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A6_000_149" "Answer": "TEXT_AKTKMA114_04370_A6_000_149"
}, },
{ {
"ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A7_000_158" "Answer": "TEXT_AKTKMA114_04370_A7_000_158"
}, },
{ {
"ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A8_000_164" "Answer": "TEXT_AKTKMA114_04370_A8_000_164"
} }
] ]
@ -104,15 +98,12 @@
"InteractionType": "CutsceneSelectString", "InteractionType": "CutsceneSelectString",
"DialogueChoices": [ "DialogueChoices": [
{ {
"ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A9_000_200" "Answer": "TEXT_AKTKMA114_04370_A9_000_200"
}, },
{ {
"ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A10_000_209" "Answer": "TEXT_AKTKMA114_04370_A10_000_209"
}, },
{ {
"ExcelSheet": "quest/043/AktKma114_04370",
"Answer": "TEXT_AKTKMA114_04370_A11_000_218" "Answer": "TEXT_AKTKMA114_04370_A11_000_218"
} }
] ]

View File

@ -103,7 +103,8 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Old Sharlayan] Aetheryte Plaza", "[Old Sharlayan] Aetheryte Plaza",
"[Old Sharlayan] The Baldesion Annex" "[Old Sharlayan] The Baldesion Annex"
] ],
"TargetTerritoryId": 987
}, },
{ {
"DataId": 1038589, "DataId": 1038589,

View File

@ -32,7 +32,8 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Old Sharlayan] The Studium", "[Old Sharlayan] The Studium",
"[Old Sharlayan] The Baldesion Annex" "[Old Sharlayan] The Baldesion Annex"
] ],
"TargetTerritoryId": 987
}, },
{ {
"DataId": 1038784, "DataId": 1038784,

View File

@ -100,7 +100,8 @@
"Z": 4.5318604 "Z": 4.5318604
}, },
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 987
}, },
{ {
"DataId": 2012188, "DataId": 2012188,

View File

@ -29,7 +29,8 @@
"Z": 4.55803 "Z": 4.55803
}, },
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 987
} }
] ]
}, },
@ -37,6 +38,11 @@
"Sequence": 2, "Sequence": 2,
"Steps": [ "Steps": [
{ {
"Position": {
"X": 0,
"Y": 0,
"Z": 0
},
"TerritoryId": 957, "TerritoryId": 957,
"AetheryteShortcut": "Thavnair - Yedlihmad", "AetheryteShortcut": "Thavnair - Yedlihmad",
"InteractionType": "WalkTo", "InteractionType": "WalkTo",

View File

@ -126,7 +126,9 @@
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Say", "InteractionType": "Say",
"ChatMessage": "I have a favor to ask" "ChatMessage": {
"Key": "TEXT_AKTKME107_04425_SAYTODO_000_190"
}
} }
] ]
}, },
@ -142,7 +144,9 @@
}, },
"TerritoryId": 961, "TerritoryId": 961,
"InteractionType": "Say", "InteractionType": "Say",
"ChatMessage": "Please, Emet-Selch" "ChatMessage": {
"Key": "TEXT_AKTKME107_04425_SAYTODO_000_210"
}
} }
] ]
}, },

View File

@ -65,7 +65,8 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Old Sharlayan] Aetheryte Plaza", "[Old Sharlayan] Aetheryte Plaza",
"[Old Sharlayan] The Baldesion Annex" "[Old Sharlayan] The Baldesion Annex"
] ],
"TargetTerritoryId": 987
}, },
{ {
"DataId": 1040161, "DataId": 1040161,

View File

@ -49,7 +49,8 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Old Sharlayan] Aetheryte Plaza", "[Old Sharlayan] Aetheryte Plaza",
"[Old Sharlayan] The Baldesion Annex" "[Old Sharlayan] The Baldesion Annex"
] ],
"TargetTerritoryId": 987
} }
] ]
}, },
@ -64,7 +65,8 @@
"Z": 14.785889 "Z": 14.785889
}, },
"TerritoryId": 987, "TerritoryId": 987,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 962
}, },
{ {
"DataId": 1039683, "DataId": 1039683,

View File

@ -14,7 +14,8 @@
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "Interact", "InteractionType": "Interact",
"DisableNavmesh": true "DisableNavmesh": true,
"TargetTerritoryId": 351
}, },
{ {
"DataId": 1041232, "DataId": 1041232,
@ -39,7 +40,8 @@
"Z": 27.5 "Z": 27.5
}, },
"TerritoryId": 351, "TerritoryId": 351,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 156
}, },
{ {
"DataId": 1039570, "DataId": 1039570,

View File

@ -66,7 +66,15 @@
}, },
"StopDistance": 5, "StopDistance": 5,
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}, },
{ {
"DataId": 1039606, "DataId": 1039606,

View File

@ -107,10 +107,15 @@
"Y": 1.2090492, "Y": 1.2090492,
"Z": 118.133255 "Z": 118.133255
}, },
"StopDistance": 4,
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"AetheryteShortcut": "Thavnair - Palaka's Stand", "AetheryteShortcut": "Thavnair - Palaka's Stand",
"Fly": true "Fly": true,
"SkipIf": [
"FlyingLocked"
],
"Comment": "TODO Verify; there's some weird shenanigans happening with navmesh not moving to coords 'below' it"
}, },
{ {
"DataId": 2012847, "DataId": 2012847,
@ -120,7 +125,8 @@
"Z": 119.43237 "Z": 119.43237
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"Mount": false
} }
] ]
}, },

View File

@ -30,6 +30,14 @@
}, },
"TerritoryId": 1089, "TerritoryId": 1089,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"$.0": "[1]", "$.0": "[1]",
"$.1": "QuestVariables if done first: 1 0 0 0 0 128" "$.1": "QuestVariables if done first: 1 0 0 0 0 128"
}, },
@ -42,6 +50,14 @@
}, },
"TerritoryId": 1089, "TerritoryId": 1089,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
],
"$.0": "[2]", "$.0": "[2]",
"$.1": "QuestVariables if done after [1]: 2 0 0 0 0 192" "$.1": "QuestVariables if done after [1]: 2 0 0 0 0 192"
}, },
@ -54,6 +70,14 @@
}, },
"TerritoryId": 1089, "TerritoryId": 1089,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
],
"$.0": "[3]", "$.0": "[3]",
"$.1": "QuestVariables if done after [1, 2]: 3 0 0 0 0 224" "$.1": "QuestVariables if done after [1, 2]: 3 0 0 0 0 224"
}, },
@ -65,7 +89,15 @@
"Z": -49.45453 "Z": -49.45453
}, },
"TerritoryId": 1089, "TerritoryId": 1089,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
]
} }
] ]
}, },
@ -114,7 +146,7 @@
"Z": 206.78001 "Z": 206.78001
}, },
"TerritoryId": 1089, "TerritoryId": 1089,
"InteractionType": "Interact" "InteractionType": "WalkTo"
} }
] ]
}, },
@ -128,6 +160,7 @@
"Y": -718.4441, "Y": -718.4441,
"Z": 206.77502 "Z": 206.77502
}, },
"StopDistance": 5,
"TerritoryId": 1089, "TerritoryId": 1089,
"InteractionType": "Interact" "InteractionType": "Interact"
} }

View File

@ -12,7 +12,7 @@
"Y": -718.33905, "Y": -718.33905,
"Z": 207.87354 "Z": 207.87354
}, },
"StopDistance": 5, "StopDistance": 7,
"TerritoryId": 1089, "TerritoryId": 1089,
"InteractionType": "Interact" "InteractionType": "Interact"
} }

View File

@ -40,6 +40,14 @@
}, },
"TerritoryId": 1089, "TerritoryId": 1089,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
],
"$.0": "[1]", "$.0": "[1]",
"$.1": "QuestVariables if done first: 1 0 0 0 0 32" "$.1": "QuestVariables if done first: 1 0 0 0 0 32"
}, },
@ -52,6 +60,14 @@
}, },
"TerritoryId": 1089, "TerritoryId": 1089,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
],
"$.0": "[2]", "$.0": "[2]",
"$.1": "QuestVariables if done after [1]: 2 0 0 0 0 96" "$.1": "QuestVariables if done after [1]: 2 0 0 0 0 96"
}, },
@ -64,6 +80,14 @@
}, },
"TerritoryId": 1089, "TerritoryId": 1089,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"$.0": "[3]" "$.0": "[3]"
} }
] ]

View File

@ -39,6 +39,7 @@
"Y": 1.7999947, "Y": 1.7999947,
"Z": -180.07172 "Z": -180.07172
}, },
"StopDistance": 5,
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "Interact", "InteractionType": "Interact",
"AethernetShortcut": [ "AethernetShortcut": [

View File

@ -50,6 +50,14 @@
16028, 16028,
16029 16029
], ],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
],
"$.0": "[1]", "$.0": "[1]",
"$.1": "QuestVariables if done first: 16 5(enemy kill count) 0 0 0 64" "$.1": "QuestVariables if done first: 16 5(enemy kill count) 0 0 0 64"
}, },
@ -62,6 +70,14 @@
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
],
"$.0": "[2]", "$.0": "[2]",
"$.1": "QuestVariables if done after [1]: 33 5 0 0 0 96" "$.1": "QuestVariables if done after [1]: 33 5 0 0 0 96"
}, },
@ -74,6 +90,14 @@
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact", "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
],
"$.0": "[3]", "$.0": "[3]",
"$.1": "QuestVariables if done after [1, 2]: 49 21 0 0 0 112" "$.1": "QuestVariables if done after [1, 2]: 49 21 0 0 0 112"
}, },
@ -89,7 +113,16 @@
"EnemySpawnType": "AfterInteraction", "EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [ "KillEnemyDataIds": [
16030 16030
] ],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"$.2": "QuestVariables if done first: 16 0 16 0 0 128"
} }
] ]
}, },

View File

@ -12,6 +12,7 @@
"Y": -173, "Y": -173,
"Z": 126.35986 "Z": 126.35986
}, },
"StopDistance": 7,
"TerritoryId": 1119, "TerritoryId": 1119,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -122,6 +123,7 @@
"Y": -17.202883, "Y": -17.202883,
"Z": 705.0431 "Z": 705.0431
}, },
"StopDistance": 5,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact"
} }

View File

@ -12,6 +12,7 @@
"Y": -17.44166, "Y": -17.44166,
"Z": 707.3014 "Z": 707.3014
}, },
"StopDistance": 5,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -29,6 +30,7 @@
}, },
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Radz-at-Han",
"AethernetShortcut": [ "AethernetShortcut": [
"[Radz-at-Han] Aetheryte Plaza", "[Radz-at-Han] Aetheryte Plaza",
"[Radz-at-Han] Meghaduta" "[Radz-at-Han] Meghaduta"
@ -62,7 +64,16 @@
"Z": -585.1987 "Z": -585.1987
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"Fly": true,
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}, },
{ {
"DataId": 1037647, "DataId": 1037647,

View File

@ -28,7 +28,8 @@
"Z": -616.14404 "Z": -616.14404
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"Fly": true
} }
] ]
}, },
@ -43,12 +44,13 @@
"Z": -715.44977 "Z": -715.44977
}, },
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact",
"Fly": true
} }
] ]
}, },
{ {
"Sequence": 3, "Sequence": 4,
"Steps": [ "Steps": [
{ {
"TerritoryId": 1125, "TerritoryId": 1125,
@ -67,9 +69,9 @@
"Y": 89.42017, "Y": 89.42017,
"Z": -636.86584 "Z": -636.86584
}, },
"StopDistance": 5,
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact", "InteractionType": "Interact"
"Comment": "Unsure if this is the right data id"
} }
] ]
} }

View File

@ -12,6 +12,7 @@
"Y": 89.42017, "Y": 89.42017,
"Z": -636.86584 "Z": -636.86584
}, },
"StopDistance": 5,
"TerritoryId": 957, "TerritoryId": 957,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -29,6 +30,7 @@
}, },
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Radz-at-Han",
"AethernetShortcut": [ "AethernetShortcut": [
"[Radz-at-Han] Aetheryte Plaza", "[Radz-at-Han] Aetheryte Plaza",
"[Radz-at-Han] Meghaduta" "[Radz-at-Han] Meghaduta"

View File

@ -46,6 +46,7 @@
"Y": 0.59503174, "Y": 0.59503174,
"Z": -141.71057 "Z": -141.71057
}, },
"StopDistance": 5,
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -61,7 +62,8 @@
"Z": -140.01839 "Z": -140.01839
}, },
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "UseItem" "InteractionType": "UseItem",
"ItemId": 2003461
} }
] ]
}, },

View File

@ -30,8 +30,10 @@
"Y": 1.2359009, "Y": 1.2359009,
"Z": 5.9662476 "Z": 5.9662476
}, },
"StopDistance": 4,
"TerritoryId": 1161, "TerritoryId": 1161,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 963
}, },
{ {
"DataId": 1039602, "DataId": 1039602,
@ -78,6 +80,7 @@
"Y": 4.357494, "Y": 4.357494,
"Z": 0.7476196 "Z": 0.7476196
}, },
"StopDistance": 5,
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -86,6 +89,19 @@
{ {
"Sequence": 4, "Sequence": 4,
"Steps": [ "Steps": [
{
"Position": {
"X": 6.0711417,
"Y": -28.723347,
"Z": -43.467506
},
"TerritoryId": 956,
"InteractionType": "WalkTo",
"AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet",
"SkipIf": [
"FlyingUnlocked"
]
},
{ {
"DataId": 1045407, "DataId": 1045407,
"Position": { "Position": {
@ -94,7 +110,8 @@
"Z": -125.96332 "Z": -125.96332
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact",
"Fly": true
} }
] ]
}, },
@ -109,7 +126,8 @@
"Z": 54.276245 "Z": 54.276245
}, },
"TerritoryId": 956, "TerritoryId": 956,
"InteractionType": "Interact" "InteractionType": "Interact",
"Fly": true
} }
] ]
}, },
@ -123,6 +141,7 @@
"Y": -16.146997, "Y": -16.146997,
"Z": 236.22485 "Z": 236.22485
}, },
"StopDistance": 5,
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -148,6 +167,7 @@
"Y": -16.147, "Y": -16.147,
"Z": 235.70605 "Z": 235.70605
}, },
"StopDistance": 7,
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact"
} }

View File

@ -12,6 +12,7 @@
"Y": -16.147, "Y": -16.147,
"Z": 235.70605 "Z": 235.70605
}, },
"StopDistance": 7,
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -27,8 +28,10 @@
"Y": 23.803606, "Y": 23.803606,
"Z": 404.9286 "Z": 404.9286
}, },
"StopDistance": 7,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Garlemald - Camp Broken Glass"
} }
] ]
}, },
@ -43,7 +46,8 @@
"Z": -191.48547 "Z": -191.48547
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Garlemald - Tertium"
} }
] ]
}, },
@ -58,7 +62,15 @@
"Z": -156.02356 "Z": -156.02356
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}, },
{ {
"DataId": 1045491, "DataId": 1045491,
@ -68,7 +80,15 @@
"Z": -178.27118 "Z": -178.27118
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}, },
{ {
"DataId": 1037774, "DataId": 1037774,
@ -78,7 +98,15 @@
"Z": -212.14618 "Z": -212.14618
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
]
}, },
{ {
"DataId": 1045489, "DataId": 1045489,
@ -88,7 +116,15 @@
"Z": -213.18384 "Z": -213.18384
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}, },
{ {
"DataId": 1037766, "DataId": 1037766,
@ -98,7 +134,16 @@
"Z": -265.00348 "Z": -265.00348
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"Comment": "TODO Check flags",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
8
]
} }
] ]
}, },
@ -113,7 +158,8 @@
"Z": -637.56775 "Z": -637.56775
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"Fly": true
} }
] ]
} }

View File

@ -12,6 +12,7 @@
"Y": 15.5581665, "Y": 15.5581665,
"Z": -638.3002 "Z": -638.3002
}, },
"StopDistance": 5,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -28,7 +29,8 @@
"Z": -620.08093 "Z": -620.08093
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"Fly": true
} }
] ]
}, },
@ -58,7 +60,16 @@
"Z": 67.063354 "Z": 67.063354
}, },
"TerritoryId": 1160, "TerritoryId": 1160,
"InteractionType": "Interact" "InteractionType": "Interact",
"Comment": "TODO Check Flags",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}, },
{ {
"DataId": 1045493, "DataId": 1045493,
@ -68,7 +79,15 @@
"Z": 42.435303 "Z": 42.435303
}, },
"TerritoryId": 1160, "TerritoryId": 1160,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
]
}, },
{ {
"DataId": 2013350, "DataId": 2013350,
@ -78,7 +97,15 @@
"Z": 26.382812 "Z": 26.382812
}, },
"TerritoryId": 1160, "TerritoryId": 1160,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}, },
{ {
"DataId": 1045492, "DataId": 1045492,
@ -88,7 +115,15 @@
"Z": -9.353821 "Z": -9.353821
}, },
"TerritoryId": 1160, "TerritoryId": 1160,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
} }
] ]
}, },
@ -117,8 +152,10 @@
"Y": 23.803606, "Y": 23.803606,
"Z": 406.05774 "Z": 406.05774
}, },
"StopDistance": 7,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Garlemald - Camp Broken Glass"
} }
] ]
}, },
@ -133,7 +170,8 @@
"Z": -202.99078 "Z": -202.99078
}, },
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Garlemald - Tertium"
} }
] ]
} }

View File

@ -12,6 +12,7 @@
"Y": -36.65, "Y": -36.65,
"Z": -206.74457 "Z": -206.74457
}, },
"StopDistance": 7,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -26,11 +27,14 @@
"Y": 10.8, "Y": 10.8,
"Z": -663.8825 "Z": -663.8825
}, },
"StopDistance": 1,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Combat", "InteractionType": "Combat",
"EnemySpawnType": "AutoOnEnterArea",
"KillEnemyDataIds": [ "KillEnemyDataIds": [
16332 16332
] ],
"Fly": true
} }
] ]
}, },
@ -44,6 +48,7 @@
"Y": 10.8, "Y": 10.8,
"Z": -659.75433 "Z": -659.75433
}, },
"StopDistance": 7,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact"
} }

View File

@ -12,6 +12,7 @@
"Y": -36.65, "Y": -36.65,
"Z": -204.97449 "Z": -204.97449
}, },
"StopDistance": 5,
"TerritoryId": 958, "TerritoryId": 958,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -28,7 +29,9 @@
"Z": 585.1072 "Z": 585.1072
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
"Fly": true
} }
] ]
}, },
@ -43,13 +46,27 @@
"Z": 407.27856 "Z": 407.27856
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact",
"Fly": true
} }
] ]
}, },
{ {
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{
"DataId": 2012664,
"Position": {
"X": -26.901672,
"Y": -130.47992,
"Z": -580.4685
},
"TerritoryId": 959,
"InteractionType": "Interact",
"AetheryteShortcut": "Mare Lamentorum - Bestways Burrow",
"SkipIf": ["FlyingUnlocked"],
"Comment": "Check if the flying unlocked check is good enough"
},
{ {
"DataId": 1039686, "DataId": 1039686,
"Position": { "Position": {
@ -58,7 +75,8 @@
"Z": -494.31604 "Z": -494.31604
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact",
"Fly": true
} }
] ]
}, },
@ -87,9 +105,18 @@
"Y": -49.589592, "Y": -49.589592,
"Z": -626.42865 "Z": -626.42865
}, },
"StopDistance": 6,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Emote", "InteractionType": "Emote",
"Emote": "rally" "Emote": "rally",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}, },
{ {
"DataId": 1045470, "DataId": 1045470,
@ -98,20 +125,18 @@
"Y": -49.589596, "Y": -49.589596,
"Z": -622.3087 "Z": -622.3087
}, },
"StopDistance": 6,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Emote", "InteractionType": "Emote",
"Emote": "rally" "Emote": "rally",
}, "CompletionQuestVariablesFlags": [
{ null,
"DataId": 1045473, null,
"Position": { null,
"X": 152.42236, null,
"Y": -49.589592, null,
"Z": -614.8623 128
}, ]
"TerritoryId": 959,
"InteractionType": "Emote",
"Emote": "rally"
}, },
{ {
"DataId": 1045472, "DataId": 1045472,
@ -120,9 +145,39 @@
"Y": -49.589596, "Y": -49.589596,
"Z": -621.48474 "Z": -621.48474
}, },
"StopDistance": 6,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Emote", "InteractionType": "Emote",
"Emote": "rally" "Emote": "rally",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
],
"Comment": "TODO Check Flags"
},
{
"DataId": 1045473,
"Position": {
"X": 152.42236,
"Y": -49.589592,
"Z": -614.8623
},
"StopDistance": 6,
"TerritoryId": 959,
"InteractionType": "Emote",
"Emote": "rally",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
16
]
} }
] ]
}, },
@ -136,6 +191,7 @@
"Y": -49.589592, "Y": -49.589592,
"Z": -619.9894 "Z": -619.9894
}, },
"StopDistance": 6,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact"
} }

View File

@ -4,15 +4,18 @@
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"DataId": 1045611, "Steps": [
"Position": { {
"X": 160.87585, "DataId": 1045611,
"Y": -49.589592, "Position": {
"Z": -618.46344 "X": 160.87585,
}, "Y": -49.589592,
"TerritoryId": 959, "Z": -618.46344
"InteractionType": "Interact", },
"Comment": "Unsure if correct id" "TerritoryId": 959,
"InteractionType": "Interact"
}
]
}, },
{ {
"Sequence": 1, "Sequence": 1,
@ -25,7 +28,9 @@
"Z": 418.69226 "Z": 418.69226
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
"Fly": true
} }
] ]
}, },
@ -40,7 +45,16 @@
"Z": 638.0254 "Z": 638.0254
}, },
"TerritoryId": 1162, "TerritoryId": 1162,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
],
"Comment": "TODO Check Flags"
}, },
{ {
"DataId": 2013355, "DataId": 2013355,
@ -50,7 +64,15 @@
"Z": 547.6615 "Z": 547.6615
}, },
"TerritoryId": 1162, "TerritoryId": 1162,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}, },
{ {
"DataId": 2013356, "DataId": 2013356,
@ -60,7 +82,15 @@
"Z": 472.19043 "Z": 472.19043
}, },
"TerritoryId": 1162, "TerritoryId": 1162,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
} }
] ]
}, },

View File

@ -12,6 +12,7 @@
"Y": 56.573345, "Y": 56.573345,
"Z": 436.0265 "Z": 436.0265
}, },
"StopDistance": 5,
"TerritoryId": 1162, "TerritoryId": 1162,
"InteractionType": "Interact" "InteractionType": "Interact"
} }

View File

@ -12,6 +12,7 @@
"Y": 54.977272, "Y": 54.977272,
"Z": 432.02856 "Z": 432.02856
}, },
"StopDistance": 7,
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -20,6 +21,18 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"DataId": 2012664,
"Position": {
"X": -26.901672,
"Y": -130.47992,
"Z": -580.4685
},
"TerritoryId": 959,
"InteractionType": "Interact",
"AetheryteShortcut": "Mare Lamentorum - Bestways Burrow",
"SkipIf": ["FlyingUnlocked"]
},
{ {
"DataId": 1045466, "DataId": 1045466,
"Position": { "Position": {
@ -28,7 +41,8 @@
"Z": -491.99664 "Z": -491.99664
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact",
"Fly": true
} }
] ]
}, },
@ -44,6 +58,7 @@
}, },
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Radz-at-Han",
"AethernetShortcut": [ "AethernetShortcut": [
"[Radz-at-Han] Aetheryte Plaza", "[Radz-at-Han] Aetheryte Plaza",
"[Radz-at-Han] Meghaduta" "[Radz-at-Han] Meghaduta"

View File

@ -27,6 +27,7 @@
"Y": 55, "Y": 55,
"Z": -68.61987 "Z": -68.61987
}, },
"StopDistance": 5,
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
@ -44,6 +45,7 @@
}, },
"TerritoryId": 819, "TerritoryId": 819,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Crystarium",
"AethernetShortcut": [ "AethernetShortcut": [
"[Crystarium] Aetheryte Plaza", "[Crystarium] Aetheryte Plaza",
"[Crystarium] The Cabinet of Curiosity" "[Crystarium] The Cabinet of Curiosity"

View File

@ -28,7 +28,8 @@
"Z": -8.255188 "Z": -8.255188
}, },
"TerritoryId": 820, "TerritoryId": 820,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Eulmore"
} }
] ]
}, },
@ -58,7 +59,15 @@
"Z": -61.387024 "Z": -61.387024
}, },
"TerritoryId": 820, "TerritoryId": 820,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}, },
{ {
"DataId": 1045633, "DataId": 1045633,
@ -72,6 +81,14 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Eulmore] Aetheryte Plaza", "[Eulmore] Aetheryte Plaza",
"[Eulmore] The Mainstay" "[Eulmore] The Mainstay"
],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
] ]
}, },
{ {
@ -86,6 +103,14 @@
"AethernetShortcut": [ "AethernetShortcut": [
"[Eulmore] The Mainstay", "[Eulmore] The Mainstay",
"[Eulmore] Nightsoil Pots" "[Eulmore] Nightsoil Pots"
],
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
] ]
} }
] ]

View File

@ -28,7 +28,8 @@
"Z": 298.20703 "Z": 298.20703
}, },
"TerritoryId": 817, "TerritoryId": 817,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Rak'tika - Slitherbough"
} }
] ]
}, },
@ -44,7 +45,9 @@
}, },
"TerritoryId": 817, "TerritoryId": 817,
"InteractionType": "Say", "InteractionType": "Say",
"ChatMessage": "allin tuta" "ChatMessage": {
"Key": "TEXT_AKTKML103_04746_SAYTODO_000_140"
}
} }
] ]
}, },
@ -89,7 +92,8 @@
"Z": -224.5976 "Z": -224.5976
}, },
"TerritoryId": 815, "TerritoryId": 815,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Amh Araeng - Twine"
} }
] ]
}, },

View File

@ -33,12 +33,7 @@
"[Crystarium] Aetheryte Plaza", "[Crystarium] Aetheryte Plaza",
"[Crystarium] The Dossal Gate" "[Crystarium] The Dossal Gate"
] ]
} },
]
},
{
"Sequence": 2,
"Steps": [
{ {
"DataId": 1033888, "DataId": 1033888,
"Position": { "Position": {
@ -48,7 +43,12 @@
}, },
"TerritoryId": 844, "TerritoryId": 844,
"InteractionType": "Interact" "InteractionType": "Interact"
}, }
]
},
{
"Sequence": 2,
"Steps": [
{ {
"DataId": 1039645, "DataId": 1039645,
"Position": { "Position": {
@ -58,6 +58,7 @@
}, },
"TerritoryId": 963, "TerritoryId": 963,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Radz-at-Han",
"AethernetShortcut": [ "AethernetShortcut": [
"[Radz-at-Han] Aetheryte Plaza", "[Radz-at-Han] Aetheryte Plaza",
"[Radz-at-Han] Meghaduta" "[Radz-at-Han] Meghaduta"
@ -76,7 +77,9 @@
"Z": 401.26636 "Z": 401.26636
}, },
"TerritoryId": 959, "TerritoryId": 959,
"InteractionType": "Interact" "InteractionType": "Interact",
"AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum",
"Fly": true
} }
] ]
}, },

View File

@ -12,6 +12,7 @@
"Y": 56.682667, "Y": 56.682667,
"Z": 468.162 "Z": 468.162
}, },
"StopDistance": 6,
"TerritoryId": 1162, "TerritoryId": 1162,
"InteractionType": "Interact" "InteractionType": "Interact"
} }

View File

@ -126,7 +126,8 @@
"Z": 4.55803 "Z": 4.55803
}, },
"TerritoryId": 962, "TerritoryId": 962,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 987
}, },
{ {
"DataId": 2013420, "DataId": 2013420,

View File

@ -10,19 +10,19 @@
<PathMap Condition="$(SolutionDir) != ''">$(SolutionDir)=X:\</PathMap> <PathMap Condition="$(SolutionDir) != ''">$(SolutionDir)=X:\</PathMap>
</PropertyGroup> </PropertyGroup>
<Target Name="ZipShadowbringers" BeforeTargets="BeforeResGen"> <Target Name="ZipShadowbringers" BeforeTargets="BeforeResGen" Condition="'$(Configuration)' == 'Release'">
<ZipDirectory SourceDirectory="$(ProjectDir)\Shadowbringers" <ZipDirectory SourceDirectory="$(ProjectDir)\Shadowbringers"
DestinationFile="$(TargetDir)\Shadowbringers.zip" DestinationFile="$(TargetDir)\Shadowbringers.zip"
Overwrite="true"/> Overwrite="true"/>
</Target> </Target>
<Target Name="ZipEndwalker" BeforeTargets="BeforeResGen"> <Target Name="ZipEndwalker" BeforeTargets="BeforeResGen" Condition="'$(Configuration)' == 'Release'">
<ZipDirectory SourceDirectory="$(ProjectDir)\Endwalker" <ZipDirectory SourceDirectory="$(ProjectDir)\Endwalker"
DestinationFile="$(TargetDir)\Endwalker.zip" DestinationFile="$(TargetDir)\Endwalker.zip"
Overwrite="true"/> Overwrite="true"/>
</Target> </Target>
<ItemGroup> <ItemGroup Condition="'$(Configuration)' == 'Release'">
<EmbeddedResource Include="$(TargetDir)\Shadowbringers.zip"/> <EmbeddedResource Include="$(TargetDir)\Shadowbringers.zip"/>
<EmbeddedResource Include="$(TargetDir)\Endwalker.zip"/> <EmbeddedResource Include="$(TargetDir)\Endwalker.zip"/>
</ItemGroup> </ItemGroup>

View File

@ -50,7 +50,8 @@
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Mor Dhona" "AetheryteShortcut": "Mor Dhona",
"TargetTerritoryId": 351
}, },
{ {
"DataId": 1031257, "DataId": 1031257,

View File

@ -28,7 +28,8 @@
"Z": 27.5 "Z": 27.5
}, },
"TerritoryId": 351, "TerritoryId": 351,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 156
}, },
{ {
"Position": { "Position": {
@ -73,7 +74,8 @@
"Z": -631.281 "Z": -631.281
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 351
}, },
{ {
"DataId": 1032081, "DataId": 1032081,

View File

@ -59,7 +59,8 @@
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Mor Dhona" "AetheryteShortcut": "Mor Dhona",
"TargetTerritoryId": 351
}, },
{ {
"DataId": 1032081, "DataId": 1032081,

View File

@ -45,7 +45,8 @@
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Mor Dhona" "AetheryteShortcut": "Mor Dhona",
"TargetTerritoryId": 351
}, },
{ {
"DataId": 1032081, "DataId": 1032081,

View File

@ -28,7 +28,8 @@
"Z": 27.5 "Z": 27.5
}, },
"TerritoryId": 351, "TerritoryId": 351,
"InteractionType": "Interact" "InteractionType": "Interact",
"TargetTerritoryId": 156
}, },
{ {
"Position": { "Position": {

View File

@ -29,7 +29,8 @@
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Mor Dhona" "AetheryteShortcut": "Mor Dhona",
"TargetTerritoryId": 351
}, },
{ {
"DataId": 1035355, "DataId": 1035355,

View File

@ -62,7 +62,8 @@
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Mor Dhona" "AetheryteShortcut": "Mor Dhona",
"TargetTerritoryId": 351
}, },
{ {
"DataId": 1032694, "DataId": 1032694,

View File

@ -79,7 +79,8 @@
}, },
"TerritoryId": 156, "TerritoryId": 156,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Mor Dhona" "AetheryteShortcut": "Mor Dhona",
"TargetTerritoryId": 351
} }
] ]
}, },

View File

@ -348,7 +348,9 @@
"type": "string", "type": "string",
"enum": [ "enum": [
"Never", "Never",
"FlyingUnlocked" "FlyingLocked",
"FlyingUnlocked",
"DifferentTerritory"
] ]
} }
}, },
@ -563,12 +565,22 @@
"then": { "then": {
"properties": { "properties": {
"ChatMessage": { "ChatMessage": {
"type": "string", "type": "object",
"description": "The text to use with /say" "description": "The text to use with /say",
"properties": {
"ExcelSheet": {
"type": "string"
},
"Key": {
"type": "string"
}
},
"required": [
"Key"
]
} }
}, },
"required": [ "required": [
"Position",
"ChatMessage" "ChatMessage"
] ]
} }
@ -655,7 +667,6 @@
} }
}, },
"required": [ "required": [
"ExcelSheet",
"Answer" "Answer"
] ]
} }

View File

@ -167,6 +167,8 @@ internal sealed class MovementController : IDisposable
public void NavigateTo(EMovementType type, uint? dataId, Vector3 to, bool fly, bool sprint, float? stopDistance = null) public void NavigateTo(EMovementType type, uint? dataId, Vector3 to, bool fly, bool sprint, float? stopDistance = null)
{ {
PrepareNavigation(type, dataId, to, fly, sprint, stopDistance); PrepareNavigation(type, dataId, to, fly, sprint, stopDistance);
_pluginLog.Information($"Pathfinding to {Destination}");
_cancellationTokenSource = new(); _cancellationTokenSource = new();
_cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(10)); _cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(10));
_pathfindTask = _pathfindTask =
@ -176,6 +178,8 @@ 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)
{ {
PrepareNavigation(type, dataId, to.Last(), fly, sprint, stopDistance); PrepareNavigation(type, dataId, to.Last(), fly, sprint, stopDistance);
_pluginLog.Information($"Moving to {Destination}");
_navmeshIpc.MoveTo(to); _navmeshIpc.MoveTo(to);
} }

View File

@ -1,9 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Linq;
using System.Numerics; using System.Numerics;
using System.Text.Json; using System.Text.Json;
using Dalamud.Game.ClientState.Conditions; using Dalamud.Game.ClientState.Conditions;
@ -14,7 +12,6 @@ using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game;
using FFXIVClientStructs.FFXIV.Client.UI; using FFXIVClientStructs.FFXIV.Client.UI;
using LLib.GameUI; using LLib.GameUI;
using Lumina.Excel.CustomSheets;
using Questionable.Data; using Questionable.Data;
using Questionable.External; using Questionable.External;
using Questionable.Model; using Questionable.Model;
@ -251,10 +248,12 @@ internal sealed class QuestController
public void IncreaseStepCount() public void IncreaseStepCount()
{ {
(QuestSequence? seq, QuestStep? step) = GetNextStep(); (QuestSequence? seq, QuestStep? step) = GetNextStep();
if (seq == null || step == null) if (CurrentQuest == null || seq == null || step == null)
{
_pluginLog.Warning("Unable to retrieve next quest step, not increasing step count");
return; return;
}
Debug.Assert(CurrentQuest != null, nameof(CurrentQuest) + " != null");
if (CurrentQuest.Step + 1 < seq.Steps.Count) if (CurrentQuest.Step + 1 < seq.Steps.Count)
{ {
CurrentQuest = CurrentQuest with CurrentQuest = CurrentQuest with
@ -276,10 +275,12 @@ internal sealed class QuestController
public unsafe void ExecuteNextStep() public unsafe void ExecuteNextStep()
{ {
(QuestSequence? seq, QuestStep? step) = GetNextStep(); (QuestSequence? seq, QuestStep? step) = GetNextStep();
if (seq == null || step == null) if (CurrentQuest == null || seq == null || step == null)
{
_pluginLog.Warning("Could not retrieve next quest step, not doing anything");
return; return;
}
Debug.Assert(CurrentQuest != null, nameof(CurrentQuest) + " != null");
if (step.Disabled) if (step.Disabled)
{ {
_pluginLog.Information("Skipping step, as it is disabled"); _pluginLog.Information("Skipping step, as it is disabled");
@ -299,12 +300,14 @@ internal sealed class QuestController
(_aetheryteData.CalculateDistance(pos, territoryType, step.AethernetShortcut.From) < 20 || (_aetheryteData.CalculateDistance(pos, territoryType, step.AethernetShortcut.From) < 20 ||
_aetheryteData.CalculateDistance(pos, territoryType, step.AethernetShortcut.To) < 20))) _aetheryteData.CalculateDistance(pos, territoryType, step.AethernetShortcut.To) < 20)))
{ {
_pluginLog.Information("Skipping aetheryte teleport");
skipTeleport = true; skipTeleport = true;
} }
} }
if (skipTeleport) if (skipTeleport)
{ {
_pluginLog.Information("Marking aetheryte shortcut as used");
CurrentQuest = CurrentQuest with CurrentQuest = CurrentQuest with
{ {
StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true } StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true }
@ -312,20 +315,24 @@ internal sealed class QuestController
} }
else else
{ {
if (step.AetheryteShortcut != null) if (!_gameFunctions.IsAetheryteUnlocked(step.AetheryteShortcut.Value))
{ {
if (!_gameFunctions.IsAetheryteUnlocked(step.AetheryteShortcut.Value)) _pluginLog.Error($"Aetheryte {step.AetheryteShortcut.Value} is not unlocked.");
_chatGui.Print($"[Questionable] Aetheryte {step.AetheryteShortcut.Value} is not unlocked."); _chatGui.Print($"[Questionable] Aetheryte {step.AetheryteShortcut.Value} is not unlocked.");
else if (_gameFunctions.TeleportAetheryte(step.AetheryteShortcut.Value)) }
CurrentQuest = CurrentQuest with else if (_gameFunctions.TeleportAetheryte(step.AetheryteShortcut.Value))
{ {
StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true } _pluginLog.Information("Travelling via aetheryte...");
}; CurrentQuest = CurrentQuest with
else {
_chatGui.Print("[Questionable] Unable to teleport to aetheryte."); StepProgress = CurrentQuest.StepProgress with { AetheryteShortcutUsed = true }
};
} }
else else
_chatGui.Print("[Questionable] No aetheryte for teleport set."); {
_pluginLog.Warning("Unable to teleport to aetheryte");
_chatGui.Print("[Questionable] Unable to teleport to aetheryte.");
}
return; return;
} }
@ -343,6 +350,14 @@ internal sealed class QuestController
return; return;
} }
if (step.SkipIf.Contains(ESkipCondition.FlyingLocked) &&
!_gameFunctions.IsFlyingUnlocked(step.TerritoryId))
{
_pluginLog.Information("Skipping step, as flying is locked");
IncreaseStepCount();
return;
}
if (step is if (step is
{ {
DataId: not null, DataId: not null,
@ -372,10 +387,9 @@ internal sealed class QuestController
} }
} }
if (!CurrentQuest.StepProgress.AethernetShortcutUsed) if (!CurrentQuest.StepProgress.AethernetShortcutUsed && step.AethernetShortcut != null)
{ {
if (step.AethernetShortcut != null && if (_gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.From) &&
_gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.From) &&
_gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.To)) _gameFunctions.IsAetheryteUnlocked(step.AethernetShortcut.To))
{ {
EAetheryteLocation from = step.AethernetShortcut.From; EAetheryteLocation from = step.AethernetShortcut.From;
@ -389,6 +403,7 @@ internal sealed class QuestController
{ {
if (_aetheryteData.CalculateDistance(playerPosition, territoryType, from) < 11) if (_aetheryteData.CalculateDistance(playerPosition, territoryType, from) < 11)
{ {
_pluginLog.Information($"Using lifestream to teleport to {to}");
_lifestreamIpc.Teleport(to); _lifestreamIpc.Teleport(to);
CurrentQuest = CurrentQuest with CurrentQuest = CurrentQuest with
{ {
@ -396,22 +411,31 @@ internal sealed class QuestController
}; };
} }
else else
{
_pluginLog.Information("Moving to aethernet shortcut");
_movementController.NavigateTo(EMovementType.Quest, (uint)from, _aetheryteData.Locations[from], _movementController.NavigateTo(EMovementType.Quest, (uint)from, _aetheryteData.Locations[from],
false, true, false, true,
AetheryteConverter.IsLargeAetheryte(from) ? 10.9f : 6.9f); AetheryteConverter.IsLargeAetheryte(from) ? 10.9f : 6.9f);
}
return; return;
} }
} }
else
_pluginLog.Warning($"Aethernet shortcut not unlocked (from: {step.AethernetShortcut.From}, to: {step.AethernetShortcut.To}), walking manually");
} }
if (step.TargetTerritoryId == _clientState.TerritoryType) if (step.TargetTerritoryId == _clientState.TerritoryType && !step.SkipIf.Contains(ESkipCondition.Never))
{ {
_pluginLog.Information("Zone transition, skipping movement"); // we assume whatever e.g. interaction, walkto etc. we have will trigger the zone transition
_pluginLog.Information("Zone transition, skipping rest of step");
IncreaseStepCount();
return;
} }
else if (step.InteractionType == EInteractionType.Jump && step.JumpDestination != null &&
(_clientState.LocalPlayer!.Position - step.JumpDestination.Position).Length() <= if (step.InteractionType == EInteractionType.Jump && step.JumpDestination != null &&
(step.JumpDestination.StopDistance ?? 1f)) (_clientState.LocalPlayer!.Position - step.JumpDestination.Position).Length() <=
(step.JumpDestination.StopDistance ?? 1f))
{ {
_pluginLog.Information("We're at the jump destination, skipping movement"); _pluginLog.Information("We're at the jump destination, skipping movement");
} }
@ -433,16 +457,17 @@ internal sealed class QuestController
if (step.Mount == true && !_gameFunctions.HasStatusPreventingSprintOrMount()) if (step.Mount == true && !_gameFunctions.HasStatusPreventingSprintOrMount())
{ {
_pluginLog.Information("Step explicitly wants a mount, trying to mount...");
if (!_condition[ConditionFlag.Mounted] && !_condition[ConditionFlag.InCombat] && if (!_condition[ConditionFlag.Mounted] && !_condition[ConditionFlag.InCombat] &&
_territoryData.CanUseMount(_clientState.TerritoryType)) _territoryData.CanUseMount(_clientState.TerritoryType))
{ {
if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0) _gameFunctions.Mount();
ActionManager.Instance()->UseAction(ActionType.Mount, 71);
return; return;
} }
} }
else if (step.Mount == false) else if (step.Mount == false)
{ {
_pluginLog.Information("Step explicitly wants no mount, trying to unmount...");
if (_condition[ConditionFlag.Mounted]) if (_condition[ConditionFlag.Mounted])
{ {
_gameFunctions.Unmount(); _gameFunctions.Unmount();
@ -456,9 +481,7 @@ internal sealed class QuestController
!_condition[ConditionFlag.InCombat] && _territoryData.CanUseMount(_clientState.TerritoryType) && !_condition[ConditionFlag.InCombat] && _territoryData.CanUseMount(_clientState.TerritoryType) &&
!_gameFunctions.HasStatusPreventingSprintOrMount()) !_gameFunctions.HasStatusPreventingSprintOrMount())
{ {
if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0) _gameFunctions.Mount();
ActionManager.Instance()->UseAction(ActionType.Mount, 71);
return; return;
} }
@ -495,10 +518,12 @@ internal sealed class QuestController
if (gameObject == null || if (gameObject == null ||
(gameObject.Position - _clientState.LocalPlayer!.Position).Length() > step.StopDistance) (gameObject.Position - _clientState.LocalPlayer!.Position).Length() > step.StopDistance)
{ {
_pluginLog.Warning("Object not found or too far away, no position so we can't move");
return; return;
} }
} }
_pluginLog.Information($"Running logic for {step.InteractionType}");
switch (step.InteractionType) switch (step.InteractionType)
{ {
case EInteractionType.Interact: case EInteractionType.Interact:
@ -506,7 +531,10 @@ internal sealed class QuestController
{ {
GameObject? gameObject = _gameFunctions.FindObjectByDataId(step.DataId.Value); GameObject? gameObject = _gameFunctions.FindObjectByDataId(step.DataId.Value);
if (gameObject == null) if (gameObject == null)
{
_pluginLog.Warning($"No game object with dataId {step.DataId}");
return; return;
}
if (!gameObject.IsTargetable && _condition[ConditionFlag.Mounted]) if (!gameObject.IsTargetable && _condition[ConditionFlag.Mounted])
{ {
@ -623,9 +651,14 @@ internal sealed class QuestController
return; return;
} }
if (!string.IsNullOrEmpty(step.ChatMessage)) if (step.ChatMessage != null)
{ {
_gameFunctions.ExecuteCommand($"/say {step.ChatMessage}"); string? excelString = _gameFunctions.GetExcelString(CurrentQuest.Quest, step.ChatMessage.ExcelSheet,
step.ChatMessage.Key);
if (excelString == null)
return;
_gameFunctions.ExecuteCommand($"/say {excelString}");
IncreaseStepCount(); IncreaseStepCount();
} }
@ -686,23 +719,10 @@ internal sealed class QuestController
{ {
foreach (DialogueChoice dialogueChoice in step.DialogueChoices) foreach (DialogueChoice dialogueChoice in step.DialogueChoices)
{ {
var excelSheet = _dataManager.Excel.GetSheet<QuestDialogueText>(dialogueChoice.ExcelSheet); string? excelString = _gameFunctions.GetExcelString(CurrentQuest.Quest,
if (excelSheet == null) dialogueChoice.ExcelSheet, dialogueChoice.Answer);
{
_pluginLog.Error($"Unknown excel sheet '{dialogueChoice.ExcelSheet}'");
continue;
}
string? excelString = excelSheet
.FirstOrDefault(x => x.Key == dialogueChoice.Answer)
?.Value
?.ToString();
if (excelString == null) if (excelString == null)
{
_pluginLog.Error(
$"Could not extract '{dialogueChoice.Answer}' from sheet '{dialogueChoice.ExcelSheet}'");
return; return;
}
_pluginLog.Verbose($"Looking for option '{excelString}'"); _pluginLog.Verbose($"Looking for option '{excelString}'");
for (int i = 5; i < addon->AtkUnitBase.AtkValuesCount; ++i) for (int i = 5; i < addon->AtkUnitBase.AtkValuesCount; ++i)

View File

@ -9,7 +9,6 @@ using System.Text;
using Dalamud.Game; 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.Game.ClientState.Objects.Types;
using Dalamud.Plugin.Services; using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions; using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game;
@ -20,11 +19,13 @@ using FFXIVClientStructs.FFXIV.Client.System.Framework;
using FFXIVClientStructs.FFXIV.Client.System.Memory; using FFXIVClientStructs.FFXIV.Client.System.Memory;
using FFXIVClientStructs.FFXIV.Client.System.String; using FFXIVClientStructs.FFXIV.Client.System.String;
using FFXIVClientStructs.FFXIV.Client.UI.Agent; using FFXIVClientStructs.FFXIV.Client.UI.Agent;
using Lumina.Excel.CustomSheets;
using Lumina.Excel.GeneratedSheets; using Lumina.Excel.GeneratedSheets;
using Questionable.Controller; using Questionable.Controller;
using Questionable.Model.V1; using Questionable.Model.V1;
using BattleChara = FFXIVClientStructs.FFXIV.Client.Game.Character.BattleChara; using BattleChara = FFXIVClientStructs.FFXIV.Client.Game.Character.BattleChara;
using GameObject = Dalamud.Game.ClientState.Objects.Types.GameObject; using GameObject = Dalamud.Game.ClientState.Objects.Types.GameObject;
using Quest = Questionable.Model.Quest;
namespace Questionable; namespace Questionable;
@ -44,6 +45,7 @@ internal sealed unsafe class GameFunctions
private readonly ReadOnlyDictionary<EEmote, string> _emoteCommands; private readonly ReadOnlyDictionary<EEmote, string> _emoteCommands;
private readonly ReadOnlyDictionary<uint, ushort> _contentFinderConditionToContentId; private readonly ReadOnlyDictionary<uint, ushort> _contentFinderConditionToContentId;
private readonly IDataManager _dataManager;
private readonly IObjectTable _objectTable; private readonly IObjectTable _objectTable;
private readonly ITargetManager _targetManager; private readonly ITargetManager _targetManager;
private readonly ICondition _condition; private readonly ICondition _condition;
@ -53,6 +55,7 @@ internal sealed unsafe class GameFunctions
public GameFunctions(IDataManager dataManager, IObjectTable objectTable, ISigScanner sigScanner, public GameFunctions(IDataManager dataManager, IObjectTable objectTable, ISigScanner sigScanner,
ITargetManager targetManager, ICondition condition, IClientState clientState, IPluginLog pluginLog) ITargetManager targetManager, ICondition condition, IClientState clientState, IPluginLog pluginLog)
{ {
_dataManager = dataManager;
_objectTable = objectTable; _objectTable = objectTable;
_targetManager = targetManager; _targetManager = targetManager;
_condition = condition; _condition = condition;
@ -399,6 +402,11 @@ internal sealed unsafe class GameFunctions
if (_condition[ConditionFlag.Swimming] && !IsFlyingUnlocked(_clientState.TerritoryType)) if (_condition[ConditionFlag.Swimming] && !IsFlyingUnlocked(_clientState.TerritoryType))
return true; return true;
// company chocobo is locked
var playerState = PlayerState.Instance();
if (playerState != null && !playerState->IsMountUnlocked(1))
return true;
var gameObject = GameObjectManager.GetGameObjectByIndex(0); var gameObject = GameObjectManager.GetGameObjectByIndex(0);
if (gameObject != null && gameObject->ObjectKind == 1) if (gameObject != null && gameObject->ObjectKind == 1)
{ {
@ -410,12 +418,41 @@ internal sealed unsafe class GameFunctions
return false; return false;
} }
public void Mount()
{
if (!_condition[ConditionFlag.Mounted])
{
var playerState = PlayerState.Instance();
if (playerState != null && playerState->IsMountUnlocked(71))
{
if (ActionManager.Instance()->GetActionStatus(ActionType.Mount, 71) == 0)
{
_pluginLog.Information("Using SDS Fenrir as mount");
ActionManager.Instance()->UseAction(ActionType.Mount, 71);
}
}
else
{
if (ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 9) == 0)
{
_pluginLog.Information("Using mount roulette");
ActionManager.Instance()->UseAction(ActionType.GeneralAction, 9);
}
}
}
}
public bool Unmount() public bool Unmount()
{ {
if (_condition[ConditionFlag.Mounted]) if (_condition[ConditionFlag.Mounted])
{ {
if (ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 23) == 0) if (ActionManager.Instance()->GetActionStatus(ActionType.GeneralAction, 23) == 0)
{
_pluginLog.Information("Unmounting...");
ActionManager.Instance()->UseAction(ActionType.GeneralAction, 23); ActionManager.Instance()->UseAction(ActionType.GeneralAction, 23);
}
else
_pluginLog.Warning("Can't unmount right now?");
return true; return true;
} }
@ -430,9 +467,38 @@ internal sealed unsafe class GameFunctions
if (UIState.IsInstanceContentUnlocked(contentId)) if (UIState.IsInstanceContentUnlocked(contentId))
AgentContentsFinder.Instance()->OpenRegularDuty(contentFinderConditionId); AgentContentsFinder.Instance()->OpenRegularDuty(contentFinderConditionId);
else else
_pluginLog.Error($"Trying to access a locked duty (cf: {contentFinderConditionId}, content: {contentId})"); _pluginLog.Error(
$"Trying to access a locked duty (cf: {contentFinderConditionId}, content: {contentId})");
} }
else else
_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 currentQuestQuest, string? excelSheetName, string key)
{
if (excelSheetName == null)
{
string questPrefix = $"quest/{(currentQuestQuest.QuestId / 100):000}/";
string questSuffix = $"_{currentQuestQuest.QuestId:00000}";
excelSheetName = _dataManager.Excel
.GetSheetNames()
.SingleOrDefault(x =>
x.StartsWith(questPrefix, StringComparison.Ordinal) &&
x.EndsWith(questSuffix, StringComparison.Ordinal));
if (excelSheetName == null)
{
_pluginLog.Error($"Could not find sheet matching '{questPrefix}*{questSuffix}");
return null;
}
}
var excelSheet = _dataManager.Excel.GetSheet<QuestDialogueText>(excelSheetName);
if (excelSheet == null)
{
_pluginLog.Error($"Unknown excel sheet '{excelSheetName}'");
return null;
}
return excelSheet.FirstOrDefault(x => x.Key == key)?.Value?.ToString();
}
} }

View File

@ -0,0 +1,7 @@
namespace Questionable.Model.V1;
public sealed class ChatMessage
{
public string? ExcelSheet { get; set; }
public string Key { get; set; } = null!;
}

View File

@ -7,6 +7,7 @@ public sealed class SkipConditionConverter() : EnumConverter<ESkipCondition>(Val
private static readonly Dictionary<ESkipCondition, string> Values = new() private static readonly Dictionary<ESkipCondition, string> Values = new()
{ {
{ ESkipCondition.Never, "Never" }, { ESkipCondition.Never, "Never" },
{ ESkipCondition.FlyingLocked, "FlyingLocked" },
{ ESkipCondition.FlyingUnlocked, "FlyingUnlocked" }, { ESkipCondition.FlyingUnlocked, "FlyingUnlocked" },
}; };
} }

View File

@ -2,6 +2,6 @@
public sealed class DialogueChoice public sealed class DialogueChoice
{ {
public string ExcelSheet { get; set; } = null!; public string? ExcelSheet { get; set; }
public string Answer { get; set; } = null!; public string Answer { get; set; } = null!;
} }

View File

@ -8,5 +8,6 @@ public enum ESkipCondition
{ {
None, None,
Never, Never,
FlyingLocked,
FlyingUnlocked, FlyingUnlocked,
} }

View File

@ -35,7 +35,7 @@ public class QuestStep
public bool? GroundTarget { get; set; } public bool? GroundTarget { get; set; }
public EEmote? Emote { get; set; } public EEmote? Emote { get; set; }
public string? ChatMessage { get; set; } public ChatMessage? ChatMessage { get; set; }
public EEnemySpawnType? EnemySpawnType { get; set; } public EEnemySpawnType? EnemySpawnType { get; set; }

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework> <TargetFramework>net8.0-windows</TargetFramework>
<Version>0.1</Version> <Version>0.2</Version>
<LangVersion>12</LangVersion> <LangVersion>12</LangVersion>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>