From dc6d7773f1d661163083c098026ae094914d6121 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Fri, 29 Aug 2025 17:06:32 +0300 Subject: [PATCH 01/10] Update CustomWeapon.cs --- EXILED/Exiled.CustomItems/API/Features/CustomWeapon.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/EXILED/Exiled.CustomItems/API/Features/CustomWeapon.cs b/EXILED/Exiled.CustomItems/API/Features/CustomWeapon.cs index 733e6317d2..9053cf2d66 100644 --- a/EXILED/Exiled.CustomItems/API/Features/CustomWeapon.cs +++ b/EXILED/Exiled.CustomItems/API/Features/CustomWeapon.cs @@ -221,7 +221,7 @@ protected virtual void OnChangingAttachment(ChangingAttachmentsEventArgs ev) private void OnInternalReloading(ReloadingWeaponEventArgs ev) { - if (!Check(ev.Player.CurrentItem)) + if (!Check(ev.Item)) return; if (ClipSize > 0 && ev.Firearm.TotalAmmo >= ClipSize) @@ -266,7 +266,7 @@ private void OnInternalReloaded(ReloadedWeaponEventArgs ev) private void OnInternalShooting(ShootingEventArgs ev) { - if (!Check(ev.Player.CurrentItem)) + if (!Check(ev.Item)) return; OnShooting(ev); @@ -274,7 +274,7 @@ private void OnInternalShooting(ShootingEventArgs ev) private void OnInternalShot(ShotEventArgs ev) { - if (!Check(ev.Player.CurrentItem)) + if (!Check(ev.Item)) return; OnShot(ev); @@ -340,4 +340,4 @@ private void OnInternalChangingAttachment(ChangingAttachmentsEventArgs ev) OnChangingAttachment(ev); } } -} \ No newline at end of file +} From ef0195c9ea14df8f77379b4fabb4418586b0eb9c Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Fri, 29 Aug 2025 17:10:59 +0300 Subject: [PATCH 02/10] Update ReloadingWeapon.cs --- .../Patches/Events/Player/ReloadingWeapon.cs | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs b/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs index 347e82bad1..1497dcf4af 100644 --- a/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs +++ b/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs @@ -12,7 +12,6 @@ namespace Exiled.Events.Patches.Events.Player using API.Features.Pools; - using Exiled.API.Extensions; using Exiled.Events.Attributes; using Exiled.Events.EventArgs.Player; using HarmonyLib; @@ -33,11 +32,12 @@ private static IEnumerable Transpiler(IEnumerable newInstructions = ListPool.Pool.Get(instructions); + LocalBuilder ev1 = generator.DeclareLocal(typeof(ReloadingWeaponEventArgs)); + LocalBuilder ev2 = generator.DeclareLocal(typeof(UnloadingWeaponEventArgs)); + int offset = -2; int index = newInstructions.FindIndex(x => x.Calls(Method(typeof(IReloadUnloadValidatorModule), nameof(IReloadUnloadValidatorModule.ValidateReload)))) + offset; - Label stopMessage = generator.DefineLabel(); - newInstructions.InsertRange( index, new[] @@ -49,17 +49,23 @@ private static IEnumerable Transpiler(IEnumerable x.Calls(Method(typeof(IReloadUnloadValidatorModule), nameof(IReloadUnloadValidatorModule.ValidateReload)))) + offset; - // if (!ev.IsAllowed) - // this.SendRpc(NetworkWriter x => - // { - // x.WriteSubheader(AnimatorReloaderModuleBase.ReloaderMessageHeader.Stop); - // }, true); + newInstructions.InsertRange( + index, + new CodeInstruction[] + { + // flag = IReloadUnloadValidatorModule.ValidateReload(base.Firearm) && ev.IsAllowed; + new(OpCodes.Ldloc_S, ev1.LocalIndex), new(OpCodes.Callvirt, PropertyGetter(typeof(ReloadingWeaponEventArgs), nameof(ReloadingWeaponEventArgs.IsAllowed))), - new(OpCodes.Brfalse, stopMessage), + new(OpCodes.And), }); offset = -2; @@ -76,23 +82,24 @@ private static IEnumerable Transpiler(IEnumerable - // { - // x.WriteSubheader(AnimatorReloaderModuleBase.ReloaderMessageHeader.Stop); - // }, true); - new (OpCodes.Callvirt, PropertyGetter(typeof(UnloadingWeaponEventArgs), nameof(UnloadingWeaponEventArgs.IsAllowed))), - new(OpCodes.Brfalse, stopMessage), }); - offset = 2; - index = newInstructions.FindIndex(x => x.operand == (object)PropertyGetter(typeof(AnimatorReloaderModuleBase), nameof(AnimatorReloaderModuleBase.IsUnloading))) + offset; + offset = 1; + index = newInstructions.FindIndex(x => x.Calls(Method(typeof(IReloadUnloadValidatorModule), nameof(IReloadUnloadValidatorModule.ValidateUnload)))) + offset; - newInstructions[index].labels.Add(stopMessage); + newInstructions.InsertRange( + index, + new CodeInstruction[] + { + // flag = IReloadUnloadValidatorModule.ValidateUnload(base.Firearm) && ev.IsAllowed; + new(OpCodes.Ldloc_S, ev2.LocalIndex), + new (OpCodes.Callvirt, PropertyGetter(typeof(UnloadingWeaponEventArgs), nameof(UnloadingWeaponEventArgs.IsAllowed))), + new(OpCodes.And), + }); for (int z = 0; z < newInstructions.Count; z++) yield return newInstructions[z]; From 79c867dcd4880ac54dec0d68cc04f5e16a1b5fa1 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Tue, 2 Sep 2025 23:20:04 +0300 Subject: [PATCH 03/10] Update ReloadingWeapon.cs --- EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs b/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs index 1497dcf4af..cb04beb9ed 100644 --- a/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs +++ b/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs @@ -5,7 +5,7 @@ // // ----------------------------------------------------------------------- -namespace Exiled.Events.Patches.Events.Player +/*namespace Exiled.Events.Patches.Events.Player { using System.Collections.Generic; using System.Reflection.Emit; @@ -107,4 +107,4 @@ private static IEnumerable Transpiler(IEnumerable.Pool.Return(newInstructions); } } -} +}*/ From 162e90dfcf8c24c43d16c0d277f4269bfbed1c71 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Tue, 2 Sep 2025 23:21:32 +0300 Subject: [PATCH 04/10] Update Player.cs --- EXILED/Exiled.Events/Handlers/Player.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/EXILED/Exiled.Events/Handlers/Player.cs b/EXILED/Exiled.Events/Handlers/Player.cs index 590e4924d1..52dbec55ce 100644 --- a/EXILED/Exiled.Events/Handlers/Player.cs +++ b/EXILED/Exiled.Events/Handlers/Player.cs @@ -884,7 +884,12 @@ public class Player /// Called before a reloads a weapon. /// /// The instance. - public static void OnReloadingWeapon(ReloadingWeaponEventArgs ev) => ReloadingWeapon.InvokeSafely(ev); + public static void OnReloadingWeapon(PlayerReloadingWeaponEventArgs ev) + { + ReloadingWeaponEventArgs exiledEv = new(ev.FirearmItem.Base); + ReloadingWeapon.InvokeSafely(exiledEv); + ev.IsAllowed = exiledEv.IsAllowed; + } /// /// Called after a reloads a weapon. @@ -992,7 +997,12 @@ public class Player /// Called before a unloads a weapon. /// /// The instance. - public static void OnUnloadingWeapon(UnloadingWeaponEventArgs ev) => UnloadingWeapon.InvokeSafely(ev); + public static void OnUnloadingWeapon(PlayerUnloadingWeaponEventArgs ev) + { + UnloadingWeaponEventArgs exiledEv = new(ev.FirearmItem.Base); + UnloadingWeapon.InvokeSafely(exiledEv); + ev.IsAllowed = exiledEv.IsAllowed; + } /// /// Called after a unloads a weapon. From f18eb2446a0e40048c800dd084bdee6229173a4a Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Tue, 2 Sep 2025 23:22:11 +0300 Subject: [PATCH 05/10] Update Events.cs --- EXILED/Exiled.Events/Events.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/EXILED/Exiled.Events/Events.cs b/EXILED/Exiled.Events/Events.cs index b2c8e47e19..1645fe20a1 100644 --- a/EXILED/Exiled.Events/Events.cs +++ b/EXILED/Exiled.Events/Events.cs @@ -89,6 +89,9 @@ public override void OnEnabled() ServerSpecificSettingsSync.ServerOnSettingValueReceived += SettingBase.OnSettingUpdated; + LabApi.Events.Handlers.PlayerEvents.ReloadingWeapon += Handlers.Player.OnReloadingWeapon; + LabApi.Events.Handlers.PlayerEvents.UnloadingWeapon += Handlers.Player.OnUnloadingWeapon; + ServerConsole.ReloadServerName(); } @@ -123,6 +126,9 @@ public override void OnDisabled() ItemPickupBase.OnPickupDestroyed -= Handlers.Internal.PickupEvent.OnRemovedPickup; ServerSpecificSettingsSync.ServerOnSettingValueReceived -= SettingBase.OnSettingUpdated; + + LabApi.Events.Handlers.PlayerEvents.ReloadingWeapon -= Handlers.Player.OnReloadingWeapon; + LabApi.Events.Handlers.PlayerEvents.UnloadingWeapon -= Handlers.Player.OnUnloadingWeapon; } /// From 740d773b0afcb74a4d84809be7da8342f1cf6199 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Tue, 2 Sep 2025 23:24:32 +0300 Subject: [PATCH 06/10] Update Player.cs --- EXILED/Exiled.Events/Handlers/Player.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/EXILED/Exiled.Events/Handlers/Player.cs b/EXILED/Exiled.Events/Handlers/Player.cs index 52dbec55ce..52c3f69763 100644 --- a/EXILED/Exiled.Events/Handlers/Player.cs +++ b/EXILED/Exiled.Events/Handlers/Player.cs @@ -16,6 +16,7 @@ namespace Exiled.Events.Handlers using Exiled.Events.EventArgs.Player; using Exiled.Events.Features; + using LabApi.Events.Arguments.PlayerEvents; /// /// Player related events. From 525a67a01cf9c1549a1379a16163e25fb3fc120d Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Wed, 3 Sep 2025 00:16:31 +0300 Subject: [PATCH 07/10] Update ReloadingWeaponEventArgs.cs --- .../EventArgs/Player/ReloadingWeaponEventArgs.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/EXILED/Exiled.Events/EventArgs/Player/ReloadingWeaponEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/ReloadingWeaponEventArgs.cs index e35fc9f412..a33a3cabbc 100644 --- a/EXILED/Exiled.Events/EventArgs/Player/ReloadingWeaponEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Player/ReloadingWeaponEventArgs.cs @@ -20,13 +20,13 @@ public class ReloadingWeaponEventArgs : IPlayerEvent, IFirearmEvent, IDeniableEv /// /// Initializes a new instance of the class. /// - /// - /// - /// - public ReloadingWeaponEventArgs(InventorySystem.Items.Firearms.Firearm firearm) + /// The firearm being reloaded. + /// A value indicating whether the weapon can be reloaded. + public ReloadingWeaponEventArgs(InventorySystem.Items.Firearms.Firearm firearm, bool isAllowed) { Firearm = Item.Get(firearm); Player = Firearm.Owner; + IsAllowed = isAllowed; } /// @@ -47,4 +47,4 @@ public ReloadingWeaponEventArgs(InventorySystem.Items.Firearms.Firearm firearm) /// public Player Player { get; } } -} \ No newline at end of file +} From 94b5f6abf8edd1925bd25c222af7dfb3f7c25805 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Wed, 3 Sep 2025 00:17:44 +0300 Subject: [PATCH 08/10] Update UnloadingWeaponEventArgs.cs --- .../EventArgs/Player/UnloadingWeaponEventArgs.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/EXILED/Exiled.Events/EventArgs/Player/UnloadingWeaponEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/UnloadingWeaponEventArgs.cs index 68fc0df47c..2ac5ce4a2f 100644 --- a/EXILED/Exiled.Events/EventArgs/Player/UnloadingWeaponEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Player/UnloadingWeaponEventArgs.cs @@ -21,12 +21,16 @@ public class UnloadingWeaponEventArgs : IPlayerEvent, IFirearmEvent, IDeniableEv /// Initializes a new instance of the class. /// /// - /// + /// The firearm being unloaded. /// - public UnloadingWeaponEventArgs(InventorySystem.Items.Firearms.Firearm firearm) + /// + /// Indicates whether the weapon unloading is allowed. + /// + public UnloadingWeaponEventArgs(InventorySystem.Items.Firearms.Firearm firearm, bool isAllowed) { Firearm = Item.Get(firearm); Player = Firearm.Owner; + IsAllowed = isAllowed; } /// @@ -47,4 +51,4 @@ public UnloadingWeaponEventArgs(InventorySystem.Items.Firearms.Firearm firearm) /// public Player Player { get; } } -} \ No newline at end of file +} From 32b4d139096b0f907ff0c11f48b39c66c0ac1161 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Wed, 3 Sep 2025 00:18:53 +0300 Subject: [PATCH 09/10] Update Player.cs --- EXILED/Exiled.Events/Handlers/Player.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EXILED/Exiled.Events/Handlers/Player.cs b/EXILED/Exiled.Events/Handlers/Player.cs index 52c3f69763..90c721dfd8 100644 --- a/EXILED/Exiled.Events/Handlers/Player.cs +++ b/EXILED/Exiled.Events/Handlers/Player.cs @@ -887,7 +887,7 @@ public class Player /// The instance. public static void OnReloadingWeapon(PlayerReloadingWeaponEventArgs ev) { - ReloadingWeaponEventArgs exiledEv = new(ev.FirearmItem.Base); + ReloadingWeaponEventArgs exiledEv = new(ev.FirearmItem.Base, ev.IsAllowed); ReloadingWeapon.InvokeSafely(exiledEv); ev.IsAllowed = exiledEv.IsAllowed; } @@ -1000,7 +1000,7 @@ public static void OnReloadingWeapon(PlayerReloadingWeaponEventArgs ev) /// The instance. public static void OnUnloadingWeapon(PlayerUnloadingWeaponEventArgs ev) { - UnloadingWeaponEventArgs exiledEv = new(ev.FirearmItem.Base); + UnloadingWeaponEventArgs exiledEv = new(ev.FirearmItem.Base, ev.IsAllowed); UnloadingWeapon.InvokeSafely(exiledEv); ev.IsAllowed = exiledEv.IsAllowed; } From 0196d41c408c950acb896472bd203ecab4617e65 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Mon, 8 Sep 2025 20:37:02 +0300 Subject: [PATCH 10/10] Delete EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs --- .../Patches/Events/Player/ReloadingWeapon.cs | 110 ------------------ 1 file changed, 110 deletions(-) delete mode 100644 EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs diff --git a/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs b/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs deleted file mode 100644 index cb04beb9ed..0000000000 --- a/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs +++ /dev/null @@ -1,110 +0,0 @@ -// ----------------------------------------------------------------------- -// -// Copyright (c) ExMod Team. All rights reserved. -// Licensed under the CC BY-SA 3.0 license. -// -// ----------------------------------------------------------------------- - -/*namespace Exiled.Events.Patches.Events.Player -{ - using System.Collections.Generic; - using System.Reflection.Emit; - - using API.Features.Pools; - - using Exiled.Events.Attributes; - using Exiled.Events.EventArgs.Player; - using HarmonyLib; - using InventorySystem.Items.Firearms.Modules; - - using static HarmonyLib.AccessTools; - - /// - /// Patches . - /// Adds the and event. - /// - [EventPatch(typeof(Handlers.Player), nameof(Handlers.Player.ReloadingWeapon))] - [EventPatch(typeof(Handlers.Player), nameof(Handlers.Player.UnloadingWeapon))] - [HarmonyPatch(typeof(AnimatorReloaderModuleBase), nameof(AnimatorReloaderModuleBase.ServerProcessCmd))] - internal static class ReloadingWeapon - { - private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator) - { - List newInstructions = ListPool.Pool.Get(instructions); - - LocalBuilder ev1 = generator.DeclareLocal(typeof(ReloadingWeaponEventArgs)); - LocalBuilder ev2 = generator.DeclareLocal(typeof(UnloadingWeaponEventArgs)); - - int offset = -2; - int index = newInstructions.FindIndex(x => x.Calls(Method(typeof(IReloadUnloadValidatorModule), nameof(IReloadUnloadValidatorModule.ValidateReload)))) + offset; - - newInstructions.InsertRange( - index, - new[] - { - // this.Firearm - new CodeInstruction(OpCodes.Ldarg_0).MoveLabelsFrom(newInstructions[index]), - new(OpCodes.Callvirt, PropertyGetter(typeof(AnimatorReloaderModuleBase), nameof(AnimatorReloaderModuleBase.Firearm))), - - // ReloadingWeaponEventArgs ev = new(firearm) - new(OpCodes.Newobj, GetDeclaredConstructors(typeof(ReloadingWeaponEventArgs))[0]), - new(OpCodes.Dup), - new(OpCodes.Stloc_S, ev1.LocalIndex), - - // Player.OnReloadingWeapon(ev) - new(OpCodes.Call, Method(typeof(Handlers.Player), nameof(Handlers.Player.OnReloadingWeapon))), - }); - - offset = 1; - index = newInstructions.FindIndex(x => x.Calls(Method(typeof(IReloadUnloadValidatorModule), nameof(IReloadUnloadValidatorModule.ValidateReload)))) + offset; - - newInstructions.InsertRange( - index, - new CodeInstruction[] - { - // flag = IReloadUnloadValidatorModule.ValidateReload(base.Firearm) && ev.IsAllowed; - new(OpCodes.Ldloc_S, ev1.LocalIndex), - new(OpCodes.Callvirt, PropertyGetter(typeof(ReloadingWeaponEventArgs), nameof(ReloadingWeaponEventArgs.IsAllowed))), - new(OpCodes.And), - }); - - offset = -2; - index = newInstructions.FindIndex(x => x.Calls(Method(typeof(IReloadUnloadValidatorModule), nameof(IReloadUnloadValidatorModule.ValidateUnload)))) + offset; - - newInstructions.InsertRange( - index, - new[] - { - // this.Firearm - new CodeInstruction(OpCodes.Ldarg_0).MoveLabelsFrom(newInstructions[index]), - new(OpCodes.Callvirt, PropertyGetter(typeof(AnimatorReloaderModuleBase), nameof(AnimatorReloaderModuleBase.Firearm))), - - // UnloadingWeaponEventArgs ev = new(firearm) - new(OpCodes.Newobj, GetDeclaredConstructors(typeof(UnloadingWeaponEventArgs))[0]), - new(OpCodes.Dup), - new(OpCodes.Stloc_S, ev2.LocalIndex), - - // Player.OnUnloadingWeapon(ev) - new(OpCodes.Call, Method(typeof(Handlers.Player), nameof(Handlers.Player.OnUnloadingWeapon))), - }); - - offset = 1; - index = newInstructions.FindIndex(x => x.Calls(Method(typeof(IReloadUnloadValidatorModule), nameof(IReloadUnloadValidatorModule.ValidateUnload)))) + offset; - - newInstructions.InsertRange( - index, - new CodeInstruction[] - { - // flag = IReloadUnloadValidatorModule.ValidateUnload(base.Firearm) && ev.IsAllowed; - new(OpCodes.Ldloc_S, ev2.LocalIndex), - new (OpCodes.Callvirt, PropertyGetter(typeof(UnloadingWeaponEventArgs), nameof(UnloadingWeaponEventArgs.IsAllowed))), - new(OpCodes.And), - }); - - for (int z = 0; z < newInstructions.Count; z++) - yield return newInstructions[z]; - - ListPool.Pool.Return(newInstructions); - } - } -}*/