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; }
}
}