From b40f2af4eebc4843ec7a9ebf2a2012cd14cc3e1c Mon Sep 17 00:00:00 2001 From: Unbistrackted <112902220+Unbistrackted@users.noreply.github.com> Date: Mon, 30 Mar 2026 22:11:14 -0300 Subject: [PATCH 1/5] fix: make tesla patches better --- .../EventArgs/Player/IdledTeslaEventArgs.cs | 43 +++++++ .../EventArgs/Player/IdlingTeslaEventArgs.cs | 48 +++++++ .../Player/TriggeredTeslaEventArgs.cs | 43 +++++++ .../Player/TriggeringTeslaEventArgs.cs | 22 ---- EXILED/Exiled.Events/Handlers/Player.cs | 43 +++++-- .../Patches/Events/Player/IdledTesla.cs | 59 +++++++++ .../Patches/Events/Player/IdlingTesla.cs | 75 +++++++++++ .../Patches/Events/Player/TriggeredTesla.cs | 59 +++++++++ .../Patches/Events/Player/TriggeringTesla.cs | 119 +++++------------- 9 files changed, 395 insertions(+), 116 deletions(-) create mode 100644 EXILED/Exiled.Events/EventArgs/Player/IdledTeslaEventArgs.cs create mode 100644 EXILED/Exiled.Events/EventArgs/Player/IdlingTeslaEventArgs.cs create mode 100644 EXILED/Exiled.Events/EventArgs/Player/TriggeredTeslaEventArgs.cs create mode 100644 EXILED/Exiled.Events/Patches/Events/Player/IdledTesla.cs create mode 100644 EXILED/Exiled.Events/Patches/Events/Player/IdlingTesla.cs create mode 100644 EXILED/Exiled.Events/Patches/Events/Player/TriggeredTesla.cs diff --git a/EXILED/Exiled.Events/EventArgs/Player/IdledTeslaEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/IdledTeslaEventArgs.cs new file mode 100644 index 0000000000..ddb6f4d9af --- /dev/null +++ b/EXILED/Exiled.Events/EventArgs/Player/IdledTeslaEventArgs.cs @@ -0,0 +1,43 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) ExMod Team. All rights reserved. +// Licensed under the CC BY-SA 3.0 license. +// +// ----------------------------------------------------------------------- + +namespace Exiled.Events.EventArgs.Player +{ + using API.Features; + using Interfaces; + + /// + /// Contains all information after Idling a tesla. + /// + public class IdledTeslaEventArgs : IPlayerEvent, ITeslaEvent + { + /// + /// Initializes a new instance of the class. + /// + /// + /// + /// + /// + /// + /// + public IdledTeslaEventArgs(Player player, TeslaGate teslaGate) + { + Player = player; + Tesla = teslaGate; + } + + /// + /// Gets the player who triggered the tesla. + /// + public Player Player { get; } + + /// + /// Gets the Tesla. + /// + public TeslaGate Tesla { get; } + } +} \ No newline at end of file diff --git a/EXILED/Exiled.Events/EventArgs/Player/IdlingTeslaEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/IdlingTeslaEventArgs.cs new file mode 100644 index 0000000000..8b8864a326 --- /dev/null +++ b/EXILED/Exiled.Events/EventArgs/Player/IdlingTeslaEventArgs.cs @@ -0,0 +1,48 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) ExMod Team. All rights reserved. +// Licensed under the CC BY-SA 3.0 license. +// +// ----------------------------------------------------------------------- + +namespace Exiled.Events.EventArgs.Player +{ + using API.Features; + using Interfaces; + + /// + /// Contains all information before Idling a tesla. + /// + public class IdlingTeslaEventArgs : IPlayerEvent, ITeslaEvent, IDeniableEvent + { + /// + /// Initializes a new instance of the class. + /// + /// + /// + /// + /// + /// + /// + public IdlingTeslaEventArgs(Player player, TeslaGate teslaGate) + { + Player = player; + Tesla = teslaGate; + } + + /// + /// Gets the player who triggered the tesla. + /// + public Player Player { get; } + + /// + /// Gets the Tesla. + /// + public TeslaGate Tesla { get; } + + /// + /// Gets or sets a value indicating whether the player will be detected by the tesla. + /// + public bool IsAllowed { get; set; } = true; + } +} \ No newline at end of file diff --git a/EXILED/Exiled.Events/EventArgs/Player/TriggeredTeslaEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/TriggeredTeslaEventArgs.cs new file mode 100644 index 0000000000..37ce13c5e8 --- /dev/null +++ b/EXILED/Exiled.Events/EventArgs/Player/TriggeredTeslaEventArgs.cs @@ -0,0 +1,43 @@ +// ----------------------------------------------------------------------- +// +// Copyright (c) ExMod Team. All rights reserved. +// Licensed under the CC BY-SA 3.0 license. +// +// ----------------------------------------------------------------------- + +namespace Exiled.Events.EventArgs.Player +{ + using API.Features; + using Interfaces; + + /// + /// Contains all information after triggering a tesla. + /// + public class TriggeredTeslaEventArgs : IPlayerEvent, ITeslaEvent + { + /// + /// Initializes a new instance of the class. + /// + /// + /// + /// + /// + /// + /// + public TriggeredTeslaEventArgs(Player player, TeslaGate teslaGate) + { + Player = player; + Tesla = teslaGate; + } + + /// + /// Gets the player who triggered the tesla. + /// + public Player Player { get; } + + /// + /// Gets the Tesla. + /// + public TeslaGate Tesla { get; } + } +} \ No newline at end of file diff --git a/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs index 6c897ba955..dfb25f9376 100644 --- a/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs @@ -29,25 +29,8 @@ public TriggeringTeslaEventArgs(Player player, TeslaGate teslaGate) { Player = player; Tesla = teslaGate; - IsInHurtingRange = Tesla.IsPlayerInHurtRange(player); - IsTriggerable = Tesla.IsPlayerInTriggerRange(player); } - /// - /// Gets or sets a value indicating whether the player is in hurting range. - /// - public bool IsInHurtingRange { get; set; } - - /// - /// Gets or sets a value indicating whether the player will cause the tesla going to be idle. - /// - public bool IsInIdleRange { get; set; } = true; - - /// - /// Gets or sets a value indicating whether the player will cause the tesla going to be activated. - /// - public bool IsTriggerable { get; set; } - /// /// Gets the player who triggered the tesla. /// @@ -62,10 +45,5 @@ public TriggeringTeslaEventArgs(Player player, TeslaGate teslaGate) /// Gets or sets a value indicating whether the player will be detected by the tesla. /// public bool IsAllowed { get; set; } = true; - - /// - /// Gets or sets a value indicating whether the tesla will be deactivated. - /// - public bool DisableTesla { get; set; } } } \ No newline at end of file diff --git a/EXILED/Exiled.Events/Handlers/Player.cs b/EXILED/Exiled.Events/Handlers/Player.cs index c03bcebebf..7fc3386a7a 100644 --- a/EXILED/Exiled.Events/Handlers/Player.cs +++ b/EXILED/Exiled.Events/Handlers/Player.cs @@ -11,15 +11,11 @@ namespace Exiled.Events.Handlers using Exiled.API.Enums; using Exiled.API.Features; - #pragma warning disable IDE0079 #pragma warning disable IDE0060 #pragma warning disable SA1623 // Property summary documentation should match accessors - using Exiled.Events.EventArgs.Player; - using Exiled.Events.Features; - using LabApi.Events.Arguments.PlayerEvents; /// @@ -30,7 +26,7 @@ public class Player /// /// Invoked after a player triggers the attack as an SCP. /// - public static Event Hit { get; set; } = new (); + public static Event Hit { get; set; } = new(); /// /// Invoked before authenticating a . @@ -87,7 +83,7 @@ public class Player /// /// Invoked before a finishes using a . In other words, it is invoked after the animation finishes but before the is actually used. /// - public static Event UsingItemCompleted { get; set; } = new (); + public static Event UsingItemCompleted { get; set; } = new(); /// /// Invoked after a uses an . @@ -365,6 +361,21 @@ public class Player /// public static Event TriggeringTesla { get; set; } = new(); + /// + /// Invoked after a triggers a tesla gate. + /// + public static Event TriggeredTesla { get; set; } = new(); + + /// + /// Invoked before a idles a tesla gate. + /// + public static Event IdlingTesla { get; set; } = new(); + + /// + /// Invoked before a idles a tesla gate. + /// + public static Event IdledTesla { get; set; } = new(); + /// /// Invoked before a unlocks a generator. /// @@ -1014,6 +1025,12 @@ public static void OnReloadingWeapon(PlayerReloadingWeaponEventArgs ev) /// The instance. public static void OnTriggeringTesla(TriggeringTeslaEventArgs ev) => TriggeringTesla.InvokeSafely(ev); + /// + /// Called before a idles a tesla. + /// + /// The instance. + public static void OnIdlingTesla(IdlingTeslaEventArgs ev) => IdlingTesla.InvokeSafely(ev); + /// /// Called before a receives a status effect. /// @@ -1434,5 +1451,17 @@ public static void OnItemRemoved(ReferenceHub referenceHub, InventorySystem.Item /// /// The instance. public static void OnScp1576TransmissionEnded(Scp1576TransmissionEndedEventArgs ev) => Scp1576TransmissionEnded.InvokeSafely(ev); + + /// + /// Called before a triggers a tesla. + /// + /// The instance. + public static void OnTriggeredTesla(TriggeredTeslaEventArgs ev) => TriggeredTesla.InvokeSafely(ev); + + /// + /// Called after a idles a tesla. + /// + /// The instance. + public static void OnIdledTesla(IdledTeslaEventArgs ev) => IdledTesla.InvokeSafely(ev); } -} +} \ No newline at end of file diff --git a/EXILED/Exiled.Events/Patches/Events/Player/IdledTesla.cs b/EXILED/Exiled.Events/Patches/Events/Player/IdledTesla.cs new file mode 100644 index 0000000000..91e7a294f0 --- /dev/null +++ b/EXILED/Exiled.Events/Patches/Events/Player/IdledTesla.cs @@ -0,0 +1,59 @@ +// ----------------------------------------------------------------------- +// +// 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 Attributes; + using Exiled.API.Features.Pools; + using Exiled.Events.EventArgs.Player; + using Handlers; + using HarmonyLib; + + using static HarmonyLib.AccessTools; + + /// + /// Patches . + /// Adds the event. + /// + [EventPatch(typeof(Player), nameof(Player.IdledTesla))] + [HarmonyPatch(typeof(TeslaGateController), nameof(TeslaGateController.FixedUpdate))] + public class IdledTesla + { + private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator) + { + List newInstructions = ListPool.Pool.Get(instructions); + + int offset = 1; + int index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(TeslaGate), nameof(TeslaGate.ServerSideIdle)))) + offset; + + newInstructions.InsertRange(index, new CodeInstruction[] + { + // Player.Get(hub); + new(OpCodes.Ldloc_S, 4), + new(OpCodes.Call, Method(typeof(Exiled.API.Features.Player), nameof(Exiled.API.Features.Player.Get), new[] { typeof(ReferenceHub) })), + + // TeslaGate.Get(allGate); + new(OpCodes.Ldloc_1), + new(OpCodes.Call, Method(typeof(Exiled.API.Features.TeslaGate), nameof(Exiled.API.Features.TeslaGate.Get), new[] { typeof(TeslaGate) })), + + // IdledTeslaEventArgs ev = new(Player, TeslaGate); + new(OpCodes.Newobj, GetDeclaredConstructors(typeof(IdledTeslaEventArgs))[0]), + + // Handlers.Player.OnIdledTesla(ev) + new(OpCodes.Call, Method(typeof(Player), nameof(Player.OnIdledTesla))), + }); + + for (int z = 0; z < newInstructions.Count; z++) + yield return newInstructions[z]; + + ListPool.Pool.Return(newInstructions); + } + } +} \ No newline at end of file diff --git a/EXILED/Exiled.Events/Patches/Events/Player/IdlingTesla.cs b/EXILED/Exiled.Events/Patches/Events/Player/IdlingTesla.cs new file mode 100644 index 0000000000..64db589515 --- /dev/null +++ b/EXILED/Exiled.Events/Patches/Events/Player/IdlingTesla.cs @@ -0,0 +1,75 @@ +// ----------------------------------------------------------------------- +// +// 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 Attributes; + using Exiled.API.Features.Pools; + using Exiled.Events.EventArgs.Player; + using Handlers; + using HarmonyLib; + + using static HarmonyLib.AccessTools; + + /// + /// Patches . + /// Adds the event. + /// + [EventPatch(typeof(Player), nameof(Player.IdlingTesla))] + [HarmonyPatch(typeof(TeslaGateController), nameof(TeslaGateController.FixedUpdate))] + internal static class IdlingTesla + { + private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator) + { + List newInstructions = ListPool.Pool.Get(instructions); + + LocalBuilder ev = generator.DeclareLocal(typeof(IdlingTeslaEventArgs)); + + int offset = 4; + int index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(TeslaGate), nameof(TeslaGate.IsInIdleRange), new[] { typeof(ReferenceHub) }))) + offset; + + newInstructions.InsertRange(index, new CodeInstruction[] + { + // Player.Get(allHub); + new(OpCodes.Ldloc_S, 7), + new(OpCodes.Call, Method(typeof(Exiled.API.Features.Player), nameof(Exiled.API.Features.Player.Get), new[] { typeof(ReferenceHub) })), + + // TeslaGate.Get(allGate); + new(OpCodes.Ldloc_1), + new(OpCodes.Call, Method(typeof(Exiled.API.Features.TeslaGate), nameof(Exiled.API.Features.TeslaGate.Get), new[] { typeof(TeslaGate) })), + + // IdlingTeslaEventArgs ev = new(Player, TeslaGate); + new(OpCodes.Newobj, GetDeclaredConstructors(typeof(IdlingTeslaEventArgs))[0]), + new(OpCodes.Dup), + new(OpCodes.Stloc_S, ev.LocalIndex), + + // Handlers.Player.OnIdlingTeslaTesla(ev); + new(OpCodes.Call, Method(typeof(Player), nameof(Player.OnIdlingTesla))), + }); + + int labApiIsAllowedIndex = newInstructions.FindIndex(instruction => instruction.Calls(PropertyGetter( + typeof(LabApi.Events.Arguments.PlayerEvents.PlayerIdlingTeslaEventArgs), + nameof(LabApi.Events.Arguments.PlayerEvents.PlayerIdlingTeslaEventArgs.IsAllowed)))) + 1; + + newInstructions.InsertRange(labApiIsAllowedIndex, new CodeInstruction[] + { + // if (e.IsAllowed && ev.IsAllowed) + new(OpCodes.Ldloc_S, ev.LocalIndex), + new(OpCodes.Callvirt, PropertyGetter(typeof(IdlingTeslaEventArgs), nameof(IdlingTeslaEventArgs.IsAllowed))), + new(OpCodes.And), + }); + + for (int z = 0; z < newInstructions.Count; z++) + yield return newInstructions[z]; + + ListPool.Pool.Return(newInstructions); + } + } +} \ No newline at end of file diff --git a/EXILED/Exiled.Events/Patches/Events/Player/TriggeredTesla.cs b/EXILED/Exiled.Events/Patches/Events/Player/TriggeredTesla.cs new file mode 100644 index 0000000000..fd1c518296 --- /dev/null +++ b/EXILED/Exiled.Events/Patches/Events/Player/TriggeredTesla.cs @@ -0,0 +1,59 @@ +// ----------------------------------------------------------------------- +// +// 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 Attributes; + using Exiled.API.Features.Pools; + using Exiled.Events.EventArgs.Player; + using Handlers; + using HarmonyLib; + + using static HarmonyLib.AccessTools; + + /// + /// Patches . + /// Adds the event. + /// + [EventPatch(typeof(Player), nameof(Player.TriggeredTesla))] + [HarmonyPatch(typeof(TeslaGateController), nameof(TeslaGateController.FixedUpdate))] + internal static class TriggeredTesla + { + private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator) + { + List newInstructions = ListPool.Pool.Get(instructions); + + int offset = 1; + int index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(TeslaGate), nameof(TeslaGate.ServerSideCode)))) + offset; + + newInstructions.InsertRange(index, new CodeInstruction[] + { + // Player.Get(hub2); + new(OpCodes.Ldloc_S, 5), + new(OpCodes.Call, Method(typeof(Exiled.API.Features.Player), nameof(Exiled.API.Features.Player.Get), new[] { typeof(ReferenceHub) })), + + // TeslaGate.Get(allGate); + new(OpCodes.Ldloc_1), + new(OpCodes.Call, Method(typeof(Exiled.API.Features.TeslaGate), nameof(Exiled.API.Features.TeslaGate.Get), new[] { typeof(TeslaGate) })), + + // TriggeredTeslaEventArgs ev = new(Player, TeslaGate); + new(OpCodes.Newobj, GetDeclaredConstructors(typeof(TriggeredTeslaEventArgs))[0]), + + // Handlers.Player.OnTriggeredTesla(ev) + new(OpCodes.Call, Method(typeof(Player), nameof(Player.OnTriggeredTesla))), + }); + + for (int z = 0; z < newInstructions.Count; z++) + yield return newInstructions[z]; + + ListPool.Pool.Return(newInstructions); + } + } +} \ No newline at end of file diff --git a/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs b/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs index d14539587e..ab8c81f70f 100644 --- a/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs +++ b/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs @@ -8,25 +8,21 @@ namespace Exiled.Events.Patches.Events.Player { using System.Collections.Generic; - using System.Linq; using System.Reflection.Emit; - using API.Features; + using Attributes; using Exiled.API.Features.Pools; - using Exiled.Events.Attributes; using Exiled.Events.EventArgs.Player; + using Handlers; using HarmonyLib; - using LabApi.Events.Arguments.PlayerEvents; - using LabApi.Events.Handlers; using static HarmonyLib.AccessTools; - using BaseTeslaGate = TeslaGate; - /// /// Patches . /// Adds the event. /// + [EventPatch(typeof(Player), nameof(Player.TriggeringTesla))] [HarmonyPatch(typeof(TeslaGateController), nameof(TeslaGateController.FixedUpdate))] internal static class TriggeringTesla { @@ -34,97 +30,46 @@ private static IEnumerable Transpiler(IEnumerable newInstructions = ListPool.Pool.Get(instructions); - Label retLabel = generator.DefineLabel(); - - const int offset = 1; + LocalBuilder ev = generator.DeclareLocal(typeof(TriggeringTeslaEventArgs)); - // remove the reference hub Foreach - int index = newInstructions.FindIndex(instruction => instruction.Calls(PropertyGetter(typeof(ReferenceHub), nameof(ReferenceHub.AllHubs)))); + int offset = 2; + int index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(TeslaGate), nameof(TeslaGate.PlayerInRange)))) + offset; - newInstructions.RemoveRange(index, newInstructions.FindIndex(i => i.opcode == OpCodes.Endfinally) + offset - index); - - newInstructions.InsertRange( - index, - new[] - { - // baseTeslaGate - new CodeInstruction(OpCodes.Ldloc_1), + newInstructions.InsertRange(index, new CodeInstruction[] + { + // Player.Get(allHub); + new(OpCodes.Ldloc_S, 7), + new(OpCodes.Call, Method(typeof(Exiled.API.Features.Player), nameof(Exiled.API.Features.Player.Get), new[] { typeof(ReferenceHub) })), - // inIdleRange - new CodeInstruction(OpCodes.Ldloca_S, 2), + // TeslaGate.Get(allGate); + new(OpCodes.Ldloc_1), + new(OpCodes.Call, Method(typeof(Exiled.API.Features.TeslaGate), nameof(Exiled.API.Features.TeslaGate.Get), new[] { typeof(TeslaGate) })), - // isTriggerable - new CodeInstruction(OpCodes.Ldloca_S, 3), + // TriggeringTeslaEventArgs ev = new(Player, TeslaGate); + new(OpCodes.Newobj, GetDeclaredConstructors(typeof(TriggeringTeslaEventArgs))[0]), + new(OpCodes.Dup), + new(OpCodes.Stloc_S, ev.LocalIndex), - // referenceHub - new CodeInstruction(OpCodes.Ldloca_S, 4), + // Handlers.Player.OnTriggeringTesla(ev); + new(OpCodes.Call, Method(typeof(Player), nameof(Player.OnTriggeringTesla))), + }); - // referenceHub2 - new CodeInstruction(OpCodes.Ldloca_S, 5), + int labApiIsAllowedIndex = newInstructions.FindIndex(instruction => instruction.Calls(PropertyGetter( + typeof(LabApi.Events.Arguments.PlayerEvents.PlayerTriggeringTeslaEventArgs), + nameof(LabApi.Events.Arguments.PlayerEvents.PlayerTriggeringTeslaEventArgs.IsAllowed)))) + 1; - // TriggeringTesla.TriggeringTeslaEvent(BaseTeslaGate baseTeslaGate, ref bool inIdleRange, ref bool isTriggerable) - new CodeInstruction(OpCodes.Call, Method(typeof(TriggeringTesla), nameof(TriggeringTeslaEvent), new[] { typeof(BaseTeslaGate), typeof(bool).MakeByRefType(), typeof(bool).MakeByRefType(), typeof(ReferenceHub).MakeByRefType(), typeof(ReferenceHub).MakeByRefType(), })), - }); + newInstructions.InsertRange(labApiIsAllowedIndex, new CodeInstruction[] + { + // if (e2.IsAllowed && ev.IsAllowed) + new(OpCodes.Ldloc_S, ev.LocalIndex), + new(OpCodes.Callvirt, PropertyGetter(typeof(TriggeringTeslaEventArgs), nameof(TriggeringTeslaEventArgs.IsAllowed))), + new CodeInstruction(OpCodes.And), + }); for (int z = 0; z < newInstructions.Count; z++) yield return newInstructions[z]; ListPool.Pool.Return(newInstructions); } - - private static void TriggeringTeslaEvent(BaseTeslaGate baseTeslaGate, ref bool inIdleRange, ref bool isTriggerable, ref ReferenceHub referenceHub, ref ReferenceHub referenceHub2) - { - TeslaGate teslaGate = TeslaGate.Get(baseTeslaGate); - - foreach (Player player in ReferenceHub.AllHubs.Select(Player.Get)) - { - if (player is null || !teslaGate.CanBeIdle(player)) - continue; - - TriggeringTeslaEventArgs ev = new(player, teslaGate); - - Handlers.Player.OnTriggeringTesla(ev); - - if (ev.DisableTesla) - { - isTriggerable = false; - inIdleRange = false; - break; - } - - if (!ev.IsAllowed) - continue; - - if (ev.IsTriggerable && !isTriggerable && !teslaGate.IsShocking) - { - isTriggerable = ev.IsTriggerable; - PlayerTriggeringTeslaEventArgs playerTriggeringTeslaEventArgs = new(player.ReferenceHub, teslaGate.Base); - PlayerEvents.OnTriggeringTesla(playerTriggeringTeslaEventArgs); - if (!playerTriggeringTeslaEventArgs.IsAllowed) - { - isTriggerable = false; - } - else - { - referenceHub2 = player.ReferenceHub; - } - } - - if (ev.IsInIdleRange && !inIdleRange) - { - inIdleRange = ev.IsInIdleRange; - PlayerIdlingTeslaEventArgs playerIdlingTeslaEventArgs = new(player.ReferenceHub, teslaGate.Base); - PlayerEvents.OnIdlingTesla(playerIdlingTeslaEventArgs); - if (!playerIdlingTeslaEventArgs.IsAllowed) - { - inIdleRange = false; - } - else - { - referenceHub = player.ReferenceHub; - } - } - } - } } -} +} \ No newline at end of file From e8cade2c5e3180a4a81c0a8a0c1aceb8cce2afce Mon Sep 17 00:00:00 2001 From: Unbistrackted <112902220+Unbistrackted@users.noreply.github.com> Date: Wed, 1 Apr 2026 00:53:38 -0300 Subject: [PATCH 2/5] fix: TriggeringTesla patch simpler --- .../EventArgs/Player/IdledTeslaEventArgs.cs | 43 ----------- .../EventArgs/Player/IdlingTeslaEventArgs.cs | 48 ------------ .../Player/TriggeredTeslaEventArgs.cs | 43 ----------- .../Player/TriggeringTeslaEventArgs.cs | 16 +++- EXILED/Exiled.Events/Handlers/Player.cs | 32 -------- .../Patches/Events/Player/IdledTesla.cs | 59 --------------- .../Patches/Events/Player/IdlingTesla.cs | 75 ------------------- .../Patches/Events/Player/TriggeredTesla.cs | 59 --------------- .../Patches/Events/Player/TriggeringTesla.cs | 56 ++++++++++---- 9 files changed, 58 insertions(+), 373 deletions(-) delete mode 100644 EXILED/Exiled.Events/EventArgs/Player/IdledTeslaEventArgs.cs delete mode 100644 EXILED/Exiled.Events/EventArgs/Player/IdlingTeslaEventArgs.cs delete mode 100644 EXILED/Exiled.Events/EventArgs/Player/TriggeredTeslaEventArgs.cs delete mode 100644 EXILED/Exiled.Events/Patches/Events/Player/IdledTesla.cs delete mode 100644 EXILED/Exiled.Events/Patches/Events/Player/IdlingTesla.cs delete mode 100644 EXILED/Exiled.Events/Patches/Events/Player/TriggeredTesla.cs diff --git a/EXILED/Exiled.Events/EventArgs/Player/IdledTeslaEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/IdledTeslaEventArgs.cs deleted file mode 100644 index ddb6f4d9af..0000000000 --- a/EXILED/Exiled.Events/EventArgs/Player/IdledTeslaEventArgs.cs +++ /dev/null @@ -1,43 +0,0 @@ -// ----------------------------------------------------------------------- -// -// Copyright (c) ExMod Team. All rights reserved. -// Licensed under the CC BY-SA 3.0 license. -// -// ----------------------------------------------------------------------- - -namespace Exiled.Events.EventArgs.Player -{ - using API.Features; - using Interfaces; - - /// - /// Contains all information after Idling a tesla. - /// - public class IdledTeslaEventArgs : IPlayerEvent, ITeslaEvent - { - /// - /// Initializes a new instance of the class. - /// - /// - /// - /// - /// - /// - /// - public IdledTeslaEventArgs(Player player, TeslaGate teslaGate) - { - Player = player; - Tesla = teslaGate; - } - - /// - /// Gets the player who triggered the tesla. - /// - public Player Player { get; } - - /// - /// Gets the Tesla. - /// - public TeslaGate Tesla { get; } - } -} \ No newline at end of file diff --git a/EXILED/Exiled.Events/EventArgs/Player/IdlingTeslaEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/IdlingTeslaEventArgs.cs deleted file mode 100644 index 8b8864a326..0000000000 --- a/EXILED/Exiled.Events/EventArgs/Player/IdlingTeslaEventArgs.cs +++ /dev/null @@ -1,48 +0,0 @@ -// ----------------------------------------------------------------------- -// -// Copyright (c) ExMod Team. All rights reserved. -// Licensed under the CC BY-SA 3.0 license. -// -// ----------------------------------------------------------------------- - -namespace Exiled.Events.EventArgs.Player -{ - using API.Features; - using Interfaces; - - /// - /// Contains all information before Idling a tesla. - /// - public class IdlingTeslaEventArgs : IPlayerEvent, ITeslaEvent, IDeniableEvent - { - /// - /// Initializes a new instance of the class. - /// - /// - /// - /// - /// - /// - /// - public IdlingTeslaEventArgs(Player player, TeslaGate teslaGate) - { - Player = player; - Tesla = teslaGate; - } - - /// - /// Gets the player who triggered the tesla. - /// - public Player Player { get; } - - /// - /// Gets the Tesla. - /// - public TeslaGate Tesla { get; } - - /// - /// Gets or sets a value indicating whether the player will be detected by the tesla. - /// - public bool IsAllowed { get; set; } = true; - } -} \ No newline at end of file diff --git a/EXILED/Exiled.Events/EventArgs/Player/TriggeredTeslaEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/TriggeredTeslaEventArgs.cs deleted file mode 100644 index 37ce13c5e8..0000000000 --- a/EXILED/Exiled.Events/EventArgs/Player/TriggeredTeslaEventArgs.cs +++ /dev/null @@ -1,43 +0,0 @@ -// ----------------------------------------------------------------------- -// -// Copyright (c) ExMod Team. All rights reserved. -// Licensed under the CC BY-SA 3.0 license. -// -// ----------------------------------------------------------------------- - -namespace Exiled.Events.EventArgs.Player -{ - using API.Features; - using Interfaces; - - /// - /// Contains all information after triggering a tesla. - /// - public class TriggeredTeslaEventArgs : IPlayerEvent, ITeslaEvent - { - /// - /// Initializes a new instance of the class. - /// - /// - /// - /// - /// - /// - /// - public TriggeredTeslaEventArgs(Player player, TeslaGate teslaGate) - { - Player = player; - Tesla = teslaGate; - } - - /// - /// Gets the player who triggered the tesla. - /// - public Player Player { get; } - - /// - /// Gets the Tesla. - /// - public TeslaGate Tesla { get; } - } -} \ No newline at end of file diff --git a/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs index dfb25f9376..a5aab73f57 100644 --- a/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs @@ -8,7 +8,6 @@ namespace Exiled.Events.EventArgs.Player { using API.Features; - using Interfaces; /// @@ -45,5 +44,20 @@ public TriggeringTeslaEventArgs(Player player, TeslaGate teslaGate) /// Gets or sets a value indicating whether the player will be detected by the tesla. /// public bool IsAllowed { get; set; } = true; + + /// + /// Gets or sets a value indicating whether the tesla will be deactivated (Both Idle and Activation). + /// + public bool DisableTesla { get; set; } + + /// + /// Gets or sets a value indicating whether the player will cause the tesla going to be activated. + /// + public bool IsTriggerable { get; set; } = true; + + /// + /// Gets or sets a value indicating whether the tesla can Idle. + /// + public bool CanIdle { get; set; } = true; } } \ No newline at end of file diff --git a/EXILED/Exiled.Events/Handlers/Player.cs b/EXILED/Exiled.Events/Handlers/Player.cs index 7fc3386a7a..f11c6e0936 100644 --- a/EXILED/Exiled.Events/Handlers/Player.cs +++ b/EXILED/Exiled.Events/Handlers/Player.cs @@ -361,21 +361,6 @@ public class Player /// public static Event TriggeringTesla { get; set; } = new(); - /// - /// Invoked after a triggers a tesla gate. - /// - public static Event TriggeredTesla { get; set; } = new(); - - /// - /// Invoked before a idles a tesla gate. - /// - public static Event IdlingTesla { get; set; } = new(); - - /// - /// Invoked before a idles a tesla gate. - /// - public static Event IdledTesla { get; set; } = new(); - /// /// Invoked before a unlocks a generator. /// @@ -1025,12 +1010,6 @@ public static void OnReloadingWeapon(PlayerReloadingWeaponEventArgs ev) /// The instance. public static void OnTriggeringTesla(TriggeringTeslaEventArgs ev) => TriggeringTesla.InvokeSafely(ev); - /// - /// Called before a idles a tesla. - /// - /// The instance. - public static void OnIdlingTesla(IdlingTeslaEventArgs ev) => IdlingTesla.InvokeSafely(ev); - /// /// Called before a receives a status effect. /// @@ -1452,16 +1431,5 @@ public static void OnItemRemoved(ReferenceHub referenceHub, InventorySystem.Item /// The instance. public static void OnScp1576TransmissionEnded(Scp1576TransmissionEndedEventArgs ev) => Scp1576TransmissionEnded.InvokeSafely(ev); - /// - /// Called before a triggers a tesla. - /// - /// The instance. - public static void OnTriggeredTesla(TriggeredTeslaEventArgs ev) => TriggeredTesla.InvokeSafely(ev); - - /// - /// Called after a idles a tesla. - /// - /// The instance. - public static void OnIdledTesla(IdledTeslaEventArgs ev) => IdledTesla.InvokeSafely(ev); } } \ No newline at end of file diff --git a/EXILED/Exiled.Events/Patches/Events/Player/IdledTesla.cs b/EXILED/Exiled.Events/Patches/Events/Player/IdledTesla.cs deleted file mode 100644 index 91e7a294f0..0000000000 --- a/EXILED/Exiled.Events/Patches/Events/Player/IdledTesla.cs +++ /dev/null @@ -1,59 +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 Attributes; - using Exiled.API.Features.Pools; - using Exiled.Events.EventArgs.Player; - using Handlers; - using HarmonyLib; - - using static HarmonyLib.AccessTools; - - /// - /// Patches . - /// Adds the event. - /// - [EventPatch(typeof(Player), nameof(Player.IdledTesla))] - [HarmonyPatch(typeof(TeslaGateController), nameof(TeslaGateController.FixedUpdate))] - public class IdledTesla - { - private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator) - { - List newInstructions = ListPool.Pool.Get(instructions); - - int offset = 1; - int index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(TeslaGate), nameof(TeslaGate.ServerSideIdle)))) + offset; - - newInstructions.InsertRange(index, new CodeInstruction[] - { - // Player.Get(hub); - new(OpCodes.Ldloc_S, 4), - new(OpCodes.Call, Method(typeof(Exiled.API.Features.Player), nameof(Exiled.API.Features.Player.Get), new[] { typeof(ReferenceHub) })), - - // TeslaGate.Get(allGate); - new(OpCodes.Ldloc_1), - new(OpCodes.Call, Method(typeof(Exiled.API.Features.TeslaGate), nameof(Exiled.API.Features.TeslaGate.Get), new[] { typeof(TeslaGate) })), - - // IdledTeslaEventArgs ev = new(Player, TeslaGate); - new(OpCodes.Newobj, GetDeclaredConstructors(typeof(IdledTeslaEventArgs))[0]), - - // Handlers.Player.OnIdledTesla(ev) - new(OpCodes.Call, Method(typeof(Player), nameof(Player.OnIdledTesla))), - }); - - for (int z = 0; z < newInstructions.Count; z++) - yield return newInstructions[z]; - - ListPool.Pool.Return(newInstructions); - } - } -} \ No newline at end of file diff --git a/EXILED/Exiled.Events/Patches/Events/Player/IdlingTesla.cs b/EXILED/Exiled.Events/Patches/Events/Player/IdlingTesla.cs deleted file mode 100644 index 64db589515..0000000000 --- a/EXILED/Exiled.Events/Patches/Events/Player/IdlingTesla.cs +++ /dev/null @@ -1,75 +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 Attributes; - using Exiled.API.Features.Pools; - using Exiled.Events.EventArgs.Player; - using Handlers; - using HarmonyLib; - - using static HarmonyLib.AccessTools; - - /// - /// Patches . - /// Adds the event. - /// - [EventPatch(typeof(Player), nameof(Player.IdlingTesla))] - [HarmonyPatch(typeof(TeslaGateController), nameof(TeslaGateController.FixedUpdate))] - internal static class IdlingTesla - { - private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator) - { - List newInstructions = ListPool.Pool.Get(instructions); - - LocalBuilder ev = generator.DeclareLocal(typeof(IdlingTeslaEventArgs)); - - int offset = 4; - int index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(TeslaGate), nameof(TeslaGate.IsInIdleRange), new[] { typeof(ReferenceHub) }))) + offset; - - newInstructions.InsertRange(index, new CodeInstruction[] - { - // Player.Get(allHub); - new(OpCodes.Ldloc_S, 7), - new(OpCodes.Call, Method(typeof(Exiled.API.Features.Player), nameof(Exiled.API.Features.Player.Get), new[] { typeof(ReferenceHub) })), - - // TeslaGate.Get(allGate); - new(OpCodes.Ldloc_1), - new(OpCodes.Call, Method(typeof(Exiled.API.Features.TeslaGate), nameof(Exiled.API.Features.TeslaGate.Get), new[] { typeof(TeslaGate) })), - - // IdlingTeslaEventArgs ev = new(Player, TeslaGate); - new(OpCodes.Newobj, GetDeclaredConstructors(typeof(IdlingTeslaEventArgs))[0]), - new(OpCodes.Dup), - new(OpCodes.Stloc_S, ev.LocalIndex), - - // Handlers.Player.OnIdlingTeslaTesla(ev); - new(OpCodes.Call, Method(typeof(Player), nameof(Player.OnIdlingTesla))), - }); - - int labApiIsAllowedIndex = newInstructions.FindIndex(instruction => instruction.Calls(PropertyGetter( - typeof(LabApi.Events.Arguments.PlayerEvents.PlayerIdlingTeslaEventArgs), - nameof(LabApi.Events.Arguments.PlayerEvents.PlayerIdlingTeslaEventArgs.IsAllowed)))) + 1; - - newInstructions.InsertRange(labApiIsAllowedIndex, new CodeInstruction[] - { - // if (e.IsAllowed && ev.IsAllowed) - new(OpCodes.Ldloc_S, ev.LocalIndex), - new(OpCodes.Callvirt, PropertyGetter(typeof(IdlingTeslaEventArgs), nameof(IdlingTeslaEventArgs.IsAllowed))), - new(OpCodes.And), - }); - - for (int z = 0; z < newInstructions.Count; z++) - yield return newInstructions[z]; - - ListPool.Pool.Return(newInstructions); - } - } -} \ No newline at end of file diff --git a/EXILED/Exiled.Events/Patches/Events/Player/TriggeredTesla.cs b/EXILED/Exiled.Events/Patches/Events/Player/TriggeredTesla.cs deleted file mode 100644 index fd1c518296..0000000000 --- a/EXILED/Exiled.Events/Patches/Events/Player/TriggeredTesla.cs +++ /dev/null @@ -1,59 +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 Attributes; - using Exiled.API.Features.Pools; - using Exiled.Events.EventArgs.Player; - using Handlers; - using HarmonyLib; - - using static HarmonyLib.AccessTools; - - /// - /// Patches . - /// Adds the event. - /// - [EventPatch(typeof(Player), nameof(Player.TriggeredTesla))] - [HarmonyPatch(typeof(TeslaGateController), nameof(TeslaGateController.FixedUpdate))] - internal static class TriggeredTesla - { - private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator) - { - List newInstructions = ListPool.Pool.Get(instructions); - - int offset = 1; - int index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(TeslaGate), nameof(TeslaGate.ServerSideCode)))) + offset; - - newInstructions.InsertRange(index, new CodeInstruction[] - { - // Player.Get(hub2); - new(OpCodes.Ldloc_S, 5), - new(OpCodes.Call, Method(typeof(Exiled.API.Features.Player), nameof(Exiled.API.Features.Player.Get), new[] { typeof(ReferenceHub) })), - - // TeslaGate.Get(allGate); - new(OpCodes.Ldloc_1), - new(OpCodes.Call, Method(typeof(Exiled.API.Features.TeslaGate), nameof(Exiled.API.Features.TeslaGate.Get), new[] { typeof(TeslaGate) })), - - // TriggeredTeslaEventArgs ev = new(Player, TeslaGate); - new(OpCodes.Newobj, GetDeclaredConstructors(typeof(TriggeredTeslaEventArgs))[0]), - - // Handlers.Player.OnTriggeredTesla(ev) - new(OpCodes.Call, Method(typeof(Player), nameof(Player.OnTriggeredTesla))), - }); - - for (int z = 0; z < newInstructions.Count; z++) - yield return newInstructions[z]; - - ListPool.Pool.Return(newInstructions); - } - } -} \ No newline at end of file diff --git a/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs b/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs index ab8c81f70f..282bc2c49b 100644 --- a/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs +++ b/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs @@ -15,6 +15,8 @@ namespace Exiled.Events.Patches.Events.Player using Exiled.Events.EventArgs.Player; using Handlers; using HarmonyLib; + using LabApi.Events.Arguments.PlayerEvents; + using LabApi.Events.Handlers; using static HarmonyLib.AccessTools; @@ -32,18 +34,18 @@ private static IEnumerable Transpiler(IEnumerable instruction.Calls(Method(typeof(TeslaGate), nameof(TeslaGate.PlayerInRange)))) + offset; + int offset = 1; + int index = newInstructions.FindIndex(instruction => instruction.Calls(Method(typeof(PlayerEvents), nameof(PlayerEvents.OnIdlingTesla)))) + offset; newInstructions.InsertRange(index, new CodeInstruction[] { - // Player.Get(allHub); - new(OpCodes.Ldloc_S, 7), - new(OpCodes.Call, Method(typeof(Exiled.API.Features.Player), nameof(Exiled.API.Features.Player.Get), new[] { typeof(ReferenceHub) })), - // TeslaGate.Get(allGate); new(OpCodes.Ldloc_1), - new(OpCodes.Call, Method(typeof(Exiled.API.Features.TeslaGate), nameof(Exiled.API.Features.TeslaGate.Get), new[] { typeof(TeslaGate) })), + new(OpCodes.Call, Method(typeof(API.Features.TeslaGate), nameof(API.Features.TeslaGate.Get), new[] { typeof(TeslaGate) })), + + // Player.Get(allHub); + new(OpCodes.Ldloc_S, 7), + new(OpCodes.Call, Method(typeof(API.Features.Player), nameof(API.Features.Player.Get), new[] { typeof(ReferenceHub) })), // TriggeringTeslaEventArgs ev = new(Player, TeslaGate); new(OpCodes.Newobj, GetDeclaredConstructors(typeof(TriggeringTeslaEventArgs))[0]), @@ -54,16 +56,44 @@ private static IEnumerable Transpiler(IEnumerable instruction.Calls(PropertyGetter( - typeof(LabApi.Events.Arguments.PlayerEvents.PlayerTriggeringTeslaEventArgs), - nameof(LabApi.Events.Arguments.PlayerEvents.PlayerTriggeringTeslaEventArgs.IsAllowed)))) + 1; + int index1 = newInstructions.FindIndex(instruction => instruction.Calls(PropertyGetter(typeof(PlayerIdlingTeslaEventArgs), nameof(PlayerIdlingTeslaEventArgs.IsAllowed)))) + offset; + + newInstructions.InsertRange(index1, new CodeInstruction[] + { + new(OpCodes.Ldloc_S, ev.LocalIndex), + new(OpCodes.Callvirt, PropertyGetter(typeof(TriggeringTeslaEventArgs), nameof(TriggeringTeslaEventArgs.IsAllowed))), + new(OpCodes.And), + + new(OpCodes.Ldloc_S, ev.LocalIndex), + new(OpCodes.Callvirt, PropertyGetter(typeof(TriggeringTeslaEventArgs), nameof(TriggeringTeslaEventArgs.CanIdle))), + new(OpCodes.And), + + new(OpCodes.Ldloc_S, ev.LocalIndex), + new(OpCodes.Callvirt, PropertyGetter(typeof(TriggeringTeslaEventArgs), nameof(TriggeringTeslaEventArgs.DisableTesla))), + new(OpCodes.Not), + + // if (e.IsAllowed && ev.IsAllowed && ev.CanIdle && !ev.DisableTesla) + new(OpCodes.And), + }); + + int index2 = newInstructions.FindIndex(instruction => instruction.Calls(PropertyGetter(typeof(PlayerTriggeringTeslaEventArgs), nameof(PlayerTriggeringTeslaEventArgs.IsAllowed)))) + offset; - newInstructions.InsertRange(labApiIsAllowedIndex, new CodeInstruction[] + newInstructions.InsertRange(index2, new CodeInstruction[] { - // if (e2.IsAllowed && ev.IsAllowed) new(OpCodes.Ldloc_S, ev.LocalIndex), new(OpCodes.Callvirt, PropertyGetter(typeof(TriggeringTeslaEventArgs), nameof(TriggeringTeslaEventArgs.IsAllowed))), - new CodeInstruction(OpCodes.And), + new(OpCodes.And), + + new(OpCodes.Ldloc_S, ev.LocalIndex), + new(OpCodes.Callvirt, PropertyGetter(typeof(TriggeringTeslaEventArgs), nameof(TriggeringTeslaEventArgs.IsTriggerable))), + new(OpCodes.And), + + new(OpCodes.Ldloc_S, ev.LocalIndex), + new(OpCodes.Callvirt, PropertyGetter(typeof(TriggeringTeslaEventArgs), nameof(TriggeringTeslaEventArgs.DisableTesla))), + new(OpCodes.Not), + + // if (e2.IsAllowed && ev.IsAllowed && ev.IsTriggerable && !ev.DisableTesla) + new(OpCodes.And), }); for (int z = 0; z < newInstructions.Count; z++) From 98757aa1182e4d9fd7a2a24a3f95e4ade746859f Mon Sep 17 00:00:00 2001 From: Unbistrackted <112902220+Unbistrackted@users.noreply.github.com> Date: Wed, 1 Apr 2026 00:57:40 -0300 Subject: [PATCH 3/5] fix: remove blank line --- EXILED/Exiled.Events/Handlers/Player.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/EXILED/Exiled.Events/Handlers/Player.cs b/EXILED/Exiled.Events/Handlers/Player.cs index f11c6e0936..10cd09c601 100644 --- a/EXILED/Exiled.Events/Handlers/Player.cs +++ b/EXILED/Exiled.Events/Handlers/Player.cs @@ -1430,6 +1430,5 @@ public static void OnItemRemoved(ReferenceHub referenceHub, InventorySystem.Item /// /// The instance. public static void OnScp1576TransmissionEnded(Scp1576TransmissionEndedEventArgs ev) => Scp1576TransmissionEnded.InvokeSafely(ev); - } } \ No newline at end of file From 6742a4a1fd573143c699de26d28a912127fb6ac7 Mon Sep 17 00:00:00 2001 From: Unbistrackted <112902220+Unbistrackted@users.noreply.github.com> Date: Wed, 1 Apr 2026 10:23:00 -0300 Subject: [PATCH 4/5] fix: revert name changes --- .../EventArgs/Player/TriggeringTeslaEventArgs.cs | 9 +++++++-- .../Patches/Events/Player/TriggeringTesla.cs | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs index a5aab73f57..16c651e75a 100644 --- a/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs @@ -56,8 +56,13 @@ public TriggeringTeslaEventArgs(Player player, TeslaGate teslaGate) public bool IsTriggerable { get; set; } = true; /// - /// Gets or sets a value indicating whether the tesla can Idle. + /// Gets or sets a value indicating whether the player will cause the tesla going to be idle. + /// IO + public bool IsInIdleRange { get; set; } = true; + + /// + /// Gets a value indicating whether the player is in hurting range. /// - public bool CanIdle { get; set; } = true; + public bool IsInHurtingRange => Tesla.IsPlayerInHurtRange(Player); } } \ No newline at end of file diff --git a/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs b/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs index 282bc2c49b..0c2c8ed002 100644 --- a/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs +++ b/EXILED/Exiled.Events/Patches/Events/Player/TriggeringTesla.cs @@ -65,7 +65,7 @@ private static IEnumerable Transpiler(IEnumerable Date: Wed, 1 Apr 2026 10:36:56 -0300 Subject: [PATCH 5/5] revert: ``IsInHurtingRange`` back to the original way --- .../Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs b/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs index 16c651e75a..51755546cb 100644 --- a/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs +++ b/EXILED/Exiled.Events/EventArgs/Player/TriggeringTeslaEventArgs.cs @@ -28,6 +28,7 @@ public TriggeringTeslaEventArgs(Player player, TeslaGate teslaGate) { Player = player; Tesla = teslaGate; + IsInHurtingRange = Tesla.IsPlayerInHurtRange(player); } /// @@ -63,6 +64,6 @@ public TriggeringTeslaEventArgs(Player player, TeslaGate teslaGate) /// /// Gets a value indicating whether the player is in hurting range. /// - public bool IsInHurtingRange => Tesla.IsPlayerInHurtRange(Player); + public bool IsInHurtingRange { get; } } } \ No newline at end of file