diff --git a/Content.Server/Andromeda/GameTicker/GameTicker.SetGamePresetUTC.cs b/Content.Server/Andromeda/GameTicker/GameTicker.SetGamePresetUTC.cs new file mode 100644 index 00000000000..285092f1307 --- /dev/null +++ b/Content.Server/Andromeda/GameTicker/GameTicker.SetGamePresetUTC.cs @@ -0,0 +1,39 @@ +using System; +using Robust.Shared.Timing; + +namespace Content.Server.GameTicking +{ + public sealed partial class GameTicker + { + [Dependency] private readonly IGameTiming _timing = default!; + private TimeSpan _checkInterval = TimeSpan.FromMinutes(1); + private TimeSpan _moscowTimeThreshold = new TimeSpan(10, 0, 0); // 10:00 МСК + private int _playerThreshold = 25; + private string _secretPresetId = "secret"; + + private void CheckAndChangeGamePreset() + { + var utcNow = DateTime.UtcNow; + TimeZoneInfo moscowTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"); + DateTime moscowDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcNow, moscowTimeZone); + + if (_playerManager.PlayerCount >= _playerThreshold || moscowDateTime.TimeOfDay >= _moscowTimeThreshold) + { + Log.Info($"В данный момент количетсво игроков больше или ровно 25, либо время больше 10:00 МСК"); + if (TryFindGamePreset(_secretPresetId, out var preset)) + { + Log.Info($"Выставляем {preset} в связи с тем что в данный момент количетсво игроков больше или ровно 25, либо время больше 10:00 МСК"); + SetGamePreset(preset); + } + else + { + Log.Error($"Почему то небыл найден режим {_secretPresetId}, невозможно выставить режим в связи с тем что в данный момент количетсво игроков больше или ровно 25, либо время больше 10:00 МСК"); + } + } + else + { + Log.Warning($"В данный момент количетсво игроков меньше 25, либо время меньше 10:00 МСК"); + } + } + } +} \ No newline at end of file diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index fcef3566368..0826595b9f1 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -309,6 +309,7 @@ public void EndRound(string text = "") RunLevel = GameRunLevel.PostRound; ShowRoundEndScoreboard(text); + CheckAndChangeGamePreset(); //A-13 GameTicker.SetGamePresetUTC } public void ShowRoundEndScoreboard(string text = "")