1
0
Fork 0
forked from aly/qstbak

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

@ -9,6 +9,7 @@ using Dalamud.Game.ClientState.Objects.SubKinds;
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Game.Gui.Toast;
using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Client.Game;
using Microsoft.Extensions.Logging;
@ -118,6 +119,8 @@ internal sealed class QuestController : MiniTaskController<QuestController>
private readonly AutoDutyIpc _autoDutyIpc;
private readonly IDalamudPluginInterface _pluginInterface;
private readonly ILogger<QuestController> _logger;
private readonly object _progressLock = new object();
@ -241,7 +244,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
public event AutomationTypeChangedEventHandler? AutomationTypeChanged;
public QuestController(IClientState clientState, IObjectTable objectTable, GameFunctions gameFunctions, QuestFunctions questFunctions, MovementController movementController, CombatController combatController, GatheringController gatheringController, ILogger<QuestController> logger, QuestRegistry questRegistry, JournalData journalData, IKeyState keyState, IChatGui chatGui, ICondition condition, IToastGui toastGui, Configuration configuration, TaskCreator taskCreator, IServiceProvider serviceProvider, InterruptHandler interruptHandler, IDataManager dataManager, SinglePlayerDutyConfigComponent singlePlayerDutyConfigComponent, AutoDutyIpc autoDutyIpc)
public QuestController(IClientState clientState, IObjectTable objectTable, GameFunctions gameFunctions, QuestFunctions questFunctions, MovementController movementController, CombatController combatController, GatheringController gatheringController, ILogger<QuestController> logger, QuestRegistry questRegistry, JournalData journalData, IKeyState keyState, IChatGui chatGui, ICondition condition, IToastGui toastGui, Configuration configuration, TaskCreator taskCreator, IServiceProvider serviceProvider, InterruptHandler interruptHandler, IDataManager dataManager, SinglePlayerDutyConfigComponent singlePlayerDutyConfigComponent, AutoDutyIpc autoDutyIpc, IDalamudPluginInterface pluginInterface)
: base(chatGui, condition, serviceProvider, interruptHandler, dataManager, logger)
{
_clientState = clientState;
@ -261,6 +264,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
_taskCreator = taskCreator;
_singlePlayerDutyConfigComponent = singlePlayerDutyConfigComponent;
_autoDutyIpc = autoDutyIpc;
_pluginInterface = pluginInterface;
_logger = logger;
_toastGui.ErrorToast += base.OnErrorToast;
_toastGui.Toast += OnNormalToast;
@ -273,7 +277,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
{
lock (_progressLock)
{
_logger.LogInformation("Reload, resetting curent quest progress");
_logger.LogInformation("Reload, resetting current quest progress");
ResetInternalState();
ResetAutoRefreshState();
_questRegistry.Reload();
@ -699,7 +703,6 @@ internal sealed class QuestController : MiniTaskController<QuestController>
{
if (_startedQuest != null && !_taskQueue.AllTasksComplete)
{
_logger.LogTrace("Not switching from quest {CurrentQuestId} to {NewQuestId} because tasks are still running", _startedQuest.Quest.Id, elementId);
questProgress = _startedQuest;
b = _startedQuest.Sequence;
}
@ -1415,6 +1418,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
_logger.LogWarning("Could not find quest {QuestId} during import", questElement);
}
_logger.LogInformation("Imported {Count} priority quests", ManualPriorityQuests.Count);
SavePriorityQuests();
}
public string ExportQuestPriority()
@ -1425,6 +1429,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
public void ClearQuestPriority()
{
ManualPriorityQuests.Clear();
SavePriorityQuests();
}
public bool AddQuestPriority(ElementId elementId)
@ -1432,6 +1437,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
if (_questRegistry.TryGetQuest(elementId, out Quest quest) && !ManualPriorityQuests.Contains(quest))
{
ManualPriorityQuests.Add(quest);
SavePriorityQuests();
return true;
}
return false;
@ -1439,25 +1445,25 @@ internal sealed class QuestController : MiniTaskController<QuestController>
public int AddAllAvailableQuests()
{
List<ElementId> list = (from q in _questRegistry.AllQuests.Where(delegate(Quest quest)
List<ElementId> list = (from q in _questRegistry.AllQuests.Where(delegate(Quest quest2)
{
if (quest.Root.Disabled || _questFunctions.IsQuestRemoved(quest.Id) || _questFunctions.IsQuestComplete(quest.Id) || _questFunctions.IsQuestAccepted(quest.Id) || quest.Info.IsRepeatable)
if (quest2.Root.Disabled || _questFunctions.IsQuestRemoved(quest2.Id) || _questFunctions.IsQuestComplete(quest2.Id) || _questFunctions.IsQuestAccepted(quest2.Id) || quest2.Info.IsRepeatable)
{
return false;
}
if (quest.Info.AlliedSociety != EAlliedSociety.None)
if (quest2.Info.AlliedSociety != EAlliedSociety.None)
{
_logger.LogDebug("Excluding allied society quest {QuestId} from bulk add", quest.Id);
_logger.LogDebug("Excluding allied society quest {QuestId} from bulk add", quest2.Id);
return false;
}
if (quest.Info is QuestInfo questInfo && _journalData.MoogleDeliveryGenreId.HasValue && questInfo.JournalGenre == _journalData.MoogleDeliveryGenreId.Value)
if (quest2.Info is QuestInfo questInfo && _journalData.MoogleDeliveryGenreId.HasValue && questInfo.JournalGenre == _journalData.MoogleDeliveryGenreId.Value)
{
_logger.LogDebug("Excluding moogle delivery quest {QuestId} from bulk add", quest.Id);
_logger.LogDebug("Excluding moogle delivery quest {QuestId} from bulk add", quest2.Id);
return false;
}
if (!_questFunctions.IsReadyToAcceptQuest(quest.Id))
if (!_questFunctions.IsReadyToAcceptQuest(quest2.Id))
{
_logger.LogTrace("Quest {QuestId} not ready to accept", quest.Id);
_logger.LogTrace("Quest {QuestId} not ready to accept", quest2.Id);
return false;
}
return true;
@ -1467,11 +1473,16 @@ internal sealed class QuestController : MiniTaskController<QuestController>
int num = 0;
foreach (ElementId item in list)
{
if (AddQuestPriority(item))
if (_questRegistry.TryGetQuest(item, out Quest quest) && !ManualPriorityQuests.Contains(quest))
{
ManualPriorityQuests.Add(quest);
num++;
}
}
if (num > 0)
{
SavePriorityQuests();
}
return num;
}
@ -1482,6 +1493,7 @@ internal sealed class QuestController : MiniTaskController<QuestController>
if (_questRegistry.TryGetQuest(elementId, out Quest quest) && !ManualPriorityQuests.Contains(quest))
{
ManualPriorityQuests.Insert(index, quest);
SavePriorityQuests();
}
return true;
}
@ -1493,14 +1505,39 @@ internal sealed class QuestController : MiniTaskController<QuestController>
}
}
public bool WasLastTaskUpdateWithin(TimeSpan timeSpan)
public void LoadPriorityQuests()
{
_logger.LogInformation("Last update: {Update}", _lastTaskUpdate);
if (!IsRunning)
if (!_configuration.General.PersistPriorityQuestsBetweenSessions)
{
return DateTime.Now <= _lastTaskUpdate.Add(timeSpan);
_logger.LogDebug("Priority quest persistence is disabled, skipping load");
return;
}
return true;
ManualPriorityQuests.Clear();
foreach (ElementId priorityQuest in _configuration.General.PriorityQuests)
{
if (_questRegistry.TryGetQuest(priorityQuest, out Quest quest))
{
ManualPriorityQuests.Add(quest);
continue;
}
_logger.LogWarning("Could not find quest {QuestId} during load from config", priorityQuest);
}
if (ManualPriorityQuests.Count > 0)
{
_logger.LogInformation("Loaded {Count} priority quests from configuration", ManualPriorityQuests.Count);
}
}
public void SavePriorityQuests()
{
if (!_configuration.General.PersistPriorityQuestsBetweenSessions)
{
_logger.LogDebug("Priority quest persistence is disabled, skipping save");
return;
}
_configuration.General.PriorityQuests = ManualPriorityQuests.Select((Quest q) => q.Id).ToList();
_pluginInterface.SavePluginConfig(_configuration);
_logger.LogDebug("Saved {Count} priority quests to configuration", ManualPriorityQuests.Count);
}
private void OnConditionChange(ConditionFlag flag, bool value)
@ -1530,6 +1567,11 @@ internal sealed class QuestController : MiniTaskController<QuestController>
{
_logger.LogInformation("Clearing priority quests on logout");
ManualPriorityQuests.Clear();
if (_configuration.General.PersistPriorityQuestsBetweenSessions)
{
_configuration.General.PriorityQuests.Clear();
_pluginInterface.SavePluginConfig(_configuration);
}
}
}