Add missing THM quests

This commit is contained in:
Liza 2024-12-09 01:11:35 +01:00
parent 8462b86544
commit 920d2f0724
Signed by: liza
GPG Key ID: 8DD6D21C03BB0848
6 changed files with 395 additions and 11 deletions

View File

@ -1,7 +1,6 @@
{ {
"$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": "liza", "Author": "liza",
"Disabled": true,
"QuestSequence": [ "QuestSequence": [
{ {
"Sequence": 0, "Sequence": 0,
@ -14,7 +13,17 @@
"Z": 59.952637 "Z": 59.952637
}, },
"TerritoryId": 130, "TerritoryId": 130,
"InteractionType": "AcceptQuest" "InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Thaumaturges' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
} }
] ]
}, },
@ -40,6 +49,126 @@
"NextQuestId": 351 "NextQuestId": 351
} }
] ]
},
{
"Sequence": 2,
"Steps": [
{
"Position": {
"X": -71.92632,
"Y": 9.839797,
"Z": 283.98495
},
"TerritoryId": 141,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"ComplexCombatData": [
{
"DataId": 351,
"MinimumKillCount": 3,
"$": "Slay star marmots as a thaumaturge",
"CompletionQuestVariablesFlags": [
{
"Low": 3
},
null,
null,
null,
null,
null
]
},
{
"DataId": 385,
"MinimumKillCount": 3,
"$": "Slay huge hornets as a thaumaturge",
"CompletionQuestVariablesFlags": [
null,
{
"High": 3
},
null,
null,
null,
null
]
}
],
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Thaumaturges' Guild",
"[Ul'dah] Gate of Nald (Central Thanalan)"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true,
"InTerritory": [
141
]
}
},
"CompletionQuestVariablesFlags": [
{
"Low": 3
},
{
"High": 3
},
null,
null,
null,
null
]
},
{
"Position": {
"X": 39.449,
"Y": 3.082914,
"Z": 272.46896
},
"TerritoryId": 141,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"ComplexCombatData": [
{
"DataId": 205,
"MinimumKillCount": 3,
"$": "Slay snapping shrews as a thaumaturge"
}
],
"CompletionQuestVariablesFlags": [
null,
{
"Low": 3
},
null,
null,
null,
null
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1001708,
"Position": {
"X": -250.3548,
"Y": 18,
"Z": 80.88806
},
"TerritoryId": 130,
"InteractionType": "CompleteQuest",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Thaumaturges' Guild"
],
"NextQuestId": 351
}
]
} }
] ]
} }

View File

@ -0,0 +1,231 @@
{
"$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
"Author": ["liza", "pot0to"],
"QuestSequence": [
{
"Sequence": 0,
"Steps": [
{
"DataId": 1001708,
"Position": {
"X": -250.3548,
"Y": 18,
"Z": 80.88806
},
"TerritoryId": 130,
"InteractionType": "AcceptQuest",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Thaumaturges' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
}
]
},
{
"Sequence": 1,
"Steps": [
{
"DataId": 1001710,
"Position": {
"X": -240.2533,
"Y": 18.8,
"Z": 86.900024
},
"TerritoryId": 130,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 2,
"Steps": [
{
"TerritoryId": 130,
"InteractionType": "None",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Thaumaturges' Guild",
"[Ul'dah] Gate of Nald (Central Thanalan)"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true,
"InTerritory": [
141
],
"AetheryteUnlocked": "Central Thanalan - Black Brush Station"
},
"AethernetShortcutIf": {
"AetheryteUnlocked": "Central Thanalan - Black Brush Station"
}
}
},
{
"Position": {
"X": -62.183617,
"Y": -3.6582246,
"Z": 145.88391
},
"InteractionType": "WalkTo",
"TerritoryId": 141,
"SkipConditions": {
"StepIf": {
"Flying": "Unlocked",
"AetheryteUnlocked": "Central Thanalan - Black Brush Station"
}
}
},
{
"Position": {
"X": 149.07747,
"Y": -2,
"Z": -225.21188
},
"TerritoryId": 141,
"AetheryteShortcut": "Central Thanalan - Black Brush Station",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
},
"Fly": true,
"InteractionType": "Combat",
"EnemySpawnType": "OverworldEnemies",
"ComplexCombatData": [
{
"DataId": 160,
"MinimumKillCount": 8,
"$": "Slay efts",
"CompletionQuestVariablesFlags": [
{
"Low": 8
},
null,
null,
null,
null,
null
]
}
]
}
]
},
{
"Sequence": 3,
"Steps": [
{
"DataId": 1001710,
"Position": {
"X": -240.2533,
"Y": 18.8,
"Z": 86.900024
},
"TerritoryId": 130,
"InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Thaumaturges' Guild"
],
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
},
"DialogueChoices": [
{
"Type": "List",
"Prompt": "TEXT_CLSTHM100_00348_Q_000_1",
"Answer": "TEXT_CLSTHM100_00348_A_000_3"
}
]
}
]
},
{
"Sequence": 4,
"Steps": [
{
"DataId": 2001511,
"Position": {
"X": -366.29285,
"Y": -34.989014,
"Z": 293.56824
},
"TerritoryId": 145,
"InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [
166,
1238
],
"Fly": true,
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone",
"SkipConditions": {
"AetheryteShortcutIf": {
"InSameTerritory": true
}
}
}
]
},
{
"Sequence": 5,
"Steps": [
{
"DataId": 2001498,
"Position": {
"X": -366.29285,
"Y": -34.989014,
"Z": 293.56824
},
"TerritoryId": 145,
"InteractionType": "Interact"
}
]
},
{
"Sequence": 6,
"Steps": [
{
"DataId": 1001710,
"Position": {
"X": -240.2533,
"Y": 18.8,
"Z": 86.900024
},
"TerritoryId": 130,
"InteractionType": "Interact",
"AetheryteShortcut": "Ul'dah",
"AethernetShortcut": [
"[Ul'dah] Aetheryte Plaza",
"[Ul'dah] Thaumaturges' Guild"
]
}
]
},
{
"Sequence": 255,
"Steps": [
{
"DataId": 1001708,
"Position": {
"X": -250.3548,
"Y": 18,
"Z": 80.88806
},
"TerritoryId": 130,
"InteractionType": "CompleteQuest",
"NextQuestId": 350
}
]
}
]
}

