| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using System.Linq;
- using Content.Server.Administration;
- using Content.Server.Mind;
- using Content.Shared.Players;
- using Robust.Server.Player;
- using Robust.Shared.Console;
- using Robust.Shared.Network;
- namespace Content.Server.GameTicking.Commands
- {
- sealed class RespawnCommand : LocalizedEntityCommands
- {
- [Dependency] private readonly IPlayerManager _player = default!;
- [Dependency] private readonly IPlayerLocator _locator = default!;
- [Dependency] private readonly GameTicker _gameTicker = default!;
- [Dependency] private readonly MindSystem _mind = default!;
- public override string Command => "respawn";
- public override async void Execute(IConsoleShell shell, string argStr, string[] args)
- {
- var player = shell.Player;
- if (args.Length > 1)
- {
- shell.WriteError(Loc.GetString("cmd-respawn-invalid-args"));
- return;
- }
- NetUserId userId;
- if (args.Length == 0)
- {
- if (player == null)
- {
- shell.WriteError(Loc.GetString("cmd-respawn-no-player"));
- return;
- }
- userId = player.UserId;
- }
- else
- {
- var located = await _locator.LookupIdByNameOrIdAsync(args[0]);
- if (located == null)
- {
- shell.WriteError(Loc.GetString("cmd-respawn-unknown-player"));
- return;
- }
- userId = located.UserId;
- }
- if (!_player.TryGetSessionById(userId, out var targetPlayer))
- {
- if (!_player.TryGetPlayerData(userId, out var data))
- {
- shell.WriteError(Loc.GetString("cmd-respawn-unknown-player"));
- return;
- }
- _mind.WipeMind(data.ContentData()?.Mind);
- shell.WriteError(Loc.GetString("cmd-respawn-player-not-online"));
- return;
- }
- _gameTicker.Respawn(targetPlayer);
- }
- public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
- {
- if (args.Length != 1)
- return CompletionResult.Empty;
- var options = _player.Sessions.OrderBy(c => c.Name).Select(c => c.Name).ToArray();
- return CompletionResult.FromHintOptions(options, Loc.GetString("cmd-respawn-player-completion"));
- }
- }
- }
|