Compare commits

..

19 Commits

Author SHA1 Message Date
FalconTaterz f4d2a8ed95 Schema validation for single interaction complete 2024-08-25 15:38:21 -05:00
FalconTaterz a0a8449920 More QA fixes 2024-08-25 15:38:21 -05:00
FalconTaterz f330db1642 QA fixes 2024-08-25 15:38:21 -05:00
FalconTaterz c96844e8c2 Fix filename 2024-08-25 15:38:21 -05:00
FalconTaterz 5d6b6b4d37 Fix CompleteQuest sequence numbers 2024-08-25 15:38:21 -05:00
FalconTaterz add73f3309 Fix enemy interaction 2024-08-25 15:38:21 -05:00
FalconTaterz aa1dfcf8f5 Implement dialogue from Godbert 2024-08-25 15:38:21 -05:00
FalconTaterz 4771e9beac Move to Hildibrand folder path 2024-08-25 15:38:21 -05:00
FalconTaterz 354df816cb Add manderville questlines up to 8-armed 2024-08-25 15:38:21 -05:00
Liza 15c97d55f7
Minor starting quest adjustments 2024-08-25 19:23:29 +02:00
Liza 6eddca6931
Pick up DT aether current quests (first four zones) during the MSQ 2024-08-25 19:23:15 +02:00
Liza 0ac2fae4b9
Add default combat delay to all non-overworld enemy encounters 2024-08-25 16:51:52 +02:00
Liza ca4bc07eeb
Allow weekly delivery turn-in while in duty queue 2024-08-25 16:01:02 +02:00
Liza d310c9ff1b
Handle quests that are unlocked when a previous quest isn't complete yet 2024-08-25 14:45:08 +02:00
Liza abee323d2b
Add IsUnmounting condition to UnmountTask 2024-08-25 13:45:57 +02:00
Liza cfce2591db
Add missing dialogue option for 'Sustenance for the Soul' 2024-08-25 11:15:05 +02:00
Liza b4a649189a
Add quest priority window 2024-08-25 01:30:42 +02:00
Liza 581976b06b
Minor adjustments to unlock quests 2024-08-25 01:27:41 +02:00
Liza 4ca4e38af7
Make allied society quests non-interruptible 2024-08-25 00:49:53 +02:00
86 changed files with 2897 additions and 1747 deletions

View File

@ -128,6 +128,10 @@ internal static class SkipConditionsExtensions
skipAetheryteCondition.InSameTerritory, emptyAetheryte.InSameTerritory), skipAetheryteCondition.InSameTerritory, emptyAetheryte.InSameTerritory),
AssignmentList(nameof(SkipAetheryteCondition.InTerritory), AssignmentList(nameof(SkipAetheryteCondition.InTerritory),
skipAetheryteCondition.InTerritory), skipAetheryteCondition.InTerritory),
AssignmentList(nameof(SkipAetheryteCondition.QuestsAccepted),
skipAetheryteCondition.QuestsAccepted),
AssignmentList(nameof(skipAetheryteCondition.QuestsCompleted),
skipAetheryteCondition.QuestsCompleted),
Assignment(nameof(SkipAetheryteCondition.AetheryteLocked), Assignment(nameof(SkipAetheryteCondition.AetheryteLocked),
skipAetheryteCondition.AetheryteLocked, emptyAetheryte.AetheryteLocked) skipAetheryteCondition.AetheryteLocked, emptyAetheryte.AetheryteLocked)
.AsSyntaxNodeOrToken(), .AsSyntaxNodeOrToken(),

View File

@ -1,21 +1,24 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1002281, {
"Position": { "DataId": 1002281,
"X": -115.739685, "Position": {
"Y": 41.600117, "X": -115.739685,
"Z": 118.88306 "Y": 41.600117,
}, "Z": 118.88306
"TerritoryId": 131, },
"InteractionType": "Interact", "TerritoryId": 131,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": ["[Ul'dah] Aetheryte Plaza", "AethernetShortcut": [
"[Ul'dah] Alchemists' Guild"], "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Alchemists' Guild"
],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
@ -30,9 +33,9 @@
"Prompt": "TEXT_CLSALC001_00190_Q1_1", "Prompt": "TEXT_CLSALC001_00190_Q1_1",
"Yes": true "Yes": true
} }
]} ]
] }
} ]
] }
} ]
}

View File

@ -1,42 +1,43 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1002281, {
"Position": { "DataId": 1002281,
"X": -115.739685, "Position": {
"Y": 41.600117, "X": -115.739685,
"Z": 118.88306 "Y": 41.600117,
}, "Z": 118.88306
"TerritoryId": 131, },
"InteractionType": "AcceptQuest"} "TerritoryId": 131,
] "InteractionType": "AcceptQuest"
}, }
{ ]
"Sequence": 255, },
"Steps": [ {
{ "DataId": 1002299, "Sequence": 255,
"Position": { "Steps": [
"X": -98.8938, {
"Y": 40.200146, "DataId": 1002299,
"Z": 120.83618 "Position": {
}, "X": -98.8938,
"TerritoryId": 131, "Y": 40.200146,
"InteractionType": "CompleteQuest", "Z": 120.83618
"DialogueChoices": [ },
{ "TerritoryId": 131,
"Type": "YesNo", "InteractionType": "CompleteQuest",
"Prompt": "TEXT_CLSALC011_00575_Q1_1", "DialogueChoices": [
"Yes": true {
} "Type": "YesNo",
], "Prompt": "TEXT_CLSALC011_00575_Q1_1",
"NextQuestId": 575 "Yes": true
} }
] ]
} }
] ]
} }
]
}

View File

@ -1,18 +1,19 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000998, {
"Position": { "DataId": 1000998,
"X": -51.651794, "Position": {
"Y": 42.79979, "X": -51.651794,
"Z": 190.41736 "Y": 42.79979,
}, "Z": 190.41736
"TerritoryId": 128, },
"InteractionType": "Interact", "TerritoryId": 128,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Limsa Lominsa", "AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [ "AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza", "[Limsa Lominsa] Aetheryte Plaza",
@ -22,7 +23,7 @@
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
129 128
] ]
} }
}, },
@ -32,9 +33,9 @@
"Prompt": "TEXT_CLSARM001_00186_Q1_000_1", "Prompt": "TEXT_CLSARM001_00186_Q1_000_1",
"Yes": true "Yes": true
} }
]} ]
] }
} ]
] }
} ]
}

View File

@ -1,42 +1,43 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000998, {
"Position": { "DataId": 1000998,
"X": -51.651794, "Position": {
"Y": 42.79979, "X": -51.651794,
"Z": 190.41736 "Y": 42.79979,
}, "Z": 190.41736
"TerritoryId": 128, },
"InteractionType": "AcceptQuest"} "TerritoryId": 128,
] "InteractionType": "AcceptQuest"
}, }
{ ]
"Sequence": 255, },
"Steps": [ {
{ "DataId": 1001000, "Sequence": 255,
"Position": { "Steps": [
"X": -32.028687, {
"Y": 41.499985, "DataId": 1001000,
"Z": 208.39233 "Position": {
}, "X": -32.028687,
"TerritoryId": 128, "Y": 41.499985,
"InteractionType": "CompleteQuest", "Z": 208.39233
"DialogueChoices": [ },
{ "TerritoryId": 128,
"Type": "YesNo", "InteractionType": "CompleteQuest",
"Prompt": "TEXT_CLSARM011_00273_Q1_000_1", "DialogueChoices": [
"Yes": true {
} "Type": "YesNo",
], "Prompt": "TEXT_CLSARM011_00273_Q1_000_1",
"NextQuestId": 273 "Yes": true
} }
] ]
} }
] ]
} }
]
}

View File

@ -1,27 +1,27 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1002279, {
"Position": { "DataId": 1002279,
"X": -196.8872, "Position": {
"Y": 18.459997, "X": -196.8872,
"Z": 59.952637 "Y": 18.459997,
}, "Z": 59.952637
"TerritoryId": 130, },
"InteractionType": "Interact", "TerritoryId": 130,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": ["[Ul'dah] Aetheryte Plaza", "AethernetShortcut": [
"[Ul'dah] Thaumaturges' Guild"], "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Thaumaturges' Guild"
],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true
"InTerritory": [
130
]
} }
}, },
"DialogueChoices": [ "DialogueChoices": [
@ -30,9 +30,9 @@
"Prompt": "TEXT_CLSTHM001_00183_Q1_000_1", "Prompt": "TEXT_CLSTHM001_00183_Q1_000_1",
"Yes": true "Yes": true
} }
]} ]
] }
} ]
] }
} ]
}

View File

@ -1,42 +1,44 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1002279, {
"Position": { "DataId": 1002279,
"X": -196.8872, "Position": {
"Y": 18.459997, "X": -196.8872,
"Z": 59.952637 "Y": 18.459997,
}, "Z": 59.952637
"TerritoryId": 130, },
"InteractionType": "AcceptQuest"} "TerritoryId": 130,
] "InteractionType": "AcceptQuest"
}, }
{ ]
"Sequence": 255, },
"Steps": [ {
{ "DataId": 1001709, "Sequence": 255,
"Position": { "Steps": [
"X": -240.4975, {
"Y": 18.7, "DataId": 1001709,
"Z": 85.58777 "Position": {
}, "X": -240.4975,
"TerritoryId": 130, "Y": 18.7,
"InteractionType": "CompleteQuest", "Z": 85.58777
"DialogueChoices": [ },
{ "TerritoryId": 130,
"Type": "YesNo", "InteractionType": "CompleteQuest",
"Prompt": "TEXT_CLSTHM011_00344_Q1_001_1", "DialogueChoices": [
"Yes": true {
} "Type": "YesNo",
], "Prompt": "TEXT_CLSTHM011_00344_Q1_001_1",
"NextQuestId": 553 "Yes": true
} }
] ],
} "NextQuestId": 553
] }
} ]
}
]
}

View File

@ -122,7 +122,7 @@
"TerritoryId": 153, "TerritoryId": 153,
"InteractionType": "CompleteQuest", "InteractionType": "CompleteQuest",
"Fly": true, "Fly": true,
"NextQuestId": 1085 "NextQuestId": 1086
} }
] ]
} }

View File

@ -1,42 +1,44 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000197, {
"Position": { "DataId": 1000197,
"X": 201.31226, "Position": {
"Y": -3.1634123E-15, "X": 201.31226,
"Z": 43.900146 "Y": -3.1634123E-15,
}, "Z": 43.900146
"TerritoryId": 132, },
"InteractionType": "AcceptQuest"} "TerritoryId": 132,
] "InteractionType": "AcceptQuest"
}, }
{ ]
"Sequence": 255, },
"Steps": [ {
{ "DataId": 1000200, "Sequence": 255,
"Position": { "Steps": [
"X": 209.55212, {
"Y": 0.9999819, "DataId": 1000200,
"Z": 35.01941 "Position": {
}, "X": 209.55212,
"TerritoryId": 132, "Y": 0.9999819,
"InteractionType": "CompleteQuest", "Z": 35.01941
},
"DialogueChoices": [ "StopDistance": 5,
{ "TerritoryId": 132,
"Type": "YesNo", "InteractionType": "CompleteQuest",
"Prompt": "TEXT_CLSARC998_00131_Q1_000_1", "DialogueChoices": [
"Yes": true {
} "Type": "YesNo",
] "Prompt": "TEXT_CLSARC998_00131_Q1_000_1",
} "Yes": true
] }
} ]
] }
} ]
}
]
}

View File

@ -1,42 +1,39 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000197, {
"Position": { "DataId": 1000197,
"X": 201.31226, "Position": {
"Y": -3.1634123E-15, "X": 201.31226,
"Z": 43.900146 "Y": -3.1634123E-15,
}, "Z": 43.900146
"TerritoryId": 132, },
"AetheryteShortcut": "Gridania", "TerritoryId": 132,
"AethernetShortcut": [ "AetheryteShortcut": "Gridania",
"[Gridania] Aetheryte Plaza", "AethernetShortcut": [
"[Gridania] Archers' Guild" "[Gridania] Aetheryte Plaza",
], "[Gridania] Archers' Guild"
"DialogueChoices": [ ],
{ "DialogueChoices": [
"Type": "YesNo", {
"Prompt": "TEXT_CLSARC999_00181_Q1_000_1", "Type": "YesNo",
"Yes": true, "Prompt": "TEXT_CLSARC999_00181_Q1_000_1",
"$": "No Godbert prompt" "Yes": true,
} "$": "No Godbert prompt"
], }
"InteractionType": "AcceptQuest", ],
"SkipConditions": { "InteractionType": "AcceptQuest",
"SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true
"InTerritory": [
132
]
} }
} }
} }
] ]
} }
] ]
} }

View File

@ -1,18 +1,19 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000995, {
"Position": { "DataId": 1000995,
"X": -52.018066, "Position": {
"Y": 42.799637, "X": -52.018066,
"Z": 192.2179 "Y": 42.799637,
}, "Z": 192.2179
"TerritoryId": 128, },
"InteractionType": "AcceptQuest", "TerritoryId": 128,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Limsa Lominsa", "AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [ "AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza", "[Limsa Lominsa] Aetheryte Plaza",
@ -22,7 +23,7 @@
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
129 128
] ]
} }
}, },
@ -35,8 +36,7 @@
], ],
"NextQuestId": 291 "NextQuestId": 291
} }
] ]
} }
] ]
} }

View File

@ -1,18 +1,19 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000995, {
"Position": { "DataId": 1000995,
"X": -52.018066, "Position": {
"Y": 42.799637, "X": -52.018066,
"Z": 192.2179 "Y": 42.799637,
}, "Z": 192.2179
"TerritoryId": 128, },
"InteractionType": "AcceptQuest", "TerritoryId": 128,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Limsa Lominsa", "AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [ "AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza", "[Limsa Lominsa] Aetheryte Plaza",
@ -22,41 +23,42 @@
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
129 128
] ]
} }
}, },
"DialogueChoices": [ "DialogueChoices": [
{ {
"Type": "YesNo", "Type": "YesNo",
"Prompt": "TEXT_CLSBSM001_00185_Q1_000_1", "Prompt": "TEXT_CLSBSM011_00291_Q1_000_1",
"Yes": true "Yes": true
} }
]} ]
] }
}, ]
{ },
"Sequence": 255, {
"Steps": [ "Sequence": 255,
{ "DataId": 1000997, "Steps": [
"Position": { {
"X": -31.265808, "DataId": 1000997,
"Y": 44.49997, "Position": {
"Z": 185.53442 "X": -31.265808,
}, "Y": 44.49997,
"TerritoryId": 128, "Z": 185.53442
"InteractionType": "CompleteQuest", },
"DialogueChoices": [ "TerritoryId": 128,
{ "InteractionType": "CompleteQuest",
"Type": "YesNo", "DialogueChoices": [
"Prompt": "TEXT_CLSBSM011_00291_Q1_000_1", {
"Yes": true "Type": "YesNo",
} "Prompt": "TEXT_CLSBSM011_00291_Q1_000_1",
], "Yes": true
"NextQuestId": 292 }
} ],
] "NextQuestId": 292
} }
] ]
} }
]
}

View File

