From c26b8129e7dff6343d590d933e497f5e8f7c5085 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Sat, 12 Apr 2025 23:52:39 +0300 Subject: [PATCH 01/13] unused wrong argument deleted, item sent according to transpiler --- .../EventArgs/Scp1344/ChangedStatusEventArgs.cs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs index 11afddf79c..1dd7b4c43a 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs @@ -9,23 +9,24 @@ namespace Exiled.Events.EventArgs.Scp1344 { using Exiled.API.Features.Items; using Exiled.Events.EventArgs.Interfaces; + using InventorySystem.Items; using InventorySystem.Items.Usables.Scp1344; /// /// Contains all information after SCP-1344 status changing. /// - public class ChangedStatusEventArgs : IScp1344Event, IPlayerEvent, IDeniableEvent + public class ChangedStatusEventArgs : IScp1344Event, IPlayerEvent { /// /// Initializes a new instance of the class. /// /// /// - public ChangedStatusEventArgs(Item item, Scp1344Status scp1344Status) + public ChangedStatusEventArgs(ItemBase item, Scp1344Status scp1344Status) { - Item = item; - Scp1344 = item as Scp1344; - Player = item.Owner; + Item = Item.Get(item); + Scp1344 = Item as Scp1344; + Player = Item.Owner; Scp1344Status = scp1344Status; } @@ -48,8 +49,5 @@ public ChangedStatusEventArgs(Item item, Scp1344Status scp1344Status) /// Gets Scp1344 item. /// public Scp1344 Scp1344 { get; } - - /// - public bool IsAllowed { get; set; } } } From 726c05f6414c4e03a456b68d8ac32f5538ee0722 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Sat, 12 Apr 2025 23:53:27 +0300 Subject: [PATCH 02/13] item sent according to transpiler --- .../EventArgs/Scp1344/ChangingStatusEventArgs.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs index 89329e0730..7d3dc6c4c1 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs @@ -9,6 +9,7 @@ namespace Exiled.Events.EventArgs.Scp1344 { using Exiled.API.Features.Items; using Exiled.Events.EventArgs.Interfaces; + using InventorySystem.Items; using InventorySystem.Items.Usables.Scp1344; /// @@ -23,11 +24,11 @@ public class ChangingStatusEventArgs : IPlayerEvent, IScp1344Event, IDeniableEve /// /// /// - public ChangingStatusEventArgs(Item item, Scp1344Status scp1344StatusNew, Scp1344Status scp1344StatusOld, bool isAllowed = true) + public ChangingStatusEventArgs(ItemBase item, Scp1344Status scp1344StatusNew, Scp1344Status scp1344StatusOld, bool isAllowed = true) { - Item = item; - Scp1344 = item as Scp1344; - Player = item.Owner; + Item = Item.Get(item); + Scp1344 = Item as Scp1344; + Player = Item.Owner; Scp1344StatusNew = scp1344StatusNew; Scp1344StatusOld = scp1344StatusOld; IsAllowed = isAllowed; From 8b9dc7b96cfdd15c495c4654a5f97103a49f96d0 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Sat, 12 Apr 2025 23:54:30 +0300 Subject: [PATCH 03/13] Prefix & Postfix to Transpiler --- .../Patches/Events/Scp1344/Status.cs | 97 ++++++++++++++++--- 1 file changed, 83 insertions(+), 14 deletions(-) diff --git a/EXILED/Exiled.Events/Patches/Events/Scp1344/Status.cs b/EXILED/Exiled.Events/Patches/Events/Scp1344/Status.cs index bfe734986c..b4db23211a 100644 --- a/EXILED/Exiled.Events/Patches/Events/Scp1344/Status.cs +++ b/EXILED/Exiled.Events/Patches/Events/Scp1344/Status.cs @@ -5,16 +5,22 @@ // // ----------------------------------------------------------------------- -#pragma warning disable SA1313 // Parameter names should begin with lower-case letter - namespace Exiled.Events.Patches.Events.Scp1344 { - using Exiled.API.Features.Items; + using System; + using System.Collections.Generic; + using System.Reflection; + using System.Reflection.Emit; + + using Exiled.API.Features.Pools; using Exiled.Events.Attributes; using Exiled.Events.EventArgs.Scp1344; using HarmonyLib; + using InventorySystem.Items.Usables.Scp1344; + using static HarmonyLib.AccessTools; + /// /// Patches . /// Adds the event and @@ -25,18 +31,81 @@ namespace Exiled.Events.Patches.Events.Scp1344 [HarmonyPatch(typeof(Scp1344Item), nameof(Scp1344Item.Status), MethodType.Setter)] internal static class Status { - private static bool Prefix(Scp1344Item __instance, ref Scp1344Status value) + private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator) { - ChangingStatusEventArgs ev = new(Item.Get(__instance), value, __instance._status); - Handlers.Scp1344.OnChangingStatus(ev); - value = ev.Scp1344StatusNew; - return ev.IsAllowed; - } + List newInstructions = ListPool.Pool.Get(instructions); - private static void Postfix(Scp1344Item __instance, ref Scp1344Status value) - { - ChangedStatusEventArgs ev = new(Item.Get(__instance), value); - Handlers.Scp1344.OnChangedStatus(ev); + // Declare local variable for ChangingStatusEventArgs + LocalBuilder ev = generator.DeclareLocal(typeof(ChangingStatusEventArgs)); + + // Continue label for isAllowed check + Label continueLabel = generator.DefineLabel(); + + newInstructions.InsertRange(0, new CodeInstruction[] + { + // this.Scp1344Item + new(OpCodes.Ldarg_0), + + // value to be set + new(OpCodes.Ldarg_1), + + // this._status + new(OpCodes.Ldarg_0), + new(OpCodes.Ldfld, Field(typeof(Scp1344Item), nameof(Scp1344Item._status))), + + // true (IsAllowed) + new(OpCodes.Ldc_I4_1), + + // ChangingStatusEventArgs ev = new(this.Item, value, this._status, isallowed) + new(OpCodes.Newobj, GetDeclaredConstructors(typeof(ChangingStatusEventArgs))[0]), + new(OpCodes.Dup), + new(OpCodes.Stloc_S, ev.LocalIndex), + + // Handlers.Scp1344.OnChangingStatus(ev) + new(OpCodes.Call, Method(typeof(Handlers.Scp1344), nameof(Handlers.Scp1344.OnChangingStatus))), + + // if (!ev.IsAllowed) return; + new(OpCodes.Ldloc_S, ev.LocalIndex), + new(OpCodes.Callvirt, PropertyGetter(typeof(ChangingStatusEventArgs), nameof(ChangingStatusEventArgs.IsAllowed))), + new(OpCodes.Brtrue_S, continueLabel), + + // Return; + new(OpCodes.Ret), + + // continue label + new CodeInstruction(OpCodes.Nop).WithLabels(continueLabel), + + // value = ev.Scp1344StatusNew; + new(OpCodes.Ldloc_S, ev.LocalIndex), + new(OpCodes.Callvirt, PropertyGetter(typeof(ChangingStatusEventArgs), nameof(ChangingStatusEventArgs.Scp1344StatusNew))), + new(OpCodes.Starg_S, 1), + }); + + // this.ServerChangeStatus(value) index + MethodInfo changeStatusMethod = Method(typeof(Scp1344Item), nameof(Scp1344Item.ServerChangeStatus)); + int offset = 1; + int index = newInstructions.FindIndex(i => i.opcode == OpCodes.Call && i.operand is MethodInfo method && method == changeStatusMethod) + offset; + + newInstructions.InsertRange(index, new CodeInstruction[] + { + // this.Scp1344Item + new(OpCodes.Ldarg_0), + + // value to be set + new(OpCodes.Ldarg_1), + + // ChangedStatusEventArgs ev = new(this.Item, value) + new(OpCodes.Newobj, GetDeclaredConstructors(typeof(ChangedStatusEventArgs))[0]), + + // Handlers.Scp1344.OnChangedStatus(ev) + new(OpCodes.Call, Method(typeof(Handlers.Scp1344), nameof(Handlers.Scp1344.OnChangedStatus))), + }); + + // Return the new instructions + foreach (CodeInstruction newcode in newInstructions) + yield return newcode; + + ListPool.Pool.Return(newInstructions); } } -} \ No newline at end of file +} From 57d0339729f1ee62073c913512f742cd72317565 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:30:41 +0300 Subject: [PATCH 04/13] Breaking change fix --- .../EventArgs/Scp1344/ChangedStatusEventArgs.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs index 1dd7b4c43a..bf48ca7449 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs @@ -49,5 +49,13 @@ public ChangedStatusEventArgs(ItemBase item, Scp1344Status scp1344Status) /// Gets Scp1344 item. /// public Scp1344 Scp1344 { get; } + + /// + /// Do not use this parameter, it is incorrect and does not work. + /// + [Obsolete] + #pragma warning disable SA1623 // Property summary documentation should match accessors + public bool IsAllowed { get; set; } + #pragma warning restore SA1623 // Property summary documentation should match accessors } } From 6057e85bd8b22d4c9b3c65e1c0a12e9ef88d3561 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:34:17 +0300 Subject: [PATCH 05/13] add system namaspace --- .../Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs index bf48ca7449..5cf183c3d8 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs @@ -7,8 +7,11 @@ namespace Exiled.Events.EventArgs.Scp1344 { + using System; + using Exiled.API.Features.Items; using Exiled.Events.EventArgs.Interfaces; + using InventorySystem.Items; using InventorySystem.Items.Usables.Scp1344; From ff15ca3d257b8b324a3de6aafc9533ee5b169449 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:38:45 +0300 Subject: [PATCH 06/13] Delete whitespaces --- .../Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs index 5cf183c3d8..44a0e836a0 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs @@ -11,7 +11,7 @@ namespace Exiled.Events.EventArgs.Scp1344 using Exiled.API.Features.Items; using Exiled.Events.EventArgs.Interfaces; - + using InventorySystem.Items; using InventorySystem.Items.Usables.Scp1344; From 6f6e4da694bb220a185a8e759a0f3e22d72af0d9 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Sun, 13 Apr 2025 16:44:24 +0300 Subject: [PATCH 07/13] Whitespace again --- .../Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs index 44a0e836a0..b619182f0d 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs @@ -8,7 +8,7 @@ namespace Exiled.Events.EventArgs.Scp1344 { using System; - + using Exiled.API.Features.Items; using Exiled.Events.EventArgs.Interfaces; From 8e6496f16fc7b8630894c2676df3a0fc6c42138c Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Mon, 14 Apr 2025 20:38:57 +0300 Subject: [PATCH 08/13] Update ChangedStatusEventArgs.cs --- .../Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs index b619182f0d..ee167f3e26 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs @@ -18,7 +18,7 @@ namespace Exiled.Events.EventArgs.Scp1344 /// /// Contains all information after SCP-1344 status changing. /// - public class ChangedStatusEventArgs : IScp1344Event, IPlayerEvent + public class ChangedStatusEventArgs : IScp1344Event, IPlayerEvent, IDeniableEvent { /// /// Initializes a new instance of the class. From 1c4d4e49cf280ba8c1762d81d27843b8bc0d3b91 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Mon, 14 Apr 2025 20:50:52 +0300 Subject: [PATCH 09/13] Update ChangedStatusEventArgs.cs --- .../EventArgs/Scp1344/ChangedStatusEventArgs.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs index ee167f3e26..462f03952a 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs @@ -27,9 +27,8 @@ public class ChangedStatusEventArgs : IScp1344Event, IPlayerEvent, IDeniableEven /// public ChangedStatusEventArgs(ItemBase item, Scp1344Status scp1344Status) { - Item = Item.Get(item); - Scp1344 = Item as Scp1344; - Player = Item.Owner; + Scp1344 = Item.Get(item); + Player = Scp1344.Owner; Scp1344Status = scp1344Status; } @@ -41,7 +40,7 @@ public ChangedStatusEventArgs(ItemBase item, Scp1344Status scp1344Status) /// /// Gets the item. /// - public Item Item { get; } + public Item Item => Scp1344; /// /// Gets the player in owner of the item. From fb5823b0c89c84d0a51ea0660050509e62b0c42a Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Mon, 14 Apr 2025 20:52:01 +0300 Subject: [PATCH 10/13] Update ChangingStatusEventArgs.cs --- .../EventArgs/Scp1344/ChangingStatusEventArgs.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs index 7d3dc6c4c1..294ac53ca3 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs @@ -26,9 +26,8 @@ public class ChangingStatusEventArgs : IPlayerEvent, IScp1344Event, IDeniableEve /// public ChangingStatusEventArgs(ItemBase item, Scp1344Status scp1344StatusNew, Scp1344Status scp1344StatusOld, bool isAllowed = true) { - Item = Item.Get(item); - Scp1344 = Item as Scp1344; - Player = Item.Owner; + Scp1344 = Item.Get(item); + Player = Scp1344.Owner; Scp1344StatusNew = scp1344StatusNew; Scp1344StatusOld = scp1344StatusOld; IsAllowed = isAllowed; @@ -47,7 +46,7 @@ public ChangingStatusEventArgs(ItemBase item, Scp1344Status scp1344StatusNew, Sc /// /// Gets the item. /// - public Item Item { get; } + public Item Item => Scp1344; /// /// Gets the player in owner of the item. From e8a139477629f80f24721c30b8d404adf6c0c9dc Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Mon, 14 Apr 2025 20:54:26 +0300 Subject: [PATCH 11/13] Update ChangedStatusEventArgs.cs --- .../EventArgs/Scp1344/ChangedStatusEventArgs.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs index 462f03952a..170d259a8a 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs @@ -52,12 +52,8 @@ public ChangedStatusEventArgs(ItemBase item, Scp1344Status scp1344Status) /// public Scp1344 Scp1344 { get; } - /// - /// Do not use this parameter, it is incorrect and does not work. - /// + /// [Obsolete] - #pragma warning disable SA1623 // Property summary documentation should match accessors public bool IsAllowed { get; set; } - #pragma warning restore SA1623 // Property summary documentation should match accessors } } From df20fe7526eddd6a63a7cadbbd6b99c2753edfa5 Mon Sep 17 00:00:00 2001 From: MS-crew <100300664+MS-crew@users.noreply.github.com> Date: Mon, 14 Apr 2025 20:57:15 +0300 Subject: [PATCH 12/13] removed whitespace --- .../Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs index 294ac53ca3..6cf7449e99 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangingStatusEventArgs.cs @@ -26,7 +26,7 @@ public class ChangingStatusEventArgs : IPlayerEvent, IScp1344Event, IDeniableEve /// public ChangingStatusEventArgs(ItemBase item, Scp1344Status scp1344StatusNew, Scp1344Status scp1344StatusOld, bool isAllowed = true) { - Scp1344 = Item.Get(item); + Scp1344 = Item.Get(item); Player = Scp1344.Owner; Scp1344StatusNew = scp1344StatusNew; Scp1344StatusOld = scp1344StatusOld; From c596016447e62aa02de3e2d103a7b2f0f2ceecb9 Mon Sep 17 00:00:00 2001 From: Yamato Date: Sun, 20 Apr 2025 16:59:37 +0200 Subject: [PATCH 13/13] Obsolete explanation --- .../Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs index 170d259a8a..c5c772529f 100644 --- a/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Scp1344/ChangedStatusEventArgs.cs @@ -53,7 +53,7 @@ public ChangedStatusEventArgs(ItemBase item, Scp1344Status scp1344Status) public Scp1344 Scp1344 { get; } /// - [Obsolete] + [Obsolete("Please use ChangingStatusEventArgs::IsAllowed instead of this", true)] public bool IsAllowed { get; set; } } }