diff --git a/Questionable/External/QuestionableIpc.cs b/Questionable/External/QuestionableIpc.cs index 760a76cd..a48d20b6 100644 --- a/Questionable/External/QuestionableIpc.cs +++ b/Questionable/External/QuestionableIpc.cs @@ -4,6 +4,7 @@ using System.Linq; using Dalamud.Plugin; using Dalamud.Plugin.Ipc; using Questionable.Controller; +using Questionable.Model.Questing; using Questionable.Windows.QuestComponents; namespace Questionable.External; @@ -13,14 +14,16 @@ internal sealed class QuestionableIpc : IDisposable private const string IpcIsRunning = "Questionable.IsRunning"; private const string IpcGetCurrentQuestId = "Questionable.GetCurrentQuestId"; private const string IpcGetCurrentlyActiveEventQuests = "Questionable.GetCurrentlyActiveEventQuests"; + private const string IpcStartQuest = "Questionable.StartQuest"; private readonly ICallGateProvider _isRunning; private readonly ICallGateProvider _getCurrentQuestId; private readonly ICallGateProvider> _getCurrentlyActiveEventQuests; + private readonly ICallGateProvider _startQuest; public QuestionableIpc( QuestController questController, - EventInfoComponent eventInfoComponent, + EventInfoComponent eventInfoComponent, QuestRegistry questRegistry, IDalamudPluginInterface pluginInterface) { _isRunning = pluginInterface.GetIpcProvider(IpcIsRunning); @@ -34,11 +37,25 @@ internal sealed class QuestionableIpc : IDisposable pluginInterface.GetIpcProvider>(IpcGetCurrentlyActiveEventQuests); _getCurrentlyActiveEventQuests.RegisterFunc(() => eventInfoComponent.GetCurrentlyActiveEventQuests().Select(q => q.ToString()).ToList()); + + _startQuest = pluginInterface.GetIpcProvider(IpcStartQuest); + _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();