@ -1,39 +1,41 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000294, {
"Position": { "DataId": 1000294,
"X": -238.05603, "Position": {
"Y": 8, "X": -238.05603,
"Z": -142.93127 "Y": 8,
}, "Z": -142.93127
"TerritoryId": 133, },
"AetheryteShortcut": "Gridania", "TerritoryId": 133,
"AethernetShortcut": ["[Gridania] Aetheryte Plaza", "[Gridania] Botanists' Guild"], "AetheryteShortcut": "Gridania",
"DialogueChoices": [ "AethernetShortcut": [
{ "[Gridania] Aetheryte Plaza",
"Type": "YesNo", "[Gridania] Botanists' Guild"
"Prompt": "TEXT_CLSHRV999_00193_Q1_000_1", ],
"Yes": true "DialogueChoices": [
} {
], "Type": "YesNo",
"InteractionType": "AcceptQuest", "Prompt": "TEXT_CLSHRV999_00193_Q1_000_1",
"SkipConditions": { "Yes": true
}
],
"InteractionType": "AcceptQuest",
"SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
132,133 133
] ]
} }
} }
}
]
}
]
} }
]
}
]
}

View File

@ -1,42 +1,43 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000294, {
"Position": { "DataId": 1000294,
"X": -238.05603, "Position": {
"Y": 8, "X": -238.05603,
"Z": -142.93127 "Y": 8,
}, "Z": -142.93127
"TerritoryId": 133, },
"InteractionType": "AcceptQuest"} "TerritoryId": 133,
] "InteractionType": "AcceptQuest"
}, }
{ ]
"Sequence": 255, },
"Steps": [ {
{ "DataId": 1000815, "Sequence": 255,
"Position": { "Steps": [
"X": -233.9361, {
"Y": 6.668152, "DataId": 1000815,
"Z": -171.03839 "Position": {
}, "X": -233.9361,
"TerritoryId": 133, "Y": 6.668152,
"InteractionType": "CompleteQuest", "Z": -171.03839
"DialogueChoices": [ },
{ "TerritoryId": 133,
"Type": "YesNo", "InteractionType": "CompleteQuest",
"Prompt": "TEXT_CLSHRV001_00003_Q1_000_1", "DialogueChoices": [
"Yes": true {
} "Type": "YesNo",
], "Prompt": "TEXT_CLSHRV001_00003_Q1_000_1",
"NextQuestId": 3 "Yes": true
} }
] ]
} }
] ]
} }
]
}

View File

@ -1,37 +1,34 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000148, {
"Position": { "DataId": 1000148,
"X": -20.279297, "Position": {
"Y": -3.25, "X": -20.279297,
"Z": 45.97534 "Y": -3.25,
}, "Z": 45.97534
"TerritoryId": 132, },
"AetheryteShortcut": "Gridania", "TerritoryId": 132,
"DialogueChoices": [ "AetheryteShortcut": "Gridania",
{ "DialogueChoices": [
"Type": "YesNo", {
"Prompt": "TEXT_CLSWDK999_00184_Q1_000_1", "Type": "YesNo",
"Yes": true "Prompt": "TEXT_CLSWDK999_00184_Q1_000_1",
} "Yes": true
], }
"InteractionType": "AcceptQuest", ],
"SkipConditions": { "InteractionType": "AcceptQuest",
"SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true
"InTerritory": [
132
]
} }
} }
} }
] ]
} }
] ]
} }

View File

@ -1,18 +1,19 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000946, {
"Position": { "DataId": 1000946,
"X": -61.142883, "Position": {
"Y": 42.299698, "X": -61.142883,
"Z": -164.0498 "Y": 42.299698,
}, "Z": -164.0498
"TerritoryId": 128, },
"InteractionType": "Interact", "TerritoryId": 128,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Limsa Lominsa", "AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [ "AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza", "[Limsa Lominsa] Aetheryte Plaza",
@ -22,7 +23,7 @@
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
129 128
] ]
} }
}, },
@ -32,9 +33,9 @@
"Prompt": "TEXT_CLSCUL001_00191_Q1_000_1", "Prompt": "TEXT_CLSCUL001_00191_Q1_000_1",
"Yes": true "Yes": true
} }
]} ]
] }
} ]
] }
} ]
}

View File

@ -1,42 +1,43 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000946, {
"Position": { "DataId": 1000946,
"X": -61.142883, "Position": {
"Y": 42.299698, "X": -61.142883,
"Z": -164.0498 "Y": 42.299698,
}, "Z": -164.0498
"TerritoryId": 128, },
"InteractionType": "AcceptQuest"} "TerritoryId": 128,
] "InteractionType": "AcceptQuest"
}, }
{ ]
"Sequence": 255, },
"Steps": [ {
{ "DataId": 1000947, "Sequence": 255,
"Position": { "Steps": [
"X": -54.64258, {
"Y": 44, "DataId": 1000947,
"Z": -151.23218 "Position": {
}, "X": -54.64258,
"TerritoryId": 128, "Y": 44,
"InteractionType": "CompleteQuest", "Z": -151.23218
"DialogueChoices": [ },
{ "TerritoryId": 128,
"Type": "YesNo", "InteractionType": "CompleteQuest",
"Prompt": "TEXT_CLSCUL011_00271_Q1_000_1", "DialogueChoices": [
"Yes": true {
} "Type": "YesNo",
], "Prompt": "TEXT_CLSCUL011_00271_Q1_000_1",
"NextQuestId": 271 "Yes": true
} }
] ]
} }
] ]
} }
]
}

View File

@ -1,32 +1,32 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000251, {
"Position": { "DataId": 1000251,
"X": 147.08167, "Position": {
"Y": 15.5, "X": 147.08167,
"Z": -267.99426 "Y": 15.5,
}, "Z": -267.99426
"TerritoryId": 133, },
"AethernetShortcut": [ "TerritoryId": 133,
"[Gridania] Aetheryte Plaza", "AethernetShortcut": [
"[Gridania] Lancers' Guild" "[Gridania] Aetheryte Plaza",
], "[Gridania] Lancers' Guild"
"DialogueChoices": [ ],
{ "DialogueChoices": [
"Type": "YesNo", {
"Prompt": "TEXT_CLSLNC999_00180_Q1_000_1", "Type": "YesNo",
"Yes": true "Prompt": "TEXT_CLSLNC999_00180_Q1_000_1",
} "Yes": true
], }
"InteractionType": "Interact" ],
} "InteractionType": "AcceptQuest"
] }
} ]
] }
} ]
}

View File

@ -1,57 +1,63 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{
"Sequence": 0,
"Steps": [
{ {
"Sequence": 0, "DataId": 1000859,
"Steps": [ "Position": {
{ "X": -166.76587,
"DataId": 1000859, "Y": 4.5496645,
"Position": { "Z": 150.04187
"X": -166.76587, },
"Y": 4.5496645, "TerritoryId": 129,
"Z": 150.04187 "InteractionType": "AcceptQuest",
}, "AetheryteShortcut": "Limsa Lominsa",
"TerritoryId": 129, "AethernetShortcut": [
"InteractionType": "Interact", "[Limsa Lominsa] Aetheryte Plaza",
"AetheryteShortcut": "Limsa Lominsa", "[Limsa Lominsa] Fishermens' Guild"
"AethernetShortcut": [ ],
"[Limsa Lominsa] Aetheryte Plaza", "SkipConditions": {
"[Limsa Lominsa] Fishermens' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true
"InTerritory": [
129
]
} }
} }
} }
] ]
},
{
"Sequence": 255,
"Steps": [
{
"Position": {
"X": -167.60791,
"Y": 4.550005,
"Z": 165.35986
},
"TerritoryId": 129,
"InteractionType": "WalkTo"
}, },
{ {
"Sequence": 255, "DataId": 1000857,
"Steps": [ "Position": {
{ "X": -165.27051,
"DataId": 1000857, "Y": 5.2500057,
"Position": { "Z": 164.29382
"X": -165.27051, },
"Y": 5.2500057, "TerritoryId": 129,
"Z": 164.29382 "DialogueChoices": [
}, {
"TerritoryId": 129, "Type": "YesNo",
"DialogueChoices": [ "Prompt": "TEXT_CLSFSH011_01107_Q1_000_001",
{ "Yes": true
"Type": "YesNo", }
"Prompt": "TEXT_CLSFSH011_01107_Q1_000_001", ],
"Yes": true "InteractionType": "CompleteQuest",
} "NextQuestId": 1108
],
"InteractionType": "CompleteQuest",
"NextQuestId": 1108
}
]
} }
] ]
} }
]
}

View File

@ -1,76 +1,59 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{
"Sequence": 0,
"Steps": [
{ {
"Sequence": 0, "TerritoryId": 129,
"Steps": [ "InteractionType": "EquipItem",
{ "ItemId": 2571,
"TerritoryId": 129, "SkipConditions": {
"InteractionType": "EquipItem", "StepIf": {
"ItemId": 2571, "Item": {
"SkipConditions": { "NotInInventory": true
"StepIf": { }
"Item": { }
"NotInInventory": true }
}
}
}
},
{
"TerritoryId": 129,
"InteractionType": "EquipRecommended"
},
{
"DataId": 1000857,
"Position": {
"X": -165.27051,
"Y": 5.2500057,
"Z": 164.29382
},
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
}, },
{ {
"Sequence": 1, "TerritoryId": 129,
"Steps": [ "InteractionType": "EquipRecommended"
{
"Position": {
"X": -42.679565,
"Y": 39.999966,
"Z": 119.920654
},
"TerritoryId": 128,
"InteractionType": "WaitForManualProgress",
"AethernetShortcut": [
"[Limsa Lominsa] Fishermens' Guild",
"[Limsa Lominsa] The Aftcastle"
]
}
]
}, },
{ {
"Sequence": 255, "DataId": 1000857,
"Steps": [ "Position": {
{ "X": -165.27051,
"DataId": 1000857, "Y": 5.2500057,
"Position": { "Z": 164.29382
"X": -165.27051, },
"Y": 5.2500057, "TerritoryId": 129,
"Z": 164.29382 "InteractionType": "AcceptQuest"
},
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Fishermens' Guild"
],
"NextQuestId": 3843
}
]
} }
] ]
} },
{
"Sequence": 255,
"Steps": [
{
"DataId": 1000857,
"Position": {
"X": -165.27051,
"Y": 5.2500057,
"Z": 164.29382
},
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"AethernetShortcut": [
"[Limsa Lominsa] The Aftcastle",
"[Limsa Lominsa] Fishermens' Guild"
],
"NextQuestId": 3843,
"Disabled": true,
"Comment": "Catch/turn in fish manually"
}
]
}
]
}

View File

@ -1,67 +1,43 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{
"Sequence": 0,
"Steps": [
{ {
"Sequence": 0, "DataId": 1000859,
"Steps": [ "Position": {
{ "X": -166.76587,
"DataId": 1000859, "Y": 4.5496645,
"Position": { "Z": 150.04187
"X": -166.76587, },
"Y": 4.5496645, "TerritoryId": 129,
"Z": 150.04187 "AetheryteShortcut": "Limsa Lominsa",
}, "AethernetShortcut": [
"TerritoryId": 129, "[Limsa Lominsa] Aetheryte Plaza",
"AethernetShortcut": [ "[Limsa Lominsa] Fishermens' Guild"
"[Limsa Lominsa] Aetheryte Plaza", ],
"[Limsa Lominsa] Fishermens' Guild" "DialogueChoices": [
], {
"DialogueChoices": [ "Type": "YesNo",
{ "Prompt": "TEXT_CLSFSH001_01134_Q1_000_1",
"Type": "YesNo", "Yes": true
"Prompt": "TEXT_CLSFSH001_01134_Q1_000_1", }
"Yes": true, ],
"$": "Need to find real prompt in godbert" "InteractionType": "Interact"
}
],
"InteractionType": "Interact"
},
{
"DataId": 1000859,
"Position": {
"X": -166.76587,
"Y": 4.5496645,
"Z": 150.04187
},
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
}, },
{ {
"Sequence": 255, "DataId": 1000859,
"Steps": [ "Position": {
{ "X": -166.76587,
"DataId": 1000857, "Y": 4.5496645,
"Position": { "Z": 150.04187
"X": -165.27051, },
"Y": 5.2500057, "TerritoryId": 129,
"Z": 164.29382 "InteractionType": "AcceptQuest"
},
"TerritoryId": 129,
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_CLSGLA020_00253_Q1_000_1",
"Yes": true,
"$": "Need to find real prompt in godbert"
}
],
"InteractionType": "CompleteQuest",
"NextQuestId": 1108
}
]
} }
] ]
} }
]
}

View File

@ -1,40 +1,40 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{
"Sequence": 0,
"Steps": [
{ {
"Sequence": 0, "DataId": 1000858,
"Steps": [ "Position": {
{ "X": -168.47485,
"DataId": 1000858, "Y": 4.5500045,
"Position": { "Z": 163.65295
"X": -168.47485, },
"Y": 4.5500045, "TerritoryId": 129,
"Z": 163.65295 "InteractionType": "AcceptQuest"
},
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1005424,
"Position": {
"X": -412.80237,
"Y": 4,
"Z": 75.05908
},
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"AethernetShortcut": [
"[Limsa Lominsa] Fishermens' Guild",
"[Limsa Lominsa] Arcanists' Guild"
]
}
]
} }
] ]
} },
{
"Sequence": 255,
"Steps": [
{
"DataId": 1005424,
"Position": {
"X": -412.80237,
"Y": 4,
"Z": 75.05908
},
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"AethernetShortcut": [
"[Limsa Lominsa] Fishermens' Guild",
"[Limsa Lominsa] Arcanists' Guild"
]
}
]
}
]
}

View File

@ -1,21 +1,24 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1002280, {
"Position": { "DataId": 1002280,
"X": -35.385742, "Position": {
"Y": 13.599962, "X": -35.385742,
"Z": 97.24573 "Y": 13.599962,
}, "Z": 97.24573
"TerritoryId": 131, },
"InteractionType": "Interact", "TerritoryId": 131,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": ["[Ul'dah] Aetheryte Plaza", "AethernetShortcut": [
"[Ul'dah] Goldsmiths' Guild"], "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Goldsmiths' Guild"
],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
@ -30,9 +33,9 @@
"Prompt": "TEXT_CLSGLD001_00187_Q1_000_1", "Prompt": "TEXT_CLSGLD001_00187_Q1_000_1",
"Yes": true "Yes": true
} }
]} ]
] }
} ]
] }
} ]
}

View File

@ -5,36 +5,38 @@
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1002280, {
"Position": { "DataId": 1002280,
"X": -35.385742, "Position": {
"Y": 13.599962, "X": -35.385742,
"Z": 97.24573 "Y": 13.599962,
}, "Z": 97.24573
"TerritoryId": 131, },
"InteractionType": "AcceptQuest"} "TerritoryId": 131,
"InteractionType": "AcceptQuest"
}
] ]
}, },
{ {
"Sequence": 255, "Sequence": 255,
"Steps": [ "Steps": [
{ "DataId": 1004093, {
"Position": { "DataId": 1004093,
"X": -25.162231, "Position": {
"Y": 12.200003, "X": -25.162231,
"Z": 110.795654 "Y": 12.200003,
}, "Z": 110.795654
"TerritoryId": 131, },
"InteractionType": "CompleteQuest", "TerritoryId": 131,
"DialogueChoices": [ "InteractionType": "CompleteQuest",
{ "DialogueChoices": [
"Type": "YesNo", {
"Prompt": "TEXT_CLSGLD011_00608_A1_000_1", "Type": "YesNo",
"Yes": true "Prompt": "TEXT_CLSGLD011_00608_A1_000_1",
} "Yes": true
], }
"NextQuestId": 608 ]
} }
] ]
} }
] ]

View File

