using System; using System.Numerics; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Dalamud.Game.ClientState.Objects.SubKinds; using Dalamud.Game.ClientState.Objects.Types; using Dalamud.Game.ClientState.Statuses; using Dalamud.Game.Config; using Dalamud.Hooking; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game.Control; using FFXIVClientStructs.FFXIV.Client.Graphics.Render; using FFXIVClientStructs.FFXIV.Common.Math; using Microsoft.Extensions.Logging; namespace LLib.Movement; public sealed class MovementOverrideHook : IDisposable { private unsafe delegate bool RMIWalkIsInputEnabledDelegate(void* self); private unsafe delegate void RMIWalkDelegate(void* self, float* sumLeft, float* sumForward, float* sumTurnLeft, byte* haveBackwardOrStrafe, byte* a6, byte bAdditiveUnk); private unsafe delegate void RMIFlyDelegate(void* self, PlayerMoveControllerFlyInput* result); private unsafe delegate byte MoveControlIsInputActiveDelegate(void* self, byte inputSourceFlags); private const float DefaultPrecision = 0.1f; private const float StallDistanceThreshold = 0.3f; private const long StallTimeThresholdMs = 500L; private const long StallCooldownMs = 500L; private const long StallContinuityGapMs = 250L; private const long UserInputFreshnessMs = 250L; private const float MisdirectionThresholdRad = MathF.PI / 4f; private static readonly uint[] MisdirectionStatusIds; private readonly ILogger _logger; private readonly IObjectTable _objectTable; private readonly IGameConfig _gameConfig; private RMIWalkIsInputEnabledDelegate? _isInputEnabled1; private RMIWalkIsInputEnabledDelegate? _isInputEnabled2; private Hook? _rmiWalkHook; private Hook? _rmiFlyHook; private Hook? _mcIsInputActiveHook; private unsafe float* _forcedMovementDirection; private bool? _forcedControlState; private System.Numerics.Vector3? _desiredDirection; private System.Numerics.Vector3? _desiredPosition; private System.Numerics.Vector3? _desiredFlyPosition; private System.Numerics.Vector3 _stallCheckPosition; private long _stallCheckStartMs; private long _stallCooldownUntilMs; private long _lastDriveMs; private float _flyStallBestDist; private long _flyStallImprovementMs; private long _flyStallCooldownUntilMs; private long _flyLastDriveMs; private bool _legacyMode; private long _lastUserInputAtMs; public Func? IsExternalPathfindingActive { get; set; } public bool IsAvailable { get; private set; } public bool IsActive { get; private set; } public bool UserInputDetected => _202C_200F_206E_202D_202A_202D_202E_206A_202D_202B_206E_200F_200D_200E_202A_202A_200E_206D_206D_202B_200C_206E_200E_202B_202A_200E_202B_200E_202E_206C_202C_206F_202D_202C_200B_202C_206B_202B_200D_206F_202E() - _lastUserInputAtMs < 250; public float Precision { get; set; } = 0.1f; public System.Numerics.Vector3? DesiredDirection { get { return _desiredDirection; } set { System.Numerics.Vector3? desiredDirection = _desiredDirection; System.Numerics.Vector3? vector = value; int num = ((desiredDirection.HasValue == vector.HasValue) ? (-1630909431) : (-1630909425)); while (true) { int num2 = num; int num3 = -1630909430; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 8: num = -1630909425; break; case 2: if (desiredDirection.GetValueOrDefault() == vector.GetValueOrDefault()) { goto case 6; } goto case 5; case 6: num = -1630909429; break; case 5: num = -1630909426; break; case 3: num = (desiredDirection.HasValue ? (-1630909432) : (-1630909428)); break; case 4: _desiredDirection = value; num = ((!value.HasValue) ? (-1630909427) : (-1630909430)); break; case 0: _desiredPosition = null; num = -1630909427; break; case 7: ResetStallTracking(); return; case 1: return; } } } } public System.Numerics.Vector3? DesiredPosition { get { return _desiredPosition; } set { System.Numerics.Vector3? desiredPosition = _desiredPosition; System.Numerics.Vector3? vector = value; int num = ((desiredPosition.HasValue == vector.HasValue) ? 1571063872 : 1571063873); while (true) { int num2 = num; int num3 = 1571063878; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { default: continue; case 3: num = 1571063873; continue; case 5: _desiredPosition = value; num = ((!value.HasValue) ? 1571063878 : 1571063879); continue; case 6: num = (desiredPosition.HasValue ? 1571063874 : 1571063876); continue; case 8: return; case 0: ResetStallTracking(); return; case 1: _desiredDirection = null; num = 1571063878; continue; case 4: if (!(desiredPosition.GetValueOrDefault() == vector.GetValueOrDefault())) { break; } goto case 2; case 2: num = 1571063886; continue; case 7: break; } num = 1571063875; } } } public System.Numerics.Vector3? DesiredFlyPosition { get { return _desiredFlyPosition; } set { System.Numerics.Vector3? desiredFlyPosition = _desiredFlyPosition; System.Numerics.Vector3? vector = value; int num = ((desiredFlyPosition.HasValue == vector.HasValue) ? 175204761 : 175204766); while (true) { int num2 = num; int num3 = 175204762; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 0: return; case 6: if (desiredFlyPosition.GetValueOrDefault() == vector.GetValueOrDefault()) { goto case 1; } goto case 4; case 1: num = 175204762; break; case 4: num = 175204760; break; case 5: num = 175204766; break; case 3: num = (desiredFlyPosition.HasValue ? 175204764 : 175204763); break; case 2: _desiredFlyPosition = value; ResetFlyStallTracking(); return; } } } } public MovementOverrideHook(ILogger logger, IObjectTable objectTable, IGameConfig gameConfig, ISigScanner sigScanner, IGameInteropProvider interop, bool enabled = true) { _logger = logger; _objectTable = objectTable; _gameConfig = gameConfig; _202B_206B_206B_202B_202A_206A_200E_200F_206C_206E_206F_200C_200F_202C_206B_206B_202B_206A_202C_206A_206E_206E_206B_206E_206D_200D_200D_206C_206B_202E_206F_206A_200C_202A_200E_206E_200E_202B_206A_202C_202E(_gameConfig, (EventHandler)OnGameConfigChanged); UpdateLegacyMode(); TryInstallHook(sigScanner, interop, enabled); } [MethodImpl(MethodImplOptions.NoInlining)] private unsafe void TryInstallHook(ISigScanner sigScanner, IGameInteropProvider interop, bool enabled) { int num = (enabled ? (-1900473583) : (-1900473584)); while (true) { int num2 = num; int num3 = -1900473583; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 2: goto IL_004a; case 1: _200C_200F_202B_200E_202B_200C_206E_200D_202A_202D_206A_202D_200D_200F_206C_200E_202C_202C_206D_206D_206D_200E_202E_200C_200C_206B_200D_200C_206D_206E_200D_202B_206D_206D_202A_202B_202A_206E_200C_200D_202E((ILogger)_logger, global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(-1885951886), Array.Empty()); IsAvailable = false; return; case 0: try { nint num5 = _202E_206A_202B_200D_202E_206C_200D_206D_200C_200B_202C_206B_202B_200D_206C_206A_206E_202A_202D_200E_200B_200F_200E_206C_200E_200C_200D_206E_202E_202D_202B_200F_206E_200D_202E_202B_202E_206B_202C_200F_202E(sigScanner, global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E(4336795)); _isInputEnabled1 = Marshal.GetDelegateForFunctionPointer(num5); nint num6 = _202E_206A_202B_200D_202E_206C_200D_206D_200C_200B_202C_206B_202B_200D_206C_206A_206E_202A_202D_200E_200B_200F_200E_206C_200E_200C_200D_206E_202E_202D_202B_200F_206E_200D_202E_202B_202E_206B_202C_200F_202E(sigScanner, global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(-343401937)); _isInputEnabled2 = Marshal.GetDelegateForFunctionPointer(num6); _rmiWalkHook = interop.HookFromSignature(global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(211326417), RMIWalkDetour); _rmiWalkHook.Enable(); _rmiFlyHook = interop.HookFromSignature(global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E(509698149), RMIFlyDetour); _rmiFlyHook.Enable(); IsAvailable = true; _200C_200F_202B_200E_202B_200C_206E_200D_202A_202D_206A_202D_200D_200F_206C_200E_202C_202C_206D_206D_206D_200E_202E_200C_200C_206B_200D_200C_206D_206E_200D_202B_206D_206D_202A_202B_202A_206E_200C_200D_202E((ILogger)_logger, global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(113861434), new object[4] { _rmiWalkHook.Address, _rmiFlyHook.Address, num5, num6 }); } catch (Exception ex) { num = ((!IsTrampolineExhaustion(ex)) ? (-1568159259) : (-1568159263)); while (true) { int num7 = num; num3 = -1568159264; num4 = num7; switch ((num4 | num3) - (num4 & num3)) { default: continue; case 2: num = -1568159263; continue; case 0: { _rmiWalkHook = null; Hook? rmiFlyHook = _rmiFlyHook; if (rmiFlyHook == null) { break; } rmiFlyHook.Dispose(); num = -1568159261; continue; } case 4: { IsAvailable = false; _isInputEnabled1 = null; _isInputEnabled2 = null; Hook? rmiWalkHook = _rmiWalkHook; if (rmiWalkHook == null) { goto case 0; } rmiWalkHook.Dispose(); num = -1568159264; continue; } case 1: _206C_206C_202A_200B_206C_200C_200E_202B_200C_202B_202D_200B_200D_200D_202A_200B_206D_202E_200B_206B_206D_200D_202D_200B_206C_202C_206A_202C_206E_202D_200B_206C_206F_206F_202B_200E_206F_202A_200C_206A_202E((ILogger)_logger, ex, global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(-763323413), Array.Empty()); num = -1568159260; continue; case 5: _206C_206C_202A_200B_206C_200C_200E_202B_200C_202B_202D_200B_200D_200D_202A_200B_206D_202E_200B_206B_206D_200D_202D_200B_206C_202C_206A_202C_206E_202D_200B_206C_206F_206F_202B_200E_206F_202A_200C_206A_202E((ILogger)_logger, ex, global::_003CModule_003E._206A_206D_202C_206E_206D_206E_202A_200F_200D_206A_200F_206C_202C_202D_206D_206A_200D_200F_206A_206C_202C_206D_206E_200F_200F_200C_206B_200B_206B_206E_202B_206B_200E_200E_200B_206F_200F_202E_200C_200C_202E(1136207760), Array.Empty()); num = -1568159260; continue; case 3: break; } break; } _rmiFlyHook = null; return; } try { nint num8 = (nint)(_forcedMovementDirection = (float*)_206F_202A_206B_202A_200C_202D_206F_202E_206C_206D_202A_206B_200C_200E_202D_200D_202C_200C_206A_206D_206A_206A_200C_202C_202B_200E_206E_202B_200B_206A_200D_200D_206C_206A_206C_200B_200C_206E_202D_206B_202E(sigScanner, global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E(-334079399), 0)); _mcIsInputActiveHook = interop.HookFromSignature(global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(-1492373940), MCIsInputActiveDetour); _mcIsInputActiveHook.Enable(); _200C_200F_202B_200E_202B_200C_206E_200D_202A_202D_206A_202D_200D_200F_206C_200E_202C_202C_206D_206D_206D_200E_202E_200C_200C_206B_200D_200C_206D_206E_200D_202B_206D_206D_202A_202B_202A_206E_200C_200D_202E((ILogger)_logger, global::_003CModule_003E._202E_202C_206D_206B_202B_202D_206D_202E_206F_202E_202A_206A_206A_202B_206A_202D_202C_206C_206B_202C_206E_202B_200E_206E_206A_206C_200D_200D_200F_200B_202C_200B_200E_206F_202C_200F_202D_202A_206E_202B_202E(-1868632107), new object[2] { _mcIsInputActiveHook.Address, num8 }); return; } catch (Exception ex2) { _206C_206C_202A_200B_206C_200C_200E_202B_200C_202B_202D_200B_200D_200D_202A_200B_206D_202E_200B_206B_206D_200D_202D_200B_206C_202C_206A_202C_206E_202D_200B_206C_206F_206F_202B_200E_206F_202A_200C_206A_202E((ILogger)_logger, ex2, global::_003CModule_003E._206E_202B_206C_202A_202A_200E_202B_202B_206D_200B_200C_206B_200B_206D_202E_202D_206C_202B_200B_206A_202D_206C_202A_200F_202D_200C_200B_200B_200B_200D_202C_206E_206D_202E_200C_206B_206A_206D_202D_202C_202E(164606071), Array.Empty()); _forcedMovementDirection = null; _mcIsInputActiveHook?.Dispose(); _mcIsInputActiveHook = null; return; } } continue; IL_004a: num = -1900473584; } } [MethodImpl(MethodImplOptions.NoInlining)] private static bool IsTrampolineExhaustion(Exception ex) { int num = (_206C_202D_206F_202C_206C_200D_200E_202B_206B_206C_200E_206F_206F_206B_206B_200B_202C_206F_202E_200C_206A_200C_200E_202D_200D_206B_206C_206E_200D_206C_206B_206B_200C_200F_200D_202C_206B_200E_206C_200D_202E(_200B_200E_202A_200F_206F_200D_206F_206C_202C_206E_206E_206C_202C_202C_200B_202B_206F_200B_202D_206C_200D_206F_206A_206A_202B_202A_200F_206E_200D_200D_202B_202A_202E_202E_206B_200D_200E_202D_206E_202B_202E(ex), global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(493339631), StringComparison.Ordinal) ? (-550622530) : (-550622529)); while (true) { int num2 = num; int num3 = -550622530; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 2: goto IL_0058; case 0: return true; case 1: return _206C_202D_206F_202C_206C_200D_200E_202B_206B_206C_200E_206F_206F_206B_206B_200B_202C_206F_202E_200C_206A_200C_200E_202D_200D_206B_206C_206E_200D_206C_206B_206B_200C_200F_200D_202C_206B_200E_206C_200D_202E(_200B_200E_202A_200F_206F_200D_206F_206C_202C_206E_206E_206C_202C_202C_200B_202B_206F_200B_202D_206C_200D_206F_206A_206A_202B_202A_200F_206E_200D_200D_202B_202A_202E_202E_206B_200D_200E_202D_206E_202B_202E(ex), global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(2133354563), StringComparison.OrdinalIgnoreCase); } continue; IL_0058: num = -550622529; } } private unsafe byte MCIsInputActiveDetour(void* self, byte inputSourceFlags) { int num = ((!_forcedControlState.HasValue) ? 1868292107 : 1868292104); while (true) { int num2 = num; int num3 = 1868292106; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 0: goto IL_004d; case 1: return _mcIsInputActiveHook.Original(self, inputSourceFlags); case 2: return _forcedControlState.Value ? ((byte)1) : ((byte)0); } continue; IL_004d: num = 1868292104; } } [MethodImpl(MethodImplOptions.NoInlining)] private unsafe void RMIFlyDetour(void* self, PlayerMoveControllerFlyInput* result) { _rmiFlyHook.Original(self, result); int num = ((result->Forward != 0f) ? (-511834047) : (-511834036)); float num6 = default(float); float num12 = default(float); IPlayerCharacter playerCharacter = default(IPlayerCharacter); bool flag = default(bool); float num5 = default(float); float? num10 = default(float?); long num8 = default(long); System.Numerics.Vector3 vector2 = default(System.Numerics.Vector3); System.Numerics.Vector3 valueOrDefault = default(System.Numerics.Vector3); System.Numerics.Vector3? desiredFlyPosition = default(System.Numerics.Vector3?); while (true) { int num2 = num; int num3 = -511834024; int num4 = num2; int num11; switch ((num4 | num3) - (num4 & num3)) { case 15: { Func? isExternalPathfindingActive = IsExternalPathfindingActive; num = ((isExternalPathfindingActive == null || !isExternalPathfindingActive()) ? (-511834032) : (-511834039)); break; } case 26: return; case 29: _desiredFlyPosition = null; ResetFlyStallTracking(); return; case 16: return; case 0: num6 = _202B_200B_200F_200C_202D_206C_206D_202B_202A_200B_200F_206B_200C_206D_200B_202D_206E_202C_206F_206C_202D_200D_200F_202A_202A_200D_200B_206B_206A_206C_202C_206C_200E_206C_206D_200B_206C_202D_202A_206D_202E(num12); num = ((_flyStallImprovementMs == 0L) ? (-511834041) : (-511834034)); break; case 8: playerCharacter = _200B_206D_206B_202B_206D_200D_200B_200C_206D_200C_206B_206F_202B_206A_200D_202C_202A_200D_202C_200C_200E_206F_200E_202C_202B_206A_202E_200C_202E_202C_206D_202A_206E_202A_202D_202A_202A_200F_200D_200D_202E(_objectTable); num = ((playerCharacter != null) ? (-511834018) : (-511834038)); break; case 14: num = ((!flag) ? (-511834025) : (-511834040)); break; case 5: num5 = num10.Value + MathF.PI; num = -511834033; break; case 27: { long num7 = num8; long flyStallImprovementMs = _flyStallImprovementMs; long num9 = num7; num = ((~(~num9 + flyStallImprovementMs) < 500) ? (-511834020) : (-511834035)); break; } case 17: return; case 19: num = -511834036; break; case 18: return; case 1: { System.Numerics.Vector3 vector = _202E_202C_206C_206F_200D_200F_206A_206F_202A_200B_206F_200D_206E_202B_200C_202A_202B_202B_200B_200E_200D_202E_206C_206B_202D_200C_200B_200B_206C_200D_200B_206F_200B_206B_202B_206A_206C_200C_202B_200E_202E((IGameObject)playerCharacter); vector2 = valueOrDefault - vector; num12 = vector2.X * vector2.X + vector2.Y * vector2.Y + vector2.Z * vector2.Z; num = ((!(num12 < Precision * Precision)) ? (-511834022) : (-511834043)); break; } case 12: valueOrDefault = desiredFlyPosition.GetValueOrDefault(); num = -511834023; break; case 20: num = ((result->Left != 0f) ? (-511834047) : (-511834048)); break; case 23: num8 = _202C_200F_206E_202D_202A_202D_202E_206A_202D_202B_206E_200F_200D_200E_202A_202A_200E_206D_206D_202B_200C_206E_200E_202B_202A_200E_202B_200E_202E_206C_202C_206F_202D_202C_200B_202C_206B_202B_200D_206F_202E(); num = ((num8 >= _flyStallCooldownUntilMs) ? (-511834024) : (-511834046)); break; case 13: _lastUserInputAtMs = _202C_200F_206E_202D_202A_202D_202E_206A_202D_202B_206E_200F_200D_200E_202A_202A_200E_206D_206D_202B_200C_206E_200E_202B_202A_200E_202B_200E_202E_206C_202C_206F_202D_202C_200B_202C_206B_202B_200D_206F_202E(); num = -511834044; break; case 9: return; case 22: { long num19 = num8; long flyStallImprovementMs = _flyLastDriveMs; long num9 = num19; num = ((~(~num9 + flyStallImprovementMs) > 250) ? (-511834041) : (-511834030)); break; } case 4: { _flyLastDriveMs = num8; float num17 = _200E_206F_200F_200B_206F_200B_200B_200B_200B_206C_206E_206A_202D_206C_202D_200C_202B_202B_200B_200F_206A_202B_200D_206B_206A_202E_206E_202A_202A_202C_206A_202C_206D_206A_202A_202A_206F_202D_206E_206F_202E(vector2.X, vector2.Z) - num5; result->Forward = _206B_202D_206C_200D_206A_206A_202E_206B_200D_206C_202E_206A_202A_206C_200B_206C_202C_200B_206D_200B_206C_202B_202D_200C_200F_200D_202D_202C_206C_202C_206E_202A_200D_206B_206F_200F_202B_200D_202A_206D_202E(num17); result->Left = _206D_202C_200F_202D_200D_200C_206D_202D_206E_206F_206D_206F_200E_200D_200D_200B_200C_202C_202D_200C_202D_200E_200E_200B_206F_200E_202C_202E_206D_200E_200C_200D_206A_202C_200D_206B_206E_200D_200F_206F_202E(num17); float num18 = _202B_200B_200F_200C_202D_206C_206D_202B_202A_200B_200F_206B_200C_206D_200B_202D_206E_202C_206F_206C_202D_200D_200F_202A_202A_200D_200B_206B_206A_206C_202C_206C_200E_206C_206D_200B_206C_202D_202A_206D_202E(vector2.X * vector2.X + vector2.Z * vector2.Z); result->Up = _200E_206F_200F_200B_206F_200B_200B_200B_200B_206C_206E_206A_202D_206C_202D_200C_202B_202B_200B_200F_206A_202B_200D_206B_206A_202E_206E_202A_202A_202C_206A_202C_206D_206A_202A_202A_206F_202D_206E_206F_202E(vector2.Y, num18); return; } case 21: { ILogger logger = _logger; string text = global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(-934855556); object[] obj = new object[2] { num6, null }; long num13 = num8; long flyStallImprovementMs = _flyStallImprovementMs; long num9 = num13; obj[1] = ~(~num9 + flyStallImprovementMs); _206E_200C_206E_206B_202C_202D_200E_200F_206D_202E_202A_202A_206B_202A_200E_200D_200E_202E_202D_200C_206A_200E_206A_200D_200E_202A_200F_200F_206A_206A_206E_206B_206C_202B_202B_206D_206E_200F_206B_206C_202E((ILogger)logger, text, obj); _desiredFlyPosition = null; ResetFlyStallTracking(); long num14 = num8; flyStallImprovementMs = 500L; num9 = num14; long num15 = num9 ^ flyStallImprovementMs; long num16 = num9 & flyStallImprovementMs; _flyStallCooldownUntilMs = num15 + (num16 + num16); return; } case 2: num = ((!_legacyMode) ? (-511834017) : (-511834042)); break; case 3: return; case 24: num11 = ((result->Up != 0f) ? 1 : 0); goto IL_0447; case 25: num11 = 1; goto IL_0447; case 6: desiredFlyPosition = _desiredFlyPosition; num = ((!desiredFlyPosition.HasValue) ? (-511834029) : (-511834028)); break; case 28: num = (IsAvailable ? (-511834026) : (-511834021)); break; case 31: _flyStallBestDist = num6; _flyStallImprovementMs = num8; num = -511834020; break; case 30: num10 = TryGetCameraAzimuth(); num = (num10.HasValue ? (-511834019) : (-511834031)); break; case 11: return; case 10: num = ((!(num6 < _flyStallBestDist - 0.3f)) ? (-511834045) : (-511834041)); break; case 7: { num5 = _206F_206B_206B_202D_200E_202B_206C_202A_202D_206A_202D_206D_206B_200B_206E_206D_200B_202B_206D_206F_200F_200E_200C_202E_206E_200B_206B_200C_206D_206E_200C_202D_206C_200D_202B_200F_200B_200F_200E_206C_202E((IGameObject)playerCharacter); num = -511834033; break; } IL_0447: flag = (byte)num11 != 0; num = ((!flag) ? (-511834044) : (-511834027)); break; } } } private static bool PlayerHasMisdirection(IPlayerCharacter player) { StatusList statusList = _202E_206C_206D_202E_206C_206C_200D_206B_206A_206F_200B_202D_206C_200F_200C_200B_206C_206A_206A_202C_206B_202C_206A_206F_200B_200E_202E_206B_202D_202D_206F_202E_200B_206C_206A_206D_206F_202B_206B_200E_202E((IBattleChara)player); int num = 0; int num2 = -1842578236; uint num8 = default(uint); IStatus status = default(IStatus); int num9 = default(int); while (true) { int num3 = num2; int num4 = -1842578235; int num5 = num3; int num6 = num5 + num4; int num7 = num5 & num4; switch (num6 - (num7 + num7)) { case 9: num2 = -1842578236; break; case 2: { int num13 = num; num4 = 1; num5 = num13; int num14 = num5 ^ num4; int num15 = num5 & num4; num = num14 + (num15 + num15); num2 = -1842578236; break; } case 0: num8 = _200F_200B_206A_200E_206A_200E_206F_206B_206B_202B_202A_206E_206C_202B_200F_200E_202B_202A_202E_200F_206D_206E_200F_200F_202B_202D_202A_206A_200B_206F_200B_200D_206D_200C_200F_206A_200E_200F_200F_202D_202E(status); num9 = 0; num2 = -1842578237; break; case 3: num2 = ((num8 != MisdirectionStatusIds[num9]) ? (-1842578240) : (-1842578238)); break; case 5: { int num10 = num9; num4 = 1; num5 = num10; int num11 = num5 ^ num4; int num12 = num5 & num4; num9 = num11 + (num12 + num12); num2 = -1842578237; break; } case 6: num2 = ((num9 < MisdirectionStatusIds.Length) ? (-1842578234) : (-1842578233)); break; case 1: num2 = ((num < _200F_202E_200C_200D_200F_202C_206F_206B_200D_200D_200D_202A_206C_202D_202A_200C_200D_206C_200D_202D_202C_206F_206C_200C_206B_200E_206B_202B_200B_200B_206C_202D_202B_202B_206D_206F_206F_206C_206A_202B_202E(statusList)) ? (-1842578227) : (-1842578239)); break; case 7: return true; case 4: return false; case 8: status = _200C_202B_200D_206B_202C_202E_200B_200F_200F_202B_200C_200B_206A_202D_200E_202E_200F_206A_202E_200F_206C_202D_206A_206B_206B_206A_202C_200B_202C_202B_206E_202D_202E_200E_200D_200B_200C_200C_200B_202D_202E(statusList, num); num2 = ((status == null) ? (-1842578233) : (-1842578235)); break; } } } [MethodImpl(MethodImplOptions.NoInlining)] private unsafe void RMIWalkDetour(void* self, float* sumLeft, float* sumForward, float* sumTurnLeft, byte* haveBackwardOrStrafe, byte* a6, byte bAdditiveUnk) { int num = ((bAdditiveUnk != 0) ? (-1181401386) : (-1181401372)); float num11 = default(float); System.Numerics.Vector3 vector = default(System.Numerics.Vector3); long num14 = default(long); float? num12 = default(float?); float referenceRotation = default(float); float num9 = default(float); System.Numerics.Vector3? vector2 = default(System.Numerics.Vector3?); float item = default(float); float item2 = default(float); IPlayerCharacter playerCharacter = default(IPlayerCharacter); bool flag = default(bool); while (true) { int num2 = num; int num3 = -1181401394; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; int num21; switch (num5 - (num6 + num6)) { case 8: num = ((num11 < -MathF.PI) ? (-1181401363) : (-1181401398)); break; case 35: num11 += MathF.PI * 2f; num = -1181401402; break; case 48: IsActive = false; return; case 33: _stallCheckPosition = vector; _stallCheckStartMs = num14; num = -1181401375; break; case 15: _stallCheckPosition = vector; _stallCheckStartMs = num14; num = -1181401375; break; case 46: num = ((!_legacyMode) ? (-1181401370) : (-1181401394)); break; case 21: num = -1181401402; break; case 10: num21 = 1; goto IL_01b5; case 34: num = ((!_isInputEnabled1(self)) ? (-1181401403) : (-1181401378)); break; case 0: num12 = TryGetCameraAzimuth(); num = (num12.HasValue ? (-1181401380) : (-1181401397)); break; case 18: referenceRotation = num12.Value + MathF.PI; num = -1181401395; break; case 36: { float num7 = vector.X - _stallCheckPosition.X; float num8 = vector.Z - _stallCheckPosition.Z; num9 = num7 * num7 + num8 * num8; num = ((!(num9 < 0.09f)) ? (-1181401407) : (-1181401408)); break; } case 50: IsActive = false; return; case 4: { bool flag2 = _206E_206E_200B_200C_202D_206C_200D_200E_200D_200B_206C_206E_200F_206E_206A_202C_200C_202D_206A_200D_202C_206E_206D_200F_202A_206A_200B_200C_200D_202A_202D_202B_206A_202D_206D_202C_206F_200F_206D_202A_202E(num11) <= MathF.PI / 4f; _forcedControlState = flag2; num = (flag2 ? (-1181401396) : (-1181401374)); break; } case 32: num21 = ((*sumForward != 0f) ? 1 : 0); goto IL_01b5; case 42: _forcedControlState = null; num = -1181401386; break; case 6: num14 = _202C_200F_206E_202D_202A_202D_202E_206A_202D_202B_206E_200F_200D_200E_202A_202A_200E_206D_206D_202B_200C_206E_200E_202B_202A_200E_202B_200E_202E_206C_202C_206F_202D_202C_200B_202C_206B_202B_200D_206F_202E(); num = ((num14 >= _stallCooldownUntilMs) ? (-1181401376) : (-1181401365)); break; case 25: { long num20 = num14; long stallCheckStartMs = _lastDriveMs; long num15 = num20; num = ((~(~num15 + stallCheckStartMs) <= 250) ? (-1181401345) : (-1181401361)); break; } case 29: return; case 38: num = ((*sumLeft != 0f) ? (-1181401404) : (-1181401362)); break; case 28: IsActive = false; return; case 11: IsActive = false; return; case 23: _lastUserInputAtMs = _202C_200F_206E_202D_202A_202D_202E_206A_202D_202B_206E_200F_200D_200E_202A_202A_200E_206D_206D_202B_200C_206E_200E_202B_202A_200E_202B_200E_202E_206C_202C_206F_202D_202C_200B_202C_206B_202B_200D_206F_202E(); num = -1181401377; break; case 3: { (float left, float forward) tuple = WorldToPlayerRelative(vector2.Value, referenceRotation); item = tuple.left; item2 = tuple.forward; num = ((!PlayerHasMisdirection(playerCharacter)) ? (-1181401396) : (-1181401401)); break; } case 30: IsActive = false; return; case 43: num = -1181401372; break; case 20: IsActive = false; return; case 7: { Func? isExternalPathfindingActive = IsExternalPathfindingActive; num = ((isExternalPathfindingActive == null || !isExternalPathfindingActive()) ? (-1181401393) : (-1181401392)); break; } case 1: num = ((_isInputEnabled1 == null) ? (-1181401390) : (-1181401405)); break; case 17: num = (IsAvailable ? (-1181401369) : (-1181401382)); break; case 40: referenceRotation = _206F_206B_206B_202D_200E_202B_206C_202A_202D_206A_202D_206D_206B_200B_206E_206D_200B_202B_206D_206F_200F_200E_200C_202E_206E_200B_206B_200C_206D_206E_200C_202D_206C_200D_202B_200F_200B_200F_200E_206C_202E((IGameObject)playerCharacter); num = -1181401395; break; case 22: vector = _202E_202C_206C_206F_200D_200F_206A_206F_202A_200B_206F_200D_206E_202B_200C_202A_202B_202B_200B_200E_200D_202E_206C_206B_202D_200C_200B_200B_206C_200D_200B_206F_200B_206B_202B_206A_206C_200C_202B_200E_202E((IGameObject)playerCharacter); vector2 = ComputeDesiredWorldDirection(vector); num = (vector2.HasValue ? (-1181401400) : (-1181401406)); break; case 2: num = ((_stallCheckStartMs == 0L) ? (-1181401361) : (-1181401385)); break; case 27: num11 -= MathF.PI * 2f; num = -1181401373; break; case 26: playerCharacter = _200B_206D_206B_202B_206D_200D_200B_200C_206D_200C_206B_206F_202B_206A_200D_202C_202A_200D_202C_200C_200E_206F_200E_202C_202B_206A_202E_200C_202E_202C_206D_202A_206E_202A_202D_202A_202A_200F_200D_200D_202E(_objectTable); num = ((playerCharacter != null) ? (-1181401384) : (-1181401348)); break; case 44: *sumLeft = 0f; *sumForward = 0f; IsActive = false; return; case 24: _rmiWalkHook.Original(self, sumLeft, sumForward, sumTurnLeft, haveBackwardOrStrafe, a6, bAdditiveUnk); num = ((bAdditiveUnk == 0) ? (-1181401368) : (-1181401389)); break; case 47: _lastDriveMs = num14; *sumLeft = item; *sumForward = item2; IsActive = true; return; case 49: { long num19 = num14; long stallCheckStartMs = _stallCheckStartMs; long num15 = num19; num = ((~(~num15 + stallCheckStartMs) < 500) ? (-1181401375) : (-1181401366)); break; } case 45: num = ((num11 > MathF.PI) ? (-1181401387) : (-1181401381)); break; case 16: num = (_isInputEnabled2(self) ? (-1181401388) : (-1181401403)); break; case 14: { ILogger logger = _logger; string text = global::_003CModule_003E._206E_202B_206C_202A_202A_200E_202B_202B_206D_200B_200C_206B_200B_206D_202E_202D_206C_202B_200B_206A_202D_206C_202A_200F_202D_200C_200B_200B_200B_200D_202C_206E_206D_202E_200C_206B_206A_206D_202D_202C_202E(1233622867); object[] obj = new object[2] { _202B_200B_200F_200C_202D_206C_206D_202B_202A_200B_200F_206B_200C_206D_200B_202D_206E_202C_206F_206C_202D_200D_200F_202A_202A_200D_200B_206B_206A_206C_202C_206C_200E_206C_206D_200B_206C_202D_202A_206D_202E(num9), null }; long num13 = num14; long stallCheckStartMs = _stallCheckStartMs; long num15 = num13; obj[1] = ~(~num15 + stallCheckStartMs); _206E_200C_206E_206B_202C_202D_200E_200F_206D_202E_202A_202A_206B_202A_200E_200D_200E_202E_202D_200C_206A_200E_206A_200D_200E_202A_200F_200F_206A_206A_206E_206B_206C_202B_202B_206D_206E_200F_206B_206C_202E((ILogger)logger, text, obj); _desiredDirection = null; _desiredPosition = null; ResetStallTracking(); long num16 = num14; stallCheckStartMs = 500L; num15 = num16; long num17 = num15 ^ stallCheckStartMs; long num18 = num15 & stallCheckStartMs; _stallCooldownUntilMs = num17 + (num18 + num18); _forcedControlState = null; IsActive = false; return; } case 31: IsActive = false; return; case 13: num = ((_isInputEnabled2 != null) ? (-1181401364) : (-1181401390)); break; case 41: num = ((!flag) ? (-1181401399) : (-1181401391)); break; case 39: { float num10 = _200E_206F_200F_200B_206F_200B_200B_200B_200B_206C_206E_206A_202D_206C_202D_200C_202B_202B_200B_200F_206A_202B_200D_206B_206A_202E_206E_202A_202A_202C_206A_202C_206D_206A_202A_202A_206F_202D_206E_206F_202E(vector2.Value.X, vector2.Value.Z); float forcedMovementDirection = *_forcedMovementDirection; num11 = num10 - forcedMovementDirection; num = -1181401373; break; } case 12: IsActive = false; return; case 5: IsActive = false; return; case 37: IsActive = false; return; case 19: num = ((_mcIsInputActiveHook != null) ? (-1181401367) : (-1181401346)); break; case 9: { num = ((_forcedMovementDirection == null) ? (-1181401346) : (-1181401379)); break; } IL_01b5: flag = (byte)num21 != 0; num = ((!flag) ? (-1181401377) : (-1181401383)); break; } } } private void OnGameConfigChanged(object? sender, ConfigChangeEvent evt) { UpdateLegacyMode(); } [MethodImpl(MethodImplOptions.NoInlining)] private void UpdateLegacyMode() { uint num2 = default(uint); int num = ((!_202B_206F_202D_206E_202A_206C_206A_200B_202D_200B_206D_206C_206E_206C_202E_206A_202D_200F_202A_200B_206A_200B_202E_202D_206F_202C_206F_202E_206F_206D_206A_206A_206B_202E_202E_202E_202A_206D_202B_206A_202E(_206D_200E_206E_202E_206B_200D_206A_206E_206E_200C_202B_202A_200F_206B_202A_202E_202C_202A_206E_202E_200C_206C_202D_206F_202C_200C_200F_206B_206B_200C_200B_202D_202D_200B_202D_206C_202A_200D_200B_202E_202E(_gameConfig), global::_003CModule_003E._206E_202B_206C_202A_202A_200E_202B_202B_206D_200B_200C_206B_200B_206D_202E_202D_206C_202B_200B_206A_202D_206C_202A_200F_202D_200C_200B_200B_200B_200D_202C_206E_206D_202E_200C_206B_206A_206D_202D_202C_202E(-1244554421), ref num2)) ? (-1166724982) : (-1166724977)); bool flag = default(bool); while (true) { int num3 = num; int num4 = -1166724978; int num5 = num3; int num6 = num5 + num4; int num7 = num5 & num4; int num8; switch (num6 - (num7 + num7)) { case 4: num8 = 0; goto IL_006a; case 1: num8 = ((num2 == 1) ? 1 : 0); goto IL_006a; case 0: return; case 2: num = -1166724977; break; case 3: { _legacyMode = flag; _200C_200F_202B_200E_202B_200C_206E_200D_202A_202D_206A_202D_200D_200F_206C_200E_202C_202C_206D_206D_206D_200E_202E_200C_200C_206B_200D_200C_206D_206E_200D_202B_206D_206D_202A_202B_202A_206E_200C_200D_202E((ILogger)_logger, global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(-1714575420), new object[1] { flag ? global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(527119189) : global::_003CModule_003E._206A_202C_200C_206F_202A_200C_200F_206F_202B_202B_200D_206F_206D_200E_206A_206B_202A_200F_200B_206C_202B_202A_202B_206C_200F_206C_202C_202C_200C_206C_206F_200C_200B_202D_200E_202A_202A_206B_206B_200F_202E(-585283226) }); num = -1166724978; break; } IL_006a: flag = (byte)num8 != 0; num = ((flag == _legacyMode) ? (-1166724978) : (-1166724979)); break; } } } private unsafe static float? TryGetCameraAzimuth() { CameraManager* ptr = CameraManager.Instance(); int num = ((ptr != null) ? 129017006 : 129017005); FFXIVClientStructs.FFXIV.Client.Game.Camera* activeCamera = default(FFXIVClientStructs.FFXIV.Client.Game.Camera*); FFXIVClientStructs.FFXIV.Client.Graphics.Render.Camera* renderCamera = default(FFXIVClientStructs.FFXIV.Client.Graphics.Render.Camera*); while (true) { int num2 = num; int num3 = 129017004; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 6: return null; case 2: activeCamera = ptr->GetActiveCamera(); num = ((activeCamera != null) ? 129017007 : 129017002); break; case 1: return null; case 5: return null; case 4: { FFXIVClientStructs.FFXIV.Common.Math.Matrix4x4 viewMatrix = renderCamera->ViewMatrix; return _200E_206F_200F_200B_206F_200B_200B_200B_200B_206C_206E_206A_202D_206C_202D_200C_202B_202B_200B_200F_206A_202B_200D_206B_206A_202E_206E_202A_202A_202C_206A_202C_206D_206A_202A_202A_206F_202D_206E_206F_202E(viewMatrix.M13, viewMatrix.M33); } case 0: num = 129017005; break; case 3: renderCamera = activeCamera->SceneCamera.RenderCamera; num = ((renderCamera != null) ? 129017000 : 129017001); break; } } } public void Reset() { _desiredDirection = null; _desiredPosition = null; _desiredFlyPosition = null; ResetStallTracking(); ResetFlyStallTracking(); _stallCooldownUntilMs = 0L; _flyStallCooldownUntilMs = 0L; _forcedControlState = null; IsActive = false; } private void ResetStallTracking() { _stallCheckPosition = default(System.Numerics.Vector3); _stallCheckStartMs = 0L; _lastDriveMs = 0L; } private void ResetFlyStallTracking() { _flyStallBestDist = 0f; _flyStallImprovementMs = 0L; _flyLastDriveMs = 0L; } private System.Numerics.Vector3? ComputeDesiredWorldDirection(System.Numerics.Vector3 playerPosition) { System.Numerics.Vector3? vector = _desiredDirection; int num = ((!vector.HasValue) ? (-84514510) : (-84514509)); System.Numerics.Vector3 valueOrDefault = default(System.Numerics.Vector3); float num9 = default(float); float num7 = default(float); float num8 = default(float); float num6 = default(float); while (true) { int num2 = num; int num3 = -84514510; int num4 = num2; switch ((num4 | num3) - (num4 & num3)) { case 5: num = -84514509; break; case 4: _desiredPosition = null; ResetStallTracking(); return null; case 1: valueOrDefault = vector.GetValueOrDefault(); num9 = valueOrDefault.X * valueOrDefault.X + valueOrDefault.Z * valueOrDefault.Z; num = ((!(num9 < 1E-08f)) ? (-84514507) : (-84514511)); break; case 6: return null; case 2: { System.Numerics.Vector3 valueOrDefault2 = vector.GetValueOrDefault(); num7 = valueOrDefault2.X - playerPosition.X; num8 = valueOrDefault2.Z - playerPosition.Z; num6 = num7 * num7 + num8 * num8; num = ((!(num6 < Precision * Precision)) ? (-84514502) : (-84514506)); break; } case 7: { float num10 = _202B_200B_200F_200C_202D_206C_206D_202B_202A_200B_200F_206B_200C_206D_200B_202D_206E_202C_206F_206C_202D_200D_200F_202A_202A_200D_200B_206B_206A_206C_202C_206C_200E_206C_206D_200B_206C_202D_202A_206D_202E(num9); return new System.Numerics.Vector3(valueOrDefault.X / num10, 0f, valueOrDefault.Z / num10); } case 3: return null; case 0: vector = _desiredPosition; num = ((!vector.HasValue) ? (-84514508) : (-84514512)); break; case 8: { float num5 = _202B_200B_200F_200C_202D_206C_206D_202B_202A_200B_200F_206B_200C_206D_200B_202D_206E_202C_206F_206C_202D_200D_200F_202A_202A_200D_200B_206B_206A_206C_202C_206C_200E_206C_206D_200B_206C_202D_202A_206D_202E(num6); return new System.Numerics.Vector3(num7 / num5, 0f, num8 / num5); } } } } private static (float left, float forward) WorldToPlayerRelative(System.Numerics.Vector3 worldDir, float referenceRotation) { float num = _206D_202C_200F_202D_200D_200C_206D_202D_206E_206F_206D_206F_200E_200D_200D_200B_200C_202C_202D_200C_202D_200E_200E_200B_206F_200E_202C_202E_206D_200E_200C_200D_206A_202C_200D_206B_206E_200D_200F_206F_202E(referenceRotation); float num2 = _206B_202D_206C_200D_206A_206A_202E_206B_200D_206C_202E_206A_202A_206C_200B_206C_202C_200B_206D_200B_206C_202B_202D_200C_200F_200D_202D_202C_206C_202C_206E_202A_200D_206B_206F_200F_202B_200D_202A_206D_202E(referenceRotation); float item = worldDir.X * num + worldDir.Z * num2; return (left: worldDir.X * num2 - worldDir.Z * num, forward: item); } public void Dispose() { _202C_200C_202E_206D_206F_202C_206C_202D_206E_206C_200B_206D_206F_202E_202B_202D_206A_206E_200D_200E_202A_200F_202B_202C_202E_202A_202B_206D_200E_206F_206D_200F_200C_202B_206C_200C_206C_206A_206B_200E_202E(_gameConfig, (EventHandler)OnGameConfigChanged); Hook? mcIsInputActiveHook = _mcIsInputActiveHook; if (mcIsInputActiveHook == null) { goto IL_00e8; } mcIsInputActiveHook.Disable(); int num = -1239037411; goto IL_0039; IL_0112: _rmiFlyHook = null; Hook? rmiWalkHook = _rmiWalkHook; if (rmiWalkHook == null) { goto IL_00c6; } rmiWalkHook.Disable(); num = -1239037416; goto IL_0039; IL_00e8: Hook? mcIsInputActiveHook2 = _mcIsInputActiveHook; if (mcIsInputActiveHook2 == null) { goto IL_007b; } mcIsInputActiveHook2.Dispose(); num = -1239037412; goto IL_0039; IL_0039: while (true) { int num2 = num; int num3 = -1239037410; int num4 = num2; int num5 = num4 + num3; int num6 = num4 & num3; switch (num5 - (num6 + num6)) { case 0: num = -1239037411; break; case 2: goto end_IL_0039; case 5: goto IL_00a4; case 6: goto IL_00c6; case 3: goto IL_00e8; case 1: goto IL_010a; case 4: goto IL_0112; } continue; end_IL_0039: break; } goto IL_007b; IL_007b: _mcIsInputActiveHook = null; Hook? rmiFlyHook = _rmiFlyHook; if (rmiFlyHook == null) { goto IL_00a4; } rmiFlyHook.Disable(); num = -1239037413; goto IL_0039; IL_00c6: Hook? rmiWalkHook2 = _rmiWalkHook; if (rmiWalkHook2 == null) { goto IL_010a; } rmiWalkHook2.Dispose(); num = -1239037409; goto IL_0039; IL_00a4: Hook? rmiFlyHook2 = _rmiFlyHook; if (rmiFlyHook2 == null) { goto IL_0112; } rmiFlyHook2.Dispose(); num = -1239037414; goto IL_0039; IL_010a: _rmiWalkHook = null; } void IDisposable.Dispose() { //ILSpy generated this explicit interface implementation from .override directive in Dispose this.Dispose(); } static MovementOverrideHook() { uint[] array = new uint[4]; _202D_200F_206F_200F_200C_200E_200C_200D_200B_202A_206C_200E_202C_202C_200B_206A_206F_202D_206D_202E_202D_202B_206E_206F_200D_206F_206F_206B_200D_206E_202C_200C_206A_206D_200D_206E_200F_206B_202E_202D_202E((Array)array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/); MisdirectionStatusIds = array; } static long _202C_200F_206E_202D_202A_202D_202E_206A_202D_202B_206E_200F_200D_200E_202A_202A_200E_206D_206D_202B_200C_206E_200E_202B_202A_200E_202B_200E_202E_206C_202C_206F_202D_202C_200B_202C_206B_202B_200D_206F_202E() { return Environment.TickCount64; } static void _202B_206B_206B_202B_202A_206A_200E_200F_206C_206E_206F_200C_200F_202C_206B_206B_202B_206A_202C_206A_206E_206E_206B_206E_206D_200D_200D_206C_206B_202E_206F_206A_200C_202A_200E_206E_200E_202B_206A_202C_202E(IGameConfig P_0, EventHandler P_1) { P_0.UiControlChanged += P_1; } static void _200C_200F_202B_200E_202B_200C_206E_200D_202A_202D_206A_202D_200D_200F_206C_200E_202C_202C_206D_206D_206D_200E_202E_200C_200C_206B_200D_200C_206D_206E_200D_202B_206D_206D_202A_202B_202A_206E_200C_200D_202E(ILogger P_0, string P_1, object[] P_2) { P_0.LogInformation(P_1, P_2); } static nint _202E_206A_202B_200D_202E_206C_200D_206D_200C_200B_202C_206B_202B_200D_206C_206A_206E_202A_202D_200E_200B_200F_200E_206C_200E_200C_200D_206E_202E_202D_202B_200F_206E_200D_202E_202B_202E_206B_202C_200F_202E(ISigScanner P_0, string P_1) { return P_0.ScanText(P_1); } static void _206C_206C_202A_200B_206C_200C_200E_202B_200C_202B_202D_200B_200D_200D_202A_200B_206D_202E_200B_206B_206D_200D_202D_200B_206C_202C_206A_202C_206E_202D_200B_206C_206F_206F_202B_200E_206F_202A_200C_206A_202E(ILogger P_0, Exception P_1, string P_2, object[] P_3) { P_0.LogWarning(P_1, P_2, P_3); } static nint _206F_202A_206B_202A_200C_202D_206F_202E_206C_206D_202A_206B_200C_200E_202D_200D_202C_200C_206A_206D_206A_206A_200C_202C_202B_200E_206E_202B_200B_206A_200D_200D_206C_206A_206C_200B_200C_206E_202D_206B_202E(ISigScanner P_0, string P_1, int P_2) { return P_0.GetStaticAddressFromSig(P_1, P_2); } static string _200B_200E_202A_200F_206F_200D_206F_206C_202C_206E_206E_206C_202C_202C_200B_202B_206F_200B_202D_206C_200D_206F_206A_206A_202B_202A_200F_206E_200D_200D_202B_202A_202E_202E_206B_200D_200E_202D_206E_202B_202E(Exception P_0) { return P_0.Message; } static bool _206C_202D_206F_202C_206C_200D_200E_202B_206B_206C_200E_206F_206F_206B_206B_200B_202C_206F_202E_200C_206A_200C_200E_202D_200D_206B_206C_206E_200D_206C_206B_206B_200C_200F_200D_202C_206B_200E_206C_200D_202E(string P_0, string P_1, StringComparison P_2) { return P_0.Contains(P_1, P_2); } static IPlayerCharacter _200B_206D_206B_202B_206D_200D_200B_200C_206D_200C_206B_206F_202B_206A_200D_202C_202A_200D_202C_200C_200E_206F_200E_202C_202B_206A_202E_200C_202E_202C_206D_202A_206E_202A_202D_202A_202A_200F_200D_200D_202E(IObjectTable P_0) { return P_0.LocalPlayer; } static System.Numerics.Vector3 _202E_202C_206C_206F_200D_200F_206A_206F_202A_200B_206F_200D_206E_202B_200C_202A_202B_202B_200B_200E_200D_202E_206C_206B_202D_200C_200B_200B_206C_200D_200B_206F_200B_206B_202B_206A_206C_200C_202B_200E_202E(IGameObject P_0) { return P_0.Position; } static float _206F_206B_206B_202D_200E_202B_206C_202A_202D_206A_202D_206D_206B_200B_206E_206D_200B_202B_206D_206F_200F_200E_200C_202E_206E_200B_206B_200C_206D_206E_200C_202D_206C_200D_202B_200F_200B_200F_200E_206C_202E(IGameObject P_0) { return P_0.Rotation; } static float _202B_200B_200F_200C_202D_206C_206D_202B_202A_200B_200F_206B_200C_206D_200B_202D_206E_202C_206F_206C_202D_200D_200F_202A_202A_200D_200B_206B_206A_206C_202C_206C_200E_206C_206D_200B_206C_202D_202A_206D_202E(float P_0) { return MathF.Sqrt(P_0); } static void _206E_200C_206E_206B_202C_202D_200E_200F_206D_202E_202A_202A_206B_202A_200E_200D_200E_202E_202D_200C_206A_200E_206A_200D_200E_202A_200F_200F_206A_206A_206E_206B_206C_202B_202B_206D_206E_200F_206B_206C_202E(ILogger P_0, string P_1, object[] P_2) { P_0.LogDebug(P_1, P_2); } static float _200E_206F_200F_200B_206F_200B_200B_200B_200B_206C_206E_206A_202D_206C_202D_200C_202B_202B_200B_200F_206A_202B_200D_206B_206A_202E_206E_202A_202A_202C_206A_202C_206D_206A_202A_202A_206F_202D_206E_206F_202E(float P_0, float P_1) { return MathF.Atan2(P_0, P_1); } static float _206B_202D_206C_200D_206A_206A_202E_206B_200D_206C_202E_206A_202A_206C_200B_206C_202C_200B_206D_200B_206C_202B_202D_200C_200F_200D_202D_202C_206C_202C_206E_202A_200D_206B_206F_200F_202B_200D_202A_206D_202E(float P_0) { return MathF.Cos(P_0); } static float _206D_202C_200F_202D_200D_200C_206D_202D_206E_206F_206D_206F_200E_200D_200D_200B_200C_202C_202D_200C_202D_200E_200E_200B_206F_200E_202C_202E_206D_200E_200C_200D_206A_202C_200D_206B_206E_200D_200F_206F_202E(float P_0) { return MathF.Sin(P_0); } static StatusList _202E_206C_206D_202E_206C_206C_200D_206B_206A_206F_200B_202D_206C_200F_200C_200B_206C_206A_206A_202C_206B_202C_206A_206F_200B_200E_202E_206B_202D_202D_206F_202E_200B_206C_206A_206D_206F_202B_206B_200E_202E(IBattleChara P_0) { return P_0.StatusList; } static IStatus _200C_202B_200D_206B_202C_202E_200B_200F_200F_202B_200C_200B_206A_202D_200E_202E_200F_206A_202E_200F_206C_202D_206A_206B_206B_206A_202C_200B_202C_202B_206E_202D_202E_200E_200D_200B_200C_200C_200B_202D_202E(StatusList P_0, int P_1) { return P_0[P_1]; } static uint _200F_200B_206A_200E_206A_200E_206F_206B_206B_202B_202A_206E_206C_202B_200F_200E_202B_202A_202E_200F_206D_206E_200F_200F_202B_202D_202A_206A_200B_206F_200B_200D_206D_200C_200F_206A_200E_200F_200F_202D_202E(IStatus P_0) { return P_0.StatusId; } static int _200F_202E_200C_200D_200F_202C_206F_206B_200D_200D_200D_202A_206C_202D_202A_200C_200D_206C_200D_202D_202C_206F_206C_200C_206B_200E_206B_202B_200B_200B_206C_202D_202B_202B_206D_206F_206F_206C_206A_202B_202E(StatusList P_0) { return P_0.Length; } static float _206E_206E_200B_200C_202D_206C_200D_200E_200D_200B_206C_206E_200F_206E_206A_202C_200C_202D_206A_200D_202C_206E_206D_200F_202A_206A_200B_200C_200D_202A_202D_202B_206A_202D_206D_202C_206F_200F_206D_202A_202E(float P_0) { return MathF.Abs(P_0); } static GameConfigSection _206D_200E_206E_202E_206B_200D_206A_206E_206E_200C_202B_202A_200F_206B_202A_202E_202C_202A_206E_202E_200C_206C_202D_206F_202C_200C_200F_206B_206B_200C_200B_202D_202D_200B_202D_206C_202A_200D_200B_202E_202E(IGameConfig P_0) { return P_0.UiControl; } static bool _202B_206F_202D_206E_202A_206C_206A_200B_202D_200B_206D_206C_206E_206C_202E_206A_202D_200F_202A_200B_206A_200B_202E_202D_206F_202C_206F_202E_206F_206D_206A_206A_206B_202E_202E_202E_202A_206D_202B_206A_202E(GameConfigSection P_0, string P_1, ref uint P_2) { return P_0.TryGetUInt(P_1, out P_2); } static void _202C_200C_202E_206D_206F_202C_206C_202D_206E_206C_200B_206D_206F_202E_202B_202D_206A_206E_200D_200E_202A_200F_202B_202C_202E_202A_202B_206D_200E_206F_206D_200F_200C_202B_206C_200C_206C_206A_206B_200E_202E(IGameConfig P_0, EventHandler P_1) { P_0.UiControlChanged -= P_1; } static void _202D_200F_206F_200F_200C_200E_200C_200D_200B_202A_206C_200E_202C_202C_200B_206A_206F_202D_206D_202E_202D_202B_206E_206F_200D_206F_206F_206B_200D_206E_202C_200C_206A_206D_200D_206E_200F_206B_202E_202D_202E(Array P_0, RuntimeFieldHandle P_1) { RuntimeHelpers.InitializeArray(P_0, P_1); } }