Add IPC to get currently active seasonal event quests

This commit is contained in:
Liza 2025-02-05 13:36:21 +01:00
parent 3b80b3fe93
commit 2b4159d3d6
Signed by: liza
GPG Key ID: 2C41B84815CF6445
2 changed files with 22 additions and 1 deletions

View File

@ -1,7 +1,10 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using Dalamud.Plugin; using Dalamud.Plugin;
using Dalamud.Plugin.Ipc; using Dalamud.Plugin.Ipc;
using Questionable.Controller; using Questionable.Controller;
using Questionable.Windows.QuestComponents;
namespace Questionable.External; namespace Questionable.External;
@ -9,11 +12,16 @@ internal sealed class QuestionableIpc : IDisposable
{ {
private const string IpcIsRunning = "Questionable.IsRunning"; private const string IpcIsRunning = "Questionable.IsRunning";
private const string IpcGetCurrentQuestId = "Questionable.GetCurrentQuestId"; private const string IpcGetCurrentQuestId = "Questionable.GetCurrentQuestId";
private const string IpcGetCurrentlyActiveEventQuests = "Questionable.GetCurrentlyActiveEventQuests";
private readonly ICallGateProvider<bool> _isRunning; private readonly ICallGateProvider<bool> _isRunning;
private readonly ICallGateProvider<string?> _getCurrentQuestId; private readonly ICallGateProvider<string?> _getCurrentQuestId;
private readonly ICallGateProvider<List<string>> _getCurrentlyActiveEventQuests;
public QuestionableIpc(QuestController questController, IDalamudPluginInterface pluginInterface) public QuestionableIpc(
QuestController questController,
EventInfoComponent eventInfoComponent,
IDalamudPluginInterface pluginInterface)
{ {
_isRunning = pluginInterface.GetIpcProvider<bool>(IpcIsRunning); _isRunning = pluginInterface.GetIpcProvider<bool>(IpcIsRunning);
_isRunning.RegisterFunc(() => _isRunning.RegisterFunc(() =>
@ -21,11 +29,17 @@ internal sealed class QuestionableIpc : IDisposable
_getCurrentQuestId = pluginInterface.GetIpcProvider<string?>(IpcGetCurrentQuestId); _getCurrentQuestId = pluginInterface.GetIpcProvider<string?>(IpcGetCurrentQuestId);
_getCurrentQuestId.RegisterFunc(() => questController.CurrentQuest?.Quest.Id.ToString()); _getCurrentQuestId.RegisterFunc(() => questController.CurrentQuest?.Quest.Id.ToString());
_getCurrentlyActiveEventQuests =
pluginInterface.GetIpcProvider<List<string>>(IpcGetCurrentlyActiveEventQuests);
_getCurrentlyActiveEventQuests.RegisterFunc(() =>
eventInfoComponent.GetCurrentlyActiveEventQuests().Select(q => q.ToString()).ToList());
} }
public void Dispose() public void Dispose()
{ {
_getCurrentlyActiveEventQuests.UnregisterFunc();
_getCurrentQuestId.UnregisterFunc(); _getCurrentQuestId.UnregisterFunc();
_isRunning.UnregisterFunc(); _isRunning.UnregisterFunc();
} }

View File

@ -136,5 +136,12 @@ internal sealed class EventInfoComponent
return !eventQuest.QuestIds.All(x => _questFunctions.IsQuestComplete(x)); return !eventQuest.QuestIds.All(x => _questFunctions.IsQuestComplete(x));
} }
public IEnumerable<QuestId> GetCurrentlyActiveEventQuests()
{
return _eventQuests
.Where(x => x.EndsAtUtc <= DateTime.UtcNow)
.SelectMany(x => x.QuestIds);
}
private sealed record EventQuest(string Name, List<QuestId> QuestIds, DateTime EndsAtUtc); private sealed record EventQuest(string Name, List<QuestId> QuestIds, DateTime EndsAtUtc);
} }