muffin v7.4.10
This commit is contained in:
parent
2df81c5d15
commit
b8dd142c23
47 changed files with 3604 additions and 1058 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue