From bcbcb83a35569bc52b3fc8a0fd7f5f9f6b7f83e5 Mon Sep 17 00:00:00 2001 From: Dawid Bepierszcz <41084667+daffyyyy@users.noreply.github.com> Date: Wed, 3 Jul 2024 22:59:26 +0200 Subject: [PATCH] 1.5.0a - Fixed immunity in menu - Added new command `css_prename` to perm rename player (until the server restarts - don't set new name to remove perm rename) // @css/ban) --- CS2-SimpleAdmin.cs | 9 ++-- Commands/basebans.cs | 2 + Commands/basecommands.cs | 1 + Commands/basecomms.cs | 6 +++ Commands/funcommands.cs | 6 +++ Commands/playercommands.cs | 75 +++++++++++++++++++++++++++++++++- Events.cs | 24 +++++++++++ Extensions/PlayerExtensions.cs | 8 ++-- README.md | 1 + VERSION | 2 +- 10 files changed, 124 insertions(+), 10 deletions(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index 5fc54c8..a52cb97 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -20,8 +20,9 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig VoteAnswers = []; private static readonly HashSet GodPlayers = []; private static readonly HashSet SilentPlayers = []; - //private static readonly ConcurrentBag SilentPlayers = []; private static readonly ConcurrentBag BannedPlayers = []; + private static readonly Dictionary RenamedPlayers = []; + //private static readonly ConcurrentBag SilentPlayers = []; private static bool _tagsDetected; public static bool VoteInProgress = false; public static int? ServerId = null; @@ -39,7 +40,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)"); public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; public override string ModuleAuthor => "daffyy & Dliix66"; - public override string ModuleVersion => "1.4.9a"; + public override string ModuleVersion => "1.5.0a"; public CS2_SimpleAdminConfig Config { get; set; } = new(); @@ -112,9 +113,9 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig controller is { IsValid: true, IsBot: false })) { using (new WithTemporaryCulture(controller.GetLanguage())) @@ -546,6 +568,8 @@ namespace CS2_SimpleAdmin if (player == null || !player.IsValid || player.Connected != PlayerConnectedState.PlayerConnected) return; + if (!caller.CanTarget(player)) return; + callerName ??= caller == null ? "Console" : caller.PlayerName; if (!teamName.Equals("swap")) @@ -631,6 +655,53 @@ namespace CS2_SimpleAdmin }); } + [ConsoleCommand("css_prename", "Permanent rename a player.")] + [CommandHelper(1, "<#userid or name> ")] + [RequiresPermissions("@css/ban")] + public void OnPRenameCommand(CCSPlayerController? caller, CommandInfo command) + { + var callerName = caller == null ? "Console" : caller.PlayerName; + var newName = command.GetArg(2); + + var targets = GetTarget(command); + if (targets == null) return; + var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); + + Helper.LogCommand(caller, command); + Helper.SendDiscordLogMessage(caller, command, DiscordWebhookClientLog, _localizer); + + playersToTarget.ForEach(player => + { + if (player.Connected != PlayerConnectedState.PlayerConnected) + return; + + if (!caller!.CanTarget(player)) return; + if (caller == null || !SilentPlayers.Contains(caller.Slot) && !string.IsNullOrEmpty(newName)) + { + foreach (var controller in Helper.GetValidPlayers().Where(controller => controller is { IsValid: true, IsBot: false })) + { + using (new WithTemporaryCulture(controller.GetLanguage())) + { + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_rename_message", callerName, player.PlayerName, newName]); + controller.PrintToChat(sb.ToString()); + } + } + } + + if (!string.IsNullOrEmpty(newName)) + { + RenamedPlayers[player.SteamID] = newName; + } + else + { + RenamedPlayers.Remove(player.SteamID); + } + + player.Rename(newName); + }); + } + [ConsoleCommand("css_respawn", "Respawn a dead player.")] [CommandHelper(1, "<#userid or name>")] [RequiresPermissions("@css/cheats")] @@ -656,6 +727,8 @@ namespace CS2_SimpleAdmin public void Respawn(CCSPlayerController? caller, CCSPlayerController? player, string? callerName = null, CommandInfo? command = null) { + if (!caller.CanTarget(player)) return; + callerName ??= caller == null ? "Console" : caller.PlayerName; if (_cBasePlayerControllerSetPawnFunc == null || player?.PlayerPawn.Value == null || !player.PlayerPawn.IsValid) return; diff --git a/Events.cs b/Events.cs index 70853d8..8213302 100644 --- a/Events.cs +++ b/Events.cs @@ -282,6 +282,11 @@ public partial class CS2_SimpleAdmin } }); + if (RenamedPlayers.TryGetValue(player.SteamID, out var name)) + { + player.Rename(name); + } + return HookResult.Continue; } @@ -527,4 +532,23 @@ public partial class CS2_SimpleAdmin return HookResult.Continue; } + + [GameEventHandler] + public HookResult OnChangedName(EventPlayerChangename @event, GameEventInfo _) + { + CCSPlayerController? player = @event.Userid; + + if (player is null || !player.IsValid || player.IsBot) + return HookResult.Continue; + + if (RenamedPlayers.TryGetValue(player.SteamID, out var name)) + { + if (@event.Newname.Equals(name)) + return HookResult.Continue; + + player.Rename(name); + } + + return HookResult.Continue; + } } \ No newline at end of file diff --git a/Extensions/PlayerExtensions.cs b/Extensions/PlayerExtensions.cs index 68c85f9..8acc0ab 100644 --- a/Extensions/PlayerExtensions.cs +++ b/Extensions/PlayerExtensions.cs @@ -28,8 +28,8 @@ public static class PlayerExtensions if (target.IsBot) return true; return AdminManager.CanPlayerTarget(controller, target) || - AdminManager.CanPlayerTarget(new SteamID(controller.SteamID), - new SteamID(target.SteamID)); + AdminManager.CanPlayerTarget(new SteamID(controller.SteamID), + new SteamID(target.SteamID)); } public static void SetSpeed(this CCSPlayerController? controller, float speed) @@ -62,7 +62,7 @@ public static class PlayerExtensions { if (controller == null) return; if ((health <= 0 || !controller.PawnIsAlive || controller.PlayerPawn.Value == null)) return; - + controller.PlayerPawn.Value.Health = health; if (health > 100) @@ -121,7 +121,7 @@ public static class PlayerExtensions public static void Rename(this CCSPlayerController? controller, string newName = "Unknown") { - newName = newName ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; + newName ??= CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; if (controller != null) { diff --git a/README.md b/README.md index 757ea91..41f923b 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ Manage your Counter-Strike 2 server by simple commands :) - css_freeze <#userid or name> [duration] - Freeze player // @css/slay - css_unfreeze <#userid or name> - Unfreeze player // @css/slay - css_rename <#userid or name> - Rename player // @css/kick +- css_prename <#userid or name> - Permanently rename player (until the server restarts - don't set new name to remove perm rename) // @css/ban - css_respawn <#userid or name> - Respawn player // @css/cheats - css_cvar - Change cvar value // @css/cvar - css_rcon - Run command as server // @css/rcon diff --git a/VERSION b/VERSION index 125ddaa..fc11999 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.4.9a \ No newline at end of file +1.5.0a \ No newline at end of file