From 0a7adf623cbb37782ce10fae83240de294a95d57 Mon Sep 17 00:00:00 2001 From: Rooster <48025699+ManRooster@users.noreply.github.com> Date: Sat, 28 Jun 2025 22:10:40 +0300 Subject: [PATCH] WaitSystem --- .../Internal/ActionOnEventHandlers.cs | 105 +++++++++++------- 1 file changed, 63 insertions(+), 42 deletions(-) diff --git a/Events/Handlers/Internal/ActionOnEventHandlers.cs b/Events/Handlers/Internal/ActionOnEventHandlers.cs index 21456c6..2b86bf9 100644 --- a/Events/Handlers/Internal/ActionOnEventHandlers.cs +++ b/Events/Handlers/Internal/ActionOnEventHandlers.cs @@ -13,53 +13,74 @@ public class ActionOnEventHandlers : CustomEventsHandler { private static Config Config => ProjectMER.Singleton.Config!; - public override void OnServerWaitingForPlayers() => Timing.CallDelayed(0.1f, () => HandleActionList(Config.OnWaitingForPlayers)); - public override void OnServerRoundStarted() => HandleActionList(Config.OnRoundStarted); - public override void OnServerLczDecontaminationStarted() => HandleActionList(Config.OnLczDecontaminationStarted); - public override void OnWarheadStarted(WarheadStartedEventArgs ev) => HandleActionList(Config.OnWarheadStarted); - public override void OnWarheadStopped(WarheadStoppedEventArgs ev) => HandleActionList(Config.OnWarheadStopped); - public override void OnWarheadDetonated(WarheadDetonatedEventArgs ev) => HandleActionList(Config.OnWarheadDetonated); - - private void HandleActionList(List list) + public override void OnServerWaitingForPlayers() => Timing.RunCoroutine(HandleActionList(Config.OnWaitingForPlayers)); + public override void OnServerRoundStarted() => Timing.RunCoroutine(HandleActionList(Config.OnRoundStarted)); + public override void OnServerLczDecontaminationStarted() => Timing.RunCoroutine(HandleActionList(Config.OnLczDecontaminationStarted)); + public override void OnWarheadStarted(WarheadStartedEventArgs ev) => Timing.RunCoroutine(HandleActionList(Config.OnWarheadStarted)); + public override void OnWarheadStopped(WarheadStoppedEventArgs ev) => Timing.RunCoroutine(HandleActionList(Config.OnWarheadStopped)); + public override void OnWarheadDetonated(WarheadDetonatedEventArgs ev) => Timing.RunCoroutine(HandleActionList(Config.OnWarheadDetonated)); + + private IEnumerator HandleActionList(List list) { foreach (string element in list) { - string[] actionSplit = element.Split(':'); - string action = actionSplit[0]; - string argument = actionSplit[1]; + string[] segments = element.Split(','); - switch (action.ToLowerInvariant()) + foreach (string segment in segments) { - case "load": - case "l": - { - List allMaps = ListPool.Shared.Rent(Directory.GetFiles(ProjectMER.MapsDir).Select(Path.GetFileNameWithoutExtension)); - HandleMapLoading(argument, allMaps); - ListPool.Shared.Return(allMaps); - continue; - } - - case "unload": - case "unl": - { - List allMaps = ListPool.Shared.Rent(MapUtils.LoadedMaps.Keys); - HandleMapUnloading(argument, allMaps); - ListPool.Shared.Return(allMaps); - continue; - } - - case "console": - case "cs": - { - Server.RunCommand(argument); - continue; - } - - default: - { - Logger.Error($"Unknown action: {action}"); - continue; - } + string[] actionSplit = segment.Split(':'); + if (actionSplit.Length < 2) + { + Logger.Error($"Invalid action segment: {segment}"); + continue; + } + + string action = actionSplit[0].Trim().ToLowerInvariant(); + string argument = actionSplit[1].Trim(); + + switch (action) + { + case "load": + case "l": + { + List allMaps = ListPool.Shared.Rent(Directory.GetFiles(ProjectMER.MapsDir).Select(Path.GetFileNameWithoutExtension)); + HandleMapLoading(argument, allMaps); + ListPool.Shared.Return(allMaps); + break; + } + + case "unload": + case "unl": + { + List allMaps = ListPool.Shared.Rent(MapUtils.LoadedMaps.Keys); + HandleMapUnloading(argument, allMaps); + ListPool.Shared.Return(allMaps); + break; + } + + case "wait": + case "w": + { + if (int.TryParse(argument, out int ms)) + yield return Timing.WaitForSeconds(ms / 1000f); + else + Logger.Error($"Invalid wait duration: {argument}"); + break; + } + + case "console": + case "cs": + { + Server.RunCommand(argument); + break; + } + + default: + { + Logger.Error($"Unknown action: {action}"); + break; + } + } } } }