using System; using Dalamud.Plugin; using Dalamud.Plugin.Ipc; using Dalamud.Plugin.Services; using Questionable.Controller; namespace Questionable.External; internal sealed class TextAdvanceIpc : IDisposable { public sealed class ExternalTerritoryConfig { public bool? EnableQuestAccept = true; public bool? EnableQuestComplete = true; public bool? EnableRewardPick = true; public bool? EnableRequestHandin = true; public bool? EnableCutsceneEsc = true; public bool? EnableCutsceneSkipConfirm = true; public bool? EnableTalkSkip = true; public bool? EnableRequestFill = true; public bool? EnableAutoInteract = false; } private bool _isExternalControlActivated; private readonly QuestController _questController; private readonly Configuration _configuration; private readonly IFramework _framework; private readonly ICallGateSubscriber _isInExternalControl; private readonly ICallGateSubscriber _enableExternalControl; private readonly ICallGateSubscriber _disableExternalControl; private readonly string _pluginName; private readonly ExternalTerritoryConfig _externalTerritoryConfig = new ExternalTerritoryConfig(); public TextAdvanceIpc(IDalamudPluginInterface pluginInterface, IFramework framework, QuestController questController, Configuration configuration) { _framework = framework; _questController = questController; _configuration = configuration; _isInExternalControl = pluginInterface.GetIpcSubscriber("TextAdvance.IsInExternalControl"); _enableExternalControl = pluginInterface.GetIpcSubscriber("TextAdvance.EnableExternalControl"); _disableExternalControl = pluginInterface.GetIpcSubscriber("TextAdvance.DisableExternalControl"); _pluginName = pluginInterface.InternalName; _framework.Update += OnUpdate; } public void Dispose() { _framework.Update -= OnUpdate; if (_isExternalControlActivated) { _disableExternalControl.InvokeFunc(_pluginName); } } private void OnUpdate(IFramework framework) { bool flag = _questController.IsRunning || _questController.AutomationType != QuestController.EAutomationType.Manual; if (_configuration.General.ConfigureTextAdvance && flag) { if (!_isInExternalControl.InvokeFunc() && _enableExternalControl.InvokeFunc(_pluginName, _externalTerritoryConfig)) { _isExternalControlActivated = true; } } else if (_isExternalControlActivated && (_disableExternalControl.InvokeFunc(_pluginName) || !_isInExternalControl.InvokeFunc())) { _isExternalControlActivated = false; } } }