diff --git a/EXILED/Exiled.Events/Patches/Events/Server/RestartingRound.cs b/EXILED/Exiled.Events/Patches/Events/Server/RestartingRound.cs index 39dc587c1..ab4ef8b26 100644 --- a/EXILED/Exiled.Events/Patches/Events/Server/RestartingRound.cs +++ b/EXILED/Exiled.Events/Patches/Events/Server/RestartingRound.cs @@ -12,7 +12,10 @@ namespace Exiled.Events.Patches.Events.Server using System.Reflection.Emit; using API.Features.Pools; + using CustomPlayerEffects.Danger; + using Exiled.API.Enums; using Exiled.Events.Attributes; + using Exiled.Events.EventArgs.Player; using GameCore; using HarmonyLib; @@ -20,70 +23,23 @@ namespace Exiled.Events.Patches.Events.Server using RoundRestarting; using static HarmonyLib.AccessTools; + using static PlayerList; /// /// Patches . /// Adds the event. /// [EventPatch(typeof(Handlers.Server), nameof(Handlers.Server.RestartingRound))] - [HarmonyPatch(typeof(RoundRestart), nameof(RoundRestart.InitiateRoundRestart))] + [HarmonyPatch(typeof(RoundRestart), nameof(RoundRestart.IsRoundRestarting), MethodType.Setter)] internal static class RestartingRound { - private static IEnumerable Transpiler(IEnumerable instructions, ILGenerator generator) + // TODO: Convert to transpiler and bring back old features + private static void Prefix(bool value) { - List newInstructions = ListPool.Pool.Get(instructions); + if (!value || value == RoundRestart.IsRoundRestarting) + return; - newInstructions.InsertRange( - 0, - new CodeInstruction[] - { - // Handlers.Server.OnRestartingRound() - new(OpCodes.Call, Method(typeof(Handlers.Server), nameof(Handlers.Server.OnRestartingRound))), - - // API.Features.Log.Debug("Round restarting", Loader.ShouldDebugBeShown) - new(OpCodes.Ldstr, "Round restarting"), - new(OpCodes.Call, Method(typeof(API.Features.Log), nameof(API.Features.Log.Debug), new[] { typeof(string) })), - }); - - const int offset = 1; - int index = newInstructions.FindIndex(instruction => instruction.opcode == OpCodes.Brfalse); - - newInstructions.InsertRange( - index + offset, - new CodeInstruction[] - { - // if (ServerStatic.StopNextRound == ServerStatic.NextRoundAction.Restart) -> goto normal round restart - new(OpCodes.Call, PropertyGetter(typeof(ServerStatic), nameof(ServerStatic.StopNextRound))), - new(OpCodes.Ldc_I4_1), - new(OpCodes.Beq_S, newInstructions[index].operand), - - // if (ShouldServerRestart()) -> goto normal round restart - new(OpCodes.Call, Method(typeof(RestartingRound), nameof(ShouldServerRestart))), - new(OpCodes.Brtrue, newInstructions[index].operand), - }); - - for (int z = 0; z < newInstructions.Count; z++) - yield return newInstructions[z]; - - ListPool.Pool.Return(newInstructions); - } - - private static bool ShouldServerRestart() - { - bool flag = false; - - try - { - int num = ConfigFile.ServerConfig.GetInt("restart_after_rounds"); - - flag = num > 0 && RoundRestart.UptimeRounds >= num; - } - catch (Exception ex) - { - ServerConsole.AddLog("Failed to check the restart_after_rounds config value: " + ex.Message, ConsoleColor.Red); - } - - return flag; + Handlers.Server.OnRestartingRound(); } } -} \ No newline at end of file +}