@ -1,42 +1,43 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000352, {
"Position": { "DataId": 1000352,
"X": 65.69006, "Position": {
"Y": 8, "X": 65.69006,
"Z": -147.41742 "Y": 8,
}, "Z": -147.41742
"TerritoryId": 133, },
"InteractionType": "AcceptQuest"} "TerritoryId": 133,
] "InteractionType": "AcceptQuest"
}, }
{ ]
"Sequence": 255, },
"Steps": [ {
{ "DataId": 1000691, "Sequence": 255,
"Position": { "Steps": [
"X": 71.97681, {
"Y": 8, "DataId": 1000691,
"Z": -166.52173 "Position": {
}, "X": 71.97681,
"TerritoryId": 133, "Y": 8,
"InteractionType": "CompleteQuest", "Z": -166.52173
"DialogueChoices": [ },
{ "TerritoryId": 133,
"Type": "YesNo", "InteractionType": "CompleteQuest",
"Prompt": "TEXT_CLSTAN000_00105_Q1_000_1", "DialogueChoices": [
"Yes": true {
} "Type": "YesNo",
], "Prompt": "TEXT_CLSTAN000_00105_Q1_000_1",
"NextQuestId": 105 "Yes": true
} }
] ]
} }
] ]
} }
]
}

View File

@ -1,18 +1,19 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000352, {
"Position": { "DataId": 1000352,
"X": 65.69006, "Position": {
"Y": 8, "X": 65.69006,
"Z": -147.41742 "Y": 8,
}, "Z": -147.41742
"TerritoryId": 133, },
"InteractionType": "Interact", "TerritoryId": 133,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Gridania", "AetheryteShortcut": "Gridania",
"AethernetShortcut": [ "AethernetShortcut": [
"[Gridania] Aetheryte Plaza", "[Gridania] Aetheryte Plaza",
@ -32,9 +33,9 @@
"Prompt": "TEXT_CLSTAN999_00188_Q1_000_1", "Prompt": "TEXT_CLSTAN999_00188_Q1_000_1",
"Yes": true "Yes": true
} }
]} ]
] }
} ]
] }
} ]
}

View File

@ -1,25 +1,23 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1001286, {
"Position": { "DataId": 1001286,
"X": -88.9754, "Position": {
"Y": 2.55, "X": -88.9754,
"Z": -51.163513 "Y": 2.55,
}, "Z": -51.163513
"TerritoryId": 130, },
"InteractionType": "Interact", "TerritoryId": 130,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true
"InTerritory": [
130
]
} }
}, },
"DialogueChoices": [ "DialogueChoices": [
@ -28,9 +26,9 @@
"Prompt": "TEXT_CLSPGL001_00178_Q1_000_1", "Prompt": "TEXT_CLSPGL001_00178_Q1_000_1",
"Yes": true "Yes": true
} }
]} ]
] }
} ]
] }
} ]
}

View File

@ -1,42 +1,44 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1001286, {
"Position": { "DataId": 1001286,
"X": -88.9754, "Position": {
"Y": 2.55, "X": -88.9754,
"Z": -51.163513 "Y": 2.55,
}, "Z": -51.163513
"TerritoryId": 130, },
"InteractionType": "AcceptQuest"} "TerritoryId": 130,
] "InteractionType": "AcceptQuest"
}, }
{ ]
"Sequence": 255, },
"Steps": [ {
{ "DataId": 1003817, "Sequence": 255,
"Position": { "Steps": [
"X": -74.57086, {
"Y": 1.9999951, "DataId": 1003817,
"Z": -42.404846 "Position": {
}, "X": -74.57086,
"TerritoryId": 130, "Y": 1.9999951,
"InteractionType": "CompleteQuest", "Z": -42.404846
"DialogueChoices": [ },
{ "TerritoryId": 130,
"Type": "YesNo", "InteractionType": "CompleteQuest",
"Prompt": "TEXT_CLSPGL011_00532_Q1_000_1", "DialogueChoices": [
"Yes": true {
} "Type": "YesNo",
], "Prompt": "TEXT_CLSPGL011_00532_Q1_000_1",
"NextQuestId": 553 "Yes": true
} }
] ],
} "NextQuestId": 553
] }
} ]
}
]
}

View File

@ -1,28 +1,27 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 255, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1009944, {
"Position": { "DataId": 1009944,
"X": -152.66656, "Position": {
"Y": 2.8562405, "X": -152.66656,
"Z": 243.18298 "Y": 2.8562405,
}, "Z": 243.18298
"TerritoryId": 129, },
"InteractionType": "AcceptQuest", "TerritoryId": 129,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Limsa Lominsa", "AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [ "AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza","[Limsa Lominsa] Fishermens' Guild" "[Limsa Lominsa] Aetheryte Plaza",
"[Limsa Lominsa] Fishermens' Guild"
], ],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true
"InTerritory": [
129
]
} }
}, },
"DialogueChoices": [ "DialogueChoices": [
@ -32,10 +31,9 @@
"Yes": true "Yes": true
} }
], ],
"NextQuestID": 102 "NextQuestId": 102
} }
] ]
} }
] ]
} }

View File

@ -0,0 +1,61 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_CLSROG011_00102_Q9_000_901",
"Yes": true
}
]
},
{
"DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"StopDistance": 7,
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_CLSROG011_00102_Q1_000_030",
"Yes": true
}
]
}
]
}
]
}

View File

@ -1,50 +0,0 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{ "DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "AcceptQuest"}
]
},
{
"Sequence": 255,
"Steps": [
{ "DataId": 1009944,
"Position": {
"X": -152.66656,
"Y": 2.8562405,
"Z": 243.18298
},
"TerritoryId": 129,
"InteractionType": "Interact"
},
{ "DataId": 1009943,
"Position": {
"X": -153.36847,
"Y": -129.4397,
"Z": 265.88843
},
"TerritoryId": 129,
"InteractionType": "CompleteQuest",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_CLSROG011_00102_Q1_000_030",
"Yes": true
}
]
}
]
}
]
}

View File

@ -7,18 +7,18 @@
"Steps": [ "Steps": [
{ {
"DataId": 1002277, "DataId": 1002277,
"Position": { "Position": {
"X": -97.550964, "X": -97.550964,
"Y": 7.05, "Y": 7.05,
"Z": 23.605652 "Z": 23.605652
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "AcceptQuest", "InteractionType": "AcceptQuest",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
@ -33,18 +33,18 @@
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{ {
"DataId": 1006747, "DataId": 1006747,
"Position": { "Position": {
"X": -20.828613, "X": -20.828613,
"Y": 29.999964, "Y": 29.999964,
"Z": -2.4262085 "Z": -2.4262085
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "Interact", "InteractionType": "Interact",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Gladiators' Guild", "[Ul'dah] Gladiators' Guild",
"[Ul'dah] The Chamber of Rule" "[Ul'dah] The Chamber of Rule"
] ]
} }
] ]
}, },
@ -52,66 +52,75 @@
"Sequence": 2, "Sequence": 2,
"Steps": [ "Steps": [
{ {
"DataId": 2002344, "DataId": 2002344,
"Position": { "Position": {
"X": -97.39838, "X": -97.39838,
"Y": 14.846985, "Y": 14.846985,
"Z": -188.2201 "Z": -188.2201
}, },
"TerritoryId": 146, "TerritoryId": 146,
"AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo", "AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo",
"InteractionType": "Combat", "InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction", "EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [18,19] "KillEnemyDataIds": [
} 18,
19
],
"Fly": true
}
] ]
}, },
{ "Sequence": 3, {
"Steps": [ "Sequence": 3,
"Steps": [
{ {
"DataId": 2002345, "DataId": 2002345,
"Position": { "Position": {
"X": -97.39838, "X": -97.39838,
"Y": 16.433899, "Y": 16.433899,
"Z": -188.2201 "Z": -188.2201
}, },
"TerritoryId": 146, "TerritoryId": 146,
"InteractionType": "UseItem", "InteractionType": "UseItem",
"ItemId": 2000821 "ItemId": 2000821
} }
]}, ]
{ "Sequence": 4, },
"Steps": [ {
"Sequence": 4,
"Steps": [
{ {
"DataId": 1006747, "DataId": 1006747,
"Position": { "Position": {
"X": -20.828613, "X": -20.828613,
"Y": 29.999964, "Y": 29.999964,
"Z": -2.4262085 "Z": -2.4262085
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] The Chamber of Rule" "[Ul'dah] The Chamber of Rule"
] ]
} }
]} ]
, },
{ "Sequence": 255, {
"Steps": [ "Sequence": 255,
"Steps": [
{ {
"DataId": 1006747, "DataId": 1006747,
"Position": { "Position": {
"X": -20.828613, "X": -20.828613,
"Y": 29.999964, "Y": 29.999964,
"Z": -2.4262085 "Z": -2.4262085
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "CompleteQuest", "InteractionType": "CompleteQuest",
"NextQuestId": 1056 "NextQuestId": 1056
} }
]} ]
}
] ]
} }

View File

@ -0,0 +1,41 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002277,
"Position": {
"X": -97.550964,
"Y": 7.05,
"Z": 23.605652
},
"TerritoryId": 131,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild"
],
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_CLSGLA001_00177_Q1_000_1",
"Yes": true
}
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true,
"InTerritory": [
131
]
}
}
}
]
}
]
}

View File

@ -84,8 +84,7 @@
"MinimumKillCount": 3, "MinimumKillCount": 3,
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
{ {
"Low": 3, "Low": 3
"Mode": "Exact"
}, },
null, null,
null, null,
@ -100,8 +99,7 @@
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
{ {
"High": 3, "High": 3
"Mode": "Exact"
}, },
null, null,
null, null,
@ -112,12 +110,10 @@
], ],
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
{ {
"Low": 3, "Low": 3
"Mode": "Exact"
}, },
{ {
"High": 3, "High": 3
"Mode": "Exact"
}, },
null, null,
null, null,
@ -141,8 +137,7 @@
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
{ {
"Low": 3, "Low": 3
"Mode": "Exact"
}, },
null, null,
null, null,
@ -154,8 +149,7 @@
"CompletionQuestVariablesFlags": [ "CompletionQuestVariablesFlags": [
null, null,
{ {
"Low": 3, "Low": 3
"Mode": "Exact"
}, },
null, null,
null, null,

View File

@ -13,13 +13,13 @@
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "AcceptQuest", "InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
@ -35,19 +35,21 @@
"Steps": [ "Steps": [
{ {
"DataId": 1002296, "DataId": 1002296,
"Position": { "Position": {
"X": -139.42175, "X": -139.42175,
"Y": 4.019726, "Y": 4.019726,
"Z": 205.0354 "Z": 205.0354
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "Combat", "InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction", "EnemySpawnType": "AfterInteraction",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Gladiators' Guild", "[Ul'dah] Gladiators' Guild",
"[Ul'dah] Gate of Nald (Central Thanalan)" "[Ul'dah] Gate of Nald (Central Thanalan)"
], ],
"KillEnemyDataIds": [1245] "KillEnemyDataIds": [
1245
]
} }
] ]
}, },
@ -56,13 +58,13 @@
"Steps": [ "Steps": [
{ {
"DataId": 1002296, "DataId": 1002296,
"Position": { "Position": {
"X": -139.42175, "X": -139.42175,
"Y": 4.019726, "Y": 4.019726,
"Z": 205.0354 "Z": 205.0354
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
] ]
}, },
@ -77,13 +79,13 @@
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
@ -93,66 +95,69 @@
} }
} }
] ]
}, },
{ {
"Sequence": 4, "Sequence": 4,
"Steps": [
{
"DataId": 2001426,
"Position": {
"X": 27.206787,
"Y": 12.985352,
"Z": 51.83484
},
"TerritoryId": 141,
"InteractionType": "SinglePlayerDuty",
"AethernetShortcut": [
"[Ul'dah] Gladiators' Guild",
"[Ul'dah] Gate of Nald (Central Thanalan)"
]
}
]
},
{ "Sequence": 5,
"Steps": [ "Steps": [
{
"DataId": 1003945,
"Position": {
"X": 24.917969,
"Y": 13,
"Z": 50.156372
},
"TerritoryId": 141,
"InteractionType": "Interact"
}
]},
{ "Sequence": 255,
"Steps": [
{ {
"DataId": 1001739, "DataId": 2001426,
"Position": {
"X": 27.206787,
"Y": 12.985352,
"Z": 51.83484
},
"TerritoryId": 141,
"InteractionType": "SinglePlayerDuty",
"AethernetShortcut": [
"[Ul'dah] Gladiators' Guild",
"[Ul'dah] Gate of Nald (Central Thanalan)"
]
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1003945,
"Position": {
"X": 24.917969,
"Y": 13,
"Z": 50.156372
},
"StopDistance": 5,
"TerritoryId": 141,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1001739,
"Position": { "Position": {
"X": -94.529724, "X": -94.529724,
"Y": 6.4999976, "Y": 6.4999976,
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "CompleteQuest", "InteractionType": "CompleteQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"DialogueChoices": [ "DialogueChoices": [
{ {
"Type": "List", "Type": "List",
"Prompt": "TEXT_CLSGLA100_00261_Q1_000_160", "Prompt": "TEXT_CLSGLA100_00261_Q1_000_160",
"Answer": "TEXT_CLSGLA100_00261_A1_000_161" "Answer": "TEXT_CLSGLA100_00261_A1_000_161"
} }
], ],
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"NextQuestId": 262 "NextQuestId": 262
} }
]} ]
}
] ]
} }

View File

@ -13,13 +13,13 @@
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "AcceptQuest", "InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
@ -34,17 +34,19 @@
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{ {
"DataId": 1004224, "DataId": 1004224,
"Position": { "Position": {
"X": -220.93542, "X": -220.93542,
"Y": -38.407475, "Y": -38.407475,
"Z": 63.91992 "Z": 63.91992
}, },
"TerritoryId": 145, "TerritoryId": 145,
"InteractionType": "Combat", "InteractionType": "Combat",
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone", "AetheryteShortcut": "Eastern Thanalan - Camp Drybone",
"EnemySpawnType":"AfterInteraction", "EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds":[1244] "KillEnemyDataIds": [
1244
]
} }
] ]
}, },
@ -53,13 +55,13 @@
"Steps": [ "Steps": [
{ {
"DataId": 1004224, "DataId": 1004224,
"Position": { "Position": {
"X": -220.93542, "X": -220.93542,
"Y": -38.407475, "Y": -38.407475,
"Z": 63.91992 "Z": 63.91992
}, },
"TerritoryId": 145, "TerritoryId": 145,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
] ]
}, },
@ -74,13 +76,13 @@
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
@ -90,43 +92,45 @@
} }
} }
] ]
}, },
{ {
"Sequence": 4, "Sequence": 4,
"Steps": [ "Steps": [
{
"DataId": 1004091,
"Position": {
"X": 24.12439,
"Y": 7.1999984,
"Z": -102.76953
},
"TerritoryId": 130,
"InteractionType": "SinglePlayerDuty",
"AethernetShortcut": [
"[Ul'dah] Gladiators' Guild",
"[Ul'dah] Adventurers' Guild"
]
}
]
},
{ "Sequence": 255,
"Steps": [
{ {
"DataId": 1001739, "DataId": 1004091,
"Position": {
"X": 24.12439,
"Y": 7.1999984,
"Z": -102.76953
},
"TerritoryId": 130,
"InteractionType": "SinglePlayerDuty",
"AethernetShortcut": [
"[Ul'dah] Gladiators' Guild",
"[Ul'dah] Adventurers' Guild"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1001739,
"Position": { "Position": {
"X": -94.529724, "X": -94.529724,
"Y": 6.4999976, "Y": 6.4999976,
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "CompleteQuest", "InteractionType": "CompleteQuest",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Adventurers' Guild",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"NextQuestId": 263 "NextQuestId": 263
} }
]} ]
}
] ]
} }

