using System; using System.Runtime.CompilerServices; using Dalamud.Hooking; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game.Event; using FFXIVClientStructs.FFXIV.Common.Lua; using Microsoft.Extensions.Logging; namespace Questionable.Controller.GameUi; internal sealed class AutoSnipeHandler : IDisposable { private unsafe delegate ulong EnqueueSnipeTaskDelegate(EventSceneModuleImplBase* scene, lua_State* state); private readonly QuestController _questController; private readonly Configuration _configuration; private readonly ILogger _logger; private readonly Hook? _enqueueSnipeTaskHook; [MethodImpl(MethodImplOptions.NoInlining)] public unsafe AutoSnipeHandler(QuestController questController, Configuration configuration, IGameInteropProvider gameInteropProvider, ILogger logger) { _questController = questController; _configuration = configuration; _logger = logger; try { _enqueueSnipeTaskHook = gameInteropProvider.HookFromSignature(global::_003CModule_003E._200B_206B_206B_200E_200B_206A_206D_206B_206E_200F_206A_206F_206E_202B_200F_206C_202B_206D_206E_200F_200C_200E_206F_200D_200F_200B_202B_202B_202B_202B_206D_202C_206A_206D_200B_206E_200D_206A_206F_200F_202E(-116900171), EnqueueSnipeTask); _enqueueSnipeTaskHook.Enable(); _200C_200C_200F_202D_200B_202A_206A_206A_200C_206E_206E_206A_206E_206A_206B_206F_200B_206C_202B_206B_206A_206A_200B_202E_200F_200F_206F_202A_206D_202B_200E_206E_200E_200B_202B_202D_202D_206F_200D_206E_202E((ILogger)_logger, global::_003CModule_003E._206C_202A_206D_206A_206E_202A_202B_206F_206D_200F_202D_200F_202D_206A_202C_202B_206D_206A_200E_200E_202D_202D_200D_200C_200D_200D_206D_206E_202A_200F_206E_206C_206D_206A_206D_202B_200F_200D_206E_200C_202E(-2135730328), Array.Empty()); } catch (Exception ex) { _202C_200E_206A_200D_206C_206C_200F_206F_200D_206A_206E_200D_202B_202E_202D_206C_206B_202C_202A_206F_206D_200B_200C_200C_206D_202C_206F_206A_202A_206E_200C_200E_200C_202D_206D_202A_206C_200E_202B_202D_202E((ILogger)_logger, ex, global::_003CModule_003E._200B_206B_206B_200E_200B_206A_206D_206B_206E_200F_206A_206F_206E_202B_200F_206C_202B_206D_206E_200F_200C_200E_206F_200D_200F_200B_202B_202B_202B_202B_206D_202C_206A_206D_200B_206E_200D_206A_206F_200F_202E(309361772), Array.Empty()); _enqueueSnipeTaskHook = null; } } [MethodImpl(MethodImplOptions.NoInlining)] private unsafe ulong EnqueueSnipeTask(EventSceneModuleImplBase* scene, lua_State* state) { int num = ((!_configuration.General.AutoSnipe) ? 905347558 : 905347556); while (true) { int num2 = num; int num3 = 905347557; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 2: num = 905347556; break; case 3: return _enqueueSnipeTaskHook.Original(scene, state); case 1: num = ((!_questController.IsRunning) ? 905347558 : 905347557); break; case 0: { _200C_200C_200F_202D_200B_202A_206A_206A_200C_206E_206E_206A_206E_206A_206B_206F_200B_206C_202B_206B_206A_206A_200B_202E_200F_200F_206F_202A_206D_202B_200E_206E_200E_200B_202B_202D_202D_206F_200D_206E_202E((ILogger)_logger, global::_003CModule_003E._202E_206C_200F_206B_206A_202A_202C_206F_200C_206C_202B_206B_206D_206D_206D_202D_206E_202E_206C_206E_206D_202C_206F_200D_202D_202E_206A_206D_202A_206A_202B_200D_200C_206D_202B_200B_200D_200C_206E_206B_202E(486539700), Array.Empty()); TValue* top = state->top; top->tt = 3; top->value.n = 1.0; state->top++; return 1uL; } } } } [MethodImpl(MethodImplOptions.NoInlining)] public void Dispose() { int num = ((_enqueueSnipeTaskHook == null) ? 1906347675 : 1906347672); while (true) { int num2 = num; int num3 = 1906347673; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 2: return; case 1: _enqueueSnipeTaskHook.Disable(); _enqueueSnipeTaskHook.Dispose(); _200C_200C_200F_202D_200B_202A_206A_206A_200C_206E_206E_206A_206E_206A_206B_206F_200B_206C_202B_206B_206A_206A_200B_202E_200F_200F_206F_202A_206D_202B_200E_206E_200E_200B_202B_202D_202D_206F_200D_206E_202E((ILogger)_logger, global::_003CModule_003E._206C_202A_206D_206A_206E_202A_202B_206F_206D_200F_202D_200F_202D_206A_202C_202B_206D_206A_200E_200E_202D_202D_200D_200C_200D_200D_206D_206E_202A_200F_206E_206C_206D_206A_206D_202B_200F_200D_206E_200C_202E(135526562), Array.Empty()); num = 1906347675; break; case 0: num = 1906347672; break; } } } void IDisposable.Dispose() { //ILSpy generated this explicit interface implementation from .override directive in Dispose this.Dispose(); } static void _200C_200C_200F_202D_200B_202A_206A_206A_200C_206E_206E_206A_206E_206A_206B_206F_200B_206C_202B_206B_206A_206A_200B_202E_200F_200F_206F_202A_206D_202B_200E_206E_200E_200B_202B_202D_202D_206F_200D_206E_202E(ILogger P_0, string P_1, object[] P_2) { P_0.LogDebug(P_1, P_2); } static void _202C_200E_206A_200D_206C_206C_200F_206F_200D_206A_206E_200D_202B_202E_202D_206C_206B_202C_202A_206F_206D_200B_200C_200C_206D_202C_206F_206A_202A_206E_200C_200E_200C_202D_206D_202A_206C_200E_202B_202D_202E(ILogger P_0, Exception P_1, string P_2, object[] P_3) { P_0.LogError(P_1, P_2, P_3); } }