muffin v7.4.10

This commit is contained in:
alydev 2026-01-19 08:31:23 +10:00
parent 2df81c5d15
commit b8dd142c23
47 changed files with 3604 additions and 1058 deletions

View file

@ -23,6 +23,8 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig
private readonly StopConditionComponent _stopConditionComponent;
private readonly BlacklistConfigComponent _blacklistConfigComponent;
private readonly NotificationConfigComponent _notificationConfigComponent;
private readonly DebugConfigComponent _debugConfigComponent;
@ -31,7 +33,7 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig
public WindowConfig WindowConfig => _configuration.ConfigWindowConfig;
public ConfigWindow(IDalamudPluginInterface pluginInterface, GeneralConfigComponent generalConfigComponent, PluginConfigComponent pluginConfigComponent, DutyConfigComponent dutyConfigComponent, SinglePlayerDutyConfigComponent singlePlayerDutyConfigComponent, StopConditionComponent stopConditionComponent, NotificationConfigComponent notificationConfigComponent, DebugConfigComponent debugConfigComponent, Configuration configuration, ChangelogWindow changelogWindow)
public ConfigWindow(IDalamudPluginInterface pluginInterface, GeneralConfigComponent generalConfigComponent, PluginConfigComponent pluginConfigComponent, DutyConfigComponent dutyConfigComponent, SinglePlayerDutyConfigComponent singlePlayerDutyConfigComponent, StopConditionComponent stopConditionComponent, BlacklistConfigComponent blacklistConfigComponent, NotificationConfigComponent notificationConfigComponent, DebugConfigComponent debugConfigComponent, Configuration configuration, ChangelogWindow changelogWindow)
: base("Config - Questionable###QuestionableConfig", ImGuiWindowFlags.AlwaysAutoResize)
{
_pluginInterface = pluginInterface;
@ -40,6 +42,7 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig
_dutyConfigComponent = dutyConfigComponent;
_singlePlayerDutyConfigComponent = singlePlayerDutyConfigComponent;
_stopConditionComponent = stopConditionComponent;
_blacklistConfigComponent = blacklistConfigComponent;
_notificationConfigComponent = notificationConfigComponent;
_debugConfigComponent = debugConfigComponent;
_configuration = configuration;
@ -70,6 +73,7 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig
_dutyConfigComponent.DrawTab();
_singlePlayerDutyConfigComponent.DrawTab();
_stopConditionComponent.DrawTab();
_blacklistConfigComponent.DrawTab();
_notificationConfigComponent.DrawTab();
_debugConfigComponent.DrawTab();
}

View file

@ -19,21 +19,26 @@ internal sealed class JournalProgressWindow : LWindow, IDisposable
private readonly GatheringJournalComponent _gatheringJournalComponent;
private readonly DutyJournalComponent _dutyJournalComponent;
private readonly QuestRegistry _questRegistry;
private readonly IClientState _clientState;
public JournalProgressWindow(QuestJournalComponent questJournalComponent, QuestRewardComponent questRewardComponent, AlliedSocietyJournalComponent alliedSocietyJournalComponent, GatheringJournalComponent gatheringJournalComponent, QuestRegistry questRegistry, IClientState clientState)
public JournalProgressWindow(QuestJournalComponent questJournalComponent, QuestRewardComponent questRewardComponent, AlliedSocietyJournalComponent alliedSocietyJournalComponent, GatheringJournalComponent gatheringJournalComponent, DutyJournalComponent dutyJournalComponent, QuestRegistry questRegistry, IClientState clientState)
: base("Journal Progress###QuestionableJournalProgress")
{
_questJournalComponent = questJournalComponent;
_alliedSocietyJournalComponent = alliedSocietyJournalComponent;
_questRewardComponent = questRewardComponent;
_gatheringJournalComponent = gatheringJournalComponent;
_dutyJournalComponent = dutyJournalComponent;
_questRegistry = questRegistry;
_clientState = clientState;
_clientState.Login += _questJournalComponent.RefreshCounts;
_clientState.Logout += _dutyJournalComponent.ClearCounts;
_clientState.Login += _gatheringJournalComponent.RefreshCounts;
_clientState.Login += _dutyJournalComponent.RefreshCounts;
_clientState.Logout += _questJournalComponent.ClearCounts;
_clientState.Logout += _gatheringJournalComponent.ClearCounts;
_questRegistry.Reloaded += OnQuestsReloaded;
@ -46,6 +51,7 @@ internal sealed class JournalProgressWindow : LWindow, IDisposable
private void OnQuestsReloaded(object? sender, EventArgs e)
{
_questJournalComponent.RefreshCounts();
_dutyJournalComponent.RefreshCounts();
_gatheringJournalComponent.RefreshCounts();
}
@ -53,6 +59,8 @@ internal sealed class JournalProgressWindow : LWindow, IDisposable
{
_questJournalComponent.UpdateFilter();
_questJournalComponent.RefreshCounts();
_dutyJournalComponent.UpdateFilter();
_dutyJournalComponent.RefreshCounts();
_gatheringJournalComponent.UpdateFilter();
_gatheringJournalComponent.RefreshCounts();
}
@ -63,6 +71,7 @@ internal sealed class JournalProgressWindow : LWindow, IDisposable
if (!(!endObject))
{
_questJournalComponent.DrawQuests();
_dutyJournalComponent.DrawDuties();
_alliedSocietyJournalComponent.DrawAlliedSocietyQuests();
_questRewardComponent.DrawItemRewards();
_gatheringJournalComponent.DrawGatheringItems();
@ -74,7 +83,9 @@ internal sealed class JournalProgressWindow : LWindow, IDisposable
_questRegistry.Reloaded -= OnQuestsReloaded;
_clientState.Logout -= _gatheringJournalComponent.ClearCounts;
_clientState.Logout -= _questJournalComponent.ClearCounts;
_clientState.Login -= _dutyJournalComponent.RefreshCounts;
_clientState.Login -= _gatheringJournalComponent.RefreshCounts;
_clientState.Logout -= _dutyJournalComponent.ClearCounts;
_clientState.Login -= _questJournalComponent.RefreshCounts;
}
}

