| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- using Content.Server.Administration.Managers;
- using Content.Shared.Administration;
- using Content.Shared.GameTicking;
- using Robust.Shared.Console;
- namespace Content.Server.GameTicking.Commands
- {
- [AnyCommand]
- sealed class ObserveCommand : IConsoleCommand
- {
- [Dependency] private readonly IEntityManager _e = default!;
- [Dependency] private readonly IAdminManager _adminManager = default!;
- public string Command => "observe";
- public string Description => "";
- public string Help => "";
- public void Execute(IConsoleShell shell, string argStr, string[] args)
- {
- if (shell.Player is not { } player)
- {
- shell.WriteError(Loc.GetString("shell-cannot-run-command-from-server"));
- return;
- }
- var ticker = _e.System<GameTicker>();
- if (ticker.RunLevel == GameRunLevel.PreRoundLobby)
- {
- shell.WriteError("Wait until the round starts.");
- return;
- }
- var isAdminCommand = args.Length > 0 && args[0].ToLower() == "admin";
- if (!isAdminCommand && _adminManager.IsAdmin(player))
- {
- _adminManager.DeAdmin(player);
- }
- if (ticker.PlayerGameStatuses.TryGetValue(player.UserId, out var status) &&
- status != PlayerGameStatus.JoinedGame)
- {
- ticker.JoinAsObserver(player);
- }
- else
- {
- shell.WriteError($"{player.Name} is not in the lobby. This incident will be reported.");
- }
- }
- }
- }
|