From c4d78775b1b9f18d0cdfebf2aff99d6dd7b64706 Mon Sep 17 00:00:00 2001 From: TiBarification <6222472+TiBarification@users.noreply.github.com> Date: Mon, 9 Mar 2026 01:36:30 +0200 Subject: [PATCH 1/4] added trigger events of labapi loadout --- .../Patches/Events/Player/ChangingRoleAndSpawned.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs b/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs index ae3bf2a26e..4dad41419c 100644 --- a/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs +++ b/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs @@ -23,6 +23,8 @@ namespace Exiled.Events.Patches.Events.Player using InventorySystem.Items.Armor; using InventorySystem.Items.Pickups; using InventorySystem.Items.Usables.Scp1344; + using LabApi.Events.Arguments.PlayerEvents; + using LabApi.Events.Handlers; using Mirror; using PlayerRoles; @@ -192,7 +194,15 @@ private static void ChangeInventory(ChangingRoleEventArgs ev) if (ev.ShouldPreserveInventory || ev.Reason == API.Enums.SpawnReason.Destroyed) return; + PlayerReceivingLoadoutEventArgs playerReceivingLoadoutEventArgs = new PlayerReceivingLoadoutEventArgs(ev.Player.ReferenceHub, ev.Items, ev.Ammo, !ev.ShouldPreserveInventory); + PlayerEvents.OnReceivingLoadout(playerReceivingLoadoutEventArgs); + if (!playerReceivingLoadoutEventArgs.IsAllowed) + { + return; + } + Inventory inventory = ev.Player.Inventory; + if (InventoryItemProvider.KeepItemsAfterEscaping && ev.Reason == API.Enums.SpawnReason.Escaped) { List list = new List(); @@ -228,6 +238,7 @@ private static void ChangeInventory(ChangingRoleEventArgs ev) { ItemBase itemBase = inventory.ServerAddItem(item, ItemAddReason.StartingItem); InventoryItemProvider.OnItemProvided?.Invoke(ev.Player.ReferenceHub, itemBase); + PlayerEvents.OnReceivedLoadout(new PlayerReceivedLoadoutEventArgs(ev.Player.ReferenceHub, ev.Items, ev.Ammo, !ev.ShouldPreserveInventory)); } InventoryItemProvider.InventoriesToReplenish.Enqueue(ev.Player.ReferenceHub); From 1cfea1e58fb40c25ffa1e4672197511884029e93 Mon Sep 17 00:00:00 2001 From: TiBarification <6222472+TiBarification@users.noreply.github.com> Date: Mon, 9 Mar 2026 01:43:37 +0200 Subject: [PATCH 2/4] fix: moved OnReceivedLoadout event from loop --- .../Patches/Events/Player/ChangingRoleAndSpawned.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs b/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs index 4dad41419c..9f19dea99a 100644 --- a/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs +++ b/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs @@ -238,9 +238,9 @@ private static void ChangeInventory(ChangingRoleEventArgs ev) { ItemBase itemBase = inventory.ServerAddItem(item, ItemAddReason.StartingItem); InventoryItemProvider.OnItemProvided?.Invoke(ev.Player.ReferenceHub, itemBase); - PlayerEvents.OnReceivedLoadout(new PlayerReceivedLoadoutEventArgs(ev.Player.ReferenceHub, ev.Items, ev.Ammo, !ev.ShouldPreserveInventory)); } + PlayerEvents.OnReceivedLoadout(new PlayerReceivedLoadoutEventArgs(ev.Player.ReferenceHub, ev.Items, ev.Ammo, !ev.ShouldPreserveInventory)); InventoryItemProvider.InventoriesToReplenish.Enqueue(ev.Player.ReferenceHub); } catch (Exception exception) From 1aa589dfbf3d50b90e8fa5bf64dedac134d69242 Mon Sep 17 00:00:00 2001 From: Yamato <66829532+louis1706@users.noreply.github.com> Date: Mon, 9 Mar 2026 11:16:48 +0100 Subject: [PATCH 3/4] fix: PlayerReceivingLoadoutEventArgs not having ev.Item/ev.Ammo working --- .../EventArgs/Player/ChangingRoleEventArgs.cs | 13 +++++++++++-- .../Patches/Events/Player/ChangingRoleAndSpawned.cs | 8 -------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/EXILED/Exiled.Events/EventArgs/Player/ChangingRoleEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/ChangingRoleEventArgs.cs index 052fff48c6..1d20f94edd 100644 --- a/EXILED/Exiled.Events/EventArgs/Player/ChangingRoleEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Player/ChangingRoleEventArgs.cs @@ -15,6 +15,8 @@ namespace Exiled.Events.EventArgs.Player using Exiled.API.Features.Pools; using Interfaces; using InventorySystem; + using LabApi.Events.Arguments.PlayerEvents; + using LabApi.Events.Handlers; using PlayerRoles; /// @@ -72,10 +74,17 @@ public RoleTypeId NewRole Items.Clear(); Ammo.Clear(); - foreach (ItemType itemType in inventory.Items) + PlayerReceivingLoadoutEventArgs playerReceivingLoadoutEventArgs = new(Player.ReferenceHub, Items, Ammo, !ShouldPreserveInventory); + PlayerEvents.OnReceivingLoadout(playerReceivingLoadoutEventArgs); + if (!playerReceivingLoadoutEventArgs.IsAllowed) + { + return; + } + + foreach (ItemType itemType in playerReceivingLoadoutEventArgs.Items) Items.Add(itemType); - foreach (KeyValuePair ammoPair in inventory.Ammo) + foreach (KeyValuePair ammoPair in playerReceivingLoadoutEventArgs.Ammo) Ammo.Add(ammoPair.Key, ammoPair.Value); field = value; diff --git a/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs b/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs index 9f19dea99a..5a0768d7f8 100644 --- a/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs +++ b/EXILED/Exiled.Events/Patches/Events/Player/ChangingRoleAndSpawned.cs @@ -194,15 +194,7 @@ private static void ChangeInventory(ChangingRoleEventArgs ev) if (ev.ShouldPreserveInventory || ev.Reason == API.Enums.SpawnReason.Destroyed) return; - PlayerReceivingLoadoutEventArgs playerReceivingLoadoutEventArgs = new PlayerReceivingLoadoutEventArgs(ev.Player.ReferenceHub, ev.Items, ev.Ammo, !ev.ShouldPreserveInventory); - PlayerEvents.OnReceivingLoadout(playerReceivingLoadoutEventArgs); - if (!playerReceivingLoadoutEventArgs.IsAllowed) - { - return; - } - Inventory inventory = ev.Player.Inventory; - if (InventoryItemProvider.KeepItemsAfterEscaping && ev.Reason == API.Enums.SpawnReason.Escaped) { List list = new List(); From 91231dab877dd53b5eec6fd640611fb9c6e9a3b9 Mon Sep 17 00:00:00 2001 From: Yamato <66829532+louis1706@users.noreply.github.com> Date: Thu, 12 Mar 2026 19:16:27 +0100 Subject: [PATCH 4/4] Apply suggestion from @louis1706 --- EXILED/Exiled.Events/EventArgs/Player/ChangingRoleEventArgs.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EXILED/Exiled.Events/EventArgs/Player/ChangingRoleEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/ChangingRoleEventArgs.cs index 1d20f94edd..5263ee7f5a 100644 --- a/EXILED/Exiled.Events/EventArgs/Player/ChangingRoleEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Player/ChangingRoleEventArgs.cs @@ -74,7 +74,7 @@ public RoleTypeId NewRole Items.Clear(); Ammo.Clear(); - PlayerReceivingLoadoutEventArgs playerReceivingLoadoutEventArgs = new(Player.ReferenceHub, Items, Ammo, !ShouldPreserveInventory); + PlayerReceivingLoadoutEventArgs playerReceivingLoadoutEventArgs = new(Player.ReferenceHub, inventory.Items, inventory.Ammo, !ShouldPreserveInventory); PlayerEvents.OnReceivingLoadout(playerReceivingLoadoutEventArgs); if (!playerReceivingLoadoutEventArgs.IsAllowed) {