View file

@ -4,6 +4,7 @@ using Dalamud.Interface.Utility.Raii;
using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
using LLib.ImGui;
using Questionable.Model.Questing;
using Questionable.Windows.QuestComponents;
namespace Questionable.Windows;
@ -16,6 +17,8 @@ internal sealed class QuestSequenceWindow : LWindow, IPersistableWindowConfig
private readonly QuestSequenceComponent _questSequenceComponent;
private bool _selectLookupTabNextFrame;
public WindowConfig WindowConfig => _configuration.QuestSequenceWindowConfig;
public QuestSequenceWindow(IDalamudPluginInterface pluginInterface, Configuration configuration, QuestSequenceComponent questSequenceComponent)
@ -38,6 +41,13 @@ internal sealed class QuestSequenceWindow : LWindow, IPersistableWindowConfig
_pluginInterface.SavePluginConfig(_configuration);
}
public void OpenForQuest(ElementId questId)
{
_questSequenceComponent.SetLookedUpQuest(questId);
_selectLookupTabNextFrame = true;
base.IsOpenAndUncollapsed = true;
}
public override void DrawContent()
{
bool isOpen = base.IsOpen;
@ -51,31 +61,29 @@ internal sealed class QuestSequenceWindow : LWindow, IPersistableWindowConfig
{
using (ImRaii.PushColor(ImGuiCol.TabActive, new Vector4(0.28f, 0.24f, 0.35f, 1f)))
{
using (ImRaii.PushColor(ImGuiCol.TabUnfocused, new Vector4(0.13f, 0.11f, 0.18f, 0.6f)))
using ImRaii.IEndObject endObject = ImRaii.TabBar("QuestSequenceTabs", ImGuiTabBarFlags.None);
if (!endObject)
{
using (ImRaii.PushColor(ImGuiCol.TabUnfocusedActive, new Vector4(0.25f, 0.22f, 0.3f, 0.95f)))
return;
}
using (ImRaii.IEndObject endObject2 = ImRaii.TabItem("Current Quest", ImGuiTabItemFlags.None))
{
if (endObject2)
{
using ImRaii.IEndObject endObject = ImRaii.TabBar("QuestSequenceTabs", ImGuiTabBarFlags.None);
if (!endObject)
{
return;
}
using (ImRaii.IEndObject endObject2 = ImRaii.TabItem("Current Quest"))
{
if (endObject2)
{
ImGui.Spacing();
_questSequenceComponent.DrawCurrentQuestTab();
}
}
using ImRaii.IEndObject endObject3 = ImRaii.TabItem("Quest Lookup");
if (endObject3)
{
ImGui.Spacing();
_questSequenceComponent.DrawQuestLookupTab();
}
ImGui.Spacing();
_questSequenceComponent.DrawCurrentQuestTab();
}
}
ImGuiTabItemFlags flags = (_selectLookupTabNextFrame ? ImGuiTabItemFlags.SetSelected : ImGuiTabItemFlags.None);
using (ImRaii.IEndObject endObject3 = ImRaii.TabItem("Quest Lookup", flags))
{
if (endObject3)
{
ImGui.Spacing();
_questSequenceComponent.DrawQuestLookupTab();
}
}
_selectLookupTabNextFrame = false;
}
}
}

View file

@ -33,6 +33,10 @@ internal sealed class UiUtils
}
if (elementId is QuestId questId && _questFunctions.IsDailyAlliedSocietyQuestAndAvailableToday(questId))
{
if (_questFunctions.IsQuestBlacklisted(questId))
{
return (Color: ImGuiColors.DalamudGrey3, Icon: FontAwesomeIcon.Ban, Status: "Blacklisted");
}
if (!_questFunctions.IsReadyToAcceptQuest(questId))
{
return (Color: ImGuiColors.ParsedGreen, Icon: FontAwesomeIcon.Check, Status: "Complete");
@ -51,6 +55,10 @@ internal sealed class UiUtils
{
return (Color: ImGuiColors.DalamudGrey, Icon: FontAwesomeIcon.Minus, Status: "Unobtainable");
}
if (_questFunctions.IsQuestBlacklisted(elementId))
{
return (Color: ImGuiColors.DalamudGrey3, Icon: FontAwesomeIcon.Ban, Status: "Blacklisted");
}
if (_questFunctions.IsQuestLocked(elementId) || !_questFunctions.IsReadyToAcceptQuest(elementId) || !_questRegistry.IsKnownQuest(elementId))
{
return (Color: ImGuiColors.DalamudRed, Icon: FontAwesomeIcon.Times, Status: "Locked");