From 107017d27d5a7f8f9eb71004b01bc9630ce2f7b0 Mon Sep 17 00:00:00 2001 From: Mikhail Reznichenko Date: Sat, 27 Jul 2024 14:59:53 +0300 Subject: [PATCH] final enhancements --- Commands/ChaosMode.cs | 80 +++++++++++++++++++++++++++++++++++++++---- VeryUsualDay.cs | 2 +- 2 files changed, 75 insertions(+), 7 deletions(-) diff --git a/Commands/ChaosMode.cs b/Commands/ChaosMode.cs index 8e50010..057e58e 100644 --- a/Commands/ChaosMode.cs +++ b/Commands/ChaosMode.cs @@ -14,6 +14,7 @@ public class ChaosMode : ICommand public string[] Aliases => new string[] { }; public string Description => "Для FX. Включает режим хаоса для конкретной комнаты / для всего комплекса."; public bool SanitizeResponse => false; + public string[] Zones => new[] { "LCZ", "HCZ", "EZ", "SFC" }; public bool Execute(ArraySegment arguments, ICommandSender sender, out string response) { @@ -24,7 +25,7 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s } if (arguments.Count < 1) { - response = "Использование: chaosmode [комнаты через пробел / all]"; + response = "Использование: chaosmode [комнаты через пробел / all / LCZ/HCZ/EZ/SFC]"; return false; } var args = arguments.ToArray(); @@ -45,7 +46,7 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s { if (arguments.Count < 2) { - response = "Использование: chaosmode set <комнаты через пробел / all>"; + response = "Использование: chaosmode set <комнаты через пробел / all / LCZ/HCZ/EZ/SFC>"; return false; } @@ -62,12 +63,47 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s } } } + else if (roomName.In(Zones) && arguments.Count == 2) + { + ZoneType zone; + switch (roomName) + { + case "HCZ": + { + zone = ZoneType.HeavyContainment; + break; + } + case "LCZ": + { + zone = ZoneType.LightContainment; + break; + } + case "EZ": + { + zone = ZoneType.Entrance; + break; + } + default: + { + zone = ZoneType.Surface; + break; + } + } + foreach (var room in Room.List.Where(p => p.Zone == zone)) + { + room.Color = Color.red; + if (!room.Type.In(VeryUsualDay.Instance.ChaosRooms.ToArray())) + { + VeryUsualDay.Instance.ChaosRooms.Add(room.Type); + } + } + } else { var rooms = Room.Get(p => p.Type.ToString() == roomName).ToArray(); if (!rooms.Any()) { - response = "Использование: chaosmode set <комнаты через пробел / all>. Список комнат - chaosmode list."; + response = "Использование: chaosmode set <комнаты через пробел / all / LCZ/HCZ/EZ/SFC>. Список комнат - chaosmode list."; return false; } rooms[0].Color = Color.red; @@ -86,7 +122,7 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s { if (arguments.Count < 2) { - response = "Использование: chaosmode unset <комнаты через пробел / all>"; + response = "Использование: chaosmode unset <комнаты через пробел / all / LCZ/HCZ/EZ/SFC>"; return false; } @@ -100,12 +136,44 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s VeryUsualDay.Instance.ChaosRooms.Clear(); } } + else if (roomName.In(Zones) && arguments.Count == 2) + { + ZoneType zone; + switch (roomName) + { + case "HCZ": + { + zone = ZoneType.HeavyContainment; + break; + } + case "LCZ": + { + zone = ZoneType.LightContainment; + break; + } + case "EZ": + { + zone = ZoneType.Entrance; + break; + } + default: + { + zone = ZoneType.Surface; + break; + } + } + foreach (var room in Room.List.Where(p => p.Zone == zone)) + { + room.ResetColor(); + VeryUsualDay.Instance.ChaosRooms.Remove(room.Type); + } + } else { var rooms = Room.Get(p => p.Name == roomName).ToArray(); if (!rooms.Any()) { - response = "Использование: chaosmode unset <комнаты через пробел / all>. Список комнат - chaosmode list."; + response = "Использование: chaosmode unset <комнаты через пробел / all / LCZ/HCZ/EZ/SFC>. Список комнат - chaosmode list."; return false; } rooms[0].ResetColor(); @@ -117,7 +185,7 @@ public bool Execute(ArraySegment arguments, ICommandSender sender, out s return true; } - response = "Использование: chaosmode [комнаты через пробел / all]"; + response = "Использование: chaosmode [комнаты через пробел / all / LCZ/HCZ/EZ/SFC]"; return false; } } diff --git a/VeryUsualDay.cs b/VeryUsualDay.cs index 3ea064f..0586494 100644 --- a/VeryUsualDay.cs +++ b/VeryUsualDay.cs @@ -212,7 +212,7 @@ public IEnumerator _chaos() foreach (var roomType in ChaosRooms) { var room = Room.Get(roomType); - foreach (var door in room.Doors.Where(p => !p.IsElevator && !p.IsGate && !p.IsKeycardDoor).Shuffle()) + foreach (var door in room.Doors.Where(p => !p.IsElevator && !p.IsGate && !p.IsKeycardDoor && !p.IsLocked).Shuffle()) { Timing.CallDelayed(Random.Range(0f, 1.5f), () => {