View File

@ -13,13 +13,13 @@
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "AcceptQuest", "InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
@ -34,15 +34,15 @@
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{ {
"DataId": 1004140, "DataId": 1004140,
"Position": { "Position": {
"X": -72.34308, "X": -72.34308,
"Y": -12.372956, "Y": -12.372956,
"Z": -69.13867 "Z": -69.13867
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Central Thanalan - Black Brush Station" "AetheryteShortcut": "Central Thanalan - Black Brush Station"
} }
] ]
}, },
@ -51,81 +51,108 @@
"Steps": [ "Steps": [
{ {
"DataId": 1001462, "DataId": 1001462,
"Position": { "Position": {
"X": -93.33948, "X": -93.33948,
"Y": -11.367981, "Y": -11.367981,
"Z": -41.397766 "Z": -41.397766
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
}, },
{ {
"DataId": 1001438, "DataId": 1001438,
"Position": { "Position": {
"X": -30.838562, "X": -30.838562,
"Y": -1.0332576, "Y": -1.0332576,
"Z": -145.67792 "Z": -145.67792
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "Interact" "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
}, },
{"DataId": 2001434, {
"Position": { "DataId": 2001434,
"X": -115.77026, "Position": {
"Y": 0.015197754, "X": -115.77026,
"Z": -149.24854 "Y": 0.015197754,
}, "Z": -149.24854
"TerritoryId": 141, },
"InteractionType": "Interact" "TerritoryId": 141,
} "InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
32
]
}
] ]
}, },
{ {
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{"DataId": 1004140, {
"Position": { "DataId": 1004140,
"X": -72.34308, "Position": {
"Y": -12.372956, "X": -72.34308,
"Z": -69.13867 "Y": -12.372956,
}, "Z": -69.13867
"TerritoryId": 141, },
"InteractionType": "Interact" "TerritoryId": 141,
"InteractionType": "Interact"
} }
] ]
}, },
{ {
"Sequence": 4, "Sequence": 4,
"Steps": [ "Steps": [
{
"DataId": 1001285,
"Position": {
"X": -68.77246,
"Y": 4.0411124,
"Z": -126.51257
},
"TerritoryId": 130,
"InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah"
}
]
},
{ "Sequence": 5,
"Steps": [
{ {
"DataId": 1001739, "DataId": 1001285,
"Position": {
"X": -68.77246,
"Y": 4.0411124,
"Z": -126.51257
},
"TerritoryId": 130,
"InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah"
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1001739,
"Position": { "Position": {
"X": -94.529724, "X": -94.529724,
"Y": 6.4999976, "Y": 6.4999976,
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "Interact", "InteractionType": "Interact",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"DialogueChoices": [ "DialogueChoices": [
{ {
"Type": "List", "Type": "List",
"Prompt": "TEXT_CLSGLA200_00263_Q1_000_124", "Prompt": "TEXT_CLSGLA200_00263_Q1_000_124",
@ -133,42 +160,48 @@
} }
] ]
} }
]}, ]
{ "Sequence": 6, },
"Steps": [ {
"Sequence": 6,
"Steps": [
{ {
"DataId": 1004092, "DataId": 1004092,
"Position": { "Position": {
"X": -241.16882, "X": -241.16882,
"Y": 32.47634, "Y": 32.47634,
"Z": 398.9165 "Z": 398.9165
}, },
"TerritoryId": 140, "TerritoryId": 140,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Gladiators' Guild", "[Ul'dah] Gladiators' Guild",
"[Ul'dah] Gate of the Sultana (Western Thanalan)" "[Ul'dah] Gate of the Sultana (Western Thanalan)"
] ],
"Fly": true
} }
]}, ]
{ "Sequence": 255, },
"Steps": [ {
"Sequence": 255,
"Steps": [
{ {
"DataId": 1001739, "DataId": 1001739,
"Position": { "Position": {
"X": -94.529724, "X": -94.529724,
"Y": 6.4999976, "Y": 6.4999976,
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "CompleteQuest", "InteractionType": "CompleteQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"NextQuestId": 264 "NextQuestId": 264
} }
]} ]
}
] ]
} }

View File

@ -13,13 +13,13 @@
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "AcceptQuest", "InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
@ -34,20 +34,23 @@
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{ {
"DataId": 1004225, "DataId": 1004225,
"Position": { "Position": {
"X": 62.974, "X": 62.974,
"Y": 54.60642, "Y": 54.60642,
"Z": 284.90112 "Z": 284.90112
}, },
"TerritoryId": 140, "TerritoryId": 140,
"InteractionType": "Combat", "InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction", "EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [1243], "KillEnemyDataIds": [
"AethernetShortcut": [ 1243
],
"AethernetShortcut": [
"[Ul'dah] Gladiators' Guild", "[Ul'dah] Gladiators' Guild",
"[Ul'dah] Gate of the Sultana (Western Thanalan)" "[Ul'dah] Gate of the Sultana (Western Thanalan)"
] ],
"Fly": true
} }
] ]
}, },
@ -56,61 +59,65 @@
"Steps": [ "Steps": [
{ {
"DataId": 1004225, "DataId": 1004225,
"Position": { "Position": {
"X": 62.974, "X": 62.974,
"Y": 54.60642, "Y": 54.60642,
"Z": 284.90112 "Z": 284.90112
}, },
"TerritoryId": 140, "TerritoryId": 140,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
] ]
}, },
{ "Sequence": 3, {
"Steps": [ "Sequence": 3,
"Steps": [
{ {
"DataId": 1001739, "DataId": 1001739,
"Position": { "Position": {
"X": -94.529724, "X": -94.529724,
"Y": 6.4999976, "Y": 6.4999976,
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
] ]
} }
]}, ]
{ "Sequence": 4, },
"Steps": [ {
"Sequence": 4,
"Steps": [
{ {
"DataId": 1002277, "DataId": 1002277,
"Position": { "Position": {
"X": -97.550964, "X": -97.550964,
"Y": 7.05, "Y": 7.05,
"Z": 23.605652 "Z": 23.605652
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "Interact" "InteractionType": "Interact"
} }
]} ]
, },
{ "Sequence": 5, {
"Steps": [ "Sequence": 5,
"Steps": [
{ {
"DataId": 1004141, "DataId": 1004141,
"Position": { "Position": {
"X": -520.5005, "X": -520.5005,
"Y": -21.460285, "Y": -21.460285,
"Z": 123.46069 "Z": 123.46069
}, },
"TerritoryId": 145, "TerritoryId": 145,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone", "AetheryteShortcut": "Eastern Thanalan - Camp Drybone",
"DialogueChoices": [ "DialogueChoices": [
{ {
"Type": "List", "Type": "List",
"Prompt": "TEXT_CLSGLA250_00264_Q1_000_170", "Prompt": "TEXT_CLSGLA250_00264_Q1_000_170",
@ -118,26 +125,28 @@
} }
] ]
} }
]} ]
, },
{ "Sequence": 255, {
"Steps": [ "Sequence": 255,
"Steps": [
{ {
"DataId": 1001739, "DataId": 1001739,
"Position": { "Position": {
"X": -94.529724, "X": -94.529724,
"Y": 6.4999976, "Y": 6.4999976,
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "CompleteQuest", "InteractionType": "CompleteQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"NextQuestId": 265 "NextQuestId": 265
} }
]} ]
}
] ]
} }

View File

@ -13,13 +13,13 @@
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "AcceptQuest", "InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
@ -34,19 +34,19 @@
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{ {
"DataId": 1001285, "DataId": 1001285,
"Position": { "Position": {
"X": -68.77246, "X": -68.77246,
"Y": 4.0411124, "Y": 4.0411124,
"Z": -126.51257 "Z": -126.51257
}, },
"TerritoryId": 130, "TerritoryId": 130,
"InteractionType": "Interact", "InteractionType": "Interact",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Gladiators' Guild", "[Ul'dah] Gladiators' Guild",
"[Ul'dah] Aetheryte Plaza" "[Ul'dah] Aetheryte Plaza"
], ],
"DialogueChoices": [ "DialogueChoices": [
{ {
"Type": "List", "Type": "List",
"Prompt": "TEXT_CLSGLA300_00265_Q1_000_40", "Prompt": "TEXT_CLSGLA300_00265_Q1_000_40",
@ -61,109 +61,150 @@
"Steps": [ "Steps": [
{ {
"Position": { "Position": {
"X": 235.23369, "X": 235.23369,
"Y": 2.747214, "Y": 2.747214,
"Z": 673.64215 "Z": 673.64215
}, },
"TerritoryId": 141, "TerritoryId": 141,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"AethernetShortcut": ["[Ul'dah] Aetheryte Plaza", "[Ul'dah] Gate of Thal (Central Thanalan)"] "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gate of Thal (Central Thanalan)"
],
"SkipConditions": {
"StepIf": {
"AetheryteUnlocked": "Southern Thanalan - Little Ala Mhigo"
}
}
}, },
{
"TerritoryId": 146,
"Aetheryte": "Southern Thanalan - Little Ala Mhigo",
"InteractionType": "AttuneAetheryte"
},
{"Position": {
"X": 140.30618,
"Y": 4.2185926,
"Z": -585.2695
},
"TerritoryId": 146,
"InteractionType": "WalkTo"},
{ {
"DataId": 2001455, "TerritoryId": 146,
"Position": { "Aetheryte": "Southern Thanalan - Little Ala Mhigo",
"X": 28.091797, "InteractionType": "AttuneAetheryte",
"Y": 6.9733276, "SkipConditions": {
"Z": -611.2917 "StepIf": {
}, "AetheryteUnlocked": "Southern Thanalan - Little Ala Mhigo"
"TerritoryId": 146, }
"InteractionType": "Interact" }
}, },
{
"DataId": 2001435,
"Position": {
"X": 101.823364,
"Y": 7.248047,
"Z": -534.56934
},
"TerritoryId": 146,
"InteractionType": "Interact"
},
{ {
"Position": { "Position": {
"X": 164.75665, "X": 140.30618,
"Y": 3.3963587, "Y": 4.2185926,
"Z": -585.49005 "Z": -585.2695
}, },
"TerritoryId": 146, "TerritoryId": 146,
"InteractionType": "WalkTo" "InteractionType": "WalkTo",
"AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo",
"SkipConditions": {
"AetheryteShortcutIf": {
"AetheryteLocked": "Southern Thanalan - Little Ala Mhigo"
}
}
},
{
"DataId": 2001455,
"Position": {
"X": 28.091797,
"Y": 6.9733276,
"Z": -611.2917
},
"TerritoryId": 146,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
64
]
},
{
"DataId": 2001435,
"Position": {
"X": 101.823364,
"Y": 7.248047,
"Z": -534.56934
},
"TerritoryId": 146,
"InteractionType": "Interact",
"CompletionQuestVariablesFlags": [
null,
null,
null,
null,
null,
128
]
} }
] ]
}, },
{ "Sequence": 3, {
"Steps": [ "Sequence": 3,
"Steps": [
{ {
"DataId": 1001739, "Position": {
"X": 164.75665,
"Y": 3.3963587,
"Z": -585.49005
},
"TerritoryId": 146,
"InteractionType": "WalkTo"
},
{
"DataId": 1001739,
"Position": { "Position": {
"X": -94.529724, "X": -94.529724,
"Y": 6.4999976, "Y": 6.4999976,
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
] ]
} }
]}, ]
{ "Sequence": 4, },
"Steps": [ {
"Sequence": 4,
"Steps": [
{ {
"DataId": 1004142, "DataId": 1004142,
"Position": { "Position": {
"X": -19.97406, "X": -19.97406,
"Y": -30.999985, "Y": -30.999985,
"Z": -33.951355 "Z": -33.951355
}, },
"TerritoryId": 145, "TerritoryId": 145,
"InteractionType": "SinglePlayerDuty", "InteractionType": "SinglePlayerDuty",
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone" "AetheryteShortcut": "Eastern Thanalan - Camp Drybone"
} }
]} ]
, },
{ "Sequence": 255, {
"Steps": [ "Sequence": 255,
"Steps": [
{ {
"DataId": 1001739, "DataId": 1001739,
"Position": { "Position": {
"X": -94.529724, "X": -94.529724,
"Y": 6.4999976, "Y": 6.4999976,
"Z": 39.81079 "Z": 39.81079
}, },
"TerritoryId": 131, "TerritoryId": 131,
"InteractionType": "CompleteQuest", "InteractionType": "CompleteQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [ "AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza", "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild" "[Ul'dah] Gladiators' Guild"
], ],
"NextQuestId": 1055 "NextQuestId": 1055
} }
]} ]
}
] ]
} }

View File

@ -0,0 +1,44 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1002277,
"Position": {
"X": -97.550964,
"Y": 7.05,
"Z": 23.605652
},
"TerritoryId": 131,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1001739,
"Position": {
"X": -94.529724,
"Y": 6.4999976,
"Z": 39.81079
},
"TerritoryId": 131,
"InteractionType": "CompleteQuest",
"DialogueChoices": [
{
"Type": "YesNo",
"Prompt": "TEXT_CLSGLA011_00285_Q2_000_1",
"Yes": true
}
],
"NextQuestId": 286
}
]
}
]
}

View File

@ -0,0 +1,154 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "liza",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1001739,
"Position": {
"X": -94.529724,
"Y": 6.4999976,
"Z": 39.81079
},
"TerritoryId": 131,
"InteractionType": "AcceptQuest"
}
]
},
{
"Sequence": 1,
"Steps": [
{
"Position": {
"X": 45.13088,
"Y": 3.889354,
"Z": -166.51999
},
"TerritoryId": 130,
"InteractionType": "WalkTo",
"AethernetShortcut": [
"[Ul'dah] Gladiators' Guild",
"[Ul'dah] Adventurers' Guild"
],
"SkipConditions": {
"StepIf": {
"InTerritory": [
141
]
}
}
},
{
"Position": {
"X": -116.10664,
"Y": 10.801613,
"Z": 276.979
},
"TerritoryId": 141,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"ComplexCombatData": [
{
"DataId": 351,
"MinimumKillCount": 3,
"CompletionQuestVariablesFlags": [
{
"Low": 3
},
null,
null,
null,
null,
null
]
},
{
"DataId": 141,
"MinimumKillCount": 3,
"CompletionQuestVariablesFlags": [
null,
{
"High": 3
},
null,
null,
null,
null
]
}
],
"CompletionQuestVariablesFlags": [
{
"Low": 3
},
{
"High": 3
},
null,
null,
null,
null
]
},
{
"Position": {
"X": 39.635372,
"Y": 3.2401803,
"Z": 273.41232
},
"TerritoryId": 141,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"ComplexCombatData": [
{
"DataId": 205,
"MinimumKillCount": 3,
"CompletionQuestVariablesFlags": [
null,
{
"Low": 3
},
null,
null,
null,
null
]
}
],
"CompletionQuestVariablesFlags": [
null,
{
"Low": 3
},
null,
null,
null,
null
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1001739,
"Position": {
"X": -94.529724,
"Y": 6.4999976,
"Z": 39.81079
},
"TerritoryId": 131,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild"
]
}
]
}
]
}

