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
+}
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
+}
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
+}
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;
}
///
diff --git a/EXILED/Exiled.Events/Handlers/Player.cs b/EXILED/Exiled.Events/Handlers/Player.cs
index 590e4924d1..90c721dfd8 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.
@@ -884,7 +885,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, ev.IsAllowed);
+ ReloadingWeapon.InvokeSafely(exiledEv);
+ ev.IsAllowed = exiledEv.IsAllowed;
+ }
///
/// Called after a reloads a weapon.
@@ -992,7 +998,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, ev.IsAllowed);
+ UnloadingWeapon.InvokeSafely(exiledEv);
+ ev.IsAllowed = exiledEv.IsAllowed;
+ }
///
/// Called after a unloads a weapon.
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 347e82bad1..0000000000
--- a/EXILED/Exiled.Events/Patches/Events/Player/ReloadingWeapon.cs
+++ /dev/null
@@ -1,103 +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.API.Extensions;
- 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);
-
- 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[]
- {
- // 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),
-
- // Player.OnReloadingWeapon(ev)
- new(OpCodes.Call, Method(typeof(Handlers.Player), nameof(Handlers.Player.OnReloadingWeapon))),
-
- // if (!ev.IsAllowed)
- // this.SendRpc(NetworkWriter x =>
- // {
- // x.WriteSubheader(AnimatorReloaderModuleBase.ReloaderMessageHeader.Stop);
- // }, true);
- new(OpCodes.Callvirt, PropertyGetter(typeof(ReloadingWeaponEventArgs), nameof(ReloadingWeaponEventArgs.IsAllowed))),
- new(OpCodes.Brfalse, stopMessage),
- });
-
- 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),
-
- // Player.OnUnloadingWeapon(ev)
- new(OpCodes.Call, Method(typeof(Handlers.Player), nameof(Handlers.Player.OnUnloadingWeapon))),
-
- // if (!ev.IsAllowed)
- // this.SendRpc(NetworkWriter x =>
- // {
- // 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;
-
- newInstructions[index].labels.Add(stopMessage);
-
- for (int z = 0; z < newInstructions.Count; z++)
- yield return newInstructions[z];
-
- ListPool.Pool.Return(newInstructions);
- }
- }
-}