1
0
Fork 0
forked from aly/qstbak
qstbak/LLib/LLib.Movement/MovementOverrideHook.cs
2026-08-17 20:27:25 +10:00

1354 lines
52 KiB
C#

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<MovementOverrideHook> _logger;
private readonly IObjectTable _objectTable;
private readonly IGameConfig _gameConfig;
private RMIWalkIsInputEnabledDelegate? _isInputEnabled1;
private RMIWalkIsInputEnabledDelegate? _isInputEnabled2;
private Hook<RMIWalkDelegate>? _rmiWalkHook;
private Hook<RMIFlyDelegate>? _rmiFlyHook;
private Hook<MoveControlIsInputActiveDelegate>? _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<bool>? 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<MovementOverrideHook> 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<ConfigChangeEvent>)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<string>(-1885951886), Array.Empty<object>());
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<string>(4336795));
_isInputEnabled1 = Marshal.GetDelegateForFunctionPointer<RMIWalkIsInputEnabledDelegate>(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<string>(-343401937));
_isInputEnabled2 = Marshal.GetDelegateForFunctionPointer<RMIWalkIsInputEnabledDelegate>(num6);
_rmiWalkHook = interop.HookFromSignature<RMIWalkDelegate>(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<string>(211326417), RMIWalkDetour);
_rmiWalkHook.Enable();
_rmiFlyHook = interop.HookFromSignature<RMIFlyDelegate>(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<string>(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<string>(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<RMIFlyDelegate>? rmiFlyHook = _rmiFlyHook;
if (rmiFlyHook == null)
{
break;
}
rmiFlyHook.Dispose();
num = -1568159261;
continue;
}
case 4:
{
IsAvailable = false;
_isInputEnabled1 = null;
_isInputEnabled2 = null;
Hook<RMIWalkDelegate>? 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<string>(-763323413), Array.Empty<object>());
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<string>(1136207760), Array.Empty<object>());
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<string>(-334079399), 0));
_mcIsInputActiveHook = interop.HookFromSignature<MoveControlIsInputActiveDelegate>(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<string>(-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<string>(-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<string>(164606071), Array.Empty<object>());
_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<string>(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<string>(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<bool>? 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<MovementOverrideHook> 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<string>(-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<bool>? 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<MovementOverrideHook> 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<string>(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<string>(-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<string>(-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<string>(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<string>(-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<ConfigChangeEvent>)OnGameConfigChanged);
Hook<MoveControlIsInputActiveDelegate>? mcIsInputActiveHook = _mcIsInputActiveHook;
if (mcIsInputActiveHook == null)
{
goto IL_00e8;
}
mcIsInputActiveHook.Disable();
int num = -1239037411;
goto IL_0039;
IL_0112:
_rmiFlyHook = null;
Hook<RMIWalkDelegate>? rmiWalkHook = _rmiWalkHook;
if (rmiWalkHook == null)
{
goto IL_00c6;
}
rmiWalkHook.Disable();
num = -1239037416;
goto IL_0039;
IL_00e8:
Hook<MoveControlIsInputActiveDelegate>? 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<RMIFlyDelegate>? rmiFlyHook = _rmiFlyHook;
if (rmiFlyHook == null)
{
goto IL_00a4;
}
rmiFlyHook.Disable();
num = -1239037413;
goto IL_0039;
IL_00c6:
Hook<RMIWalkDelegate>? rmiWalkHook2 = _rmiWalkHook;
if (rmiWalkHook2 == null)
{
goto IL_010a;
}
rmiWalkHook2.Dispose();
num = -1239037409;
goto IL_0039;
IL_00a4:
Hook<RMIFlyDelegate>? 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<ConfigChangeEvent> 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<ConfigChangeEvent> 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);
}
}