View File

@ -0,0 +1,163 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes",
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1001739,
"Position": {
"X": -94.529724,
"Y": 6.4999976,
"Z": 39.81079
},
"TerritoryId": 131,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true,
"InTerritory": [
131
]
}
}
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1002296,
"Position": {
"X": -139.42175,
"Y": 4.019726,
"Z": 205.0354
},
"TerritoryId": 141,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"AethernetShortcut": [
"[Ul'dah] Gladiators' Guild",
"[Ul'dah] Gate of Nald (Central Thanalan)"
],
"KillEnemyDataIds": [
1245
]
}
]
},
{
"Sequence": 2,
"Steps": [
{
"DataId": 1002296,
"Position": {
"X": -139.42175,
"Y": 4.019726,
"Z": 205.0354
},
"TerritoryId": 141,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1001739,
"Position": {
"X": -94.529724,
"Y": 6.4999976,
"Z": 39.81079
},
"TerritoryId": 131,
"InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true,
"InTerritory": [
131
]
}
}
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 2001756,
"Position": {
"X": 27.206787,
"Y": 12.985352,
"Z": 51.83484
},
"TerritoryId": 141,
"InteractionType": "SinglePlayerDuty",
"AethernetShortcut": [
"[Ul'dah] Gladiators' Guild",
"[Ul'dah] Gate of Nald (Central Thanalan)"
]
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 1003945,
"Position": {
"X": 24.917969,
"Y": 13,
"Z": 50.156372
},
"StopDistance": 5,
"TerritoryId": 141,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1001739,
"Position": {
"X": -94.529724,
"Y": 6.4999976,
"Z": 39.81079
},
"TerritoryId": 131,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Ul'dah",
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_CLSGLA101_00288_Q1_000_160",
"Answer": "TEXT_CLSGLA101_00288_A1_000_161"
}
],
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Gladiators' Guild"
],
"NextQuestId": 262
}
]
}
]
}

View File

@ -1,42 +1,42 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 255, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000895, {
"Position": { "DataId": 1000895,
"X": -335.74432, "Position": {
"Y": 12.899764, "X": -335.74432,
"Z": 1.3884888 "Y": 12.899764,
}, "Z": 1.3884888
"TerritoryId": 129, },
"InteractionType": "AcceptQuest", "TerritoryId": 129,
"AetheryteShortcut": "Limsa Lominsa", "InteractionType": "AcceptQuest",
"AethernetShortcut": [ "AetheryteShortcut": "Limsa Lominsa",
"[Limsa Lominsa] Aetheryte Plaza", "AethernetShortcut": [
"[Limsa Lominsa] Arcanists' Guild" "[Limsa Lominsa] Aetheryte Plaza",
], "[Limsa Lominsa] Arcanists' Guild"
"SkipConditions": { ],
"AetheryteShortcutIf": { "SkipConditions": {
"InSameTerritory": true, "AetheryteShortcutIf": {
"InTerritory": [ "InSameTerritory": true,
129 "InTerritory": [
] 129
} ]
}, }
"DialogueChoices": [ },
{ "DialogueChoices": [
"Type": "YesNo", {
"Prompt": "TEXT_CLSACN001_00451_Q1_000_000", "Type": "YesNo",
"Yes": true "Prompt": "TEXT_CLSACN001_00451_Q1_000_000",
} "Yes": true
], }
"NextQuestId": 452 ],
} "NextQuestId": 452
] }
} ]
] }
} ]
}

View File

@ -1,42 +1,42 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000895, { "DataId": 1000895,
"Position": { "Position": {
"X": -335.74432, "X": -335.74432,
"Y": 12.899764, "Y": 12.899764,
"Z": 1.3884888 "Z": 1.3884888
}, },
"TerritoryId": 129, "TerritoryId": 129,
"InteractionType": "AcceptQuest"} "InteractionType": "AcceptQuest"}
] ]
}, },
{ {
"Sequence": 255, "Sequence": 255,
"Steps": [ "Steps": [
{ "DataId": 1000909, { "DataId": 1000909,
"Position": { "Position": {
"X": -326.37524, "X": -326.37524,
"Y": 12.899658, "Y": 12.899658,
"Z": 9.994568 "Z": 9.994568
}, },
"TerritoryId": 129, "TerritoryId": 129,
"InteractionType": "CompleteQuest", "InteractionType": "CompleteQuest",
"DialogueChoices": [ "DialogueChoices": [
{ {
"Type": "YesNo", "Type": "YesNo",
"Prompt": "TEXT_CLSACN011_00452_Q1_000_000", "Prompt": "TEXT_CLSACN011_00452_Q1_000_000",
"Yes": true "Yes": true
} }
], ],
"NextQuestId": 454 "NextQuestId": 454
} }
] ]
} }
] ]
} }

View File

@ -1,18 +1,19 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000926, {
"Position": { "DataId": 1000926,
"X": -10.055725, "Position": {
"Y": 44.999794, "X": -10.055725,
"Z": -245.80762 "Y": 44.999794,
}, "Z": -245.80762
"TerritoryId": 128, },
"InteractionType": "Interact", "TerritoryId": 128,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Limsa Lominsa", "AetheryteShortcut": "Limsa Lominsa",
"AethernetShortcut": [ "AethernetShortcut": [
"[Limsa Lominsa] Aetheryte Plaza", "[Limsa Lominsa] Aetheryte Plaza",
@ -22,7 +23,7 @@
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
"InTerritory": [ "InTerritory": [
129, 128 128
] ]
} }
}, },
@ -32,9 +33,9 @@
"Prompt": "TEXT_CLSEXC001_00179_Q1_000_1", "Prompt": "TEXT_CLSEXC001_00179_Q1_000_1",
"Yes": true "Yes": true
} }
]} ]
] }
} ]
] }
} ]
}

View File

@ -1,42 +1,44 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1000926, {
"Position": { "DataId": 1000926,
"X": -10.055725, "Position": {
"Y": 44.999794, "X": -10.055725,
"Z": -245.80762 "Y": 44.999794,
}, "Z": -245.80762
"TerritoryId": 128, },
"InteractionType": "AcceptQuest"} "TerritoryId": 128,
] "InteractionType": "AcceptQuest"
}, }
{ ]
"Sequence": 255, },
"Steps": [ {
{ "DataId": 1000927, "Sequence": 255,
"Position": { "Steps": [
"X": -1.2055054, {
"Y": 44.999886, "DataId": 1000927,
"Z": -255.8786 "Position": {
}, "X": -1.2055054,
"TerritoryId": 128, "Y": 44.999886,
"InteractionType": "AcceptQuest", "Z": -255.8786
"DialogueChoices": [ },
{ "TerritoryId": 128,
"Type": "YesNo", "InteractionType": "CompleteQuest",
"Prompt": "TEXT_CLSEXC011_00310_Q2_000_1", "DialogueChoices": [
"Yes": true {
} "Type": "YesNo",
], "Prompt": "TEXT_CLSEXC011_00310_Q2_000_1",
"NextQuestId": 312 "Yes": true
} }
] ],
} "NextQuestId": 312
] }
} ]
}
]
}

View File

@ -1,21 +1,24 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1002283, {
"Position": { "DataId": 1002283,
"X": 134.90503, "Position": {
"Y": 7.5919275, "X": 134.90503,
"Z": 98.039185 "Y": 7.5919275,
}, "Z": 98.039185
"TerritoryId": 131, },
"InteractionType": "Interact", "TerritoryId": 131,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah", "AetheryteShortcut": "Ul'dah",
"AethernetShortcut": ["[Ul'dah] Aetheryte Plaza", "AethernetShortcut": [
"[Ul'dah] Weavers' Guild"], "[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Weavers' Guild"
],
"SkipConditions": { "SkipConditions": {
"AetheryteShortcutIf": { "AetheryteShortcutIf": {
"InSameTerritory": true, "InSameTerritory": true,
@ -30,9 +33,9 @@
"Prompt": "TEXT_CLSWVR001_00189_Q1_000_1", "Prompt": "TEXT_CLSWVR001_00189_Q1_000_1",
"Yes": true "Yes": true
} }
]} ]
] }
} ]
] }
} ]
}

View File

@ -1,42 +1,43 @@
{ {
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": "Cacahuetes", "Author": "Cacahuetes",
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
"Steps": [ "Steps": [
{ "DataId": 1002283, {
"Position": { "DataId": 1002283,
"X": 134.90503, "Position": {
"Y": 7.5919275, "X": 134.90503,
"Z": 98.039185 "Y": 7.5919275,
}, "Z": 98.039185
"TerritoryId": 131, },
"InteractionType": "AcceptQuest"} "TerritoryId": 131,
] "InteractionType": "AcceptQuest"
}, }
{ ]
"Sequence": 255, },
"Steps": [ {
{ "DataId": 1003818, "Sequence": 255,
"Position": { "Steps": [
"X": 157.36621, {
"Y": 7.7920074, "DataId": 1003818,
"Z": 98.924194 "Position": {
}, "X": 157.36621,
"TerritoryId": 131, "Y": 7.7920074,
"InteractionType": "CompleteQuest", "Z": 98.924194
"DialogueChoices": [ },
{ "TerritoryId": 131,
"Type": "YesNo", "InteractionType": "CompleteQuest",
"Prompt": "TEXT_CLSWVR011_00534_SYSTEM_Q0", "DialogueChoices": [
"Yes": true {
} "Type": "YesNo",
], "Prompt": "TEXT_CLSWVR011_00534_SYSTEM_Q0",
"NextQuestId": 534 "Yes": true
} }
] ]
} }
] ]
} }
]
}

View File

@ -88,7 +88,14 @@
"TerritoryId": 814, "TerritoryId": 814,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Kholusia - Wright", "AetheryteShortcut": "Kholusia - Wright",
"Fly": true "Fly": true,
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_BANPIX002_03684_Q1_000_000",
"Answer": "TEXT_BANPIX002_03684_A1_000_001"
}
]
} }
] ]
}, },

View File

@ -102,7 +102,8 @@
"Z": 342.85498 "Z": 342.85498
}, },
"TerritoryId": 1188, "TerritoryId": 1188,
"InteractionType": "CompleteQuest" "InteractionType": "CompleteQuest",
"Mount": true
} }
] ]
} }

View File