View File

@ -163,7 +163,8 @@
"InteractionType": "Combat", "InteractionType": "Combat",
"EnemySpawnType": "AfterInteraction", "EnemySpawnType": "AfterInteraction",
"KillEnemyDataIds": [ "KillEnemyDataIds": [
166 166,
1238
], ],
"Fly": true, "Fly": true,
"AetheryteShortcut": "Eastern Thanalan - Camp Drybone", "AetheryteShortcut": "Eastern Thanalan - Camp Drybone",

View File

@ -762,7 +762,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>, IDi
if (!IsInterruptible() || _nextQuest != null || _gatheringQuest != null || _simulatedQuest != null) if (!IsInterruptible() || _nextQuest != null || _gatheringQuest != null || _simulatedQuest != null)
return false; return false;
ElementId? priorityQuestId = _questFunctions.GetNextPriorityQuestThatCanBeAccepted(); ElementId? priorityQuestId = _questFunctions.GetNextPriorityQuestsThatCanBeAccepted().FirstOrDefault();
if (priorityQuestId == null) if (priorityQuestId == null)
return false; return false;

View File

@ -221,7 +221,7 @@ internal sealed unsafe class QuestFunctions
return (firstTrackedQuest, firstTrackedSequence); return (firstTrackedQuest, firstTrackedSequence);
} }
ElementId? priorityQuest = GetNextPriorityQuestThatCanBeAccepted(); ElementId? priorityQuest = GetNextPriorityQuestsThatCanBeAccepted().FirstOrDefault();
if (priorityQuest != null) if (priorityQuest != null)
{ {
// if we have an accepted msq quest, and know of no quest of those currently in the to-do list... // if we have an accepted msq quest, and know of no quest of those currently in the to-do list...
@ -336,12 +336,12 @@ internal sealed unsafe class QuestFunctions
return null; return null;
} }
public ElementId? GetNextPriorityQuestThatCanBeAccepted() public List<ElementId> GetNextPriorityQuestsThatCanBeAccepted()
{ {
// all priority quests assume we're able to teleport to the beginning (and for e.g. class quests, the end) // all priority quests assume we're able to teleport to the beginning (and for e.g. class quests, the end)
// ideally without having to wait 15m for Return. // ideally without having to wait 15m for Return.
if (!_aetheryteFunctions.IsTeleportUnlocked()) if (!_aetheryteFunctions.IsTeleportUnlocked())
return null; return [];
// ideally, we'd also be able to afford *some* teleports // ideally, we'd also be able to afford *some* teleports
// this implicitly makes sure we're not starting one of the lv1 class quests if we can't afford to teleport back // this implicitly makes sure we're not starting one of the lv1 class quests if we can't afford to teleport back
@ -363,7 +363,7 @@ internal sealed unsafe class QuestFunctions
return firstStep.IsTeleportableForPriorityQuests(); return firstStep.IsTeleportableForPriorityQuests();
}) })
.FirstOrDefault(x => .Where(x =>
{ {
if (!_questRegistry.TryGetQuest(x, out Quest? quest)) if (!_questRegistry.TryGetQuest(x, out Quest? quest))
return false; return false;
@ -390,7 +390,8 @@ internal sealed unsafe class QuestFunctions
return true; return true;
}); });
}); })
.ToList();
} }
private static int EstimateTeleportCosts(Quest quest) private static int EstimateTeleportCosts(Quest quest)

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Numerics; using System.Numerics;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -167,8 +168,29 @@ internal sealed partial class ActiveQuestComponent
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextColored(ImGuiColors.DalamudYellow, SeIconChar.Hyadelyn.ToIconString()); ImGui.TextColored(ImGuiColors.DalamudYellow, SeIconChar.Hyadelyn.ToIconString());
if (ImGui.IsItemHovered()) if (ImGui.IsItemHovered())
ImGui.SetTooltip( {
"This quest sequence starts with a teleport to an Aetheryte.\nCertain priority quest (e.g. class quests) may be started/completed by the plugin prior to continuing with this quest."); using var tooltip = ImRaii.Tooltip();
if (tooltip)
{
ImGui.Text("This quest sequence starts with a teleport to an Aetheryte.");
ImGui.Text(
"Certain priority quest (e.g. class quests) may be started/completed by the plugin prior to continuing with this quest.");
ImGui.Separator();
ImGui.Text("Available priority quests:");
List<ElementId> priorityQuests = _questFunctions.GetNextPriorityQuestsThatCanBeAccepted();
if (priorityQuests.Count > 0)
{
foreach (var questId in priorityQuests)
{
if (_questRegistry.TryGetQuest(questId, out var quest))
ImGui.BulletText($"{quest.Info.Name} ({questId})");
}
}
else
ImGui.BulletText("(none)");
}
}
} }
} }