From 818e9ce24bb55087a6d750340a633a8265e95d22 Mon Sep 17 00:00:00 2001 From: stacey <57187883+moisterrific@users.noreply.github.com> Date: Sat, 31 Jul 2021 13:59:24 -0400 Subject: [PATCH] Add new Respawn command --- TShockAPI/Commands.cs | 55 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index cae1ebf3..501efe0f 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -599,6 +599,10 @@ namespace TShockAPI { HelpText = "Sends all tiles from the server to the player to resync the client with the actual world state." }); + add(new Command(Permissions.respawn, Respawn, "respawn") + { + HelpText = "Respawn yourself or another player." + }); #endregion add(new Command(Aliases, "aliases") @@ -5632,6 +5636,57 @@ namespace TShockAPI plr.SendErrorMessage("{0} just killed you!", args.Player.Name); } } + + private static void Respawn(CommandArgs args) + { + TSPlayer playerToRespawn; + if (args.Parameters.Count > 0) + { + if (!args.Player.HasPermission(Permissions.respawnother)) + { + args.Player.SendErrorMessage("You do not have permission to respawn another player."); + return; + } + string plStr = String.Join(" ", args.Parameters); + var players = TSPlayer.FindByNameOrID(plStr); + if (players.Count == 0) + { + args.Player.SendErrorMessage($"Could not find any player named \"{plStr}\""); + return; + } + else if (players.Count > 1) + { + args.Player.SendMultipleMatchError(players.Select(p => p.Name)); + return; + } + else + playerToRespawn = players[0]; + } + else if (!args.Player.RealPlayer) + { + args.Player.SendErrorMessage("You can't respawn the server console!"); + return; + } + else + playerToRespawn = args.Player; + + if (!playerToRespawn.Dead) + { + args.Player.SendErrorMessage($"{(playerToRespawn == args.Player ? "You" : playerToRespawn.Name)} {(playerToRespawn == args.Player ? "are" : "is")} not dead."); + return; + } + else + playerToRespawn.Spawn(PlayerSpawnContext.ReviveFromDeath); + + if (playerToRespawn != args.Player) + { + args.Player.SendSuccessMessage($"You have respawned {playerToRespawn.Name}"); + if (!args.Silent) + playerToRespawn.SendSuccessMessage($"{args.Player.Name} has respawned you."); + } + else + playerToRespawn.SendSuccessMessage("You have respawned yourself."); + } private static void Butcher(CommandArgs args) {