From a30f0f269a18d4a5bde6c5a1687f8a16112be967 Mon Sep 17 00:00:00 2001 From: blankochan Date: Sat, 29 Mar 2025 02:23:54 -0500 Subject: [PATCH 1/4] feat: teleport players now supports partial usernames --- SillySCP/Commands/TeleportPlayers.cs | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/SillySCP/Commands/TeleportPlayers.cs b/SillySCP/Commands/TeleportPlayers.cs index 3f08dde..89f854d 100644 --- a/SillySCP/Commands/TeleportPlayers.cs +++ b/SillySCP/Commands/TeleportPlayers.cs @@ -21,33 +21,22 @@ out string response response = "Usage: teleportplayers "; return false; } + - if (!int.TryParse(arguments.At(0), out int player1Id)) - { - response = "Player 1 must be a number!"; - return false; - } - - if (!int.TryParse(arguments.At(1), out int player2Id)) - { - response = "Player 2 must be a number!"; - return false; - } - - if (!Player.TryGet(player1Id, out Player player1)) + if (!Player.TryGet(arguments.At(0), out Player player1)) { response = "Player 1 not found!"; return false; } - if (!Player.TryGet(player2Id, out Player player2)) + if (!Player.TryGet(arguments.At(1), out Player player2)) { response = "Player 2 not found!"; return false; } player1.Position = player2.Position; - response = $"Teleported {player1.Nickname} to {player2.Nickname}"; + response = $"Teleported {player1.Nickname} to {player2.Nickname}"; return true; } } From bdd0221cbc8bd050f76d2922d72e99c4dc4ff35b Mon Sep 17 00:00:00 2001 From: blankochan Date: Sat, 29 Mar 2025 02:51:42 -0500 Subject: [PATCH 2/4] feat: towersit command --- SillySCP/Commands/TowerSit.cs | 95 +++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 SillySCP/Commands/TowerSit.cs diff --git a/SillySCP/Commands/TowerSit.cs b/SillySCP/Commands/TowerSit.cs new file mode 100644 index 0000000..f512705 --- /dev/null +++ b/SillySCP/Commands/TowerSit.cs @@ -0,0 +1,95 @@ +using CommandSystem; +using Exiled.API.Extensions; +using Exiled.API.Features; +using PlayerRoles; + +namespace SillySCP.Commands +{ + [CommandHandler(typeof(RemoteAdminCommandHandler))] + public class TowerSit : ICommand + { + + private void _addPlayer(Player player) + { + player.SessionVariables.Add("pre_sit_position",player.Position); + player.IsGodModeEnabled = true; + if (player.IsScp) + { + player.Broadcast(5,"If you goto Settings, Server-specific, you can set a bind for proximity chat"); + } + player.Teleport(RoleTypeId.Tutorial.GetRandomSpawnLocation()); + } + private static bool _restorePlayer(Player player) + { + if (!player.SessionVariables.TryGetValue("pre_sit_position", out var position)) return false; // would use Vector3 but it won't let me + player.Teleport(position); + player.SessionVariables.Remove("pre_sit_position"); + player.IsGodModeEnabled = false; + return true; + } + + + public string Command { get; } = "towersit"; + public string Description { get; } = "teleport a player to the tower and return them after"; + public string[] Aliases { get; } = ["ts"]; + + private const string Usage = "Invalid Usage, Applicable usages:" + + "\n ts add - teleport a player to the tower (Both Id's and Partial Usernames are accepted)" + + "\n ts restore - restore a players original position (Both Id's and Partial Usernames are accepted)"; + + public bool Execute( + ArraySegment arguments, + ICommandSender sender, + out string response + ) + { + if (arguments.Count != 2) + { + response = Usage; + return false; + } + + + + + if (!Player.TryGet(arguments.At(1), out Player player)) + { + response = "Must be a player!"; + return false; + } + + if (player.IsDead) + { + response = "Player is dead!"; + return false; + } + + switch (arguments.At(0)) + { + case "add": + if (player.SessionVariables.ContainsKey("pre_sit_position")) + { + response = "Player already has a return position!"; + return false; + }; + _addPlayer(player); + response = $"{player.Nickname} teleporting to the tower!"; + return true; + + case "restore": + if (!_restorePlayer(player)) + { + response = $"Player {player.Nickname} doesnt have a return position!"; + return false; + } + response = $"{player.Nickname} restored from the tower!"; + return true; + + default: + response = Usage; + return false; + } + + } + } +} \ No newline at end of file From 2e0ddf1124f4a935fb401853a173e40256f796a7 Mon Sep 17 00:00:00 2001 From: Lizabeth Gock Date: Mon, 31 Mar 2025 13:47:27 -0500 Subject: [PATCH 3/4] Apply Lumi's changes Co-authored-by: Lumi --- SillySCP/Commands/TowerSit.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/SillySCP/Commands/TowerSit.cs b/SillySCP/Commands/TowerSit.cs index f512705..d9fda44 100644 --- a/SillySCP/Commands/TowerSit.cs +++ b/SillySCP/Commands/TowerSit.cs @@ -9,17 +9,17 @@ namespace SillySCP.Commands public class TowerSit : ICommand { - private void _addPlayer(Player player) + private void AddPlayer(Player player) { player.SessionVariables.Add("pre_sit_position",player.Position); player.IsGodModeEnabled = true; if (player.IsScp) { - player.Broadcast(5,"If you goto Settings, Server-specific, you can set a bind for proximity chat"); + player.Broadcast(10,"If you go to Settings, Server-specific, you can set a bind for proximity chat"); } player.Teleport(RoleTypeId.Tutorial.GetRandomSpawnLocation()); } - private static bool _restorePlayer(Player player) + private static bool RestorePlayer(Player player) { if (!player.SessionVariables.TryGetValue("pre_sit_position", out var position)) return false; // would use Vector3 but it won't let me player.Teleport(position); @@ -30,12 +30,12 @@ private static bool _restorePlayer(Player player) public string Command { get; } = "towersit"; - public string Description { get; } = "teleport a player to the tower and return them after"; + public string Description { get; } = "Teleport a player to the tower and return them after"; public string[] Aliases { get; } = ["ts"]; private const string Usage = "Invalid Usage, Applicable usages:" + - "\n ts add - teleport a player to the tower (Both Id's and Partial Usernames are accepted)" + - "\n ts restore - restore a players original position (Both Id's and Partial Usernames are accepted)"; + "\n ts add - teleport a player to the tower (Both IDs and Partial Usernames are accepted)" + + "\n ts restore - restore a players original position (Both IDs and Partial Usernames are accepted)"; public bool Execute( ArraySegment arguments, From a39145c9da665eace9fe792f44c317eace9086ab Mon Sep 17 00:00:00 2001 From: blankochan Date: Mon, 31 Mar 2025 13:49:46 -0500 Subject: [PATCH 4/4] feat: towersit command --- SillySCP/Commands/TowerSit.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/SillySCP/Commands/TowerSit.cs b/SillySCP/Commands/TowerSit.cs index d9fda44..1c150a9 100644 --- a/SillySCP/Commands/TowerSit.cs +++ b/SillySCP/Commands/TowerSit.cs @@ -43,14 +43,12 @@ public bool Execute( out string response ) { + if (arguments.Count != 2) { response = Usage; return false; } - - - if (!Player.TryGet(arguments.At(1), out Player player)) { @@ -71,13 +69,13 @@ out string response { response = "Player already has a return position!"; return false; - }; - _addPlayer(player); + } + AddPlayer(player); response = $"{player.Nickname} teleporting to the tower!"; return true; case "restore": - if (!_restorePlayer(player)) + if (!RestorePlayer(player)) { response = $"Player {player.Nickname} doesnt have a return position!"; return false; @@ -88,6 +86,7 @@ out string response default: response = Usage; return false; + } }