ForceGhostCommand.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using Content.Server.GameTicking;
  2. using Content.Server.Ghost;
  3. using Content.Shared.Administration;
  4. using Content.Shared.GameTicking;
  5. using Content.Shared.Mind;
  6. using Robust.Server.Player;
  7. using Robust.Shared.Console;
  8. namespace Content.Server.Administration.Commands;
  9. [AdminCommand(AdminFlags.Admin)]
  10. public sealed class ForceGhostCommand : LocalizedEntityCommands
  11. {
  12. [Dependency] private readonly IEntityManager _entityManager = default!;
  13. [Dependency] private readonly IPlayerManager _playerManager = default!;
  14. [Dependency] private readonly GameTicker _gameTicker = default!;
  15. [Dependency] private readonly SharedMindSystem _mind = default!;
  16. [Dependency] private readonly GhostSystem _ghost = default!;
  17. public override string Command => "forceghost";
  18. public override void Execute(IConsoleShell shell, string argStr, string[] args)
  19. {
  20. if (args.Length == 0 || args.Length > 1)
  21. {
  22. shell.WriteError(LocalizationManager.GetString("shell-wrong-arguments-number"));
  23. return;
  24. }
  25. if (!_playerManager.TryGetSessionByUsername(args[0], out var player))
  26. {
  27. shell.WriteError(LocalizationManager.GetString("shell-target-player-does-not-exist"));
  28. return;
  29. }
  30. if (!_gameTicker.PlayerGameStatuses.TryGetValue(player.UserId, out var playerStatus) ||
  31. playerStatus is not PlayerGameStatus.JoinedGame)
  32. {
  33. shell.WriteLine(Loc.GetString("cmd-forceghost-error-lobby"));
  34. return;
  35. }
  36. if (!_mind.TryGetMind(player, out var mindId, out var mind))
  37. (mindId, mind) = _mind.CreateMind(player.UserId);
  38. if (!_ghost.OnGhostAttempt(mindId, false, true, true, mind))
  39. shell.WriteLine(Loc.GetString("cmd-forceghost-denied"));
  40. }
  41. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  42. {
  43. if (args.Length == 1)
  44. {
  45. return CompletionResult.FromHintOptions(
  46. CompletionHelper.SessionNames(players: _playerManager),
  47. Loc.GetString("cmd-forceghost-hint"));
  48. }
  49. return CompletionResult.Empty;
  50. }
  51. }