diff --git a/Content.Server/GameTicking/Commands/DelayStartCommand.cs b/Content.Server/GameTicking/Commands/DelayStartCommand.cs index 6e101d93a3..7c7eb9c7f1 100644 --- a/Content.Server/GameTicking/Commands/DelayStartCommand.cs +++ b/Content.Server/GameTicking/Commands/DelayStartCommand.cs @@ -2,50 +2,44 @@ using Content.Shared.Administration; using Robust.Shared.Console; -namespace Content.Server.GameTicking.Commands +namespace Content.Server.GameTicking.Commands; + +[AdminCommand(AdminFlags.Round)] +public sealed class DelayStartCommand : LocalizedEntityCommands { - [AdminCommand(AdminFlags.Round)] - sealed class DelayStartCommand : IConsoleCommand + [Dependency] private readonly GameTicker _gameTicker = default!; + + public override string Command => "delaystart"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - [Dependency] private readonly IEntityManager _e = default!; - - public string Command => "delaystart"; - public string Description => "Delays the round start."; - public string Help => $"Usage: {Command} \nPauses/Resumes the countdown if no argument is provided."; - - public void Execute(IConsoleShell shell, string argStr, string[] args) + if (_gameTicker.RunLevel != GameRunLevel.PreRoundLobby) { - var ticker = _e.System(); - if (ticker.RunLevel != GameRunLevel.PreRoundLobby) - { - shell.WriteLine("This can only be executed while the game is in the pre-round lobby."); - return; - } - - if (args.Length == 0) - { - var paused = ticker.TogglePause(); - shell.WriteLine(paused ? "Paused the countdown." : "Resumed the countdown."); - return; - } - - if (args.Length != 1) - { - shell.WriteLine("Need zero or one arguments."); - return; - } - - if (!uint.TryParse(args[0], out var seconds) || seconds == 0) - { - shell.WriteLine($"{args[0]} isn't a valid amount of seconds."); - return; - } - - var time = TimeSpan.FromSeconds(seconds); - if (!ticker.DelayStart(time)) - { - shell.WriteLine("An unknown error has occurred."); - } + shell.WriteLine(Loc.GetString("shell-can-only-run-from-pre-round-lobby")); + return; } + + switch (args.Length) + { + case 0: + var paused = _gameTicker.TogglePause(); + shell.WriteLine(Loc.GetString(paused ? "cmd-delaystart-paused" : "cmd-delaystart-unpaused")); + return; + case 1: + break; + default: + shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); + return; + } + + if (!uint.TryParse(args[0], out var seconds) || seconds == 0) + { + shell.WriteLine(Loc.GetString("cmd-delaystart-invalid-seconds", ("value", args[0]))); + return; + } + + var time = TimeSpan.FromSeconds(seconds); + if (!_gameTicker.DelayStart(time)) + shell.WriteLine(Loc.GetString("cmd-delaystart-too-late")); } } diff --git a/Content.Server/GameTicking/Commands/EndRoundCommand.cs b/Content.Server/GameTicking/Commands/EndRoundCommand.cs index c6a8ddbf53..2f8ca54144 100644 --- a/Content.Server/GameTicking/Commands/EndRoundCommand.cs +++ b/Content.Server/GameTicking/Commands/EndRoundCommand.cs @@ -2,28 +2,23 @@ using Content.Shared.Administration; using Robust.Shared.Console; -namespace Content.Server.GameTicking.Commands +namespace Content.Server.GameTicking.Commands; + +[AdminCommand(AdminFlags.Round)] +public sealed class EndRoundCommand : LocalizedEntityCommands { - [AdminCommand(AdminFlags.Round)] - sealed class EndRoundCommand : IConsoleCommand + [Dependency] private readonly GameTicker _gameTicker = default!; + + public override string Command => "endround"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - [Dependency] private readonly IEntityManager _e = default!; - - public string Command => "endround"; - public string Description => "Ends the round and moves the server to PostRound."; - public string Help => String.Empty; - - public void Execute(IConsoleShell shell, string argStr, string[] args) + if (_gameTicker.RunLevel != GameRunLevel.InRound) { - var ticker = _e.System(); - - if (ticker.RunLevel != GameRunLevel.InRound) - { - shell.WriteLine("This can only be executed while the game is in a round."); - return; - } - - ticker.EndRound(); + shell.WriteLine(Loc.GetString("shell-can-only-run-while-round-is-active")); + return; } + + _gameTicker.EndRound(); } } diff --git a/Content.Server/GameTicking/Commands/RestartRoundCommand.cs b/Content.Server/GameTicking/Commands/RestartRoundCommand.cs index e4ea3fa53c..6811df4e2e 100644 --- a/Content.Server/GameTicking/Commands/RestartRoundCommand.cs +++ b/Content.Server/GameTicking/Commands/RestartRoundCommand.cs @@ -3,43 +3,37 @@ using Content.Server.RoundEnd; using Content.Shared.Administration; using Robust.Shared.Console; -namespace Content.Server.GameTicking.Commands +namespace Content.Server.GameTicking.Commands; + +[AdminCommand(AdminFlags.Round)] +public sealed class RestartRoundCommand : LocalizedEntityCommands { - [AdminCommand(AdminFlags.Round)] - public sealed class RestartRoundCommand : IConsoleCommand + [Dependency] private readonly GameTicker _gameTicker = default!; + [Dependency] private readonly RoundEndSystem _roundEndSystem = default!; + + public override string Command => "restartround"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - [Dependency] private readonly IEntityManager _e = default!; - - public string Command => "restartround"; - public string Description => "Ends the current round and starts the countdown for the next lobby."; - public string Help => string.Empty; - - public void Execute(IConsoleShell shell, string argStr, string[] args) + if (_gameTicker.RunLevel != GameRunLevel.InRound) { - var ticker = _e.System(); - - if (ticker.RunLevel != GameRunLevel.InRound) - { - shell.WriteLine("This can only be executed while the game is in a round - try restartroundnow"); - return; - } - - _e.System().EndRound(); + shell.WriteLine(Loc.GetString("shell-can-only-run-while-round-is-active")); + return; } - } - [AdminCommand(AdminFlags.Round)] - public sealed class RestartRoundNowCommand : IConsoleCommand - { - [Dependency] private readonly IEntityManager _e = default!; - - public string Command => "restartroundnow"; - public string Description => "Moves the server from PostRound to a new PreRoundLobby."; - public string Help => String.Empty; - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - _e.System().RestartRound(); - } + _roundEndSystem.EndRound(); + } +} + +[AdminCommand(AdminFlags.Round)] +public sealed class RestartRoundNowCommand : LocalizedEntityCommands +{ + [Dependency] private readonly GameTicker _gameTicker = default!; + + public override string Command => "restartroundnow"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) + { + _gameTicker.RestartRound(); } } diff --git a/Content.Server/GameTicking/Commands/StartRoundCommand.cs b/Content.Server/GameTicking/Commands/StartRoundCommand.cs index 432cdd23e3..6579800ca3 100644 --- a/Content.Server/GameTicking/Commands/StartRoundCommand.cs +++ b/Content.Server/GameTicking/Commands/StartRoundCommand.cs @@ -2,28 +2,23 @@ using Content.Shared.Administration; using Robust.Shared.Console; -namespace Content.Server.GameTicking.Commands +namespace Content.Server.GameTicking.Commands; + +[AdminCommand(AdminFlags.Round)] +public sealed class StartRoundCommand : LocalizedEntityCommands { - [AdminCommand(AdminFlags.Round)] - sealed class StartRoundCommand : IConsoleCommand + [Dependency] private readonly GameTicker _gameTicker = default!; + + public override string Command => "startround"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - [Dependency] private readonly IEntityManager _e = default!; - - public string Command => "startround"; - public string Description => "Ends PreRoundLobby state and starts the round."; - public string Help => String.Empty; - - public void Execute(IConsoleShell shell, string argStr, string[] args) + if (_gameTicker.RunLevel != GameRunLevel.PreRoundLobby) { - var ticker = _e.System(); - - if (ticker.RunLevel != GameRunLevel.PreRoundLobby) - { - shell.WriteLine("This can only be executed while the game is in the pre-round lobby."); - return; - } - - ticker.StartRound(); + shell.WriteLine(Loc.GetString("shell-can-only-run-from-pre-round-lobby")); + return; } + + _gameTicker.StartRound(); } } diff --git a/Resources/Locale/en-US/commands/delaystart-command.ftl b/Resources/Locale/en-US/commands/delaystart-command.ftl new file mode 100644 index 0000000000..e5189a7822 --- /dev/null +++ b/Resources/Locale/en-US/commands/delaystart-command.ftl @@ -0,0 +1,7 @@ +cmd-delaystart-desc = Delays the round start. +cmd-delaystart-help = Usage: delaystart [seconds] + If no arguments are passed, the round will be paused or resumed accordingly. +cmd-delaystart-invalid-seconds = {$value} isn't a valid amount of seconds. +cmd-delaystart-paused = Paused the countdown. +cmd-delaystart-unpaused = Resumed the countdown. +cmd-delaystart-too-late = Round start could not be delayed in time! diff --git a/Resources/Locale/en-US/commands/endround-command.ftl b/Resources/Locale/en-US/commands/endround-command.ftl new file mode 100644 index 0000000000..3b322b59df --- /dev/null +++ b/Resources/Locale/en-US/commands/endround-command.ftl @@ -0,0 +1,2 @@ +cmd-endround-desc = Ends the round and moves the server to PostRound. +cmd-endround-help = Usage: endround diff --git a/Resources/Locale/en-US/commands/restartround-command.ftl b/Resources/Locale/en-US/commands/restartround-command.ftl new file mode 100644 index 0000000000..22bf074452 --- /dev/null +++ b/Resources/Locale/en-US/commands/restartround-command.ftl @@ -0,0 +1,5 @@ +cmd-restartround-desc = Ends the current round and starts the countdown for the next lobby. +cmd-restartround-help = Usage: restartround + +cmd-restartroundnow-desc = Moves the server from PostRound to a new PreRoundLobby. +cmd-restartroundnow-help = Usage: restartroundnow diff --git a/Resources/Locale/en-US/commands/startround-command.ftl b/Resources/Locale/en-US/commands/startround-command.ftl new file mode 100644 index 0000000000..51e85e81b7 --- /dev/null +++ b/Resources/Locale/en-US/commands/startround-command.ftl @@ -0,0 +1,2 @@ +cmd-startround-desc = Ends PreRoundLobby state and starts the round. +cmd-startround-help = Usage: startround diff --git a/Resources/Locale/en-US/shell.ftl b/Resources/Locale/en-US/shell.ftl index 3edc43bd74..36bebeae35 100644 --- a/Resources/Locale/en-US/shell.ftl +++ b/Resources/Locale/en-US/shell.ftl @@ -5,6 +5,8 @@ shell-command-success = Command successful shell-invalid-command = Invalid command. shell-invalid-command-specific = Invalid {$commandName} command. +shell-can-only-run-from-pre-round-lobby = You can only run this command while the game is in the pre-round lobby. +shell-can-only-run-while-round-is-active = You can only run this command while the game is in a round. shell-cannot-run-command-from-server = You cannot run this command from the server. shell-only-players-can-run-this-command = Only players can run this command. shell-must-be-attached-to-entity = You must be attached to an entity to run this command.