diff --git a/FullAuto.cs b/FullAuto.cs index 37312f1..5deafe5 100644 --- a/FullAuto.cs +++ b/FullAuto.cs @@ -248,6 +248,7 @@ internal static class CheckFireInputPatch private const float ReleaseTime = 0.15f; private const float AutoReloadDelay = 0.2f; private const float AutoReloadNextDelay = 0.05f; + private const float AutoReloadRoundTime = 0.9f; private static readonly Dictionary Guns = new() { @@ -286,6 +287,8 @@ internal static class CheckFireInputPatch private static float _nextReloadTry; private static bool _autoReloading; private static IntPtr _autoReloadGun = IntPtr.Zero; + private static float _lastReloadCall = -10f; + private static bool _sawReloading; private static bool _loggedHook; internal static bool HoldingGun => _lastGunTime >= 0f && Time.time - _lastGunTime < 0.25f; @@ -359,6 +362,7 @@ internal static class CheckFireInputPatch if (controller._isReloading || controller.IsReloading() || controller.IsReloadQueued()) { + _sawReloading = true; _emptySince = -1f; return; } @@ -371,9 +375,16 @@ internal static class CheckFireInputPatch if (ammo == null) return; - if (_autoReloading && (_autoReloadGun != controller.Pointer || ammo.IsFull() || FirePressed())) + if (_autoReloading && (_autoReloadGun != controller.Pointer || ammo.IsFull())) _autoReloading = false; + if (FirePressed()) + { + _autoReloading = false; + _emptySince = -1f; + return; + } + if (!ammo.IsEmpty() && !_autoReloading) { _emptySince = -1f; @@ -391,6 +402,10 @@ internal static class CheckFireInputPatch if (now - _emptySince < wait || now < _nextReloadTry) return; + var roundTime = FullAuto.FastReload ? AutoReloadRoundTime / FullAuto.ReloadMultiplier : AutoReloadRoundTime; + if (_autoReloading && !_sawReloading && now - _lastReloadCall < roundTime) + return; + _nextReloadTry = now + 0.3f; if (!controller.CanReload()) @@ -402,6 +417,8 @@ internal static class CheckFireInputPatch controller.Reload(); _autoReloading = true; _autoReloadGun = controller.Pointer; + _lastReloadCall = now; + _sawReloading = false; if (FullAuto.Verbose) RLog.Msg($"FullAuto auto reload {controller.GetIl2CppType().Name}, ammo {ammo.GetRemainingAmmo()}/{ammo.GetCapacity()}"); @@ -754,4 +771,4 @@ internal static class CheckFireInputPatch RLog.Msg($"FullAuto {name}: {(allowed ? "full-auto" : "ignored")}"); return allowed; } -} +} \ No newline at end of file diff --git a/manifest.json b/manifest.json index 72df690..3abc4c6 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "id": "FullAuto", "name": "FullAuto", "author": "JustinOros", - "version": "1.5.1", + "version": "1.5.2", "description": "Full-auto, semi-auto and 3-round burst for guns, with fast reload and a flashlight toggle", "gameVersion": "1.0.0", "platform": "Client",