using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using System.Numerics; using System.Runtime.InteropServices; using Dalamud.Bindings.ImGui; using Dalamud.Interface; using Dalamud.Interface.Colors; using Dalamud.Interface.Components; using Dalamud.Interface.Utility.Raii; using Dalamud.Plugin.Services; using Microsoft.Extensions.Logging; using Questionable.Controller; using Questionable.Data; using Questionable.Functions; using Questionable.Model; using Questionable.Model.Common; using Questionable.Model.Questing; namespace Questionable.Windows.QuestComponents; internal sealed class PresetBuilderComponent { private sealed class QuestPreset { public required string Name { get; init; } public required string Description { get; init; } public required int DisplayOrder { get; init; } public required List QuestIds { get; init; } public List GetQuestIds() { return QuestIds; } } private readonly QuestController _questController; private readonly QuestFunctions _questFunctions; private readonly QuestData _questData; private readonly AetheryteFunctions _aetheryteFunctions; private readonly IClientState _clientState; private readonly IChatGui _chatGui; private readonly UiUtils _uiUtils; private readonly QuestTooltipComponent _questTooltipComponent; private readonly QuestRegistry _questRegistry; private readonly ILogger _logger; private readonly Dictionary _availablePresets; public PresetBuilderComponent(QuestController questController, QuestFunctions questFunctions, QuestData questData, AetheryteFunctions aetheryteFunctions, IClientState clientState, IChatGui chatGui, UiUtils uiUtils, QuestTooltipComponent questTooltipComponent, QuestRegistry questRegistry, ILogger logger) { _questController = questController; _questFunctions = questFunctions; _questData = questData; _aetheryteFunctions = aetheryteFunctions; _clientState = clientState; _chatGui = chatGui; _uiUtils = uiUtils; _questTooltipComponent = questTooltipComponent; _questRegistry = questRegistry; _logger = logger; _availablePresets = BuildPresetList(); } public void Draw() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) ImGui.TextWrapped("Quest presets allow you to quickly add related quests to your priority list. These are useful for unlocking content that may be required later."); ImGui.Spacing(); ChildDisposable val = ImRaii.Child((ImU8String)"PresetList", new Vector2(-1f, -27f), true); try { if (ChildDisposable.op_Implicit(val)) { DrawPresetGroups(); } } finally { ((ChildDisposable)(ref val)).Dispose(); } List list = (from questId in GetAllPresetQuests() where _questController.ManualPriorityQuests.Any((Quest q) => q.Id.Equals(questId)) select questId).ToList(); DisabledDisposable val2 = ImRaii.Disabled(list.Count == 0); try { if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Trash, $"Clear All Preset Quests ({list.Count})")) { ClearAllPresetQuests(list); } } finally { ((IDisposable)val2)?.Dispose(); } if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled)) { if (list.Count == 0) { ImGui.SetTooltip("No preset quests are currently in the priority list."); return; } ImU8String tooltip = new ImU8String(51, 2); tooltip.AppendLiteral("Remove all "); tooltip.AppendFormatted(list.Count); tooltip.AppendLiteral(" preset-related "); tooltip.AppendFormatted((list.Count == 1) ? "quest" : "quests"); tooltip.AppendLiteral(" from the priority list."); ImGui.SetTooltip(tooltip); } } private void DrawPresetGroups() { IOrderedEnumerable> orderedEnumerable = from x in _availablePresets where x.Key.StartsWith("aether_currents_", StringComparison.Ordinal) orderby x.Value.DisplayOrder select x; IOrderedEnumerable> orderedEnumerable2 = from x in _availablePresets where x.Key.StartsWith("aethernet_", StringComparison.Ordinal) orderby x.Value.DisplayOrder select x; IOrderedEnumerable> orderedEnumerable3 = from x in _availablePresets where !x.Key.StartsWith("aether_currents_", StringComparison.Ordinal) && !x.Key.StartsWith("aethernet_", StringComparison.Ordinal) orderby x.Value.DisplayOrder select x; string key; QuestPreset value; if (DrawGroupHeader("Aether Currents", "Unlock aether currents in various expansion zones to enable flying.", orderedEnumerable)) { IndentDisposable val = ImRaii.PushIndent(1, true); try { foreach (KeyValuePair item in orderedEnumerable) { item.Deconstruct(out key, out value); string key2 = key; QuestPreset preset = value; DrawPreset(key2, preset); } } finally { ((IDisposable)val)?.Dispose(); } } if (DrawGroupHeader("City Aethernet", "Unlock aethernet shards in major cities to enable city teleports.", orderedEnumerable2)) { IndentDisposable val2 = ImRaii.PushIndent(1, true); try { foreach (KeyValuePair item2 in orderedEnumerable2) { item2.Deconstruct(out key, out value); string key3 = key; QuestPreset preset2 = value; DrawPreset(key3, preset2); } } finally { ((IDisposable)val2)?.Dispose(); } } if (!orderedEnumerable3.Any() || !DrawGroupHeader("Content Unlocks", "Essential quest series and unlocks that may be required for progression.", orderedEnumerable3)) { return; } IndentDisposable val3 = ImRaii.PushIndent(1, true); try { foreach (KeyValuePair item3 in orderedEnumerable3) { item3.Deconstruct(out key, out value); string key4 = key; QuestPreset preset3 = value; DrawPreset(key4, preset3); } } finally { ((IDisposable)val3)?.Dispose(); } } private bool DrawGroupHeader(string groupName, string groupDescription, IEnumerable> presets) { int num = 0; int num2 = 0; int num3 = 0; foreach (KeyValuePair preset2 in presets) { preset2.Deconstruct(out var _, out var value); QuestPreset preset = value; num += GetAvailableQuestsForPreset(preset).Count; num2 += GetCompletedQuestsForPreset(preset).Count; num3 += GetAlreadyPriorityQuestsForPreset(preset).Count; } string text = groupName; if (num > 0 || num2 > 0 || num3 > 0) { List list = new List(); if (num > 0) { list.Add($"{num} available"); } if (num3 > 0) { list.Add($"{num3} priority"); } if (num2 > 0) { list.Add($"{num2} completed"); } if (list.Count > 0) { text = text + " (" + string.Join(", ", list) + ")"; } } ImU8String label = new ImU8String(9, 2); label.AppendFormatted(text); label.AppendLiteral("###Group_"); label.AppendFormatted(groupName); bool result = ImGui.CollapsingHeader(label); if (ImGui.IsItemHovered()) { ImGui.BeginTooltip(); ImGui.TextUnformatted(groupDescription); ImGui.EndTooltip(); } return result; } private void DrawPreset(string key, QuestPreset preset) { IdDisposable val = ImRaii.PushId((ImU8String)key, true); try { List availableQuestsForPreset = GetAvailableQuestsForPreset(preset); List completedQuestsForPreset = GetCompletedQuestsForPreset(preset); List alreadyPriorityQuestsForPreset = GetAlreadyPriorityQuestsForPreset(preset); string text = preset.Name; if (availableQuestsForPreset.Count > 0 || completedQuestsForPreset.Count > 0 || alreadyPriorityQuestsForPreset.Count > 0) { List list = new List(); if (availableQuestsForPreset.Count > 0) { list.Add($"{availableQuestsForPreset.Count} available"); } if (alreadyPriorityQuestsForPreset.Count > 0) { list.Add($"{alreadyPriorityQuestsForPreset.Count} priority"); } if (completedQuestsForPreset.Count > 0) { list.Add($"{completedQuestsForPreset.Count} completed"); } if (list.Count > 0) { text = text + " (" + string.Join(", ", list) + ")"; } } ImU8String label = new ImU8String(3, 2); label.AppendFormatted(text); label.AppendLiteral("###"); label.AppendFormatted(key); bool num = ImGui.CollapsingHeader(label); if (ImGui.IsItemHovered()) { ImGui.BeginTooltip(); ImGui.TextUnformatted(preset.Description); ImGui.EndTooltip(); } if (!num) { return; } IndentDisposable val2 = ImRaii.PushIndent(1, true); try { ImGui.TextWrapped(preset.Description); ImGui.Spacing(); bool flag = key.StartsWith("aethernet_", StringComparison.Ordinal); if (flag && availableQuestsForPreset.Count == 0 && completedQuestsForPreset.Count == 0 && alreadyPriorityQuestsForPreset.Count == 0) { EAetheryteLocation? mainAetheryteForAethernetPreset = GetMainAetheryteForAethernetPreset(key); if (mainAetheryteForAethernetPreset.HasValue && !_aetheryteFunctions.IsAetheryteUnlocked(mainAetheryteForAethernetPreset.Value)) { _uiUtils.ChecklistItem("Main aetheryte must be attuned first", ImGuiColors.DalamudRed, FontAwesomeIcon.ExclamationTriangle); ImGui.Spacing(); } } if (availableQuestsForPreset.Count > 0) { _uiUtils.ChecklistItem($"{availableQuestsForPreset.Count} {((availableQuestsForPreset.Count == 1) ? "quest" : "quests")} available", ImGuiColors.DalamudYellow, FontAwesomeIcon.Running); } if (alreadyPriorityQuestsForPreset.Count > 0) { _uiUtils.ChecklistItem($"{alreadyPriorityQuestsForPreset.Count} {((alreadyPriorityQuestsForPreset.Count == 1) ? "quest" : "quests")} already in priority list", ImGuiColors.DalamudOrange, FontAwesomeIcon.PersonWalkingArrowRight); } if (completedQuestsForPreset.Count > 0) { _uiUtils.ChecklistItem($"{completedQuestsForPreset.Count} {((completedQuestsForPreset.Count == 1) ? "quest" : "quests")} already completed", ImGuiColors.ParsedGreen, FontAwesomeIcon.Check); } if (availableQuestsForPreset.Count == 0 && completedQuestsForPreset.Count == 0 && alreadyPriorityQuestsForPreset.Count == 0) { if (!flag) { goto IL_03b8; } if (flag) { EAetheryteLocation? mainAetheryteForAethernetPreset2 = GetMainAetheryteForAethernetPreset(key); if (mainAetheryteForAethernetPreset2.HasValue && _aetheryteFunctions.IsAetheryteUnlocked(mainAetheryteForAethernetPreset2.Value)) { goto IL_03b8; } } } goto IL_03d8; IL_03d8: if (availableQuestsForPreset.Count > 0) { ImGui.Spacing(); string text2 = ((availableQuestsForPreset.Count == 1) ? "Add Quest to Priority" : $"Add All {availableQuestsForPreset.Count} Quests to Priority"); if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Plus, text2)) { AddPresetToPriority(preset, availableQuestsForPreset); } } if (availableQuestsForPreset.Count > 0 || completedQuestsForPreset.Count > 0 || alreadyPriorityQuestsForPreset.Count > 0) { ImGui.Spacing(); ImGui.Separator(); foreach (ElementId item in availableQuestsForPreset) { if (_questData.TryGetQuestInfo(item, out IQuestInfo questInfo)) { if (_uiUtils.ChecklistItem($"{questInfo.Name} ({item})", ImGuiColors.DalamudYellow, FontAwesomeIcon.Running)) { _questTooltipComponent.Draw(questInfo); } ImGui.SameLine(0f, 5f); if (ImGuiComponents.IconButton($"##AddQuest{item}", FontAwesomeIcon.Plus)) { AddIndividualQuestToPriority(questInfo, item); } if (ImGui.IsItemHovered()) { ImU8String tooltip = new ImU8String(23, 1); tooltip.AppendLiteral("Add '"); tooltip.AppendFormatted(questInfo.Name); tooltip.AppendLiteral("' to priority list"); ImGui.SetTooltip(tooltip); } } } foreach (ElementId item2 in alreadyPriorityQuestsForPreset) { if (_questData.TryGetQuestInfo(item2, out IQuestInfo questInfo2) && _uiUtils.ChecklistItem($"{questInfo2.Name} ({item2})", ImGuiColors.DalamudOrange, FontAwesomeIcon.PersonWalkingArrowRight)) { _questTooltipComponent.Draw(questInfo2); } } foreach (ElementId item3 in completedQuestsForPreset) { if (_questData.TryGetQuestInfo(item3, out IQuestInfo questInfo3) && _uiUtils.ChecklistItem($"{questInfo3.Name} ({item3})", ImGuiColors.ParsedGreen, FontAwesomeIcon.Check)) { _questTooltipComponent.Draw(questInfo3); } } } ImGui.Spacing(); return; IL_03b8: _uiUtils.ChecklistItem("No applicable quests found", ImGuiColors.DalamudGrey, FontAwesomeIcon.Minus); goto IL_03d8; } finally { ((IDisposable)val2)?.Dispose(); } } finally { ((IDisposable)val)?.Dispose(); } } private List GetAvailableQuestsForPreset(QuestPreset preset) { return (from questId in preset.GetQuestIds() where _questFunctions.IsReadyToAcceptQuest(questId) || _questFunctions.IsQuestAccepted(questId) where !_questController.ManualPriorityQuests.Any((Quest q) => q.Id.Equals(questId)) where _questRegistry.IsKnownQuest(questId) select questId).ToList(); } private List GetCompletedQuestsForPreset(QuestPreset preset) { return (from questId in preset.GetQuestIds() where _questFunctions.IsQuestComplete(questId) select questId).ToList(); } private List GetAlreadyPriorityQuestsForPreset(QuestPreset preset) { return (from questId in preset.GetQuestIds() where _questController.ManualPriorityQuests.Any((Quest q) => q.Id.Equals(questId)) where !_questFunctions.IsQuestComplete(questId) select questId).ToList(); } private List GetAllPresetQuests() { return _availablePresets.Values.SelectMany((QuestPreset preset) => preset.GetQuestIds()).Distinct().ToList(); } private void ClearAllPresetQuests(List questsToRemove) { int num = 0; foreach (ElementId questId in questsToRemove) { Quest quest = _questController.ManualPriorityQuests.FirstOrDefault((Quest q) => q.Id.Equals(questId)); if (quest != null) { _questController.ManualPriorityQuests.Remove(quest); num++; } } _logger.LogInformation("Removed {Count} preset quests from priority list", num); } private void AddPresetToPriority(QuestPreset preset, List questIds) { int num = 0; foreach (ElementId questId in questIds) { if (_questController.AddQuestPriority(questId)) { num++; } } _logger.LogInformation("Added {Count} quests from preset '{PresetName}' to priority list", num, preset.Name); } private void AddIndividualQuestToPriority(IQuestInfo questInfo, ElementId questId) { if (_questController.AddQuestPriority(questId)) { _logger.LogInformation("Added individual quest '{QuestName}' ({QuestId}) to priority list", questInfo.Name, questId); } } private static Dictionary BuildPresetList() { return new Dictionary { ["aether_currents_hw"] = new QuestPreset { Name = "Heavensward", Description = "Unlock all missed aether currents in Heavensward zones to enable flying.", DisplayOrder = 10, QuestIds = GetAetherCurrentQuestsByExpansion(EExpansionVersion.Heavensward) }, ["aether_currents_sb"] = new QuestPreset { Name = "Stormblood", Description = "Unlock all missed aether currents in Stormblood zones to enable flying.", DisplayOrder = 11, QuestIds = GetAetherCurrentQuestsByExpansion(EExpansionVersion.Stormblood) }, ["aether_currents_shb"] = new QuestPreset { Name = "Shadowbringers", Description = "Unlock all missed aether currents in Shadowbringers zones to enable flying.", DisplayOrder = 12, QuestIds = GetAetherCurrentQuestsByExpansion(EExpansionVersion.Shadowbringers) }, ["aether_currents_ew"] = new QuestPreset { Name = "Endwalker", Description = "Unlock all missed aether currents in Endwalker zones to enable flying.", DisplayOrder = 13, QuestIds = GetAetherCurrentQuestsByExpansion(EExpansionVersion.Endwalker) }, ["aether_currents_dt"] = new QuestPreset { Name = "Dawntrail", Description = "Unlock all missed aether currents in Dawntrail zones to enable flying.", DisplayOrder = 14, QuestIds = GetAetherCurrentQuestsByExpansion(EExpansionVersion.Dawntrail) }, ["aethernet_limsa"] = new QuestPreset { Name = "Limsa Lominsa", Description = "Unlock all aethernet shards in Limsa Lominsa for convenient city travel.", DisplayOrder = 20, QuestIds = GetAethernetQuestsByCity("Limsa") }, ["aethernet_gridania"] = new QuestPreset { Name = "Gridania", Description = "Unlock all aethernet shards in Gridania for convenient city travel.", DisplayOrder = 21, QuestIds = GetAethernetQuestsByCity("Gridania") }, ["aethernet_uldah"] = new QuestPreset { Name = "Ul'dah", Description = "Unlock all aethernet shards in Ul'dah for convenient city travel.", DisplayOrder = 22, QuestIds = GetAethernetQuestsByCity("Uldah") }, ["aethernet_goldsaucer"] = new QuestPreset { Name = "The Gold Saucer", Description = "Unlock all aethernet shards in The Gold Saucer for convenient city travel.", DisplayOrder = 23, QuestIds = GetAethernetQuestsByCity("GoldSaucer") }, ["aethernet_ishgard"] = new QuestPreset { Name = "Ishgard", Description = "Unlock all aethernet shards in Ishgard for convenient city travel.", DisplayOrder = 24, QuestIds = GetAethernetQuestsByCity("Ishgard") }, ["aethernet_idyllshire"] = new QuestPreset { Name = "Idyllshire", Description = "Unlock all aethernet shards in Idyllshire for convenient city travel.", DisplayOrder = 25, QuestIds = GetAethernetQuestsByCity("Idyllshire") }, ["aethernet_rhalgrs_reach"] = new QuestPreset { Name = "Rhalgr's Reach", Description = "Unlock all aethernet shards in Rhalgr's Reach for convenient city travel.", DisplayOrder = 26, QuestIds = GetAethernetQuestsByCity("Rhalgr's Reach") }, ["aethernet_kugane"] = new QuestPreset { Name = "Kugane", Description = "Unlock all aethernet shards in Kugane for convenient city travel.", DisplayOrder = 27, QuestIds = GetAethernetQuestsByCity("Kugane") }, ["aethernet_doman_enclave"] = new QuestPreset { Name = "Doman Enclave", Description = "Unlock all aethernet shards in Doman Enclave for convenient city travel.", DisplayOrder = 28, QuestIds = GetAethernetQuestsByCity("Doman Enclave") }, ["aethernet_the_crystarium"] = new QuestPreset { Name = "The Crystarium", Description = "Unlock all aethernet shards in The Crystarium for convenient city travel.", DisplayOrder = 29, QuestIds = GetAethernetQuestsByCity("The Crystarium") }, ["aethernet_eulmore"] = new QuestPreset { Name = "Eulmore", Description = "Unlock all aethernet shards in Eulmore for convenient city travel.", DisplayOrder = 30, QuestIds = GetAethernetQuestsByCity("Eulmore") }, ["aethernet_old_sharlayan"] = new QuestPreset { Name = "Old Sharlayan", Description = "Unlock all aethernet shards in Old Sharlayan for convenient city travel.", DisplayOrder = 31, QuestIds = GetAethernetQuestsByCity("Old Sharlayan") }, ["aethernet_radz_at_han"] = new QuestPreset { Name = "Radz-at-Han", Description = "Unlock all aethernet shards in Radz-at-Han for convenient city travel.", DisplayOrder = 32, QuestIds = GetAethernetQuestsByCity("Radz-at-Han") }, ["aethernet_tuliyollal"] = new QuestPreset { Name = "Tuliyollal", Description = "Unlock all aethernet shards in Tuliyollal for convenient city travel.", DisplayOrder = 33, QuestIds = GetAethernetQuestsByCity("Tuliyollal") }, ["aethernet_solution_nine"] = new QuestPreset { Name = "Solution Nine", Description = "Unlock all aethernet shards in Solution Nine for convenient city travel.", DisplayOrder = 34, QuestIds = GetAethernetQuestsByCity("Solution Nine") }, ["crystal_tower"] = new QuestPreset { Name = "Crystal Tower Raids", Description = "Complete the Crystal Tower raid series (required for A Realm Reborn MSQ).", DisplayOrder = 40, QuestIds = QuestData.CrystalTowerQuests.Cast().ToList() }, ["hard_primals"] = new QuestPreset { Name = "A Realm Reborn Hard Mode Primals", Description = "Unlock hard mode primal fights from A Realm Reborn.", DisplayOrder = 41, QuestIds = QuestData.HardModePrimals.Cast().ToList() } }; } private static List GetAetherCurrentQuestsByExpansion(EExpansionVersion expansion) { uint[] territoryRanges = expansion switch { EExpansionVersion.Heavensward => new uint[5] { 397u, 398u, 399u, 400u, 401u }, EExpansionVersion.Stormblood => new uint[6] { 612u, 613u, 614u, 620u, 621u, 622u }, EExpansionVersion.Shadowbringers => new uint[6] { 813u, 814u, 815u, 816u, 817u, 818u }, EExpansionVersion.Endwalker => new uint[6] { 956u, 957u, 958u, 959u, 960u, 961u }, EExpansionVersion.Dawntrail => new uint[6] { 1187u, 1188u, 1189u, 1190u, 1191u, 1192u }, _ => Array.Empty(), }; return QuestData.AetherCurrentQuestsByTerritory.Where>>((KeyValuePair> kvp) => ((ReadOnlySpan)territoryRanges).Contains(kvp.Key)).SelectMany((KeyValuePair> kvp) => kvp.Value).Cast() .ToList(); } private static List GetAethernetQuestsByCity(string cityName) { switch (cityName) { case "Limsa": { int num = 1; List list15 = new List(num); CollectionsMarshal.SetCount(list15, num); CollectionsMarshal.AsSpan(list15)[0] = new AethernetId(1); return list15; } case "Gridania": { int num = 1; List list14 = new List(num); CollectionsMarshal.SetCount(list14, num); CollectionsMarshal.AsSpan(list14)[0] = new AethernetId(2); return list14; } case "Uldah": { int num = 1; List list13 = new List(num); CollectionsMarshal.SetCount(list13, num); CollectionsMarshal.AsSpan(list13)[0] = new AethernetId(3); return list13; } case "GoldSaucer": { int num = 1; List list12 = new List(num); CollectionsMarshal.SetCount(list12, num); CollectionsMarshal.AsSpan(list12)[0] = new AethernetId(4); return list12; } case "Ishgard": { int num = 1; List list11 = new List(num); CollectionsMarshal.SetCount(list11, num); CollectionsMarshal.AsSpan(list11)[0] = new AethernetId(5); return list11; } case "Idyllshire": { int num = 1; List list10 = new List(num); CollectionsMarshal.SetCount(list10, num); CollectionsMarshal.AsSpan(list10)[0] = new AethernetId(6); return list10; } case "Rhalgr's Reach": { int num = 1; List list9 = new List(num); CollectionsMarshal.SetCount(list9, num); CollectionsMarshal.AsSpan(list9)[0] = new AethernetId(7); return list9; } case "Kugane": { int num = 1; List list8 = new List(num); CollectionsMarshal.SetCount(list8, num); CollectionsMarshal.AsSpan(list8)[0] = new AethernetId(8); return list8; } case "Doman Enclave": { int num = 1; List list7 = new List(num); CollectionsMarshal.SetCount(list7, num); CollectionsMarshal.AsSpan(list7)[0] = new AethernetId(9); return list7; } case "The Crystarium": { int num = 1; List list6 = new List(num); CollectionsMarshal.SetCount(list6, num); CollectionsMarshal.AsSpan(list6)[0] = new AethernetId(10); return list6; } case "Eulmore": { int num = 1; List list5 = new List(num); CollectionsMarshal.SetCount(list5, num); CollectionsMarshal.AsSpan(list5)[0] = new AethernetId(11); return list5; } case "Old Sharlayan": { int num = 1; List list4 = new List(num); CollectionsMarshal.SetCount(list4, num); CollectionsMarshal.AsSpan(list4)[0] = new AethernetId(12); return list4; } case "Radz-at-Han": { int num = 1; List list3 = new List(num); CollectionsMarshal.SetCount(list3, num); CollectionsMarshal.AsSpan(list3)[0] = new AethernetId(13); return list3; } case "Tuliyollal": { int num = 1; List list2 = new List(num); CollectionsMarshal.SetCount(list2, num); CollectionsMarshal.AsSpan(list2)[0] = new AethernetId(14); return list2; } case "Solution Nine": { int num = 1; List list = new List(num); CollectionsMarshal.SetCount(list, num); CollectionsMarshal.AsSpan(list)[0] = new AethernetId(15); return list; } default: return new List(); } } private static EAetheryteLocation? GetMainAetheryteForAethernetPreset(string presetKey) { return presetKey switch { "aethernet_limsa" => EAetheryteLocation.Limsa, "aethernet_gridania" => EAetheryteLocation.Gridania, "aethernet_uldah" => EAetheryteLocation.Uldah, "aethernet_goldsaucer" => EAetheryteLocation.GoldSaucer, "aethernet_ishgard" => EAetheryteLocation.Ishgard, "aethernet_idyllshire" => EAetheryteLocation.Idyllshire, "aethernet_rhalgrs_reach" => EAetheryteLocation.RhalgrsReach, "aethernet_kugane" => EAetheryteLocation.Kugane, "aethernet_doman_enclave" => EAetheryteLocation.DomanEnclave, "aethernet_the_crystarium" => EAetheryteLocation.Crystarium, "aethernet_eulmore" => EAetheryteLocation.Eulmore, "aethernet_old_sharlayan" => EAetheryteLocation.OldSharlayan, "aethernet_radz_at_han" => EAetheryteLocation.RadzAtHan, "aethernet_tuliyollal" => EAetheryteLocation.Tuliyollal, "aethernet_solution_nine" => EAetheryteLocation.SolutionNine, _ => null, }; } }