add StartQuest ipc #133

Merged
liza merged 2 commits from croizat/Questionable:ipc into master 2025-02-05 17:02:54 +00:00

View File

@ -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<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);
@ -34,11 +37,25 @@ internal sealed class QuestionableIpc : IDisposable
pluginInterface.GetIpcProvider<List<string>>(IpcGetCurrentlyActiveEventQuests);
_getCurrentlyActiveEventQuests.RegisterFunc(() =>
eventInfoComponent.GetCurrentlyActiveEventQuests().Select(q => q.ToString()).ToList());
_startQuest = pluginInterface.GetIpcProvider<string, bool>(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))
liza marked this conversation as resolved
Review

You can use qr.IsKnownQuest(elementId) instead of qr.TryGetQuest(elementId, out var quest)

You can use `qr.IsKnownQuest(elementId)` instead of `qr.TryGetQuest(elementId, out var quest)`
Review

Well I need the out value to pass to SetNextQuest, no? Unless there's a method I'm missing that would only take in an elementid

Well I need the `out` value to pass to `SetNextQuest`, no? Unless there's a method I'm missing that would only take in an elementid
Review

Oh, you're right.

Oh, you're right.
{
qc.SetNextQuest(quest);
qc.Start("IPCQuestSelection");
return true;
}
return false;
}
public void Dispose()
{
_startQuest.UnregisterFunc();
_getCurrentlyActiveEventQuests.UnregisterFunc();
_getCurrentQuestId.UnregisterFunc();
_isRunning.UnregisterFunc();