@ -20,6 +20,15 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"Position": {
"X": 323.5058,
"Y": -16.330368,
"Z": -254.18399
},
"TerritoryId": 1190,
"InteractionType": "WalkTo"
},
{ {
"DataId": 1050656, "DataId": 1050656,
"Position": { "Position": {

View File

@ -28,7 +28,8 @@
"Z": 427.2068 "Z": 427.2068
}, },
"TerritoryId": 1190, "TerritoryId": 1190,
"InteractionType": "Interact" "InteractionType": "Interact",
"Mount": true
} }
] ]
}, },
@ -50,6 +51,27 @@
{ {
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{
"Position": {
"X": 369.3906,
"Y": 5.9371996,
"Z": 417.16574
},
"TerritoryId": 1190,
"InteractionType": "WalkTo",
"$": "Shaaloani Hhusatahwi Saloon Stairs (top)"
},
{
"Position": {
"X": 359.11545,
"Y": 1.9823306,
"Z": 419.5714
},
"TerritoryId": 1190,
"InteractionType": "WalkTo",
"$": "Shaaloani Hhusatahwi Saloon Stairs (bottom)",
"DisableNavmesh": true
},
{ {
"DataId": 1051286, "DataId": 1051286,
"Position": { "Position": {

View File

@ -174,6 +174,17 @@
{ {
"Sequence": 255, "Sequence": 255,
"Steps": [ "Steps": [
{
"DataId": 2013948,
"Position": {
"X": 610.7728,
"Y": 9.597839,
"Z": 233.05103
},
"TerritoryId": 1189,
"InteractionType": "AttuneAetherCurrent",
"AetherCurrentId": 2818440
},
{ {
"DataId": 1051073, "DataId": 1051073,
"Position": { "Position": {

View File

@ -151,13 +151,21 @@
"Steps": [ "Steps": [
{ {
"Position": { "Position": {
"X": -510.96463, "X": -510.37933,
"Y": -0.47684515, "Y": -0.39999998,
"Z": -305.96155 "Z": -277.78192
}, },
"TerritoryId": 1188, "TerritoryId": 1188,
"InteractionType": "WalkTo", "InteractionType": "WalkTo"
"Comment": "Waypoint after swimming through the river" },
{
"Position": {
"X": -521.0261,
"Y": -0.40000004,
"Z": -329.19336
},
"TerritoryId": 1188,
"InteractionType": "WalkTo"
}, },
{ {
"DataId": 2013936, "DataId": 2013936,

View File

@ -12,7 +12,7 @@
"Y": 9.773315, "Y": 9.773315,
"Z": -533.135 "Z": -533.135
}, },
"StopDistance": 5, "StopDistance": 7,
"TerritoryId": 1188, "TerritoryId": 1188,
"InteractionType": "AcceptQuest" "InteractionType": "AcceptQuest"
} }
@ -135,6 +135,28 @@
{ {
"Sequence": 255, "Sequence": 255,
"Steps": [ "Steps": [
{
"DataId": 1048782,
"Position": {
"X": -68.52832,
"Y": 6.536739,
"Z": -486.53394
},
"TerritoryId": 1188,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5064
},
{
"DataId": 1051237,
"Position": {
"X": -251.20929,
"Y": 5.5572896,
"Z": -554.89435
},
"TerritoryId": 1188,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5081
},
{ {
"DataId": 1046537, "DataId": 1046537,
"Position": { "Position": {

View File

@ -21,6 +21,11 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"TerritoryId": 1187,
"InteractionType": "AttuneAetheryte",
"Aetheryte": "Urqopacha - Wachunpelo"
},
{ {
"DataId": 1046557, "DataId": 1046557,
"Position": { "Position": {
@ -39,11 +44,6 @@
128 128
] ]
}, },
{
"TerritoryId": 1187,
"InteractionType": "AttuneAetheryte",
"Aetheryte": "Urqopacha - Wachunpelo"
},
{ {
"DataId": 1046559, "DataId": 1046559,
"Position": { "Position": {

View File

@ -52,6 +52,30 @@
{ {
"Sequence": 255, "Sequence": 255,
"Steps": [ "Steps": [
{
"DataId": 1050684,
"Position": {
"X": 391.37854,
"Y": -156.07434,
"Z": -388.50995
},
"TerritoryId": 1187,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5039,
"Comment": "Traveler to the Rescue"
},
{
"DataId": 1051195,
"Position": {
"X": 383.29138,
"Y": -154.50243,
"Z": -420.49292
},
"TerritoryId": 1187,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5051,
"Comment": "Crisis of Corruption"
},
{ {
"DataId": 1046537, "DataId": 1046537,
"Position": { "Position": {

View File

@ -100,7 +100,7 @@
"Y": -19.725424, "Y": -19.725424,
"Z": 203.72314 "Z": 203.72314
}, },
"StopDistance": 5, "StopDistance": 7,
"TerritoryId": 1185, "TerritoryId": 1185,
"InteractionType": "CompleteQuest" "InteractionType": "CompleteQuest"
} }

View File

@ -15,6 +15,7 @@
"Y": -19.725424, "Y": -19.725424,
"Z": 203.72314 "Z": 203.72314
}, },
"StopDistance": 7,
"TerritoryId": 1185, "TerritoryId": 1185,
"InteractionType": "AcceptQuest" "InteractionType": "AcceptQuest"
} }

View File

@ -63,6 +63,28 @@
{ {
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{
"DataId": 1051263,
"Position": {
"X": -521.0193,
"Y": 121.63345,
"Z": 319.38647
},
"TerritoryId": 1188,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5085
},
{
"DataId": 1048855,
"Position": {
"X": -491.63043,
"Y": 121.63846,
"Z": 271.50366
},
"TerritoryId": 1188,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5074
},
{ {
"DataId": 1046876, "DataId": 1046876,
"Position": { "Position": {

View File

@ -12,6 +12,7 @@
"Y": 119.49004, "Y": 119.49004,
"Z": 190.72253 "Z": 190.72253
}, },
"StopDistance": 5,
"TerritoryId": 1188, "TerritoryId": 1188,
"InteractionType": "AcceptQuest" "InteractionType": "AcceptQuest"
} }
@ -29,7 +30,8 @@
}, },
"TerritoryId": 1188, "TerritoryId": 1188,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Kozama'uka - Earthenshire" "AetheryteShortcut": "Kozama'uka - Earthenshire",
"Fly": true
} }
] ]
}, },
@ -44,7 +46,8 @@
}, },
"TerritoryId": 1188, "TerritoryId": 1188,
"InteractionType": "WalkTo", "InteractionType": "WalkTo",
"TargetTerritoryId": 1187 "TargetTerritoryId": 1187,
"Fly": true
}, },
{ {
"DataId": 1046814, "DataId": 1046814,

View File

@ -21,6 +21,30 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"DataId": 1051207,
"Position": {
"X": 425.07043,
"Y": 118.935005,
"Z": 606.13403
},
"StopDistance": 5,
"TerritoryId": 1187,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5055
},
{
"DataId": 1048730,
"Position": {
"X": 399.0692,
"Y": 122.53533,
"Z": 542.9922
},
"StopDistance": 5,
"TerritoryId": 1187,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5047
},
{ {
"DataId": 1046926, "DataId": 1046926,
"Position": { "Position": {

View File

@ -21,6 +21,36 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"DataId": 1050872,
"Position": {
"X": -408.71295,
"Y": 20.420113,
"Z": -398.8861
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest",
"DialogueChoices": [
{
"Type": "List",
"ExcelSheet": "quest/051/KinGzd201_05110",
"Prompt": "TEXT_KINGZD201_05110_Q1_000_000",
"Answer": "TEXT_KINGZD201_05110_A1_000_001"
}
],
"PickUpQuestId": 5110
},
{
"DataId": 1051073,
"Position": {
"X": 41.09253,
"Y": 8.205902,
"Z": -629.8467
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5094
},
{ {
"DataId": 1047577, "DataId": 1047577,
"Position": { "Position": {
@ -36,28 +66,6 @@
{ {
"Sequence": 2, "Sequence": 2,
"Steps": [ "Steps": [
{
"DataId": 2013948,
"Position": {
"X": 610.7728,
"Y": 9.597839,
"Z": 233.05103
},
"TerritoryId": 1189,
"InteractionType": "AttuneAetherCurrent",
"AetherCurrentId": 2818440
},
{
"Position": {
"X": 614.25964,
"Y": -29.554798,
"Z": 202.75368
},
"TerritoryId": 1189,
"InteractionType": "WalkTo",
"DisableNavmesh": true,
"Mount": false
},
{ {
"DataId": 1048230, "DataId": 1048230,
"Position": { "Position": {
@ -66,8 +74,7 @@
"Z": 214.83167 "Z": 214.83167
}, },
"TerritoryId": 1189, "TerritoryId": 1189,
"InteractionType": "Interact", "InteractionType": "Interact"
"DisableNavmesh": true
} }
] ]
}, },

View File

@ -24,6 +24,28 @@
{ {
"Sequence": 1, "Sequence": 1,
"Steps": [ "Steps": [
{
"DataId": 1051052,
"Position": {
"X": 585.90063,
"Y": -142.49187,
"Z": 510.21594
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5103
},
{
"DataId": 1050884,
"Position": {
"X": 531.0597,
"Y": -142.49185,
"Z": 492.0271
},
"TerritoryId": 1189,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5114
},
{ {
"DataId": 1047701, "DataId": 1047701,
"Position": { "Position": {

View File

@ -52,6 +52,62 @@
{ {
"Sequence": 3, "Sequence": 3,
"Steps": [ "Steps": [
{
"DataId": 1050655,
"Position": {
"X": 289.02112,
"Y": -15.566031,
"Z": -478.78235
},
"TerritoryId": 1190,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5138
},
{
"Position": {
"X": 386.84927,
"Y": -0.84392637,
"Z": 435.0579
},
"TerritoryId": 1190,
"InteractionType": "WalkTo",
"AetheryteShortcut": "Shaaloani - Hhusatahwi",
"SkipConditions": {
"StepIf": {
"QuestsCompleted": [
5140
]
},
"AetheryteShortcutIf": {
"QuestsCompleted": [
5140
]
}
}
},
{
"DataId": 1051283,
"Position": {
"X": 374.19702,
"Y": -0.24794838,
"Z": 437.2472
},
"StopDistance": 6,
"TerritoryId": 1190,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5140
},
{
"DataId": 1049324,
"Position": {
"X": -108.659546,
"Y": 4.055336,
"Z": 319.5697
},
"TerritoryId": 1190,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5130
},
{ {
"DataId": 1047001, "DataId": 1047001,
"Position": { "Position": {
@ -61,6 +117,7 @@
}, },
"TerritoryId": 1190, "TerritoryId": 1190,
"InteractionType": "Interact", "InteractionType": "Interact",
"AetheryteShortcut": "Shaaloani - Sheshenewezi Springs",
"DialogueChoices": [ "DialogueChoices": [
{ {
"Type": "YesNo", "Type": "YesNo",

View File

@ -161,6 +161,17 @@
{ {
"Sequence": 7, "Sequence": 7,
"Steps": [ "Steps": [
{
"DataId": 1051316,
"Position": {
"X": -380.30066,
"Y": 18.718708,
"Z": -114.24432
},
"TerritoryId": 1190,
"InteractionType": "AcceptQuest",
"PickUpQuestId": 5144
},
{ {
"DataId": 1047082, "DataId": 1047082,
"Position": { "Position": {

View File

@ -234,13 +234,13 @@
"QuestsAccepted": { "QuestsAccepted": {
"type": "array", "type": "array",
"items": { "items": {
"type": "number" "type": ["number", "string"]
} }
}, },
"QuestsCompleted": { "QuestsCompleted": {
"type": "array", "type": "array",
"items": { "items": {
"type": "number" "type": ["number", "string"]
} }
}, },
"AetheryteLocked": { "AetheryteLocked": {
@ -290,6 +290,18 @@
"type": "integer" "type": "integer"
} }
}, },
"QuestsAccepted": {
"type": "array",
"items": {
"type": ["number", "string"]
}
},
"QuestsCompleted": {
"type": "array",
"items": {
"type": ["number", "string"]
}
},
"AetheryteLocked": { "AetheryteLocked": {
"$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte"
}, },

View File

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Questionable.Model.Questing.Converter;
public sealed class ElementIdListConverter : JsonConverter<List<ElementId>>
{
public override List<ElementId> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType != JsonTokenType.StartArray)
throw new JsonException();
reader.Read();
List<ElementId> values = [];
while (reader.TokenType != JsonTokenType.EndArray)
{
if (reader.TokenType == JsonTokenType.Number)
values.Add(new QuestId(reader.GetUInt16()));
else
values.Add(ElementId.FromString(reader.GetString() ?? throw new JsonException()));
reader.Read();
}
return values;
}
public override void Write(Utf8JsonWriter writer, List<ElementId> value, JsonSerializerOptions options)
{
throw new NotImplementedException();
}
}

View File

@ -1,5 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text.Json.Serialization;
using Questionable.Model.Common; using Questionable.Model.Common;
using Questionable.Model.Questing.Converter;
namespace Questionable.Model.Questing; namespace Questionable.Model.Questing;
@ -8,6 +10,13 @@ public sealed class SkipAetheryteCondition
public bool Never { get; set; } public bool Never { get; set; }
public bool InSameTerritory { get; set; } public bool InSameTerritory { get; set; }
public List<ushort> InTerritory { get; set; } = new(); public List<ushort> InTerritory { get; set; } = new();
[JsonConverter(typeof(ElementIdListConverter))]
public List<ElementId> QuestsAccepted { get; set; } = new();
[JsonConverter(typeof(ElementIdListConverter))]
public List<ElementId> QuestsCompleted { get; set; } = new();
public EAetheryteLocation? AetheryteLocked { get; set; } public EAetheryteLocation? AetheryteLocked { get; set; }
public EAetheryteLocation? AetheryteUnlocked { get; set; } public EAetheryteLocation? AetheryteUnlocked { get; set; }
public bool RequiredQuestVariablesNotMet { get; set; } public bool RequiredQuestVariablesNotMet { get; set; }

View File

@ -1,6 +1,8 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text.Json.Serialization;
using Questionable.Model.Common; using Questionable.Model.Common;
using Questionable.Model.Questing.Converter;
namespace Questionable.Model.Questing; namespace Questionable.Model.Questing;
@ -14,8 +16,13 @@ public sealed class SkipStepConditions
public List<ushort> InTerritory { get; set; } = new(); public List<ushort> InTerritory { get; set; } = new();
public List<ushort> NotInTerritory { get; set; } = new(); public List<ushort> NotInTerritory { get; set; } = new();
public SkipItemConditions? Item { get; set; } public SkipItemConditions? Item { get; set; }
[JsonConverter(typeof(ElementIdListConverter))]
public List<ElementId> QuestsAccepted { get; set; } = new(); public List<ElementId> QuestsAccepted { get; set; } = new();
[JsonConverter(typeof(ElementIdListConverter))]
public List<ElementId> QuestsCompleted { get; set; } = new(); public List<ElementId> QuestsCompleted { get; set; } = new();
public EAetheryteLocation? AetheryteLocked { get; set; } public EAetheryteLocation? AetheryteLocked { get; set; }
public EAetheryteLocation? AetheryteUnlocked { get; set; } public EAetheryteLocation? AetheryteUnlocked { get; set; }
public NearPositionCondition? NearPosition { get; set; } public NearPositionCondition? NearPosition { get; set; }

View File

@ -138,6 +138,8 @@ internal sealed class QuestController : MiniTaskController<QuestController>, IDi
/// </summary> /// </summary>
public QuestProgress? PendingQuest => _pendingQuest; public QuestProgress? PendingQuest => _pendingQuest;
public List<Quest> ManualPriorityQuests { get; } = [];
public string? DebugState { get; private set; } public string? DebugState { get; private set; }
public void Reload() public void Reload()
@ -291,7 +293,13 @@ internal sealed class QuestController : MiniTaskController<QuestController>, IDi
} }
else else
{ {
(ElementId? currentQuestId, currentSequence) = _questFunctions.GetCurrentQuest(); (ElementId? currentQuestId, currentSequence) =
ManualPriorityQuests
.Where(x => _questFunctions.IsReadyToAcceptQuest(x.Id) || _questFunctions.IsQuestAccepted(x.Id))
.Select(x =>
((ElementId?, byte)?)(x.Id, _questFunctions.GetQuestProgressInfo(x.Id)?.Sequence ?? 0))
.FirstOrDefault() ??
_questFunctions.GetCurrentQuest();
if (currentQuestId == null || currentQuestId.Value == 0) if (currentQuestId == null || currentQuestId.Value == 0)
{ {
if (_startedQuest != null) if (_startedQuest != null)
@ -719,6 +727,9 @@ internal sealed class QuestController : MiniTaskController<QuestController>, IDi
if (type != ECurrentQuestType.Normal) if (type != ECurrentQuestType.Normal)
return false; return false;
if (currentQuest.Quest.Info.AlliedSociety != EAlliedSociety.None)
return false;
QuestSequence? currentSequence = currentQuest.Quest.FindSequence(currentQuest.Sequence); QuestSequence? currentSequence = currentQuest.Quest.FindSequence(currentQuest.Sequence);
if (currentQuest.Step > 0) if (currentQuest.Step > 0)
return false; return false;

View File

@ -29,7 +29,7 @@ internal static class Mount
public ITask Unmount() public ITask Unmount()
{ {
return new UnmountTask(condition, loggerFactory.CreateLogger<UnmountTask>(), gameFunctions); return new UnmountTask(condition, loggerFactory.CreateLogger<UnmountTask>(), gameFunctions, clientState);
} }
} }
@ -119,7 +119,11 @@ internal static class Mount
public override string ToString() => "Mount"; public override string ToString() => "Mount";
} }
private sealed class UnmountTask(ICondition condition, ILogger<UnmountTask> logger, GameFunctions gameFunctions) private sealed class UnmountTask(
ICondition condition,
ILogger<UnmountTask> logger,
GameFunctions gameFunctions,
IClientState clientState)
: ITask : ITask
{ {
private bool _unmountTriggered; private bool _unmountTriggered;
@ -148,6 +152,9 @@ internal static class Mount
if (_continueAt >= DateTime.Now) if (_continueAt >= DateTime.Now)
return ETaskResult.StillRunning; return ETaskResult.StillRunning;
if (IsUnmounting())
return ETaskResult.StillRunning;
if (!_unmountTriggered) if (!_unmountTriggered)
{ {
// if still flying, we still need to land // if still flying, we still need to land
@ -172,6 +179,8 @@ internal static class Mount
: ETaskResult.TaskComplete; : ETaskResult.TaskComplete;
} }
private unsafe bool IsUnmounting() => **(byte**)(clientState.LocalPlayer!.Address + 1432) == 1;
public override string ToString() => "Unmount"; public override string ToString() => "Unmount";
} }

View File

@ -41,6 +41,7 @@ internal static class Combat
ArgumentNullException.ThrowIfNull(step.DataId); ArgumentNullException.ThrowIfNull(step.DataId);
yield return interactFactory.Interact(step.DataId.Value, quest, EInteractionType.None, true); yield return interactFactory.Interact(step.DataId.Value, quest, EInteractionType.None, true);
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2));
yield return CreateTask(quest, sequence, step); yield return CreateTask(quest, sequence, step);
break; break;
} }
@ -52,11 +53,15 @@ internal static class Combat
yield return useItemFactory.OnObject(quest.Id, step.DataId.Value, step.ItemId.Value, yield return useItemFactory.OnObject(quest.Id, step.DataId.Value, step.ItemId.Value,
step.CompletionQuestVariablesFlags, true); step.CompletionQuestVariablesFlags, true);
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2));
yield return CreateTask(quest, sequence, step); yield return CreateTask(quest, sequence, step);
break; break;
} }
case EEnemySpawnType.AutoOnEnterArea: case EEnemySpawnType.AutoOnEnterArea:
if (step.CombatDelaySecondsAtStart == null)
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2));
// automatically triggered when entering area, i.e. only unmount // automatically triggered when entering area, i.e. only unmount
yield return CreateTask(quest, sequence, step); yield return CreateTask(quest, sequence, step);
break; break;

View File

@ -24,6 +24,7 @@ internal static class AethernetShortcut
MovementController movementController, MovementController movementController,
AetheryteFunctions aetheryteFunctions, AetheryteFunctions aetheryteFunctions,
GameFunctions gameFunctions, GameFunctions gameFunctions,
QuestFunctions questFunctions,
IClientState clientState, IClientState clientState,
AetheryteData aetheryteData, AetheryteData aetheryteData,
TerritoryData territoryData, TerritoryData territoryData,
@ -46,8 +47,8 @@ internal static class AethernetShortcut
public ITask Use(EAetheryteLocation from, EAetheryteLocation to, SkipAetheryteCondition? skipConditions = null) public ITask Use(EAetheryteLocation from, EAetheryteLocation to, SkipAetheryteCondition? skipConditions = null)
{ {
return new UseAethernetShortcut(from, to, skipConditions ?? new(), return new UseAethernetShortcut(from, to, skipConditions ?? new(),
loggerFactory.CreateLogger<UseAethernetShortcut>(), aetheryteFunctions, gameFunctions, clientState, loggerFactory.CreateLogger<UseAethernetShortcut>(), aetheryteFunctions, gameFunctions, questFunctions,
aetheryteData, territoryData, lifestreamIpc, movementController, condition); clientState, aetheryteData, territoryData, lifestreamIpc, movementController, condition);
} }
} }
@ -58,6 +59,7 @@ internal static class AethernetShortcut
ILogger<UseAethernetShortcut> logger, ILogger<UseAethernetShortcut> logger,
AetheryteFunctions aetheryteFunctions, AetheryteFunctions aetheryteFunctions,
GameFunctions gameFunctions, GameFunctions gameFunctions,
QuestFunctions questFunctions,
IClientState clientState, IClientState clientState,
AetheryteData aetheryteData, AetheryteData aetheryteData,
TerritoryData territoryData, TerritoryData territoryData,
@ -90,6 +92,20 @@ internal static class AethernetShortcut
return false; return false;
} }
if (skipConditions.QuestsCompleted.Count > 0 &&
skipConditions.QuestsCompleted.All(questFunctions.IsQuestComplete))
{
logger.LogInformation("Skipping aethernet shortcut, all prequisite quests are complete");
return true;
}
if (skipConditions.QuestsAccepted.Count > 0 &&
skipConditions.QuestsAccepted.All(questFunctions.IsQuestAccepted))
{
logger.LogInformation("Skipping aethernet shortcut, all prequisite quests are accepted");
return true;
}
if (skipConditions.AetheryteLocked != null && if (skipConditions.AetheryteLocked != null &&
!aetheryteFunctions.IsAetheryteUnlocked(skipConditions.AetheryteLocked.Value)) !aetheryteFunctions.IsAetheryteUnlocked(skipConditions.AetheryteLocked.Value))
{ {

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Numerics; using System.Numerics;
using Dalamud.Plugin.Services; using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions; using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
@ -93,6 +94,20 @@ internal static class AetheryteShortcut
return true; return true;
} }
if (skipConditions.QuestsCompleted.Count > 0 &&
skipConditions.QuestsCompleted.All(questFunctions.IsQuestComplete))
{
logger.LogInformation("Skipping aetheryte, all prequisite quests are complete");
return true;
}
if (skipConditions.QuestsAccepted.Count > 0 &&
skipConditions.QuestsAccepted.All(questFunctions.IsQuestAccepted))
{
logger.LogInformation("Skipping aetheryte, all prequisite quests are accepted");
return true;
}
if (skipConditions.AetheryteLocked != null && if (skipConditions.AetheryteLocked != null &&
!aetheryteFunctions.IsAetheryteUnlocked(skipConditions.AetheryteLocked.Value)) !aetheryteFunctions.IsAetheryteUnlocked(skipConditions.AetheryteLocked.Value))
{ {

View File

@ -36,6 +36,7 @@ internal sealed class DalamudInitializer : IDisposable
QuestSelectionWindow questSelectionWindow, QuestSelectionWindow questSelectionWindow,
QuestValidationWindow questValidationWindow, QuestValidationWindow questValidationWindow,
JournalProgressWindow journalProgressWindow, JournalProgressWindow journalProgressWindow,
PriorityWindow priorityWindow,
IToastGui toastGui, IToastGui toastGui,
ILogger<DalamudInitializer> logger) ILogger<DalamudInitializer> logger)
{ {
@ -55,6 +56,7 @@ internal sealed class DalamudInitializer : IDisposable
_windowSystem.AddWindow(questSelectionWindow); _windowSystem.AddWindow(questSelectionWindow);
_windowSystem.AddWindow(questValidationWindow); _windowSystem.AddWindow(questValidationWindow);
_windowSystem.AddWindow(journalProgressWindow); _windowSystem.AddWindow(journalProgressWindow);
_windowSystem.AddWindow(priorityWindow);
_pluginInterface.UiBuilder.Draw += _windowSystem.Draw; _pluginInterface.UiBuilder.Draw += _windowSystem.Draw;
_pluginInterface.UiBuilder.OpenMainUi += _questWindow.Toggle; _pluginInterface.UiBuilder.OpenMainUi += _questWindow.Toggle;

View File

@ -8,7 +8,8 @@ using LLib.GameData;
using Lumina.Excel.GeneratedSheets; using Lumina.Excel.GeneratedSheets;
using Questionable.Model; using Questionable.Model;
using Questionable.Model.Questing; using Questionable.Model.Questing;
using Quest = Lumina.Excel.GeneratedSheets.Quest; using Leve = Lumina.Excel.GeneratedSheets2.Leve;
using Quest = Lumina.Excel.GeneratedSheets2.Quest;
namespace Questionable.Data; namespace Questionable.Data;
@ -62,7 +63,7 @@ internal sealed class QuestData
// workaround because the game doesn't require completion of the CT questline through normal means // workaround because the game doesn't require completion of the CT questline through normal means
QuestInfo aTimeToEveryPurpose = (QuestInfo)_quests[new QuestId(425)]; QuestInfo aTimeToEveryPurpose = (QuestInfo)_quests[new QuestId(425)];
aTimeToEveryPurpose.AddPreviousQuest(new QuestId(495)); aTimeToEveryPurpose.AddPreviousQuest(new QuestInfo.PreviousQuestInfo(new QuestId(495)));
} }
public IQuestInfo GetQuestInfo(ElementId elementId) public IQuestInfo GetQuestInfo(ElementId elementId)

View File

@ -431,7 +431,8 @@ internal sealed unsafe class GameFunctions
if (!AgentSatisfactionSupply.Instance()->IsAgentActive()) if (!AgentSatisfactionSupply.Instance()->IsAgentActive())
return false; return false;
var flags = _condition.AsReadOnlySet(); var flags = _condition.AsReadOnlySet().ToHashSet();
flags.Remove(ConditionFlag.InDutyQueue); // irrelevant
return flags.Count == 2 && return flags.Count == 2 &&
flags.Contains(ConditionFlag.NormalConditions) && flags.Contains(ConditionFlag.NormalConditions) &&
flags.Contains(ConditionFlag.OccupiedInQuestEvent); flags.Contains(ConditionFlag.OccupiedInQuestEvent);

View File

@ -449,6 +449,18 @@ internal sealed unsafe class QuestFunctions
} }
public bool IsQuestLocked(QuestId questId, ElementId? extraCompletedQuest = null) public bool IsQuestLocked(QuestId questId, ElementId? extraCompletedQuest = null)
{
if (IsQuestUnobtainable(questId, extraCompletedQuest))
return true;
var questInfo = (QuestInfo)_questData.GetQuestInfo(questId);
if (questInfo.GrandCompany != GrandCompany.None && questInfo.GrandCompany != GetGrandCompany())
return true;
return !HasCompletedPreviousQuests(questInfo, extraCompletedQuest) || !HasCompletedPreviousInstances(questInfo);
}
public bool IsQuestUnobtainable(QuestId questId, ElementId? extraCompletedQuest = null)
{ {
var questInfo = (QuestInfo)_questData.GetQuestInfo(questId); var questInfo = (QuestInfo)_questData.GetQuestInfo(questId);
if (questInfo.QuestLocks.Count > 0) if (questInfo.QuestLocks.Count > 0)
@ -460,13 +472,10 @@ internal sealed unsafe class QuestFunctions
return true; return true;
} }
if (questInfo.GrandCompany != GrandCompany.None && questInfo.GrandCompany != GetGrandCompany())
return true;
if (_questData.GetLockedClassQuests().Contains(questId)) if (_questData.GetLockedClassQuests().Contains(questId))
return true; return true;
return !HasCompletedPreviousQuests(questInfo, extraCompletedQuest) || !HasCompletedPreviousInstances(questInfo); return false;
} }
public bool IsQuestLocked(LeveId leveId) public bool IsQuestLocked(LeveId leveId)
@ -485,7 +494,8 @@ internal sealed unsafe class QuestFunctions
if (questInfo.PreviousQuests.Count == 0) if (questInfo.PreviousQuests.Count == 0)
return true; return true;
var completedQuests = questInfo.PreviousQuests.Count(x => IsQuestComplete(x) || x.Equals(extraCompletedQuest)); var completedQuests = questInfo.PreviousQuests.Count(x =>
HasEnoughProgressOnPreviousQuest(x) || x.QuestId.Equals(extraCompletedQuest));
if (questInfo.PreviousQuestJoin == QuestInfo.QuestJoin.All && if (questInfo.PreviousQuestJoin == QuestInfo.QuestJoin.All &&
questInfo.PreviousQuests.Count == completedQuests) questInfo.PreviousQuests.Count == completedQuests)
return true; return true;
@ -495,6 +505,20 @@ internal sealed unsafe class QuestFunctions
return false; return false;
} }
private bool HasEnoughProgressOnPreviousQuest(QuestInfo.PreviousQuestInfo previousQuestInfo)
{
if (IsQuestComplete(previousQuestInfo.QuestId))
return true;
if (previousQuestInfo.Sequence != 0 && IsQuestAccepted(previousQuestInfo.QuestId))
{
var progress = GetQuestProgressInfo(previousQuestInfo.QuestId);
return progress != null && progress.Sequence >= previousQuestInfo.Sequence;
}
return false;
}
private static bool HasCompletedPreviousInstances(QuestInfo questInfo) private static bool HasCompletedPreviousInstances(QuestInfo questInfo)
{ {
if (questInfo.PreviousInstanceContent.Count == 0) if (questInfo.PreviousInstanceContent.Count == 0)

View File

@ -1,6 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using LLib.GameData; using LLib.GameData;
using Lumina.Excel.GeneratedSheets; using Lumina.Excel.GeneratedSheets2;
using Questionable.Model.Questing; using Questionable.Model.Questing;
namespace Questionable.Model; namespace Questionable.Model;
@ -14,7 +14,7 @@ internal sealed class LeveInfo : IQuestInfo
Level = leve.ClassJobLevel; Level = leve.ClassJobLevel;
JournalGenre = leve.JournalGenre.Row; JournalGenre = leve.JournalGenre.Row;
SortKey = QuestId.Value; SortKey = QuestId.Value;
IssuerDataId = leve.LevelLevemete.Value!.Object; IssuerDataId = leve.LevelLevemete.Value!.Object.Row;
ClassJobs = QuestInfoUtils.AsList(leve.ClassJobCategory.Value!); ClassJobs = QuestInfoUtils.AsList(leve.ClassJobCategory.Value!);
Expansion = (EExpansionVersion)leve.LevelLevemete.Value.Territory.Value!.ExVersion.Row; Expansion = (EExpansionVersion)leve.LevelLevemete.Value.Territory.Value!.ExVersion.Row;
} }

View File

@ -5,7 +5,7 @@ using FFXIVClientStructs.FFXIV.Client.UI.Agent;
using JetBrains.Annotations; using JetBrains.Annotations;
using LLib.GameData; using LLib.GameData;
using Questionable.Model.Questing; using Questionable.Model.Questing;
using ExcelQuest = Lumina.Excel.GeneratedSheets.Quest; using ExcelQuest = Lumina.Excel.GeneratedSheets2.Quest;
namespace Questionable.Model; namespace Questionable.Model;
@ -31,13 +31,18 @@ internal sealed class QuestInfo : IQuestInfo
}; };
Name = $"{quest.Name}{suffix}"; Name = $"{quest.Name}{suffix}";
Level = quest.ClassJobLevel0; Level = quest.ClassJobLevel[0];
IssuerDataId = quest.IssuerStart; IssuerDataId = quest.IssuerStart.Row;
IsRepeatable = quest.IsRepeatable; IsRepeatable = quest.IsRepeatable;
PreviousQuests = quest.PreviousQuest PreviousQuests =
.Select(x => new QuestId((ushort)(x.Row & 0xFFFF))) new List<PreviousQuestInfo>
.Where(x => x.Value != 0) {
.ToImmutableList(); new(new QuestId((ushort)(quest.PreviousQuest[0].Row & 0xFFFF)), quest.Unknown7),
new(new QuestId((ushort)(quest.PreviousQuest[1].Row & 0xFFFF))),
new(new QuestId((ushort)(quest.PreviousQuest[1].Row & 0xFFFF)))
}
.Where(x => x.QuestId.Value != 0)
.ToImmutableList();
PreviousQuestJoin = (QuestJoin)quest.PreviousQuestJoin; PreviousQuestJoin = (QuestJoin)quest.PreviousQuestJoin;
QuestLocks = quest.QuestLock QuestLocks = quest.QuestLock
.Select(x => new QuestId((ushort)(x.Row & 0xFFFFF))) .Select(x => new QuestId((ushort)(x.Row & 0xFFFFF)))
@ -47,7 +52,7 @@ internal sealed class QuestInfo : IQuestInfo
JournalGenre = quest.JournalGenre?.Row; JournalGenre = quest.JournalGenre?.Row;
SortKey = quest.SortKey; SortKey = quest.SortKey;
IsMainScenarioQuest = quest.JournalGenre?.Value?.JournalCategory?.Value?.JournalSection?.Row is 0 or 1; IsMainScenarioQuest = quest.JournalGenre?.Value?.JournalCategory?.Value?.JournalSection?.Row is 0 or 1;
CompletesInstantly = quest.ToDoCompleteSeq[0] == 0; CompletesInstantly = quest.TodoParams[0].ToDoCompleteSeq == 0;
PreviousInstanceContent = quest.InstanceContent.Select(x => (ushort)x.Row).Where(x => x != 0).ToList(); PreviousInstanceContent = quest.InstanceContent.Select(x => (ushort)x.Row).Where(x => x != 0).ToList();
PreviousInstanceContentJoin = (QuestJoin)quest.InstanceContentJoin; PreviousInstanceContentJoin = (QuestJoin)quest.InstanceContentJoin;
GrandCompany = (GrandCompany)quest.GrandCompany.Row; GrandCompany = (GrandCompany)quest.GrandCompany.Row;
@ -64,7 +69,7 @@ internal sealed class QuestInfo : IQuestInfo
public ushort Level { get; } public ushort Level { get; }
public uint IssuerDataId { get; } public uint IssuerDataId { get; }
public bool IsRepeatable { get; } public bool IsRepeatable { get; }
public ImmutableList<QuestId> PreviousQuests { get; set; } public ImmutableList<PreviousQuestInfo> PreviousQuests { get; set; }
public QuestJoin PreviousQuestJoin { get; } public QuestJoin PreviousQuestJoin { get; }
public ImmutableList<QuestId> QuestLocks { get; } public ImmutableList<QuestId> QuestLocks { get; }
public QuestJoin QuestLockJoin { get; } public QuestJoin QuestLockJoin { get; }
@ -89,8 +94,10 @@ internal sealed class QuestInfo : IQuestInfo
AtLeastOne = 2, AtLeastOne = 2,
} }
public void AddPreviousQuest(QuestId questId) public void AddPreviousQuest(PreviousQuestInfo questId)
{ {
PreviousQuests = [..PreviousQuests, questId]; PreviousQuests = [..PreviousQuests, questId];
} }
public sealed record PreviousQuestInfo(QuestId QuestId, byte Sequence = 0);
} }

View File

@ -1,7 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using LLib.GameData; using LLib.GameData;
using Lumina.Excel.GeneratedSheets; using Lumina.Excel.GeneratedSheets2;
namespace Questionable.Model; namespace Questionable.Model;
@ -57,8 +57,8 @@ internal static class QuestInfoUtils
{ EClassJob.Dancer, classJobCategory.DNC }, { EClassJob.Dancer, classJobCategory.DNC },
{ EClassJob.Reaper, classJobCategory.RPR }, { EClassJob.Reaper, classJobCategory.RPR },
{ EClassJob.Sage, classJobCategory.SGE }, { EClassJob.Sage, classJobCategory.SGE },
{ EClassJob.Viper, classJobCategory.VPR }, { EClassJob.Viper, classJobCategory.Unknown1 },
{ EClassJob.Pictomancer, classJobCategory.PCT } { EClassJob.Pictomancer, classJobCategory.Unknown2 }
} }
.Where(y => y.Value) .Where(y => y.Value)
.Select(y => y.Key) .Select(y => y.Key)

View File

@ -208,6 +208,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin
serviceCollection.AddSingleton<QuestSelectionWindow>(); serviceCollection.AddSingleton<QuestSelectionWindow>();
serviceCollection.AddSingleton<QuestValidationWindow>(); serviceCollection.AddSingleton<QuestValidationWindow>();
serviceCollection.AddSingleton<JournalProgressWindow>(); serviceCollection.AddSingleton<JournalProgressWindow>();
serviceCollection.AddSingleton<PriorityWindow>();
} }
private static void AddQuestValidators(ServiceCollection serviceCollection) private static void AddQuestValidators(ServiceCollection serviceCollection)

View File

@ -0,0 +1,223 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using Dalamud.Interface;
using Dalamud.Interface.Colors;
using Dalamud.Interface.Components;
using Dalamud.Plugin;
using ImGuiNET;
using LLib.ImGui;
using Questionable.Controller;
using Questionable.Functions;
using Questionable.Model;
using Questionable.Model.Questing;
using Questionable.Windows.QuestComponents;
namespace Questionable.Windows;
internal sealed class PriorityWindow : LWindow
{
private readonly QuestController _questController;
private readonly QuestRegistry _questRegistry;
private readonly QuestFunctions _questFunctions;
private readonly QuestTooltipComponent _questTooltipComponent;
private readonly UiUtils _uiUtils;
private readonly IDalamudPluginInterface _pluginInterface;
private string _searchString = string.Empty;
private ElementId? _draggedItem;
public PriorityWindow(QuestController questController, QuestRegistry questRegistry, QuestFunctions questFunctions,
QuestTooltipComponent questTooltipComponent, UiUtils uiUtils, IDalamudPluginInterface pluginInterface)
: base("Quest Priority###QuestionableQuestPriority")
{
_questController = questController;
_questRegistry = questRegistry;
_questFunctions = questFunctions;
_questTooltipComponent = questTooltipComponent;
_uiUtils = uiUtils;
_pluginInterface = pluginInterface;
Size = new Vector2(400, 400);
SizeCondition = ImGuiCond.Once;
SizeConstraints = new WindowSizeConstraints
{
MinimumSize = new Vector2(400, 400),
MaximumSize = new Vector2(400, 999)
};
}
public override void Draw()
{
ImGui.Text("Quests to do first:");
DrawQuestFilter();
DrawQuestList();
ImGui.Spacing();
ImGui.Separator();
ImGui.Spacing();
ImGui.TextWrapped(
"If you have an active MSQ quest, Questionable will generally try to do:");
ImGui.BulletText("'Priority' quests: class quests, ARR primals, ARR raids");
ImGui.BulletText(
"Supported quests in your 'To-Do list'\n(quests from your Journal that are always on-screen)");
ImGui.BulletText("MSQ quest (if available, unless it is marked as 'ignored'\nin your Journal)");
ImGui.TextWrapped(
"If you don't have any active MSQ quest, it will always try to pick up the next quest in the MSQ first.");
}
private void DrawQuestFilter()
{
ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X);
if (ImGui.BeginCombo($"##QuestSelection", "Add Quest...", ImGuiComboFlags.HeightLarge))
{
ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X);
bool addFirst = ImGui.InputTextWithHint("", "Filter...", ref _searchString, 256,
ImGuiInputTextFlags.AutoSelectAll | ImGuiInputTextFlags.EnterReturnsTrue);
IEnumerable<Quest> foundQuests;
if (!string.IsNullOrEmpty(_searchString))
{
foundQuests = _questRegistry.AllQuests
.Where(x => x.Info.Name.Contains(_searchString, StringComparison.CurrentCultureIgnoreCase))
.Where(x => x.Id is not QuestId questId || !_questFunctions.IsQuestUnobtainable(questId));
}
else
{
foundQuests = _questRegistry.AllQuests.Where(x => _questFunctions.IsQuestAccepted(x.Id));
}
foreach (var quest in foundQuests)
{
if (quest.Info.IsMainScenarioQuest || _questController.ManualPriorityQuests.Contains(quest))
continue;
bool addThis = ImGui.Selectable(quest.Info.Name);
if (addThis || addFirst)
{
_questController.ManualPriorityQuests.Add(quest);
if (addFirst)
{
ImGui.CloseCurrentPopup();
addFirst = false;
}
}
}
ImGui.EndCombo();
}
ImGui.Spacing();
}
private void DrawQuestList()
{
List<Quest> priorityQuests = _questController.ManualPriorityQuests;
Quest? itemToRemove = null;
Quest? itemToAdd = null;
int indexToAdd = 0;
float width = ImGui.GetContentRegionAvail().X;
List<(Vector2 TopLeft, Vector2 BottomRight)> itemPositions = [];
for (int i = 0; i < priorityQuests.Count; ++i)
{
Vector2 topLeft = ImGui.GetCursorScreenPos() +
new Vector2(0, -ImGui.GetStyle().ItemSpacing.Y / 2);
var quest = priorityQuests[i];
ImGui.PushID($"Quest{quest.Id}");
var style = _uiUtils.GetQuestStyle(quest.Id);
bool hovered;
using (var _ = _pluginInterface.UiBuilder.IconFontFixedWidthHandle.Push())
{
ImGui.AlignTextToFramePadding();
ImGui.TextColored(style.Color, style.Icon.ToIconString());
hovered = ImGui.IsItemHovered();
}
ImGui.SameLine();
ImGui.AlignTextToFramePadding();
ImGui.Text(quest.Info.Name);
hovered |= ImGui.IsItemHovered();
if (hovered)
_questTooltipComponent.Draw(quest.Info);
if (priorityQuests.Count > 1)
{
ImGui.PushFont(UiBuilder.IconFont);
ImGui.SameLine(ImGui.GetContentRegionAvail().X +
ImGui.GetStyle().WindowPadding.X -
ImGui.CalcTextSize(FontAwesomeIcon.ArrowsUpDown.ToIconString()).X -
ImGui.CalcTextSize(FontAwesomeIcon.Times.ToIconString()).X -
ImGui.GetStyle().FramePadding.X * 4 -
ImGui.GetStyle().ItemSpacing.X);
ImGui.PopFont();
if (_draggedItem == quest.Id)
{
ImGuiComponents.IconButton("##Move", FontAwesomeIcon.ArrowsUpDown,
ImGui.ColorConvertU32ToFloat4(ImGui.GetColorU32(ImGuiCol.ButtonActive)));
}
else
ImGuiComponents.IconButton("##Move", FontAwesomeIcon.ArrowsUpDown);
if (_draggedItem == null && ImGui.IsItemActive() && ImGui.IsMouseDragging(ImGuiMouseButton.Left))
_draggedItem = quest.Id;
ImGui.SameLine();
}
else
{
ImGui.PushFont(UiBuilder.IconFont);
ImGui.SameLine(ImGui.GetContentRegionAvail().X +
ImGui.GetStyle().WindowPadding.X -
ImGui.CalcTextSize(FontAwesomeIcon.Times.ToIconString()).X -
ImGui.GetStyle().FramePadding.X * 2);
ImGui.PopFont();
}
if (ImGuiComponents.IconButton($"##Remove{i}", FontAwesomeIcon.Times))
itemToRemove = quest;
ImGui.PopID();
Vector2 bottomRight = new Vector2(topLeft.X + width,
ImGui.GetCursorScreenPos().Y - ImGui.GetStyle().ItemSpacing.Y + 2);
itemPositions.Add((topLeft, bottomRight));
}
if (!ImGui.IsMouseDragging(ImGuiMouseButton.Left))
_draggedItem = null;
else if (_draggedItem != null)
{
var draggedItem = priorityQuests.Single(x => x.Id == _draggedItem);
int oldIndex = priorityQuests.IndexOf(draggedItem);
var (topLeft, bottomRight) = itemPositions[oldIndex];
ImGui.GetWindowDrawList().AddRect(topLeft, bottomRight, ImGui.GetColorU32(ImGuiColors.DalamudGrey), 3f,
ImDrawFlags.RoundCornersAll);
int newIndex = itemPositions.FindIndex(x => ImGui.IsMouseHoveringRect(x.TopLeft, x.BottomRight, true));
if (newIndex >= 0 && oldIndex != newIndex)
{
itemToAdd = priorityQuests.Single(x => x.Id == _draggedItem);
indexToAdd = newIndex;
}
}
if (itemToRemove != null)
{
priorityQuests.Remove(itemToRemove);
}
if (itemToAdd != null)
{
priorityQuests.Remove(itemToAdd);
priorityQuests.Insert(indexToAdd, itemToAdd);
}
}
}

View File

@ -31,6 +31,7 @@ internal sealed partial class ActiveQuestComponent
private readonly ICommandManager _commandManager; private readonly ICommandManager _commandManager;
private readonly Configuration _configuration; private readonly Configuration _configuration;
private readonly QuestRegistry _questRegistry; private readonly QuestRegistry _questRegistry;
private readonly PriorityWindow _priorityWindow;
private readonly IChatGui _chatGui; private readonly IChatGui _chatGui;
public ActiveQuestComponent( public ActiveQuestComponent(
@ -42,6 +43,7 @@ internal sealed partial class ActiveQuestComponent
ICommandManager commandManager, ICommandManager commandManager,
Configuration configuration, Configuration configuration,
QuestRegistry questRegistry, QuestRegistry questRegistry,
PriorityWindow priorityWindow,
IChatGui chatGui) IChatGui chatGui)
{ {
_questController = questController; _questController = questController;
@ -52,6 +54,7 @@ internal sealed partial class ActiveQuestComponent
_commandManager = commandManager; _commandManager = commandManager;
_configuration = configuration; _configuration = configuration;
_questRegistry = questRegistry; _questRegistry = questRegistry;
_priorityWindow = priorityWindow;
_chatGui = chatGui; _chatGui = chatGui;
} }
@ -111,6 +114,10 @@ internal sealed partial class ActiveQuestComponent
_questController.Stop("Manual (no active quest)"); _questController.Stop("Manual (no active quest)");
_gatheringController.Stop("Manual (no active quest)"); _gatheringController.Stop("Manual (no active quest)");
} }
ImGui.SameLine();
if (ImGuiComponents.IconButton(FontAwesomeIcon.SortAmountDown))
_priorityWindow.Toggle();
} }
} }
@ -293,6 +300,10 @@ internal sealed partial class ActiveQuestComponent
ImGui.PopStyleColor(); ImGui.PopStyleColor();
ImGui.EndDisabled(); ImGui.EndDisabled();
ImGui.SameLine();
if (ImGuiComponents.IconButton(FontAwesomeIcon.SortAmountDown))
_priorityWindow.Toggle();
if (_commandManager.Commands.TryGetValue("/questinfo", out var commandInfo)) if (_commandManager.Commands.TryGetValue("/questinfo", out var commandInfo))
{ {
ImGui.SameLine(); ImGui.SameLine();

View File

@ -19,19 +19,22 @@ internal sealed class QuestTooltipComponent
private readonly TerritoryData _territoryData; private readonly TerritoryData _territoryData;
private readonly QuestFunctions _questFunctions; private readonly QuestFunctions _questFunctions;
private readonly UiUtils _uiUtils; private readonly UiUtils _uiUtils;
private readonly Configuration _configuration;
public QuestTooltipComponent( public QuestTooltipComponent(
QuestRegistry questRegistry, QuestRegistry questRegistry,
QuestData questData, QuestData questData,
TerritoryData territoryData, TerritoryData territoryData,
QuestFunctions questFunctions, QuestFunctions questFunctions,
UiUtils uiUtils) UiUtils uiUtils,
Configuration configuration)
{ {
_questRegistry = questRegistry; _questRegistry = questRegistry;
_questData = questData; _questData = questData;
_territoryData = territoryData; _territoryData = territoryData;
_questFunctions = questFunctions; _questFunctions = questFunctions;
_uiUtils = uiUtils; _uiUtils = uiUtils;
_configuration = configuration;
} }
public void Draw(IQuestInfo quest) public void Draw(IQuestInfo quest)
@ -105,13 +108,13 @@ internal sealed class QuestTooltipComponent
foreach (var q in quest.PreviousQuests) foreach (var q in quest.PreviousQuests)
{ {
if (_questData.TryGetQuestInfo(q, out var qInfo)) if (_questData.TryGetQuestInfo(q.QuestId, out var qInfo))
{ {
var (iconColor, icon, _) = _uiUtils.GetQuestStyle(q); var (iconColor, icon, _) = _uiUtils.GetQuestStyle(q.QuestId);
if (!_questRegistry.IsKnownQuest(qInfo.QuestId)) if (!_questRegistry.IsKnownQuest(qInfo.QuestId))
iconColor = ImGuiColors.DalamudGrey; iconColor = ImGuiColors.DalamudGrey;
_uiUtils.ChecklistItem(FormatQuestUnlockName(qInfo), iconColor, icon); _uiUtils.ChecklistItem(FormatQuestUnlockName(qInfo, _questFunctions.IsQuestComplete(q.QuestId) ? byte.MinValue : q.Sequence), iconColor, icon);
if (qInfo is QuestInfo qstInfo && (counter <= 2 || icon != FontAwesomeIcon.Check)) if (qInfo is QuestInfo qstInfo && (counter <= 2 || icon != FontAwesomeIcon.Check))
DrawQuestUnlocks(qstInfo, counter + 1); DrawQuestUnlocks(qstInfo, counter + 1);
@ -188,11 +191,17 @@ internal sealed class QuestTooltipComponent
ImGui.Unindent(); ImGui.Unindent();
} }
private static string FormatQuestUnlockName(IQuestInfo questInfo) private string FormatQuestUnlockName(IQuestInfo questInfo, byte sequence = 0)
{ {
string name = questInfo.Name;
if (_configuration.Advanced.AdditionalStatusInformation && sequence != 0)
name += $" {SeIconChar.ItemLevel.ToIconString()}";
if (questInfo.IsMainScenarioQuest) if (questInfo.IsMainScenarioQuest)
return $"{questInfo.Name} ({questInfo.QuestId}, MSQ)"; name += $" ({questInfo.QuestId}, MSQ)";
else else
return $"{questInfo.Name} ({questInfo.QuestId})"; name += $" {questInfo.Name} ({questInfo.QuestId})";
return name;
} }
} }