using Dalamud.Plugin;
using Dalamud.Plugin.Ipc;
using Questionable.Controller;
+using Questionable.Model.Questing;
using Questionable.Windows.QuestComponents;
namespace Questionable.External;
private readonly ICallGateProvider<bool> _isRunning;
private readonly ICallGateProvider<string?> _getCurrentQuestId;
private readonly ICallGateProvider<List<string>> _getCurrentlyActiveEventQuests;
+ private readonly ICallGateProvider<string, bool> _startQuest;
public QuestionableIpc(
QuestController questController,
- EventInfoComponent eventInfoComponent,
+ EventInfoComponent eventInfoComponent, QuestRegistry questRegistry,
IDalamudPluginInterface pluginInterface)
{
_isRunning = pluginInterface.GetIpcProvider<bool>(IpcIsRunning);
pluginInterface.GetIpcProvider<List<string>>(IpcGetCurrentlyActiveEventQuests);
_getCurrentlyActiveEventQuests.RegisterFunc(() =>
eventInfoComponent.GetCurrentlyActiveEventQuests().Select(q => q.ToString()).ToList());
+
+ _startQuest = pluginInterface.GetIpcProvider<string, bool>("Questionable.StartQuest");
+ _startQuest.RegisterFunc((string questId) => StartQuest(questController, questRegistry, questId));
}
+ private static bool StartQuest(QuestController qc, QuestRegistry qr, string questId)
+ {
+ if (ElementId.TryFromString(questId, out var elementId) && elementId != null && qr.TryGetQuest(elementId, out var quest))
+ {
+ qc.SetNextQuest(quest);
+ qc.Start("IPCQuestSelection");
+ return true;
+ }
+ return false;
+ }
public void Dispose()
{
+ _startQuest.UnregisterFunc();
_getCurrentlyActiveEventQuests.UnregisterFunc();
_getCurrentQuestId.UnregisterFunc();
_isRunning.UnregisterFunc();