using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Dalamud.Game.ClientState.Conditions; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Graphics.Kernel; using FFXIVClientStructs.FFXIV.Client.System.Input; using FFXIVClientStructs.FFXIV.Client.UI; using Microsoft.Extensions.Logging; using Questionable.Controller.Steps.Common; using Questionable.Controller.Utils; using Questionable.Model; using Questionable.Model.Questing; namespace Questionable.Controller.Steps.Interactions; internal static class Dive { internal sealed class Factory : SimpleTaskFactory { public override ITask? CreateTask(Quest quest, QuestSequence sequence, QuestStep step) { int num = ((_206D_206E_202A_206D_200D_206F_206D_200C_206E_200E_206C_200C_200E_206F_206C_200B_202C_206C_202C_206B_200C_200B_200C_202C_206E_202D_200F_202B_202D_200F_202D_200D_206F_202A_206A_202B_202A_202B_206F_206C_202E(step) == EInteractionType.Dive) ? 912485956 : 912485959); while (true) { int num2 = num; int num3 = 912485958; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 2: return new Task(); case 1: return null; case 0: goto IL_0050; } continue; IL_0050: num = 912485959; } } static EInteractionType _206D_206E_202A_206D_200D_206F_206D_200C_206E_200E_206C_200C_200E_206F_206C_200B_202C_206C_202C_206B_200C_200B_200C_202C_206E_202D_200F_202B_202D_200F_202D_200D_206F_202A_206A_202B_202A_202B_206F_206C_202E(QuestStep P_0) { return P_0.InteractionType; } } internal sealed class Task : ITask { [MethodImpl(MethodImplOptions.NoInlining)] public override string ToString() { return 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(377000525); } } internal sealed class DoDive(ICondition condition, ILogger logger) : AbstractDelayedTaskExecutor(TimeSpan.FromSeconds(5L)), IStoppableTaskExecutor, ITaskExecutor { private readonly Queue<(uint Type, nint Key)> _keysToPress = new Queue<(uint, nint)>(); private readonly HashSet _pressedKeys = new HashSet(); private int _attempts; [MethodImpl(MethodImplOptions.NoInlining)] protected override bool StartInternal() { int num = ((!_200F_200F_200D_206B_200B_206D_206C_206F_206E_200D_200B_206E_206D_200E_206C_200B_200D_202D_206E_202C_206D_200C_200E_202C_202B_200C_206B_206B_206E_202C_200B_206F_206F_206E_206C_206F_202D_206C_200F_206F_202E(condition, ConditionFlag.Diving)) ? (-182833903) : (-182833899)); while (true) { int num2 = num; int num3 = -182833900; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 2: num = ((!_200F_200F_200D_206B_200B_206D_206C_206F_206E_200D_200B_206E_206D_200E_206C_200B_200D_202D_206E_202C_206D_200C_200E_202C_202B_200C_206B_206B_206E_202C_200B_206F_206F_206E_206C_206F_202D_206C_200F_206F_202E(condition, ConditionFlag.Swimming)) ? (-182833904) : (-182833900)); break; case 5: num = (_200F_200F_200D_206B_200B_206D_206C_206F_206E_200D_200B_206E_206D_200E_206C_200B_200D_202D_206E_202C_206D_200C_200E_202C_202B_200C_206B_206B_206E_202C_200B_206F_206F_206E_206C_206F_202D_206C_200F_206F_202E(condition, ConditionFlag.Mounted) ? (-182833900) : (-182833898)); break; case 0: Descend(); return true; case 3: num = -182833899; break; case 4: throw new TaskException(global::_003CModule_003E._202D_206D_206A_206E_202C_202B_200C_206C_200E_206A_206D_200E_206A_202A_200C_202E_206E_202C_206F_200B_206D_206F_200C_202C_200B_202B_200F_200B_206A_206F_200F_202E_206B_200E_202B_202A_200F_200B_202A_200E_202E(-335869589)); case 1: return false; } } } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe override ETaskResult Update() { (uint, nint) result; int num = ((!_keysToPress.TryDequeue(out result)) ? 297362200 : 297362206); while (true) { int num2 = num; int num3 = 297362202; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 6: return ETaskResult.StillRunning; case 4: num = ((result.Item1 != 0) ? 297362201 : 297362204); break; case 3: _200E_202C_206B_200B_202B_206C_206C_202C_202C_206B_206E_206F_202D_200F_200E_200D_200B_202A_202C_206B_200B_202E_200D_202D_206F_206C_200F_200E_206A_200F_202A_202C_206F_200E_206B_202C_206C_202C_206E_200E_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(547752152), new object[2] { (result.Item1 == 256) ? 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(-211975877) : 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(378157279), result.Item2 }); WindowsKeypress.SendMessage((nint)Device.Instance()->hWnd, result.Item1, result.Item2); num = ((result.Item1 != 256) ? 297362202 : 297362203); break; case 8: num = 297362206; break; case 5: _pressedKeys.Remove(result.Item2); num = 297362205; break; case 2: return base.Update(); case 1: _pressedKeys.Add(result.Item2); num = 297362205; break; case 0: num = ((result.Item1 != 257) ? 297362205 : 297362207); break; case 7: return ETaskResult.StillRunning; } } } [MethodImpl(MethodImplOptions.NoInlining)] public unsafe void StopNow() { using (HashSet.Enumerator enumerator = _pressedKeys.GetEnumerator()) { int num = 169668245; while (true) { int num2 = num; int num3 = 169668244; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: num = 169668245; break; case 1: num = (enumerator.MoveNext() ? 169668246 : 169668247); break; case 2: { nint current = enumerator.Current; _200E_202C_206B_200B_202B_206C_206C_202C_202C_206B_206E_206F_202D_200F_200E_200D_200B_202A_202C_206B_200B_202E_200D_202D_206F_206C_200F_200E_206A_200F_202A_202C_206F_200E_206B_202C_206C_202C_206E_200E_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(331258283), new object[1] { current }); WindowsKeypress.SendMessage((nint)Device.Instance()->hWnd, 257u, current); num = 169668245; break; } case 3: goto end_IL_0017; } continue; end_IL_0017: break; } } _pressedKeys.Clear(); _keysToPress.Clear(); } void IStoppableTaskExecutor.StopNow() { //ILSpy generated this explicit interface implementation from .override directive in StopNow this.StopNow(); } public override bool ShouldInterruptOnDamage() { return false; } [MethodImpl(MethodImplOptions.NoInlining)] protected override ETaskResult UpdateInternal() { int num = ((!_200F_200F_200D_206B_200B_206D_206C_206F_206E_200D_200B_206E_206D_200E_206C_200B_200D_202D_206E_202C_206D_200C_200E_202C_202B_200C_206B_206B_206E_202C_200B_206F_206F_206E_206C_206F_202D_206C_200F_206F_202E(condition, ConditionFlag.Diving)) ? 1669924537 : 1669924536); while (true) { int num2 = num; int num3 = 1669924537; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 0: num = ((_attempts < 5) ? 1669924538 : 1669924541); break; case 1: return ETaskResult.TaskComplete; case 3: { Descend(); int attempts = _attempts; num3 = 1; num4 = attempts; _attempts = (num4 | num3) + (num4 & num3); return ETaskResult.StillRunning; } case 4: throw new TaskException(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(-1475958254)); case 2: num = 1669924536; break; } } } [MethodImpl(MethodImplOptions.NoInlining)] private unsafe void Descend() { Keybind* keybind = UIInputData.Instance()->GetKeybind(InputId.MOVE_DESCENT); if (keybind == null) { throw new TaskException(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(472640545)); } Span keySettings = keybind->KeySettings; SeVirtualKey key = keySettings[0].Key; KeyModifierFlag keyModifier = keySettings[0].KeyModifier; SeVirtualKey key2 = keySettings[1].Key; KeyModifierFlag keyModifier2 = keySettings[1].KeyModifier; _200E_202C_206B_200B_202B_206C_206C_202C_202C_206B_206E_206F_202D_200F_200E_200D_200B_202A_202C_206B_200B_202E_200D_202D_206F_206C_200F_200E_206A_200F_202A_202C_206F_200E_206B_202C_206C_202C_206E_200E_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(-1313145476), new object[4] { key, keyModifier, key2, keyModifier2 }); int num = 2; List> list = new List>(num); CollectionsMarshal.SetCount(list, num); Span> span = CollectionsMarshal.AsSpan(list); span[0] = GetKeysToPress(key, keyModifier); span[1] = GetKeysToPress(key2, keyModifier2); List list2 = list.OfType>().MinBy((List x) => x.Count); int num2 = ((list2 == null) ? 326698319 : 326698316); int num12 = default(int); while (true) { int num3 = num2; int num4 = 326698319; int num5 = num3; int num6 = num5 + num4; int num7 = num5 & num4; switch (num6 - (num7 + num7)) { case 2: num2 = 326698316; break; case 3: num2 = ((list2.Count != 0) ? 326698318 : 326698319); break; case 0: throw new TaskException(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(-81108494)); case 1: { using (List.Enumerator enumerator = list2.GetEnumerator()) { num2 = 1722000690; while (true) { int num8 = num2; num4 = 1722000690; num5 = num8; int num9 = num5 + num4; int num10 = num5 & num4; switch (num9 - (num10 + num10)) { case 2: num2 = 1722000690; break; case 3: { nint current = enumerator.Current; _keysToPress.Enqueue((256u, current)); num12 = 0; num2 = 1722000695; break; } case 4: { _keysToPress.Enqueue((0u, 0)); int num11 = num12; num4 = 1; num5 = num11; int num13 = num5 ^ num4; int num14 = num5 & num4; num12 = num13 + (num14 + num14); num2 = 1722000695; break; } case 5: num2 = ((num12 < 15) ? 1722000694 : 1722000690); break; case 0: num2 = (enumerator.MoveNext() ? 1722000689 : 1722000691); break; case 1: goto end_IL_01b5; } continue; end_IL_01b5: break; } } int num15 = 0; num2 = 624642844; while (true) { int num16 = num2; num4 = 624642847; num5 = num16; switch ((num5 | num4) - (num5 & num4)) { case 0: num2 = 624642844; break; case 3: num2 = ((num15 < 5) ? 624642846 : 624642845); break; case 1: { _keysToPress.Enqueue((0u, 0)); int num20 = num15; num4 = 1; num5 = num20; num15 = (num5 | num4) + (num5 & num4); num2 = 624642844; break; } case 2: { list2.Reverse(); using List.Enumerator enumerator = list2.GetEnumerator(); num2 = 2090140458; while (true) { int num17 = num2; num4 = 2090140458; num5 = num17; int num18 = num5 + num4; int num19 = num5 & num4; switch (num18 - (num19 + num19)) { case 2: num2 = 2090140458; break; case 1: { nint current2 = enumerator.Current; _keysToPress.Enqueue((257u, current2)); num2 = 2090140458; break; } case 0: num2 = (enumerator.MoveNext() ? 2090140459 : 2090140457); break; case 3: return; } } } } } } } } } static bool _200F_200F_200D_206B_200B_206D_206C_206F_206E_200D_200B_206E_206D_200E_206C_200B_200D_202D_206E_202C_206D_200C_200E_202C_202B_200C_206B_206B_206E_202C_200B_206F_206F_206E_206C_206F_202D_206C_200F_206F_202E(ICondition P_0, ConditionFlag P_1) { return P_0[P_1]; } static void _200E_202C_206B_200B_202B_206C_206C_202C_202C_206B_206E_206F_202D_200F_200E_200D_200B_202A_202C_206B_200B_202E_200D_202D_206F_206C_200F_200E_206A_200F_202A_202C_206F_200E_206B_202C_206C_202C_206E_200E_202E(ILogger P_0, string P_1, object[] P_2) { P_0.LogDebug(P_1, P_2); } } private static List? GetKeysToPress(SeVirtualKey key, KeyModifierFlag modifier) { List list = new List(); int num = (((modifier & KeyModifierFlag.Ctrl) == 0) ? 1227229785 : 1227229790); nint num7 = default(nint); while (true) { int num2 = num; int num3 = 1227229786; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 2: return null; case 3: num = (((modifier & KeyModifierFlag.Shift) == 0) ? 1227229789 : 1227229787); break; case 4: list.Add(17); num = 1227229785; break; case 5: list.Add(num7); return list; case 1: list.Add(16); num = 1227229789; break; case 7: num = (((modifier & KeyModifierFlag.Alt) == 0) ? 1227229788 : 1227229786); break; case 6: num7 = (nint)key; num = ((num7 != 0) ? 1227229791 : 1227229784); break; case 8: num = 1227229790; break; case 0: list.Add(18); num = 1227229788; break; } } } }