From a10041e3fdcbc3e57225c5d269bdb280413ab6d1 Mon Sep 17 00:00:00 2001 From: alydev Date: Wed, 29 Oct 2025 06:40:37 +1000 Subject: [PATCH] muffin v6.34 --- .../QuestController.cs | 29 +++++++++++++++++-- .../GeneralConfigComponent.cs | 29 +++++++++++++++++++ Questionable/Questionable/Configuration.cs | 4 +++ 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/Questionable/Questionable.Controller/QuestController.cs b/Questionable/Questionable.Controller/QuestController.cs index c8b8b96..2962d70 100644 --- a/Questionable/Questionable.Controller/QuestController.cs +++ b/Questionable/Questionable.Controller/QuestController.cs @@ -241,9 +241,10 @@ internal sealed class QuestController : MiniTaskController _taskCreator = taskCreator; _singlePlayerDutyConfigComponent = singlePlayerDutyConfigComponent; _logger = logger; - _condition.ConditionChange += OnConditionChange; - _toastGui.Toast += OnNormalToast; _toastGui.ErrorToast += base.OnErrorToast; + _toastGui.Toast += OnNormalToast; + _condition.ConditionChange += OnConditionChange; + _clientState.Logout += OnLogout; } public void Reload() @@ -500,6 +501,14 @@ internal sealed class QuestController : MiniTaskController DebugState = "Not logged in"; return; } + if (_configuration.General.ClearPriorityQuestsOnCompletion && ManualPriorityQuests.Count > 0) + { + int num = ManualPriorityQuests.RemoveAll((Quest q) => _questFunctions.IsQuestComplete(q.Id)); + if (num > 0) + { + _logger.LogInformation("Removed {Count} completed priority quest(s)", num); + } + } if (_pendingQuest != null) { if (!_questFunctions.IsQuestAccepted(_pendingQuest.Quest.Id)) @@ -1107,13 +1116,17 @@ internal sealed class QuestController : MiniTaskController public void ImportQuestPriority(List questElements) { + ManualPriorityQuests.Clear(); foreach (ElementId questElement in questElements) { - if (_questRegistry.TryGetQuest(questElement, out Quest quest) && !ManualPriorityQuests.Contains(quest)) + if (_questRegistry.TryGetQuest(questElement, out Quest quest)) { ManualPriorityQuests.Add(quest); + continue; } + _logger.LogWarning("Could not find quest {QuestId} during import", questElement); } + _logger.LogInformation("Imported {Count} priority quests", ManualPriorityQuests.Count); } public string ExportQuestPriority() @@ -1223,11 +1236,21 @@ internal sealed class QuestController : MiniTaskController } } + private void OnLogout(int type, int code) + { + if (_configuration.General.ClearPriorityQuestsOnLogout) + { + _logger.LogInformation("Clearing priority quests on logout"); + ManualPriorityQuests.Clear(); + } + } + public override void Dispose() { _toastGui.ErrorToast -= base.OnErrorToast; _toastGui.Toast -= OnNormalToast; _condition.ConditionChange -= OnConditionChange; + _clientState.Logout -= OnLogout; base.Dispose(); } } diff --git a/Questionable/Questionable.Windows.ConfigComponents/GeneralConfigComponent.cs b/Questionable/Questionable.Windows.ConfigComponents/GeneralConfigComponent.cs index 03c1cda..e649253 100644 --- a/Questionable/Questionable.Windows.ConfigComponents/GeneralConfigComponent.cs +++ b/Questionable/Questionable.Windows.ConfigComponents/GeneralConfigComponent.cs @@ -212,6 +212,35 @@ internal sealed class GeneralConfigComponent : ConfigComponent ImGui.TextColored(in col, text); ImGui.Unindent(); } + ImGui.Spacing(); + ImGui.Separator(); + ImGui.Text("Priority Quest Management"); + bool v9 = base.Configuration.General.ClearPriorityQuestsOnLogout; + if (ImGui.Checkbox("Clear priority quests on character logout", ref v9)) + { + base.Configuration.General.ClearPriorityQuestsOnLogout = v9; + Save(); + } + bool v10 = base.Configuration.General.ClearPriorityQuestsOnCompletion; + if (ImGui.Checkbox("Remove priority quests when completed", ref v10)) + { + base.Configuration.General.ClearPriorityQuestsOnCompletion = v10; + Save(); + } + ImGui.SameLine(); + using (ImRaii.PushFont(UiBuilder.IconFont)) + { + ImGui.TextDisabled(FontAwesomeIcon.InfoCircle.ToIconString()); + } + if (ImGui.IsItemHovered()) + { + using (ImRaii.Tooltip()) + { + ImGui.Text("Automatically removes completed quests from your priority queue."); + ImGui.Text("This helps keep your priority list clean without manual intervention."); + return; + } + } } } diff --git a/Questionable/Questionable/Configuration.cs b/Questionable/Questionable/Configuration.cs index a2bacac..c076f36 100644 --- a/Questionable/Questionable/Configuration.cs +++ b/Questionable/Questionable/Configuration.cs @@ -37,6 +37,10 @@ internal sealed class Configuration : IPluginConfiguration public int AutoStepRefreshDelaySeconds { get; set; } = 10; public bool HideSeasonalEventsFromJournalProgress { get; set; } + + public bool ClearPriorityQuestsOnLogout { get; set; } + + public bool ClearPriorityQuestsOnCompletion { get; set; } } internal sealed class StopConfiguration