From c32150293764987034c5fbbdc22be9be2b841573 Mon Sep 17 00:00:00 2001 From: Dawid Bepierszcz <41084667+daffyyyy@users.noreply.github.com> Date: Mon, 29 Apr 2024 00:04:42 +0200 Subject: [PATCH] 1.4.2a - Config upgrade - Translatable and customizable menu - More async - Minor changes --- CS2-SimpleAdmin.cs | 10 +- CS2-SimpleAdmin.csproj | 2 +- Commands/basebans.cs | 45 ++++---- Commands/basechat.cs | 7 +- Commands/basecommands.cs | 93 +++++++---------- Commands/basecomms.cs | 155 ++++++++++++---------------- Commands/basevotes.cs | 7 +- Commands/funcommands.cs | 1 - Commands/playercommands.cs | 70 ++++++------- Config.cs | 101 ++++++++++++++++-- Events.cs | 44 +++----- Helper.cs | 91 +++++++++------- Managers/AdminSQLManager.cs | 77 +++++++------- Managers/BanManager.cs | 79 +++++++------- Managers/MuteManager.cs | 27 ++--- Managers/PlayerPenaltyManager.cs | 2 +- Menus/AdminMenu.cs | 42 ++++---- Menus/ChatMenuOptionData.cs | 22 +--- Menus/CustomCommandsMenu.cs | 40 ++++--- Menus/DurationMenu.cs | 19 +--- Menus/FunActionsMenu.cs | 96 +++++++++-------- Menus/ManageAdminsMenu.cs | 59 +++++------ Menus/ManagePlayersMenu.cs | 172 ++++++++++++------------------- Menus/ManageServerMenu.cs | 51 +++++---- Menus/PlayersMenu.cs | 5 +- PlayerInfo.cs | 1 - lang/ar.json | 41 ++++++++ lang/en.json | 51 ++++++++- lang/es.json | 41 ++++++++ lang/fa.json | 41 ++++++++ lang/fr.json | 41 ++++++++ lang/lv.json | 41 ++++++++ lang/pl.json | 41 ++++++++ lang/pt-BR.json | 41 ++++++++ lang/ru.json | 41 ++++++++ lang/tr.json | 41 ++++++++ lang/zh-Hans.json | 41 ++++++++ 37 files changed, 1078 insertions(+), 701 deletions(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index 3adedd6..19b330a 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -21,7 +21,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig godPlayers = []; private static ConcurrentBag silentPlayers = []; private static ConcurrentBag bannedPlayers = []; - private static bool TagsDetected = false; + private static bool TagsDetected; public static bool voteInProgress = false; public static int? ServerId = null; @@ -33,11 +33,11 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig? CBasePlayerController_SetPawnFunc = null; - public override string ModuleName => "CS2-SimpleAdmin"; + public static MemoryFunctionVoid? CBasePlayerControllerSetPawnFunc; + public override string ModuleName => "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.1a"; + public override string ModuleVersion => "1.4.2a"; public CS2_SimpleAdminConfig Config { get; set; } = new(); @@ -52,7 +52,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig(GameData.GetSignature("CBasePlayerController_SetPawn")); + CBasePlayerControllerSetPawnFunc = new MemoryFunctionVoid(GameData.GetSignature("CBasePlayerController_SetPawn")); } public void OnConfigParsed(CS2_SimpleAdminConfig config) diff --git a/CS2-SimpleAdmin.csproj b/CS2-SimpleAdmin.csproj index 3f50f5f..2df19a2 100644 --- a/CS2-SimpleAdmin.csproj +++ b/CS2-SimpleAdmin.csproj @@ -10,7 +10,7 @@ - + diff --git a/Commands/basebans.cs b/Commands/basebans.cs index aa47c12..d4055e1 100644 --- a/Commands/basebans.cs +++ b/Commands/basebans.cs @@ -3,7 +3,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration; using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; -using CounterStrikeSharp.API.Modules.Commands.Targeting; using System.Text; namespace CS2_SimpleAdmin @@ -23,7 +22,7 @@ namespace CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0) { @@ -31,7 +30,7 @@ namespace CS2_SimpleAdmin } Database database = new(dbConnectionString); - BanManager _banManager = new(database, Config); + BanManager banManager = new(database, Config); int.TryParse(command.GetArg(2), out var time); @@ -42,7 +41,7 @@ namespace CS2_SimpleAdmin { if (caller!.CanTarget(player)) { - Ban(caller, player, time, reason, callerName, _banManager, command); + Ban(caller, player, time, reason, callerName, banManager, command); } }); } @@ -84,7 +83,7 @@ namespace CS2_SimpleAdmin if (playerInfo.IpAddress != null && !bannedPlayers.Contains(playerInfo.IpAddress)) bannedPlayers.Add(playerInfo.IpAddress); - if (!bannedPlayers.Contains(player!.SteamID.ToString())) + if (!bannedPlayers.Contains(player.SteamID.ToString())) bannedPlayers.Add(player.SteamID.ToString()); if (time == 0) @@ -92,7 +91,7 @@ namespace CS2_SimpleAdmin if (!player.IsBot && !player.IsHLTV) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) @@ -113,7 +112,7 @@ namespace CS2_SimpleAdmin if (!player.IsBot && !player.IsHLTV) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) { @@ -158,8 +157,6 @@ namespace CS2_SimpleAdmin var reason = _localizer?["sa_unknown"] ?? "Unknown"; - Database database = new(dbConnectionString); - int.TryParse(command.GetArg(2), out var time); if (command.ArgCount >= 3 && command.GetArg(3).Length > 0) @@ -184,7 +181,7 @@ namespace CS2_SimpleAdmin return; } - player!.Pawn.Value!.Freeze(); + player.Pawn.Value!.Freeze(); if (player.UserId.HasValue) AddTimer(Config.KickTime, () => Helper.KickPlayer(player.UserId.Value), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); @@ -193,7 +190,7 @@ namespace CS2_SimpleAdmin if (!player.IsBot && !player.IsHLTV) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) { @@ -213,7 +210,7 @@ namespace CS2_SimpleAdmin if (player is { IsBot: false, IsHLTV: false }) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) @@ -236,15 +233,15 @@ namespace CS2_SimpleAdmin Task.Run(async () => { - BanManager _banManager = new(_database, Config); - await _banManager.AddBanBySteamid(steamid, adminInfo, reason, time); + BanManager banManager = new(_database, Config); + await banManager.AddBanBySteamid(steamid, adminInfo, reason, time); }); Helper.LogCommand(caller, command); Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); //Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, _discordWebhookClientPenalty, _localizer); - command?.ReplyToCommand($"Banned player with steamid {steamid}."); + command.ReplyToCommand($"Banned player with steamid {steamid}."); } [ConsoleCommand("css_banip")] @@ -295,14 +292,14 @@ namespace CS2_SimpleAdmin return; } - player!.Pawn.Value!.Freeze(); + player.Pawn.Value!.Freeze(); if (time == 0) { if (player is { IsBot: false, IsHLTV: false }) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) @@ -320,10 +317,10 @@ namespace CS2_SimpleAdmin } else { - if (!player.IsBot && !player.IsHLTV) + if (player is { IsBot: false, IsHLTV: false }) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) { @@ -352,14 +349,14 @@ namespace CS2_SimpleAdmin Task.Run(async () => { - BanManager _banManager = new(_database, Config); - await _banManager.AddBanByIp(ipAddress, adminInfo, reason, time); + BanManager banManager = new(_database, Config); + await banManager.AddBanByIp(ipAddress, adminInfo, reason, time); }); Helper.LogCommand(caller, command); Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); - command?.ReplyToCommand($"Banned player with IP address {ipAddress}."); + command.ReplyToCommand($"Banned player with IP address {ipAddress}."); } [ConsoleCommand("css_unban")] @@ -380,8 +377,8 @@ namespace CS2_SimpleAdmin var pattern = command.GetArg(1); var reason = command.GetArg(2); - BanManager _banManager = new(_database, Config); - Task.Run(async () => await _banManager.UnbanPlayer(pattern, callerSteamId, reason)); + BanManager banManager = new(_database, Config); + Task.Run(async () => await banManager.UnbanPlayer(pattern, callerSteamId, reason)); Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); Helper.LogCommand(caller, command); diff --git a/Commands/basechat.cs b/Commands/basechat.cs index 88216fc..dc38ebe 100644 --- a/Commands/basechat.cs +++ b/Commands/basechat.cs @@ -3,7 +3,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration; using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; -using CounterStrikeSharp.API.Modules.Commands.Targeting; using CounterStrikeSharp.API.Modules.Memory; using CounterStrikeSharp.API.Modules.Utils; using System.Text; @@ -18,7 +17,6 @@ namespace CS2_SimpleAdmin public void OnAdminToAdminSayCommand(CCSPlayerController? caller, CommandInfo command) { if (caller == null || !caller.IsValid || command.GetCommandString[command.GetCommandString.IndexOf(' ')..].Length == 0) return; - var callerName = caller.PlayerName; Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); Helper.LogCommand(caller, command); @@ -45,7 +43,6 @@ namespace CS2_SimpleAdmin { if (command.GetCommandString[command.GetCommandString.IndexOf(' ')..].Length == 0) return; - var callerName = caller == null ? "Console" : caller.PlayerName; var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]); var utf8String = Encoding.UTF8.GetString(utf8BytesString); @@ -72,7 +69,7 @@ namespace CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); //Helper.LogCommand(caller, command); @@ -95,7 +92,6 @@ namespace CS2_SimpleAdmin [RequiresPermissions("@css/chat")] public void OnAdminCenterSayCommand(CCSPlayerController? caller, CommandInfo command) { - var callerName = caller == null ? "Console" : caller.PlayerName; var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]); var utf8String = Encoding.UTF8.GetString(utf8BytesString); @@ -110,7 +106,6 @@ namespace CS2_SimpleAdmin [RequiresPermissions("@css/chat")] public void OnAdminHudSayCommand(CCSPlayerController? caller, CommandInfo command) { - var callerName = caller == null ? "Console" : caller.PlayerName; var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]); var utf8String = Encoding.UTF8.GetString(utf8BytesString); diff --git a/Commands/basecommands.cs b/Commands/basecommands.cs index f18f45d..d74bbf7 100644 --- a/Commands/basecommands.cs +++ b/Commands/basecommands.cs @@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration; using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; -using CounterStrikeSharp.API.Modules.Commands.Targeting; using CounterStrikeSharp.API.Modules.Cvars; using CounterStrikeSharp.API.Modules.Entities; using CounterStrikeSharp.API.Modules.Utils; @@ -97,7 +96,6 @@ namespace CS2_SimpleAdmin public void OnAddAdminCommand(CCSPlayerController? caller, CommandInfo command) { if (_database == null) return; - var callerName = caller == null ? "Console" : caller.PlayerName; if (!Helper.IsValidSteamId64(command.GetArg(1))) { @@ -120,10 +118,8 @@ namespace CS2_SimpleAdmin var flags = command.GetArg(3); var globalAdmin = command.GetArg(4).ToLower().Equals("-g") || command.GetArg(5).ToLower().Equals("-g") || command.GetArg(6).ToLower().Equals("-g"); - var immunity = 0; - int.TryParse(command.GetArg(4), out immunity); - var time = 0; - int.TryParse(command.GetArg(5), out time); + int.TryParse(command.GetArg(4), out var immunity); + int.TryParse(command.GetArg(5), out var time); AddAdmin(caller, steamid, name, flags, immunity, time, globalAdmin, command); } @@ -131,10 +127,10 @@ namespace CS2_SimpleAdmin public static void AddAdmin(CCSPlayerController? caller, string steamid, string name, string flags, int immunity, int time = 0, bool globalAdmin = false, CommandInfo? command = null) { if (_database == null) return; - AdminSQLManager _adminManager = new(_database); + AdminSQLManager adminManager = new(_database); var flagsList = flags.Split(',').Select(flag => flag.Trim()).ToList(); - _ = _adminManager.AddAdminBySteamId(steamid, name, flagsList, immunity, time, globalAdmin); + _ = adminManager.AddAdminBySteamId(steamid, name, flagsList, immunity, time, globalAdmin); if (command != null) Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); @@ -155,7 +151,6 @@ namespace CS2_SimpleAdmin public void OnDelAdminCommand(CCSPlayerController? caller, CommandInfo command) { if (_database == null) return; - var callerName = caller == null ? "Console" : caller.PlayerName; if (!Helper.IsValidSteamId64(command.GetArg(1))) { @@ -172,16 +167,16 @@ namespace CS2_SimpleAdmin public void RemoveAdmin(CCSPlayerController? caller, string steamid, bool globalDelete = false, CommandInfo? command = null) { if (_database == null) return; - AdminSQLManager _adminManager = new(_database); - _ = _adminManager.DeleteAdminBySteamId(steamid, globalDelete); + AdminSQLManager adminManager = new(_database); + _ = adminManager.DeleteAdminBySteamId(steamid, globalDelete); AddTimer(2, () => { if (string.IsNullOrEmpty(steamid) || !SteamID.TryParse(steamid, out var steamId) || steamId == null) return; - if (AdminSQLManager._adminCache.ContainsKey(steamId)) + if (AdminSQLManager.AdminCache.ContainsKey(steamId)) { - AdminSQLManager._adminCache.TryRemove(steamId, out _); + AdminSQLManager.AdminCache.TryRemove(steamId, out _); } AdminManager.ClearPlayerPermissions(steamId); @@ -222,19 +217,18 @@ namespace CS2_SimpleAdmin var groupName = command.GetArg(1); var flags = command.GetArg(2); - var immunity = 0; - int.TryParse(command.GetArg(3), out immunity); + int.TryParse(command.GetArg(3), out var immunity); AddGroup(caller, groupName, flags, immunity, command); } - public static void AddGroup(CCSPlayerController? caller, string name, string flags, int immunity, CommandInfo? command = null) + private static void AddGroup(CCSPlayerController? caller, string name, string flags, int immunity, CommandInfo? command = null) { if (_database == null) return; - AdminSQLManager _adminManager = new(_database); + AdminSQLManager adminManager = new(_database); var flagsList = flags.Split(',').Select(flag => flag.Trim()).ToList(); - _ = _adminManager.AddGroup(name, flagsList, immunity); + _ = adminManager.AddGroup(name, flagsList, immunity); if (command != null) Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); @@ -270,8 +264,8 @@ namespace CS2_SimpleAdmin private void RemoveGroup(CCSPlayerController? caller, string name, CommandInfo? command = null) { if (_database == null) return; - AdminSQLManager _adminManager = new(_database); - _ = _adminManager.DeleteGroup(name); + AdminSQLManager adminManager = new(_database); + _ = adminManager.DeleteGroup(name); AddTimer(2, () => { @@ -307,21 +301,21 @@ namespace CS2_SimpleAdmin { if (_database == null) return; - for (var index = 0; index < AdminSQLManager._adminCache.Keys.ToList().Count; index++) + for (var index = 0; index < AdminSQLManager.AdminCache.Keys.ToList().Count; index++) { - var steamId = AdminSQLManager._adminCache.Keys.ToList()[index]; - if (!AdminSQLManager._adminCache.TryRemove(steamId, out _)) continue; + var steamId = AdminSQLManager.AdminCache.Keys.ToList()[index]; + if (!AdminSQLManager.AdminCache.TryRemove(steamId, out _)) continue; AdminManager.ClearPlayerPermissions(steamId); AdminManager.RemovePlayerAdminData(steamId); } - AdminSQLManager _adminManager = new(_database); + AdminSQLManager adminManager = new(_database); Task.Run(async () => { - await _adminManager.CrateGroupsJsonFile(); - await _adminManager.CreateAdminsJsonFile(); + await adminManager.CrateGroupsJsonFile(); + await adminManager.CreateAdminsJsonFile(); AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json"); AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json"); @@ -369,7 +363,6 @@ namespace CS2_SimpleAdmin public void OnWhoCommand(CCSPlayerController? caller, CommandInfo command) { if (_database == null) return; - var callerName = caller == null ? "Console" : caller.PlayerName; var targets = GetTarget(command); if (targets == null) return; @@ -377,11 +370,11 @@ namespace CS2_SimpleAdmin Helper.LogCommand(caller, command); //Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); - var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); Database database = new(dbConnectionString); - BanManager _banManager = new(database, Config); - MuteManager _muteManager = new(_database); + BanManager banManager = new(database, Config); + MuteManager muteManager = new(_database); playersToTarget.ForEach(player => { @@ -390,19 +383,15 @@ namespace CS2_SimpleAdmin PlayerInfo playerInfo = new() { UserId = player.UserId.Value, - Index = (int)player.Index, - SteamId = player?.SteamID.ToString(), - Name = player?.PlayerName, - IpAddress = player?.IpAddress?.Split(":")[0] + SteamId = player.SteamID.ToString(), + Name = player.PlayerName, + IpAddress = player.IpAddress?.Split(":")[0] }; Task.Run(async () => { - var totalBans = 0; - var totalMutes = 0; - - totalBans = await _banManager.GetPlayerBans(playerInfo); - totalMutes = await _muteManager.GetPlayerMutes(playerInfo.SteamId!); + var totalBans = await banManager.GetPlayerBans(playerInfo); + var totalMutes = await muteManager.GetPlayerMutes(playerInfo.SteamId); await Server.NextFrameAsync(() => { @@ -410,7 +399,7 @@ namespace CS2_SimpleAdmin printMethod($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------"); - printMethod($"• Clan: \"{player!.Clan}\" Name: \"{playerInfo.Name}\""); + printMethod($"• Clan: \"{player.Clan}\" Name: \"{playerInfo.Name}\""); printMethod($"• UserID: \"{playerInfo.UserId}\""); if (playerInfo.SteamId != null) printMethod($"• SteamID64: \"{playerInfo.SteamId}\""); @@ -443,13 +432,13 @@ namespace CS2_SimpleAdmin if (caller != null) { - caller!.PrintToConsole($"--------- PLAYER LIST ---------"); + caller.PrintToConsole($"--------- PLAYER LIST ---------"); playersToTarget.ForEach(player => { - caller!.PrintToConsole( + caller.PrintToConsole( $"• [#{player.UserId}] \"{player.PlayerName}\" (IP Address: \"{player.IpAddress?.Split(":")[0]}\" SteamID64: \"{player.SteamID}\")"); }); - caller!.PrintToConsole($"--------- END PLAYER LIST ---------"); + caller.PrintToConsole($"--------- END PLAYER LIST ---------"); } else { @@ -475,7 +464,7 @@ namespace CS2_SimpleAdmin if (targets == null) return; - var playersToTarget = targets!.Players + var playersToTarget = targets.Players .Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0) @@ -498,7 +487,7 @@ namespace CS2_SimpleAdmin }); } - public void Kick(CCSPlayerController? caller, CCSPlayerController? player, string reason = "Unknown", string? callerName = null, CommandInfo? command = null) + public void Kick(CCSPlayerController? caller, CCSPlayerController? player, string? reason = "Unknown", string? callerName = null, CommandInfo? command = null) { callerName ??= caller == null ? "Console" : caller.PlayerName; if (player != null && player.PawnIsAlive) @@ -555,20 +544,17 @@ namespace CS2_SimpleAdmin public void ChangeMap(CCSPlayerController? caller, string map, CommandInfo? command = null) { - var callerName = caller == null ? "Console" : caller.PlayerName; - string _command; - map = map.ToLower(); if (map.StartsWith("ws:")) { - _command = long.TryParse(map.Replace("ws:", ""), out var mapId) + var issuedCommand = long.TryParse(map.Replace("ws:", ""), out var mapId) ? $"host_workshop_map {mapId}" : $"ds_workshop_changelevel {map.Replace("ws:", "")}"; AddTimer(3.0f, () => { - Server.ExecuteCommand(_command); + Server.ExecuteCommand(issuedCommand); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); } else @@ -622,12 +608,9 @@ namespace CS2_SimpleAdmin public void ChangeWorkshopMap(CCSPlayerController? caller, string map, CommandInfo? command = null) { - var callerName = caller == null ? "Console" : caller.PlayerName; - string _command; - map = map.ToLower(); - _command = long.TryParse(map, out var mapId) ? $"host_workshop_map {mapId}" : $"ds_workshop_changelevel {map}"; + var issuedCommand = long.TryParse(map, out var mapId) ? $"host_workshop_map {mapId}" : $"ds_workshop_changelevel {map}"; if (caller == null || !silentPlayers.Contains(caller.Slot)) { @@ -644,7 +627,7 @@ namespace CS2_SimpleAdmin AddTimer(3.0f, () => { - Server.ExecuteCommand(_command); + Server.ExecuteCommand(issuedCommand); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); if (command == null) return; diff --git a/Commands/basecomms.cs b/Commands/basecomms.cs index fdfc25b..6cdd3be 100644 --- a/Commands/basecomms.cs +++ b/Commands/basecomms.cs @@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration; using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; -using CounterStrikeSharp.API.Modules.Commands.Targeting; using System.Text; namespace CS2_SimpleAdmin @@ -19,41 +18,39 @@ namespace CS2_SimpleAdmin if (_database == null) return; var callerName = caller == null ? "Console" : caller.PlayerName; - var time = 0; var reason = _localizer?["sa_unknown"] ?? "Unknown"; var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0) { return; } - int.TryParse(command.GetArg(2), out time); + int.TryParse(command.GetArg(2), out var time); if (command.ArgCount >= 3 && command.GetArg(3).Length > 0) reason = command.GetArg(3); - MuteManager _muteManager = new(_database); + MuteManager muteManager = new(_database); var playerPenaltyManager = new PlayerPenaltyManager(); playersToTarget.ForEach(player => { if (caller!.CanTarget(player)) { - Gag(caller, player, time, reason, callerName, _muteManager, playerPenaltyManager, command); + Gag(caller, player, time, reason, callerName, muteManager, playerPenaltyManager, command); } }); } - internal void Gag(CCSPlayerController? caller, CCSPlayerController? player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, PlayerPenaltyManager? playerPenaltyManager = null, CommandInfo? command = null) + internal static void Gag(CCSPlayerController? caller, CCSPlayerController? player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, PlayerPenaltyManager? playerPenaltyManager = null, CommandInfo? command = null) { if (_database == null) return; callerName ??= caller == null ? "Console" : caller.PlayerName; muteManager ??= new MuteManager(_database); - playerPenaltyManager ??= new PlayerPenaltyManager(); var playerInfo = new PlayerInfo { @@ -80,7 +77,7 @@ namespace CS2_SimpleAdmin PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Gag, DateTime.Now.AddMinutes(time), time); if (time == 0) { - if (!player!.IsBot && !player.IsHLTV) + if (!player.IsBot && !player.IsHLTV) { using (new WithTemporaryCulture(player.GetLanguage())) { @@ -103,11 +100,11 @@ namespace CS2_SimpleAdmin } else { - if (!player!.IsBot && !player.IsHLTV) + if (!player.IsBot && !player.IsHLTV) { using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_gag_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_gag_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); } } @@ -152,13 +149,11 @@ namespace CS2_SimpleAdmin return; } - var time = 0; var reason = _localizer?["sa_unknown"] ?? "Unknown"; - MuteManager _muteManager = new(_database); - var playerPenaltyManager = new PlayerPenaltyManager(); + MuteManager muteManager = new(_database); - int.TryParse(command.GetArg(2), out time); + int.TryParse(command.GetArg(2), out var time); if (command.ArgCount >= 3 && command.GetArg(3).Length > 0) reason = command.GetArg(3); @@ -187,7 +182,7 @@ namespace CS2_SimpleAdmin if (!player.IsBot && !player.IsHLTV) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_gag_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_gag_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) @@ -208,7 +203,7 @@ namespace CS2_SimpleAdmin if (player is { IsBot: false, IsHLTV: false }) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_gag_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_gag_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) @@ -226,9 +221,9 @@ namespace CS2_SimpleAdmin } if (TagsDetected) - Server.ExecuteCommand($"css_tag_mute {player!.SteamID}"); + Server.ExecuteCommand($"css_tag_mute {player.SteamID}"); - PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Gag, DateTime.Now.AddMinutes(time), time); + PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Gag, DateTime.Now.AddMinutes(time), time); } Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Gag, _discordWebhookClientPenalty, _localizer); @@ -236,13 +231,13 @@ namespace CS2_SimpleAdmin Task.Run(async () => { - await _muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 0); + await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time); }); Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); Helper.LogCommand(caller, command); - command?.ReplyToCommand($"Gagged player with steamid {steamid}."); + command.ReplyToCommand($"Gagged player with steamid {steamid}."); } [ConsoleCommand("css_ungag")] @@ -251,7 +246,6 @@ namespace CS2_SimpleAdmin public void OnUngagCommand(CCSPlayerController? caller, CommandInfo command) { if (_database == null) return; - var callerName = caller == null ? "Console" : caller.PlayerName; var callerSteamId = caller?.SteamID.ToString() ?? "Console"; var foundPlayerName = string.Empty; @@ -270,9 +264,7 @@ namespace CS2_SimpleAdmin var found = false; var pattern = command.GetArg(1); - MuteManager _muteManager = new(_database); - - var playerPenaltyManager = new PlayerPenaltyManager(); + MuteManager muteManager = new(_database); if (Helper.IsValidSteamId64(pattern)) { @@ -282,10 +274,10 @@ namespace CS2_SimpleAdmin var player = matches.FirstOrDefault(); if (player != null && player.IsValid) { - PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Gag); + PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Gag); if (TagsDetected) - Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}"); + Server.ExecuteCommand($"css_tag_unmute {player.SteamID}"); found = true; foundPlayerName = player.PlayerName; @@ -301,12 +293,12 @@ namespace CS2_SimpleAdmin var player = matches.FirstOrDefault(); if (player != null && player.IsValid) { - PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Gag); + PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Gag); if (TagsDetected) - Server.ExecuteCommand($"css_tag_unmute {player!.SteamID.ToString()}"); + Server.ExecuteCommand($"css_tag_unmute {player.SteamID.ToString()}"); - pattern = player!.SteamID.ToString(); + pattern = player.SteamID.ToString(); found = true; foundPlayerName = player.PlayerName; @@ -317,12 +309,12 @@ namespace CS2_SimpleAdmin if (found) { - Task.Run(async () => { await _muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason, 0); }); // Unmute by type 0 (gag) + Task.Run(async () => { await muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason); }); // Unmute by type 0 (gag) command.ReplyToCommand($"Ungaged player {foundPlayerName}."); } else { - Task.Run(async () => { await _muteManager.UnmutePlayer(pattern, callerSteamId, reason, 0); }); // Unmute by type 0 (gag) + Task.Run(async () => { await muteManager.UnmutePlayer(pattern, callerSteamId, reason); }); // Unmute by type 0 (gag) command.ReplyToCommand($"Ungaged offline player with pattern {pattern}."); } @@ -365,31 +357,30 @@ namespace CS2_SimpleAdmin if (_database == null) return; var callerName = caller == null ? "Console" : caller.PlayerName; - var time = 0; var reason = _localizer?["sa_unknown"] ?? "Unknown"; var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0) { return; } - int.TryParse(command.GetArg(2), out time); + int.TryParse(command.GetArg(2), out var time); if (command.ArgCount >= 3 && command.GetArg(3).Length > 0) reason = command.GetArg(3); - MuteManager _muteManager = new(_database); + MuteManager muteManager = new(_database); var playerPenaltyManager = new PlayerPenaltyManager(); playersToTarget.ForEach(player => { if (caller!.CanTarget(player)) { - Mute(caller, player, time, reason, callerName, _muteManager, playerPenaltyManager, command); + Mute(caller, player, time, reason, callerName, muteManager, playerPenaltyManager, command); } }); } @@ -421,14 +412,14 @@ namespace CS2_SimpleAdmin await muteManager.MutePlayer(playerInfo, adminInfo, reason, time, 1); }); - PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Mute, DateTime.Now.AddMinutes(time), time); + PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Mute, DateTime.Now.AddMinutes(time), time); if (time == 0) { if (!player.IsBot && !player.IsHLTV) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) @@ -449,7 +440,7 @@ namespace CS2_SimpleAdmin if (player is { IsBot: false, IsHLTV: false }) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_mute_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_mute_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) { @@ -493,13 +484,11 @@ namespace CS2_SimpleAdmin return; } - var time = 0; var reason = _localizer?["sa_unknown"] ?? "Unknown"; - MuteManager _muteManager = new(_database); - var playerPenaltyManager = new PlayerPenaltyManager(); + MuteManager muteManager = new(_database); - int.TryParse(command.GetArg(2), out time); + int.TryParse(command.GetArg(2), out var time); if (command.ArgCount >= 3 && command.GetArg(3).Length > 0) reason = command.GetArg(3); @@ -523,14 +512,14 @@ namespace CS2_SimpleAdmin return; } - PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Mute, DateTime.Now.AddMinutes(time), time); + PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Mute, DateTime.Now.AddMinutes(time), time); if (time == 0) { if (player is { IsBot: false, IsHLTV: false }) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) { @@ -550,7 +539,7 @@ namespace CS2_SimpleAdmin if (player is { IsBot: false, IsHLTV: false }) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_mute_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_mute_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) { @@ -572,13 +561,13 @@ namespace CS2_SimpleAdmin Task.Run(async () => { - await _muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 1); + await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 1); }); Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); Helper.LogCommand(caller, command); - command?.ReplyToCommand($"Muted player with steamid {steamid}."); + command.ReplyToCommand($"Muted player with steamid {steamid}."); } [ConsoleCommand("css_unmute")] @@ -587,7 +576,6 @@ namespace CS2_SimpleAdmin public void OnUnmuteCommand(CCSPlayerController? caller, CommandInfo command) { if (_database == null) return; - var callerName = caller == null ? "Console" : caller.PlayerName; var callerSteamId = caller?.SteamID.ToString() ?? "Console"; var foundPlayerName = string.Empty; @@ -605,8 +593,7 @@ namespace CS2_SimpleAdmin var pattern = command.GetArg(1); var found = false; - MuteManager _muteManager = new(_database); - PlayerPenaltyManager playerPenaltyManager = new(); + MuteManager muteManager = new(_database); if (Helper.IsValidSteamId64(pattern)) { @@ -616,7 +603,7 @@ namespace CS2_SimpleAdmin var player = matches.FirstOrDefault(); if (player != null && player.IsValid) { - PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Mute); + PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Mute); player.VoiceFlags = VoiceFlags.Normal; found = true; foundPlayerName = player.PlayerName; @@ -632,7 +619,7 @@ namespace CS2_SimpleAdmin var player = matches.FirstOrDefault(); if (player != null && player.IsValid) { - PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Mute); + PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Mute); player.VoiceFlags = VoiceFlags.Normal; pattern = player.SteamID.ToString(); found = true; @@ -644,12 +631,12 @@ namespace CS2_SimpleAdmin if (found) { - Task.Run(async () => { await _muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason, 1); }); // Unmute by type 1 (mute) + Task.Run(async () => { await muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason, 1); }); // Unmute by type 1 (mute) command.ReplyToCommand($"Unmuted player {foundPlayerName}."); } else { - Task.Run(async () => { await _muteManager.UnmutePlayer(pattern, callerSteamId, reason, 1); }); // Unmute by type 1 (mute) + Task.Run(async () => { await muteManager.UnmutePlayer(pattern, callerSteamId, reason, 1); }); // Unmute by type 1 (mute) command.ReplyToCommand($"Unmuted offline player with pattern {pattern}."); } @@ -687,31 +674,30 @@ namespace CS2_SimpleAdmin if (_database == null) return; var callerName = caller == null ? "Console" : caller.PlayerName; - var time = 0; var reason = CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0) { return; } - int.TryParse(command.GetArg(2), out time); + int.TryParse(command.GetArg(2), out var time); if (command.ArgCount >= 3 && command.GetArg(3).Length > 0) reason = command.GetArg(3); - MuteManager _muteManager = new(_database); + MuteManager muteManager = new(_database); var playerPenaltyManager = new PlayerPenaltyManager(); playersToTarget.ForEach(player => { if (caller!.CanTarget(player)) { - Silence(caller, player, time, reason, callerName, _muteManager, playerPenaltyManager, command); + Silence(caller, player, time, reason, callerName, muteManager, playerPenaltyManager, command); } }); } @@ -721,7 +707,6 @@ namespace CS2_SimpleAdmin if (_database == null) return; callerName ??= caller == null ? "Console" : caller.PlayerName; muteManager ??= new MuteManager(_database); - playerPenaltyManager ??= new PlayerPenaltyManager(); var playerInfo = new PlayerInfo { @@ -746,11 +731,11 @@ namespace CS2_SimpleAdmin Server.ExecuteCommand($"css_tag_mute {player!.SteamID}"); player!.VoiceFlags = VoiceFlags.Muted; - PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time); + PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time); if (time == 0) { - if (!player!.IsBot && !player.IsHLTV) + if (!player.IsBot && !player.IsHLTV) { using (new WithTemporaryCulture(player.GetLanguage())) { @@ -773,11 +758,11 @@ namespace CS2_SimpleAdmin } else { - if (!player!.IsBot && !player.IsHLTV) + if (!player.IsBot && !player.IsHLTV) { using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); } } @@ -823,13 +808,11 @@ namespace CS2_SimpleAdmin return; } - var time = 0; - var reason = CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; + var reason = _localizer?["sa_unknown"] ?? "Unknown"; - MuteManager _muteManager = new(_database); - var playerPenaltyManager = new PlayerPenaltyManager(); + MuteManager muteManager = new(_database); - int.TryParse(command.GetArg(2), out time); + int.TryParse(command.GetArg(2), out var time); if (command.ArgCount >= 3 && command.GetArg(3).Length > 0) reason = command.GetArg(3); @@ -854,16 +837,16 @@ namespace CS2_SimpleAdmin } if (TagsDetected) - Server.ExecuteCommand($"css_tag_mute {player!.SteamID}"); + Server.ExecuteCommand($"css_tag_mute {player.SteamID}"); - PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time); + PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time); if (time == 0) { if (!player.IsBot && !player.IsHLTV) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_silence_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_silence_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) { @@ -883,7 +866,7 @@ namespace CS2_SimpleAdmin if (!player.IsBot && !player.IsHLTV) using (new WithTemporaryCulture(player.GetLanguage())) { - player!.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + player.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); } if (caller == null || !silentPlayers.Contains(caller.Slot)) { @@ -904,13 +887,13 @@ namespace CS2_SimpleAdmin } Task.Run(async () => { - await _muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 2); + await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 2); }); Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); Helper.LogCommand(caller, command); - command?.ReplyToCommand($"Silenced player with steamid {steamid}."); + command.ReplyToCommand($"Silenced player with steamid {steamid}."); } [ConsoleCommand("css_unsilence")] @@ -919,7 +902,6 @@ namespace CS2_SimpleAdmin public void OnUnsilenceCommand(CCSPlayerController? caller, CommandInfo command) { if (_database == null) return; - var callerName = caller == null ? "Console" : caller.PlayerName; var callerSteamId = caller?.SteamID.ToString() ?? "Console"; var foundPlayerName = string.Empty; @@ -937,8 +919,7 @@ namespace CS2_SimpleAdmin var pattern = command.GetArg(1); var found = false; - MuteManager _muteManager = new(_database); - PlayerPenaltyManager playerPenaltyManager = new(); + MuteManager muteManager = new(_database); if (Helper.IsValidSteamId64(pattern)) { @@ -949,9 +930,9 @@ namespace CS2_SimpleAdmin if (player != null && player.IsValid) { if (TagsDetected) - Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}"); + Server.ExecuteCommand($"css_tag_unmute {player.SteamID}"); - PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Silence); + PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Silence); player.VoiceFlags = VoiceFlags.Normal; found = true; foundPlayerName = player.PlayerName; @@ -968,9 +949,9 @@ namespace CS2_SimpleAdmin if (player != null && player.IsValid) { if (TagsDetected) - Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}"); + Server.ExecuteCommand($"css_tag_unmute {player.SteamID}"); - PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Silence); + PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Silence); player.VoiceFlags = VoiceFlags.Normal; pattern = player.SteamID.ToString(); found = true; @@ -982,15 +963,13 @@ namespace CS2_SimpleAdmin if (found) { - Task.Run(async () => { await _muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason, 2); }); // Unmute by type 2 (silence) + Task.Run(async () => { await muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason, 2); }); // Unmute by type 2 (silence) command.ReplyToCommand($"Unsilenced player {foundPlayerName}."); - return; } else { - Task.Run(async () => { await _muteManager.UnmutePlayer(pattern, callerSteamId, reason, 2); }); // Unmute by type 2 (silence) + Task.Run(async () => { await muteManager.UnmutePlayer(pattern, callerSteamId, reason, 2); }); // Unmute by type 2 (silence) command.ReplyToCommand($"Unsilenced offline player with pattern {pattern}."); - return; } /* TargetResult? targets = GetTarget(command); diff --git a/Commands/basevotes.cs b/Commands/basevotes.cs index 96593da..f27207a 100644 --- a/Commands/basevotes.cs +++ b/Commands/basevotes.cs @@ -15,8 +15,7 @@ namespace CS2_SimpleAdmin [CommandHelper(minArgs: 2, usage: " [... options ...]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] public void OnVoteCommand(CCSPlayerController? caller, CommandInfo command) { - var callerName = caller == null ? "Console" : caller.PlayerName; - if (command.GetArg(1) == null || command.GetArg(1).Length < 0 || command.ArgCount < 2) + if (command.ArgCount < 2) return; Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); @@ -47,8 +46,8 @@ namespace CS2_SimpleAdmin voteMenu.PostSelectAction = PostSelectAction.Close; - Helper.PrintToCenterAll(_localizer!["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]); - StringBuilder sb = new(_localizer!["sa_prefix"]); + Helper.PrintToCenterAll(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]); + StringBuilder sb = new(_localizer["sa_prefix"]); sb.Append(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]); player.PrintToChat(sb.ToString()); diff --git a/Commands/funcommands.cs b/Commands/funcommands.cs index 4da16b4..73f8e45 100644 --- a/Commands/funcommands.cs +++ b/Commands/funcommands.cs @@ -3,7 +3,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration; using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; -using CounterStrikeSharp.API.Modules.Commands.Targeting; using System.Text; namespace CS2_SimpleAdmin diff --git a/Commands/playercommands.cs b/Commands/playercommands.cs index 9d8fcc7..9e80e33 100644 --- a/Commands/playercommands.cs +++ b/Commands/playercommands.cs @@ -3,7 +3,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration; using CounterStrikeSharp.API.Core.Translations; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; -using CounterStrikeSharp.API.Modules.Commands.Targeting; using CounterStrikeSharp.API.Modules.Entities.Constants; using CounterStrikeSharp.API.Modules.Memory; using CounterStrikeSharp.API.Modules.Utils; @@ -22,7 +21,7 @@ namespace CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); playersToTarget.ForEach(player => { @@ -66,7 +65,7 @@ namespace CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); var weaponName = command.GetArg(2); // check if item is typed @@ -104,10 +103,10 @@ namespace CS2_SimpleAdmin public void GiveWeapon(CCSPlayerController? caller, CCSPlayerController player, CsItem weapon, string? callerName = null) { - Helper.LogCommand(caller, $"css_give {player?.PlayerName} {weapon.ToString()}"); + Helper.LogCommand(caller, $"css_give {player.PlayerName} {weapon.ToString()}"); - player?.GiveNamedItem(weapon); - SubGiveWeapon(caller, player!, weapon.ToString(), callerName); + player.GiveNamedItem(weapon); + SubGiveWeapon(caller, player, weapon.ToString(), callerName); } private void GiveWeapon(CCSPlayerController? caller, CCSPlayerController player, string weaponName, string? callerName = null, CommandInfo? command = null) @@ -118,8 +117,8 @@ namespace CS2_SimpleAdmin Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); } - player?.GiveNamedItem(weaponName); - SubGiveWeapon(caller, player!, weaponName, callerName); + player.GiveNamedItem(weaponName); + SubGiveWeapon(caller, player, weaponName, callerName); } private void SubGiveWeapon(CCSPlayerController? caller, CCSPlayerController player, string weaponName, string? callerName = null) @@ -147,7 +146,7 @@ namespace CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); playersToTarget.ForEach(player => { @@ -190,29 +189,28 @@ namespace CS2_SimpleAdmin [CommandHelper(minArgs: 1, usage: "<#userid or name> ", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] public void OnHpCommand(CCSPlayerController? caller, CommandInfo command) { - var callerName = caller == null ? "Console" : caller.PlayerName; int.TryParse(command.GetArg(2), out var health); var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); playersToTarget.ForEach(player => { if (caller!.CanTarget(player)) { - SetHp(caller, player, health, callerName, command); + SetHp(caller, player, health, command); } }); } - public void SetHp(CCSPlayerController? caller, CCSPlayerController? player, int health, string? callerName = null, CommandInfo? command = null) + public void SetHp(CCSPlayerController? caller, CCSPlayerController? player, int health, CommandInfo? command = null) { if (player != null && !player.IsBot && player.SteamID.ToString().Length != 17) return; - callerName = caller == null ? "Console" : caller.PlayerName; + var callerName = caller == null ? "Console" : caller.PlayerName; player.SetHp(health); @@ -245,7 +243,7 @@ namespace CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); playersToTarget.ForEach(player => { @@ -289,15 +287,14 @@ namespace CS2_SimpleAdmin public void OnGravityCommand(CCSPlayerController? caller, CommandInfo command) { var callerName = caller == null ? "Console" : caller.PlayerName; - var gravity = 1.0; - double.TryParse(command.GetArg(2), out gravity); + double.TryParse(command.GetArg(2), out var gravity); var targets = GetTarget(command); if (targets == null) return; Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); - var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); playersToTarget.ForEach(player => { @@ -346,7 +343,7 @@ namespace CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); playersToTarget.ForEach(player => { @@ -393,7 +390,7 @@ namespace CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); playersToTarget.ForEach(player => { @@ -444,13 +441,12 @@ namespace CS2_SimpleAdmin [CommandHelper(minArgs: 1, usage: "<#userid or name> [damage]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] public void OnSlapCommand(CCSPlayerController? caller, CommandInfo command) { - var callerName = caller == null ? "Console" : caller.PlayerName; var damage = 0; var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); if (command.ArgCount >= 2) { @@ -505,7 +501,7 @@ namespace CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets!.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); switch (teamName) { @@ -655,10 +651,10 @@ namespace CS2_SimpleAdmin { callerName ??= caller == null ? "Console" : caller.PlayerName; - if (CBasePlayerController_SetPawnFunc == null || player?.PlayerPawn.Value == null || !player.PlayerPawn.IsValid) return; + if (CBasePlayerControllerSetPawnFunc == null || player?.PlayerPawn.Value == null || !player.PlayerPawn.IsValid) return; var playerPawn = player.PlayerPawn.Value; - CBasePlayerController_SetPawnFunc.Invoke(player, playerPawn, true, false); + CBasePlayerControllerSetPawnFunc.Invoke(player, playerPawn, true, false); VirtualFunction.CreateVoid(player.Handle, GameData.GetOffset("CCSPlayerController_Respawn"))(player); @@ -689,14 +685,12 @@ namespace CS2_SimpleAdmin { if (caller == null || !caller.PawnIsAlive) return; - var callerName = caller.PlayerName; - var targets = GetTarget(command); if (targets == null || targets.Count() > 1) return; - var playersToTarget = targets!.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); Helper.LogCommand(caller, command); Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); @@ -706,13 +700,13 @@ namespace CS2_SimpleAdmin if (!player.IsBot && player.SteamID.ToString().Length != 17 || !player.PawnIsAlive) return; - if (!caller!.CanTarget(player)) return; - caller!.TeleportPlayer(player); - caller!.Pawn.Value!.ToggleNoclip(); + if (!caller.CanTarget(player)) return; + caller.TeleportPlayer(player); + caller.Pawn.Value!.ToggleNoclip(); AddTimer(3, () => { - caller!.Pawn.Value!.ToggleNoclip(); + caller.Pawn.Value!.ToggleNoclip(); }); if (silentPlayers.Contains(caller.Slot)) return; @@ -736,14 +730,12 @@ namespace CS2_SimpleAdmin { if (caller == null || !caller.PawnIsAlive) return; - var callerName = caller.PlayerName; - var targets = GetTarget(command); if (targets == null || targets.Count() > 1) return; - var playersToTarget = targets!.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList(); Helper.LogCommand(caller, command); Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer); @@ -753,13 +745,13 @@ namespace CS2_SimpleAdmin if (!player.IsBot && player.SteamID.ToString().Length != 17 || !player.PawnIsAlive) return; - if (!caller!.CanTarget(player)) return; - player!.TeleportPlayer(caller!); - caller!.Pawn.Value!.ToggleNoclip(); + if (!caller.CanTarget(player)) return; + player.TeleportPlayer(caller); + caller.Pawn.Value!.ToggleNoclip(); AddTimer(3, () => { - caller!.Pawn.Value!.ToggleNoclip(); + caller.Pawn.Value!.ToggleNoclip(); }); if (silentPlayers.Contains(caller.Slot)) return; diff --git a/Config.cs b/Config.cs index ab2b354..927a2ac 100644 --- a/Config.cs +++ b/Config.cs @@ -3,6 +3,24 @@ using System.Text.Json.Serialization; namespace CS2_SimpleAdmin { + public class DurationItem + { + [JsonPropertyName("name")] + public required string Name { get; set; } + + [JsonPropertyName("duration")] + public int Duration { get; set; } + } + + public class AdminFlag + { + [JsonPropertyName("name")] + public required string Name { get; set; } + + [JsonPropertyName("flag")] + public required string Flag { get; set; } + } + public class Discord { [JsonPropertyName("DiscordLogWebhook")] @@ -12,7 +30,7 @@ namespace CS2_SimpleAdmin public string DiscordPenaltyWebhook { get; set; } = ""; } - public class CustomServerCommandData + public abstract class CustomServerCommandData { [JsonPropertyName("Flag")] public string Flag { get; set; } = "@css/generic"; @@ -27,9 +45,71 @@ namespace CS2_SimpleAdmin public bool ExecuteOnClient { get; set; } = false; } + public class MenuConfig + { + [JsonPropertyName("Durations")] + public DurationItem[] Durations { get; set; } = + [ + new DurationItem { Name = "1 minute", Duration = 1 }, + new DurationItem { Name = "5 minutes", Duration = 5 }, + new DurationItem { Name = "15 minutes", Duration = 15 }, + new DurationItem { Name = "1 hour", Duration = 60 }, + new DurationItem { Name = "1 day", Duration = 60 * 24 }, + new DurationItem { Name = "7 days", Duration = 60 * 24 * 7 }, + new DurationItem { Name = "14 days", Duration = 60 * 24 * 14 }, + new DurationItem { Name = "30 days", Duration = 60 * 24 * 30 }, + new DurationItem { Name = "Permanent", Duration = 0 } + ]; + + [JsonPropertyName("BanReasons")] + public List BanReasons { get; set; } = + [ + "Hacking", + "Voice Abuse", + "Chat Abuse", + "Admin disrespect", + "Other" + ]; + + [JsonPropertyName("KickReasons")] + public List KickReasons { get; set; } = + [ + "Voice Abuse", + "Chat Abuse", + "Admin disrespect", + "Other" + ]; + + [JsonPropertyName("MuteReasons")] + public List MuteReasons { get; set; } = + [ + "Advertising", + "Spamming", + "Spectator camera abuse", + "Hate", + "Admin disrespect", + "Other" + ]; + + [JsonPropertyName("AdminFlags")] + public AdminFlag[] AdminFlags { get; set; } = + [ + new AdminFlag { Name = "Generic", Flag = "@css/generic" }, + new AdminFlag { Name = "Chat", Flag = "@css/chat" }, + new AdminFlag { Name = "Change Map", Flag = "@css/changemap" }, + new AdminFlag { Name = "Slay", Flag = "@css/slay" }, + new AdminFlag { Name = "Kick", Flag = "@css/kick" }, + new AdminFlag { Name = "Ban", Flag = "@css/ban" }, + new AdminFlag { Name = "Unban", Flag = "@css/unban" }, + new AdminFlag { Name = "Cvar", Flag = "@css/cvar" }, + new AdminFlag { Name = "Rcon", Flag = "@css/rcon" }, + new AdminFlag { Name = "Root (all flags)", Flag = "@css/root" } + ]; + } + public class CS2_SimpleAdminConfig : BasePluginConfig { - [JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 10; + [JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 12; [JsonPropertyName("DatabaseHost")] public string DatabaseHost { get; set; } = ""; @@ -59,26 +139,29 @@ namespace CS2_SimpleAdmin public bool DisableDangerousCommands { get; set; } = true; [JsonPropertyName("BanType")] - public int BanType { get; set; } = 1; + public int BanType { get; } = 1; [JsonPropertyName("MultiServerMode")] - public bool MultiServerMode { get; set; } = true; + public bool MultiServerMode { get; } = true; [JsonPropertyName("ExpireOldIpBans")] - public int ExpireOldIpBans { get; set; } = 0; + public int ExpireOldIpBans { get; } = 0; [JsonPropertyName("TeamSwitchType")] - public int TeamSwitchType { get; set; } = 1; + public int TeamSwitchType { get; } = 1; [JsonPropertyName("Discord")] - public Discord Discord { get; set; } = new Discord(); + public Discord Discord { get; } = new(); [JsonPropertyName("DefaultMaps")] - public List DefaultMaps { get; set; } = []; + public List DefaultMaps { get; } = []; [JsonPropertyName("WorkshopMaps")] - public List WorkshopMaps { get; set; } = []; + public List WorkshopMaps { get; } = []; [JsonPropertyName("CustomServerCommands")] public List CustomServerCommands { get; set; } = []; + + [JsonPropertyName("MenuConfig")] + public MenuConfig MenuConfigs { get; set; } = new(); } } \ No newline at end of file diff --git a/Events.cs b/Events.cs index 4b2afa9..da100c0 100644 --- a/Events.cs +++ b/Events.cs @@ -7,9 +7,7 @@ using CounterStrikeSharp.API.Modules.Cvars; using CounterStrikeSharp.API.Modules.Entities; using Dapper; using Microsoft.Extensions.Logging; -using System.Data; using System.Text; -using static Dapper.SqlMapper; namespace CS2_SimpleAdmin; @@ -50,7 +48,6 @@ public partial class CS2_SimpleAdmin #endif try { - PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager(); PlayerPenaltyManager.RemoveAllPenalties(player.Slot); if (TagsDetected) @@ -69,7 +66,7 @@ public partial class CS2_SimpleAdmin } SteamID? authorizedSteamId = player.AuthorizedSteamID; - if (authorizedSteamId != null && AdminSQLManager._adminCache.TryGetValue(authorizedSteamId, out var expirationTime) + if (authorizedSteamId != null && AdminSQLManager.AdminCache.TryGetValue(authorizedSteamId, out var expirationTime) && expirationTime <= DateTime.Now) { AdminManager.ClearPlayerPermissions(authorizedSteamId); @@ -113,7 +110,6 @@ public partial class CS2_SimpleAdmin var playerInfo = new PlayerInfo { UserId = player.UserId.Value, - Index = (ushort)player.Index, Slot = player.Slot, SteamId = player.SteamID.ToString(), Name = player.PlayerName, @@ -124,14 +120,13 @@ public partial class CS2_SimpleAdmin Task.Run(async () => { // Initialize managers - BanManager _banManager = new(_database, Config); - MuteManager _muteManager = new(_database); - PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager(); + BanManager banManager = new(_database, Config); + MuteManager muteManager = new(_database); try { // Check if the player is banned - bool isBanned = await _banManager.IsPlayerBanned(playerInfo); + bool isBanned = await banManager.IsPlayerBanned(playerInfo); if (isBanned) { // Add player's IP and SteamID to bannedPlayers list if not already present @@ -155,7 +150,7 @@ public partial class CS2_SimpleAdmin } // Check if the player is muted - var activeMutes = await _muteManager.IsPlayerMuted(playerInfo.SteamId); + var activeMutes = await muteManager.IsPlayerMuted(playerInfo.SteamId); if (activeMutes.Count > 0) { foreach (var mute in activeMutes) @@ -231,8 +226,6 @@ public partial class CS2_SimpleAdmin if (info.GetArg(1).Length == 0) return HookResult.Handled; - PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager(); - if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) || PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence)) return HookResult.Handled; @@ -248,8 +241,6 @@ public partial class CS2_SimpleAdmin if (info.GetArg(1).Length == 0) return HookResult.Handled; - PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager(); - if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) || PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence)) return HookResult.Handled; @@ -290,7 +281,6 @@ public partial class CS2_SimpleAdmin godPlayers.Clear(); silentPlayers.Clear(); - PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager(); PlayerPenaltyManager.RemoveAllPenalties(); _database = new Database(dbConnectionString); @@ -309,17 +299,17 @@ public partial class CS2_SimpleAdmin Task.Run(async () => { - AdminSQLManager _adminManager = new(_database); - BanManager _banManager = new(_database, Config); - MuteManager _muteManager = new(_database); + AdminSQLManager adminManager = new(_database); + BanManager banManager = new(_database, Config); + MuteManager muteManager = new(_database); - await _banManager.ExpireOldBans(); - await _muteManager.ExpireOldMutes(); - await _adminManager.DeleteOldAdmins(); + await banManager.ExpireOldBans(); + await muteManager.ExpireOldMutes(); + await adminManager.DeleteOldAdmins(); try { - await _banManager.CheckOnlinePlayers(onlinePlayers); + await banManager.CheckOnlinePlayers(onlinePlayers); } catch { } @@ -337,7 +327,7 @@ public partial class CS2_SimpleAdmin if (!PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) && !PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence)) { if (TagsDetected) - Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}"); + Server.ExecuteCommand($"css_tag_unmute {player.SteamID}"); } if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence) || @@ -346,7 +336,7 @@ public partial class CS2_SimpleAdmin player.VoiceFlags = VoiceFlags.Normal; if (TagsDetected) - Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}"); + Server.ExecuteCommand($"css_tag_unmute {player.SteamID}"); } PlayerPenaltyManager.RemoveExpiredPenalties(); @@ -363,7 +353,7 @@ public partial class CS2_SimpleAdmin Task.Run(async () => { - AdminSQLManager _adminManager = new(_database); + AdminSQLManager adminManager = new(_database); try { await using var connection = await _database.GetConnectionAsync(); @@ -413,8 +403,8 @@ public partial class CS2_SimpleAdmin //await _adminManager.GiveAllGroupsFlags(); //await _adminManager.GiveAllFlags(); - await _adminManager.CrateGroupsJsonFile(); - await _adminManager.CreateAdminsJsonFile(); + await adminManager.CrateGroupsJsonFile(); + await adminManager.CreateAdminsJsonFile(); AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json"); AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json"); diff --git a/Helper.cs b/Helper.cs index 88f76cf..11f5056 100644 --- a/Helper.cs +++ b/Helper.cs @@ -25,6 +25,18 @@ namespace CS2_SimpleAdmin internal static CS2_SimpleAdminConfig? Config { get; set; } + public static bool IsDebugBuild + { + get + { + #if DEBUG + return true; + #else + return false; + #endif + } + } + public static List GetPlayerFromName(string name) { return Utilities.GetPlayers().FindAll(x => x.PlayerName.Equals(name, StringComparison.OrdinalIgnoreCase)); @@ -47,7 +59,9 @@ namespace CS2_SimpleAdmin public static List GetValidPlayers() { - return Utilities.GetPlayers().FindAll(p => p?.IsValid == true && p.SteamID.ToString().Length == 17 && !string.IsNullOrEmpty(p.IpAddress) && p is { Connected: PlayerConnectedState.PlayerConnected, IsBot: false, IsHLTV: false }); + return Utilities.GetPlayers().FindAll(p => + p.IsValid && p.SteamID.ToString().Length == 17 && !string.IsNullOrEmpty(p.IpAddress) && p is + { Connected: PlayerConnectedState.PlayerConnected, IsBot: false, IsHLTV: false }); } public static IEnumerable GetValidPlayersWithBots() @@ -96,11 +110,10 @@ namespace CS2_SimpleAdmin } } - AdminManager.SetPlayerImmunity(steamid, (uint)immunity); + AdminManager.SetPlayerImmunity(steamid, immunity); } - catch (Exception) + catch { - return; } } @@ -143,7 +156,7 @@ namespace CS2_SimpleAdmin var playerName = caller?.PlayerName ?? "Console"; - var hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer["sa_unknown"]; + var hostname = ConVar.Find("hostname")?.StringValue ?? CS2_SimpleAdmin._localizer["sa_unknown"]; CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer[ "sa_discord_log_command", @@ -157,19 +170,19 @@ namespace CS2_SimpleAdmin var playerName = caller?.PlayerName ?? "Console"; - var hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; + var hostname = ConVar.Find("hostname")?.StringValue ?? CS2_SimpleAdmin._localizer["sa_unknown"]; - CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer?["sa_discord_log_command", + CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer["sa_discord_log_command", playerName, command]}".Replace("HOSTNAME", hostname).Replace("**", "")); } public static IEnumerable GenerateEmbedsDiscord(string title, string description, string thumbnailUrl, Color color, string[] fieldNames, string[] fieldValues, bool[] inlineFlags) { - var hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; - var address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue()}"; + var hostname = ConVar.Find("hostname")?.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; + var address = $"{ConVar.Find("ip")?.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue()}"; - description = description.Replace("{hostname}", hostname ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"); - description = description.Replace("{address}", address ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"); + description = description.Replace("{hostname}", hostname); + description = description.Replace("{address}", address); var embed = new EmbedBuilder { @@ -188,7 +201,7 @@ namespace CS2_SimpleAdmin if ((i + 1) % 2 == 0 && i < fieldNames.Length - 1) { - embed.AddField("\u200b", "\u200b", false); + embed.AddField("\u200b", "\u200b"); } } @@ -199,7 +212,7 @@ namespace CS2_SimpleAdmin { if (discordWebhookClientLog == null || localizer == null) return; - var communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : ""; + var communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl() + ">" : ""; var callerName = caller != null ? caller.PlayerName : "Console"; discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", command.GetCommandString])); } @@ -223,34 +236,34 @@ namespace CS2_SimpleAdmin { if (discordWebhookClientPenalty == null || localizer == null) return; - var callerCommunityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : ""; - var targetCommunityUrl = target != null ? "<" + new SteamID(target.SteamID).ToCommunityUrl().ToString() + ">" : ""; + var callerCommunityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl() + ">" : ""; + var targetCommunityUrl = target != null ? "<" + new SteamID(target.SteamID).ToCommunityUrl() + ">" : ""; var callerName = caller != null ? caller.PlayerName : "Console"; - var targetName = target != null ? target.PlayerName : localizer?["sa_unknown"] ?? "Unknown"; - var targetSteamId = target != null ? new SteamID(target.SteamID).SteamId2.ToString() : localizer?["sa_unknown"] ?? "Unknown"; + var targetName = target != null ? target.PlayerName : localizer["sa_unknown"]; + var targetSteamId = target != null ? new SteamID(target.SteamID).SteamId2 : localizer["sa_unknown"]; - var time = duration != 0 ? ConvertMinutesToTime(duration) : localizer?["sa_permanent"] ?? "Permanent"; + var time = duration != 0 ? ConvertMinutesToTime(duration) : localizer["sa_permanent"]; string[] fieldNames = [ - localizer?["sa_player"] ?? "Player:", - localizer?["sa_steamid"] ?? "SteamID:", - localizer?["sa_duration"] ?? "Duration:", - localizer?["sa_reason"] ?? "Reason:", - localizer?["sa_admin"] ?? "Admin:"]; + localizer["sa_player"], + localizer["sa_steamid"], + localizer["sa_duration"], + localizer["sa_reason"], + localizer["sa_admin"]]; string[] fieldValues = [$"[{targetName}]({targetCommunityUrl})", targetSteamId, time, reason, $"[{callerName}]({callerCommunityUrl})"]; bool[] inlineFlags = [true, true, true, false, false]; - var hostname = ConVar.Find("hostname")!.StringValue ?? localizer?["sa_unknown"] ?? "Unknown"; + var hostname = ConVar.Find("hostname")?.StringValue ?? localizer["sa_unknown"]; var embed = new EmbedBuilder { Title = penalty switch { - PenaltyType.Ban => localizer?["sa_discord_penalty_ban"] ?? "Ban registrered", - PenaltyType.Mute => localizer?["sa_discord_penalty_mute"] ?? "Mute registrered", - PenaltyType.Gag => localizer?["sa_discord_penalty_gag"] ?? "Gag registrered", - PenaltyType.Silence => localizer?["sa_discord_penalty_silence"] ?? "Silence registrered", - _ => localizer?["sa_discord_penalty_unknown"] ?? "Unknown registrered", + PenaltyType.Ban => localizer["sa_discord_penalty_ban"], + PenaltyType.Mute => localizer["sa_discord_penalty_mute"], + PenaltyType.Gag => localizer["sa_discord_penalty_gag"], + PenaltyType.Silence => localizer["sa_discord_penalty_silence"], + _ => localizer["sa_discord_penalty_unknown"], }, Color = penalty switch @@ -277,8 +290,8 @@ namespace CS2_SimpleAdmin private static string GenerateMessageDiscord(string message) { - var hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; - var address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue()}"; + var hostname = ConVar.Find("hostname")?.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; + var address = $"{ConVar.Find("ip")?.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue()}"; message = message.Replace("HOSTNAME", hostname); message = message.Replace("ADDRESS", address); @@ -317,18 +330,22 @@ namespace CS2_SimpleAdmin caller = null; var callerName = caller == null ? "Console" : caller.PlayerName; - var communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : ""; - CS2_SimpleAdmin._discordWebhookClientLog.SendMessageAsync(GenerateMessageDiscord(CS2_SimpleAdmin._localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", commandString])); + var communityUrl = caller != null + ? "<" + new SteamID(caller.SteamID).ToCommunityUrl() + ">" + : ""; + CS2_SimpleAdmin._discordWebhookClientLog.SendMessageAsync(GenerateMessageDiscord( + CS2_SimpleAdmin._localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", + commandString])); } } - public class SchemaString(SchemaClass instance, string member) - : NativeObject(Schema.GetSchemaValue(instance.Handle, typeof(SchemaClass).Name!, member)) - where SchemaClass : NativeObject + public class SchemaString(TSchemaClass instance, string member) + : NativeObject(Schema.GetSchemaValue(instance.Handle, typeof(TSchemaClass).Name, member)) + where TSchemaClass : NativeObject { public unsafe void Set(string str) { - var bytes = SchemaString.GetStringBytes(str); + var bytes = GetStringBytes(str); for (var i = 0; i < bytes.Length; i++) { diff --git a/Managers/AdminSQLManager.cs b/Managers/AdminSQLManager.cs index c0dc9d0..15552c0 100644 --- a/Managers/AdminSQLManager.cs +++ b/Managers/AdminSQLManager.cs @@ -4,17 +4,14 @@ using Microsoft.Extensions.Logging; using MySqlConnector; using Newtonsoft.Json; using System.Collections.Concurrent; -using static Dapper.SqlMapper; namespace CS2_SimpleAdmin; public class AdminSQLManager(Database database) { - private readonly Database _database = database; - // Unused for now //public static readonly ConcurrentDictionary> _adminCache = new ConcurrentDictionary>(); - public static readonly ConcurrentDictionary _adminCache = new(); + public static readonly ConcurrentDictionary AdminCache = new(); /* public async Task, int)>> GetAdminFlags(string steamId) @@ -59,28 +56,24 @@ public class AdminSQLManager(Database database) } */ - public async Task, int, DateTime?)>> GetAllPlayersFlags() + private async Task, int, DateTime?)>> GetAllPlayersFlags() { var now = DateTime.UtcNow.ToLocalTime(); try { - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); - string sql = @" - SELECT sa_admins.player_steamid, sa_admins.player_name, sa_admins_flags.flag, sa_admins.immunity, sa_admins.ends - FROM sa_admins_flags - JOIN sa_admins ON sa_admins_flags.admin_id = sa_admins.id - WHERE (sa_admins.ends IS NULL OR sa_admins.ends > @CurrentTime) - AND (sa_admins.server_id IS NULL OR sa_admins.server_id = @serverid) - ORDER BY sa_admins.player_steamid"; + const string sql = """ + SELECT sa_admins.player_steamid, sa_admins.player_name, sa_admins_flags.flag, sa_admins.immunity, sa_admins.ends + FROM sa_admins_flags + JOIN sa_admins ON sa_admins_flags.admin_id = sa_admins.id + WHERE (sa_admins.ends IS NULL OR sa_admins.ends > @CurrentTime) + AND (sa_admins.server_id IS NULL OR sa_admins.server_id = @serverid) + ORDER BY sa_admins.player_steamid + """; - var activeFlags = (await connection.QueryAsync(sql, new { CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId }))?.ToList(); - - if (activeFlags == null) - { - return []; - } + var activeFlags = (await connection.QueryAsync(sql, new { CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId })).ToList(); List<(string, string, List, int, DateTime?)> filteredFlagsWithImmunity = []; var currentSteamId = string.Empty; @@ -95,7 +88,7 @@ public class AdminSQLManager(Database database) { continue; } - + if (!flagInfoDict.TryGetValue("player_steamid", out var steamIdObj) || !flagInfoDict.TryGetValue("player_name", out var playerNameObj) || !flagInfoDict.TryGetValue("flag", out var flagObj) || @@ -113,11 +106,14 @@ public class AdminSQLManager(Database database) continue; } - if (DateTime.TryParse(endsObj.ToString(), out var parsedEnds)) + if (ends != null) { - ends = parsedEnds; + if (DateTime.TryParse(endsObj.ToString(), out var parsedEnds)) + { + ends = parsedEnds; + } } - + if (currentSteamId != steamId && !string.IsNullOrEmpty(currentSteamId)) { filteredFlagsWithImmunity.Add((currentSteamId, currentPlayerName, currentFlags, immunityValue, ends)); @@ -127,6 +123,7 @@ public class AdminSQLManager(Database database) currentSteamId = steamId; currentPlayerName = playerName; currentFlags.Add(flag); + } if (!string.IsNullOrEmpty(currentSteamId)) @@ -209,18 +206,19 @@ public class AdminSQLManager(Database database) private async Task, int)>> GetAllGroupsData() { - await using MySqlConnection connection = await _database.GetConnectionAsync(); + await using MySqlConnection connection = await database.GetConnectionAsync(); try { var sql = "SELECT group_id FROM sa_groups_servers WHERE server_id = @serverid"; var groupDataSql = connection.Query(sql, new { serverid = CS2_SimpleAdmin.ServerId }).ToList(); - sql = @" - SELECT g.group_id, sg.name AS group_name, sg.immunity, f.flag - FROM sa_groups_flags f - JOIN sa_groups_servers g ON f.group_id = g.group_id - JOIN sa_groups sg ON sg.id = g.group_id - WHERE g.server_id = @serverid"; + sql = """ + SELECT g.group_id, sg.name AS group_name, sg.immunity, f.flag + FROM sa_groups_flags f + JOIN sa_groups_servers g ON f.group_id = g.group_id + JOIN sa_groups sg ON sg.id = g.group_id + WHERE g.server_id = @serverid + """; var groupData = connection.Query(sql, new { serverid = CS2_SimpleAdmin.ServerId }).ToList(); @@ -350,9 +348,9 @@ public class AdminSQLManager(Database database) steamId = id; } - if (steamId != null && !_adminCache.ContainsKey(steamId)) + if (steamId != null && !AdminCache.ContainsKey(steamId)) { - _adminCache.TryAdd(steamId, player.ends); + AdminCache.TryAdd(steamId, player.ends); } return new @@ -381,10 +379,11 @@ public class AdminSQLManager(Database database) try { - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); - var sql = ""; - sql = globalDelete ? "DELETE FROM sa_admins WHERE player_steamid = @PlayerSteamID" : "DELETE FROM sa_admins WHERE player_steamid = @PlayerSteamID AND server_id = @ServerId"; + var sql = globalDelete + ? "DELETE FROM sa_admins WHERE player_steamid = @PlayerSteamID" + : "DELETE FROM sa_admins WHERE player_steamid = @PlayerSteamID AND server_id = @ServerId"; await connection.ExecuteAsync(sql, new { PlayerSteamID = playerSteamId, CS2_SimpleAdmin.ServerId }); } @@ -405,7 +404,7 @@ public class AdminSQLManager(Database database) try { - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); // Insert admin into sa_admins table const string insertAdminSql = "INSERT INTO `sa_admins` (`player_steamid`, `player_name`, `immunity`, `ends`, `created`, `server_id`) " + @@ -460,7 +459,7 @@ public class AdminSQLManager(Database database) { if (string.IsNullOrEmpty(groupName) || flagsList.Count == 0) return; - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); try { // Insert group into sa_groups table @@ -502,7 +501,7 @@ public class AdminSQLManager(Database database) { if (string.IsNullOrEmpty(groupName)) return; - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); try { const string sql = "DELETE FROM `sa_groups` WHERE name = @groupName"; @@ -518,7 +517,7 @@ public class AdminSQLManager(Database database) { try { - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); const string sql = "DELETE FROM sa_admins WHERE ends IS NOT NULL AND ends <= @CurrentTime"; await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now.ToLocalTime() }); diff --git a/Managers/BanManager.cs b/Managers/BanManager.cs index 66c7c77..a35926f 100644 --- a/Managers/BanManager.cs +++ b/Managers/BanManager.cs @@ -7,27 +7,23 @@ namespace CS2_SimpleAdmin; internal class BanManager(Database database, CS2_SimpleAdminConfig config) { - private readonly Database _database = database; - private readonly CS2_SimpleAdminConfig _config = config; - public async Task BanPlayer(PlayerInfo player, PlayerInfo issuer, string reason, int time = 0) { DateTime now = DateTime.UtcNow.ToLocalTime(); DateTime futureTime = now.AddMinutes(time).ToLocalTime(); + await using MySqlConnection connection = await database.GetConnectionAsync(); try { - await using MySqlConnection connection = await _database.GetConnectionAsync(); - - var sql = + const string sql = "INSERT INTO `sa_bans` (`player_steamid`, `player_name`, `player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " + - "VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)"; + "VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)"; await connection.ExecuteAsync(sql, new { playerSteamid = player.SteamId, playerName = player.Name, - playerIp = _config.BanType == 1 ? player.IpAddress : null, + playerIp = config.BanType == 1 ? player.IpAddress : null, adminSteamid = issuer.SteamId ?? "Console", adminName = issuer.Name ?? "Console", banReason = reason, @@ -49,7 +45,7 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config) try { - await using MySqlConnection connection = await _database.GetConnectionAsync(); + await using MySqlConnection connection = await database.GetConnectionAsync(); var sql = "INSERT INTO `sa_bans` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " + "VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)"; @@ -78,7 +74,7 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config) try { - await using MySqlConnection connection = await _database.GetConnectionAsync(); + await using MySqlConnection connection = await database.GetConnectionAsync(); var sql = "INSERT INTO `sa_bans` (`player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " + "VALUES (@playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)"; @@ -110,28 +106,25 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config) CS2_SimpleAdmin._logger.LogCritical($"IsPlayerBanned for {player.Name}"); #endif - int banCount = 0; + int banCount; DateTime currentTime = DateTime.Now.ToLocalTime(); try { - var sql = ""; - - sql = _config.MultiServerMode ? """ - - UPDATE sa_bans - SET player_ip = CASE WHEN player_ip IS NULL THEN @PlayerIP ELSE player_ip END, - player_name = CASE WHEN player_name IS NULL THEN @PlayerName ELSE player_name END - WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) - AND status = 'ACTIVE' - AND (duration = 0 OR ends > @CurrentTime); - - SELECT COUNT(*) FROM sa_bans - WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) - AND status = 'ACTIVE' - AND (duration = 0 OR ends > @CurrentTime); - """ : @" + var sql = config.MultiServerMode ? """ + UPDATE sa_bans + SET player_ip = CASE WHEN player_ip IS NULL THEN @PlayerIP ELSE player_ip END, + player_name = CASE WHEN player_name IS NULL THEN @PlayerName ELSE player_name END + WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) + AND status = 'ACTIVE' + AND (duration = 0 OR ends > @CurrentTime); + + SELECT COUNT(*) FROM sa_bans + WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) + AND status = 'ACTIVE' + AND (duration = 0 OR ends > @CurrentTime); + """ : @" UPDATE sa_bans SET player_ip = CASE WHEN player_ip IS NULL THEN @PlayerIP ELSE player_ip END, player_name = CASE WHEN player_name IS NULL THEN @PlayerName ELSE player_name END @@ -144,12 +137,12 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config) AND status = 'ACTIVE' AND (duration = 0 OR ends > @CurrentTime) AND server_id = @serverid;"; - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); var parameters = new { PlayerSteamID = player.SteamId, - PlayerIP = _config.BanType == 0 || string.IsNullOrEmpty(player.IpAddress) ? null : player.IpAddress, + PlayerIP = config.BanType == 0 || string.IsNullOrEmpty(player.IpAddress) ? null : player.IpAddress, PlayerName = !string.IsNullOrEmpty(player.Name) ? player.Name : string.Empty, CurrentTime = currentTime, serverid = CS2_SimpleAdmin.ServerId @@ -171,13 +164,13 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config) { var sql = ""; - sql = _config.MultiServerMode + sql = config.MultiServerMode ? "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) AND server_id = @serverid" : "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)"; int banCount; - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); if (!string.IsNullOrEmpty(player.IpAddress)) { @@ -211,10 +204,10 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config) } try { - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); - var sqlRetrieveBans = ""; - if (_config.MultiServerMode) + string sqlRetrieveBans; + if (config.MultiServerMode) { sqlRetrieveBans = "SELECT id FROM sa_bans WHERE (player_steamid = @pattern OR player_name = @pattern OR player_ip = @pattern) AND status = 'ACTIVE' " + "AND server_id = @serverid"; @@ -226,7 +219,7 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config) var bans = await connection.QueryAsync(sqlRetrieveBans, new { pattern = playerPattern, serverid = CS2_SimpleAdmin.ServerId }); var bansList = bans as dynamic[] ?? bans.ToArray(); - if (!bansList.Any()) + if (bansList.Length == 0) return; const string sqlAdmin = "SELECT id FROM sa_admins WHERE player_steamid = @adminSteamId"; @@ -269,10 +262,10 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config) { try { - await using var connection = await _database.GetConnectionAsync(); - var sql = ""; + await using var connection = await database.GetConnectionAsync(); + string sql; - if (_config.MultiServerMode) + if (config.MultiServerMode) { sql = "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) AND status = 'ACTIVE' AND" + " server_id = @serverid"; @@ -314,7 +307,7 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config) { var currentTime = DateTime.UtcNow.ToLocalTime(); - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); try { /* @@ -327,7 +320,7 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config) var sql = ""; - sql = _config.MultiServerMode ? """ + sql = config.MultiServerMode ? """ UPDATE sa_bans SET @@ -354,10 +347,10 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config) await connection.ExecuteAsync(sql, new { currentTime, serverid = CS2_SimpleAdmin.ServerId }); - if (_config.ExpireOldIpBans > 0) + if (config.ExpireOldIpBans > 0) { - var ipBansTime = currentTime.AddDays(-_config.ExpireOldIpBans).ToLocalTime(); - sql = _config.MultiServerMode ? """ + var ipBansTime = currentTime.AddDays(-config.ExpireOldIpBans).ToLocalTime(); + sql = config.MultiServerMode ? """ UPDATE sa_bans SET diff --git a/Managers/MuteManager.cs b/Managers/MuteManager.cs index 8ce9787..060e39f 100644 --- a/Managers/MuteManager.cs +++ b/Managers/MuteManager.cs @@ -1,18 +1,14 @@ using Dapper; using Microsoft.Extensions.Logging; -using MySqlConnector; namespace CS2_SimpleAdmin; internal class MuteManager(Database database) { - private readonly Database _database = database; - public async Task MutePlayer(PlayerInfo player, PlayerInfo issuer, string reason, int time = 0, int type = 0) { if (player.SteamId == null) return; - var now = DateTime.UtcNow.ToLocalTime(); var futureTime = now.AddMinutes(time).ToLocalTime(); @@ -25,7 +21,7 @@ internal class MuteManager(Database database) try { - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); const string sql = "INSERT INTO `sa_mutes` (`player_steamid`, `player_name`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " + "VALUES (@playerSteamid, @playerName, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)"; @@ -64,7 +60,7 @@ internal class MuteManager(Database database) try { - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); const string sql = "INSERT INTO `sa_mutes` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " + "VALUES (@playerSteamid, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)"; @@ -98,9 +94,9 @@ internal class MuteManager(Database database) try { - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); var currentTime = DateTime.Now.ToLocalTime(); - var sql = ""; + string sql; if (CS2_SimpleAdmin.Instance.Config.MultiServerMode) { @@ -126,11 +122,9 @@ internal class MuteManager(Database database) { try { - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); - var sql = ""; - - sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode + var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode ? "SELECT COUNT(*) FROM sa_mutes WHERE player_steamid = @PlayerSteamID AND server_id = @serverid" : "SELECT COUNT(*) FROM sa_mutes WHERE player_steamid = @PlayerSteamID"; @@ -152,7 +146,7 @@ internal class MuteManager(Database database) try { - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); var muteType = type switch { @@ -161,7 +155,7 @@ internal class MuteManager(Database database) _ => "GAG" }; - var sqlRetrieveMutes = ""; + string sqlRetrieveMutes; if (CS2_SimpleAdmin.Instance.Config.MultiServerMode) { @@ -217,10 +211,9 @@ internal class MuteManager(Database database) { try { - await using var connection = await _database.GetConnectionAsync(); + await using var connection = await database.GetConnectionAsync(); - var sql = ""; - sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode + var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode ? "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime AND server_id = @serverid" : "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime"; diff --git a/Managers/PlayerPenaltyManager.cs b/Managers/PlayerPenaltyManager.cs index 4392079..a08c684 100644 --- a/Managers/PlayerPenaltyManager.cs +++ b/Managers/PlayerPenaltyManager.cs @@ -12,7 +12,7 @@ public enum PenaltyType public class PlayerPenaltyManager { private static readonly ConcurrentDictionary>> Penalties = - new ConcurrentDictionary>>(); + new(); // Add a penalty for a player public static void AddPenalty(int slot, PenaltyType penaltyType, DateTime endDateTime, int durationSeconds) diff --git a/Menus/AdminMenu.cs b/Menus/AdminMenu.cs index fd7aa1f..81510a0 100644 --- a/Menus/AdminMenu.cs +++ b/Menus/AdminMenu.cs @@ -13,49 +13,53 @@ namespace CS2_SimpleAdmin.Menus public static void OpenMenu(CCSPlayerController player, BaseMenu menu) { - if (menu is CenterHtmlMenu centerHtmlMenu) + switch (menu) { - MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, player, centerHtmlMenu); - } - else if (menu is ChatMenu chatMenu) - { - MenuManager.OpenChatMenu(player, chatMenu); + case CenterHtmlMenu centerHtmlMenu: + MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, player, centerHtmlMenu); + break; + case ChatMenu chatMenu: + MenuManager.OpenChatMenu(player, chatMenu); + break; } } public static void OpenMenu(CCSPlayerController admin) { - if (admin == null || admin.IsValid == false) + if (admin.IsValid == false) return; + var localizer = CS2_SimpleAdmin._localizer; if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false) { - // TODO: Localize - admin.PrintToChat("[Simple Admin] You do not have permissions to use this command."); + admin.PrintToChat(localizer?["sa_prefix"] ?? + "[SimpleAdmin] " + + (localizer?["sa_no_permission"] ?? "You do not have permissions to use this command") + ); return; } - BaseMenu menu = CreateMenu("Simple Admin"); + var menu = CreateMenu(localizer?["sa_title"] ?? "SimpleAdmin"); List options = [ - new ChatMenuOptionData("Manage Players", () => ManagePlayersMenu.OpenMenu(admin)), - new ChatMenuOptionData("Manage Server", () => ManageServerMenu.OpenMenu(admin)), - new ChatMenuOptionData("Fun actions", () => FunActionsMenu.OpenMenu(admin)), + new ChatMenuOptionData(localizer?["sa_menu_players_manage"] ?? "Players Manage", () => ManagePlayersMenu.OpenMenu(admin)), + new ChatMenuOptionData(localizer?["sa_menu_server_manage"] ?? "Server Manage", () => ManageServerMenu.OpenMenu(admin)), + new ChatMenuOptionData(localizer?["sa_menu_fun_commands"] ?? "Fun Commands", () => FunActionsMenu.OpenMenu(admin)), ]; - List customCommands = CS2_SimpleAdmin.Instance.Config.CustomServerCommands; + var customCommands = CS2_SimpleAdmin.Instance.Config.CustomServerCommands; if (customCommands.Count > 0) { - options.Add(new ChatMenuOptionData("Custom Commands", () => CustomCommandsMenu.OpenMenu(admin))); + options.Add(new ChatMenuOptionData(localizer?["sa_menu_custom_commands"] ?? "Custom Commands", () => CustomCommandsMenu.OpenMenu(admin))); } if (AdminManager.PlayerHasPermissions(admin, "@css/root")) - options.Add(new ChatMenuOptionData("Manage Admins", () => ManageAdminsMenu.OpenMenu(admin))); + options.Add(new ChatMenuOptionData(localizer?["sa_menu_admins_manage"] ?? "Admins Manage", () => ManageAdminsMenu.OpenMenu(admin))); - foreach (ChatMenuOptionData menuOptionData in options) + foreach (var menuOptionData in options) { - string menuName = menuOptionData.name; - menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + var menuName = menuOptionData.Name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled); } OpenMenu(admin, menu); diff --git a/Menus/ChatMenuOptionData.cs b/Menus/ChatMenuOptionData.cs index 12df851..fe979ff 100644 --- a/Menus/ChatMenuOptionData.cs +++ b/Menus/ChatMenuOptionData.cs @@ -1,23 +1,9 @@ namespace CS2_SimpleAdmin.Menus { - public class ChatMenuOptionData + public class ChatMenuOptionData(string name, Action action, bool disabled = false) { - public string name; - public Action action; - public bool disabled = true; - - public ChatMenuOptionData(string name, Action action) - { - this.name = name; - this.action = action; - this.disabled = false; - } - - public ChatMenuOptionData(string name, Action action, bool disabled) - { - this.name = name; - this.action = action; - this.disabled = disabled; - } + public readonly string Name = name; + public readonly Action Action = action; + public readonly bool Disabled = disabled; } } \ No newline at end of file diff --git a/Menus/CustomCommandsMenu.cs b/Menus/CustomCommandsMenu.cs index dd1d9d1..28dc0d1 100644 --- a/Menus/CustomCommandsMenu.cs +++ b/Menus/CustomCommandsMenu.cs @@ -1,7 +1,6 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; -using CounterStrikeSharp.API.Modules.Menu; namespace CS2_SimpleAdmin.Menus { @@ -9,44 +8,41 @@ namespace CS2_SimpleAdmin.Menus { public static void OpenMenu(CCSPlayerController admin) { - if (admin == null || admin.IsValid == false) + if (admin.IsValid == false) return; + var localizer = CS2_SimpleAdmin._localizer; if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false) { - // TODO: Localize - admin.PrintToChat("[Simple Admin] You do not have permissions to use this command."); + admin.PrintToChat(localizer?["sa_prefix"] ?? + "[SimpleAdmin] " + + (localizer?["sa_no_permission"] ?? "You do not have permissions to use this command") + ); return; } - BaseMenu menu = AdminMenu.CreateMenu("Custom Commands"); - List options = new(); + var menu = AdminMenu.CreateMenu(localizer?["sa_menu_custom_commands"] ?? "Custom Commands"); + List options = []; - List customCommands = CS2_SimpleAdmin.Instance.Config.CustomServerCommands; - foreach (CustomServerCommandData customCommand in customCommands) - { - if (string.IsNullOrEmpty(customCommand.DisplayName) || string.IsNullOrEmpty(customCommand.Command)) - continue; - - bool hasRights = AdminManager.PlayerHasPermissions(admin, customCommand.Flag); - if (!hasRights) - continue; - - options.Add(new ChatMenuOptionData(customCommand.DisplayName, () => + var customCommands = CS2_SimpleAdmin.Instance.Config.CustomServerCommands; + options.AddRange(from customCommand in customCommands + where !string.IsNullOrEmpty(customCommand.DisplayName) && !string.IsNullOrEmpty(customCommand.Command) + let hasRights = AdminManager.PlayerHasPermissions(admin, customCommand.Flag) + where hasRights + select new ChatMenuOptionData(customCommand.DisplayName, () => { Helper.TryLogCommandOnDiscord(admin, customCommand.Command); - + if (customCommand.ExecuteOnClient) admin.ExecuteClientCommand(customCommand.Command); else Server.ExecuteCommand(customCommand.Command); })); - } - foreach (ChatMenuOptionData menuOptionData in options) + foreach (var menuOptionData in options) { - string menuName = menuOptionData.name; - menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + var menuName = menuOptionData.Name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action(); }, menuOptionData.Disabled); } AdminMenu.OpenMenu(admin, menu); diff --git a/Menus/DurationMenu.cs b/Menus/DurationMenu.cs index 29806a6..9337ca3 100644 --- a/Menus/DurationMenu.cs +++ b/Menus/DurationMenu.cs @@ -1,29 +1,16 @@ using CounterStrikeSharp.API.Core; -using CounterStrikeSharp.API.Modules.Menu; namespace CS2_SimpleAdmin.Menus { public static class DurationMenu { - // TODO: Localize - public static Tuple[] _durations = new[] - { - new Tuple("1 minute", 1), - new Tuple("5 minutes", 5), - new Tuple("15 minutes", 15), - new Tuple("1 hour", 60), - new Tuple("1 day", 60 * 24), - new Tuple("Permanent", 0) - }; - public static void OpenMenu(CCSPlayerController admin, string menuName, CCSPlayerController? player, Action onSelectAction) { - BaseMenu menu = AdminMenu.CreateMenu(menuName); + var menu = AdminMenu.CreateMenu(menuName); - foreach (Tuple duration in _durations) + foreach (var durationItem in CS2_SimpleAdmin.Instance.Config.MenuConfigs.Durations) { - string optionName = duration.Item1; - menu.AddMenuOption(optionName, (_, _) => { onSelectAction?.Invoke(admin, player, duration.Item2); }); + menu.AddMenuOption(durationItem.Name, (_, _) => { onSelectAction(admin, player, durationItem.Duration); }); } AdminMenu.OpenMenu(admin, menu); diff --git a/Menus/FunActionsMenu.cs b/Menus/FunActionsMenu.cs index 5778e1c..cbcd985 100644 --- a/Menus/FunActionsMenu.cs +++ b/Menus/FunActionsMenu.cs @@ -1,31 +1,29 @@ using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Entities.Constants; -using CounterStrikeSharp.API.Modules.Menu; namespace CS2_SimpleAdmin.Menus { public static class FunActionsMenu { - private static Dictionary? _weaponsCache = null; + private static Dictionary? _weaponsCache; private static Dictionary GetWeaponsCache { get { - if (_weaponsCache == null) + if (_weaponsCache != null) return _weaponsCache; + + var weaponsArray = Enum.GetValues(typeof(CsItem)); + + // avoid duplicates in the menu + _weaponsCache = new Dictionary(); + foreach (CsItem item in weaponsArray) { - var weaponsArray = Enum.GetValues(typeof(CsItem)); + if (item == CsItem.Tablet) + continue; - // avoid duplicates in the menu - _weaponsCache = new(); - foreach (CsItem item in weaponsArray) - { - if (item == CsItem.Tablet) - continue; - - _weaponsCache[(int)item] = item; - } + _weaponsCache[(int)item] = item; } return _weaponsCache; @@ -34,48 +32,50 @@ namespace CS2_SimpleAdmin.Menus public static void OpenMenu(CCSPlayerController admin) { - if (admin == null || admin.IsValid == false) + if (admin.IsValid == false) return; + var localizer = CS2_SimpleAdmin._localizer; if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false) { - // TODO: Localize - admin.PrintToChat("[Simple Admin] You do not have permissions to use this command."); + admin.PrintToChat(localizer?["sa_prefix"] ?? + "[SimpleAdmin] " + + (localizer?["sa_no_permission"] ?? "You do not have permissions to use this command") + ); return; } - var menu = AdminMenu.CreateMenu("Fun Actions"); - List options = new(); + var menu = AdminMenu.CreateMenu(localizer?["sa_menu_fun_commands"] ?? "Fun Commands"); + List options = []; // permissions var hasCheats = AdminManager.PlayerHasPermissions(admin, "@css/cheats"); var hasSlay = AdminManager.PlayerHasPermissions(admin, "@css/slay"); - // TODO: Localize options // options added in order if (hasCheats) { - options.Add(new ChatMenuOptionData("God Mode", () => PlayersMenu.OpenAliveMenu(admin, "God Mode", GodMode))); - options.Add(new ChatMenuOptionData("No Clip", () => PlayersMenu.OpenAliveMenu(admin, "No Clip", NoClip))); - options.Add(new ChatMenuOptionData("Respawn", () => PlayersMenu.OpenDeadMenu(admin, "Respawn", Respawn))); - options.Add(new ChatMenuOptionData("Give Weapon", () => PlayersMenu.OpenAliveMenu(admin, "Give Weapon", GiveWeaponMenu))); + options.Add(new ChatMenuOptionData(localizer?["sa_godmode"] ?? "God Mode", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_godmode"] ?? "God Mode", GodMode))); + options.Add(new ChatMenuOptionData(localizer?["sa_noclip"] ?? "No Clip", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_noclip"] ?? "No Clip", NoClip))); + options.Add(new ChatMenuOptionData(localizer?["sa_respawn"] ?? "Respawn", () => PlayersMenu.OpenDeadMenu(admin, localizer?["sa_respawn"] ?? "Respawn", Respawn))); + options.Add(new ChatMenuOptionData(localizer?["sa_give_weapon"] ?? "Give Weapon", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_give_weapon"] ?? "Give Weapon", GiveWeaponMenu))); } if (hasSlay) { - options.Add(new ChatMenuOptionData("Strip All Weapons", () => PlayersMenu.OpenAliveMenu(admin, "Strip All Weapons", StripWeapons))); - options.Add(new ChatMenuOptionData("Freeze", () => PlayersMenu.OpenAliveMenu(admin, "Freeze", Freeze))); - options.Add(new ChatMenuOptionData("HP", () => PlayersMenu.OpenAliveMenu(admin, "HP", SetHpMenu))); - options.Add(new ChatMenuOptionData("Speed", () => PlayersMenu.OpenAliveMenu(admin, "Speed", SetSpeedMenu))); - options.Add(new ChatMenuOptionData("Gravity", () => PlayersMenu.OpenAliveMenu(admin, "Gravity", SetGravityMenu))); - options.Add(new ChatMenuOptionData("Set Money", () => PlayersMenu.OpenMenu(admin, "Set Money", SetMoneyMenu))); + options.Add(new ChatMenuOptionData(localizer?["sa_strip_weapons"] ?? "Strip Weapons", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_strip_weapons"] ?? "Strip Weapons", StripWeapons))); + options.Add(new ChatMenuOptionData(localizer?["sa_freeze"] ?? "Freeze", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_freeze"] ?? "Freeze", Freeze))); + options.Add(new ChatMenuOptionData(localizer?["sa_set_hp"] ?? "Set Hp", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_set_hp"] ?? "Set Hp", SetHpMenu))); + options.Add(new ChatMenuOptionData(localizer?["sa_set_speed"] ?? "Set Speed", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_set_speed"] ?? "Set Speed", SetSpeedMenu))); + options.Add(new ChatMenuOptionData(localizer?["sa_set_gravity"] ?? "Set Gravity", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_set_gravity"] ?? "Set Gravity", SetGravityMenu))); + options.Add(new ChatMenuOptionData(localizer?["sa_set_money"] ?? "Set Money", () => PlayersMenu.OpenMenu(admin, localizer?["sa_set_money"] ?? "Set Money", SetMoneyMenu))); } foreach (var menuOptionData in options) { - var menuName = menuOptionData.name; - menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + var menuName = menuOptionData.Name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action(); }, menuOptionData.Disabled); } AdminMenu.OpenMenu(admin, menu); @@ -98,7 +98,7 @@ namespace CS2_SimpleAdmin.Menus private static void GiveWeaponMenu(CCSPlayerController admin, CCSPlayerController player) { - var menu = AdminMenu.CreateMenu($"Give Weapon: {player.PlayerName}"); + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_give_weapon"] ?? "Give Weapon"}: {player.PlayerName}"); foreach (var weapon in GetWeaponsCache) { @@ -120,7 +120,7 @@ namespace CS2_SimpleAdmin.Menus private static void Freeze(CCSPlayerController admin, CCSPlayerController? player) { - if (!(player?.PlayerPawn?.Value?.IsValid ?? false)) + if (!(player?.PlayerPawn.Value?.IsValid ?? false)) return; if (player.PlayerPawn.Value.MoveType != MoveType_t.MOVETYPE_OBSOLETE) @@ -143,18 +143,17 @@ namespace CS2_SimpleAdmin.Menus new Tuple("999", 999) }; - var menu = AdminMenu.CreateMenu($"Set HP: {player?.PlayerName}"); + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_set_hp"] ?? "Set Hp"}: {player?.PlayerName}"); - foreach (var hpTuple in hpArray) + foreach (var (optionName, value) in hpArray) { - var optionName = hpTuple.Item1; - menu.AddMenuOption(optionName, (_, _) => { SetHP(admin, player, hpTuple.Item2); }); + menu.AddMenuOption(optionName, (_, _) => { SetHp(admin, player, value); }); } AdminMenu.OpenMenu(admin, menu); } - private static void SetHP(CCSPlayerController admin, CCSPlayerController? player, int hp) + private static void SetHp(CCSPlayerController admin, CCSPlayerController? player, int hp) { CS2_SimpleAdmin.Instance.SetHp(admin, player, hp); } @@ -173,12 +172,11 @@ namespace CS2_SimpleAdmin.Menus new Tuple("4", 4) }; - var menu = AdminMenu.CreateMenu($"Set Speed: {player?.PlayerName}"); + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_set_speed"] ?? "Set Speed"}: {player?.PlayerName}"); - foreach (var speedTuple in speedArray) + foreach (var (optionName, value) in speedArray) { - var optionName = speedTuple.Item1; - menu.AddMenuOption(optionName, (_, _) => { SetSpeed(admin, player, speedTuple.Item2); }); + menu.AddMenuOption(optionName, (_, _) => { SetSpeed(admin, player, value); }); } AdminMenu.OpenMenu(admin, menu); @@ -201,12 +199,11 @@ namespace CS2_SimpleAdmin.Menus new Tuple("2", 2) }; - var menu = AdminMenu.CreateMenu($"Set Gravity: {player?.PlayerName}"); + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_set_gravity"] ?? "Set Gravity"}: {player?.PlayerName}"); - foreach (var gravityTuple in gravityArray) + foreach (var (optionName, value) in gravityArray) { - var optionName = gravityTuple.Item1; - menu.AddMenuOption(optionName, (_, _) => { SetGravity(admin, player, gravityTuple.Item2); }); + menu.AddMenuOption(optionName, (_, _) => { SetGravity(admin, player, value); }); } AdminMenu.OpenMenu(admin, menu); @@ -229,12 +226,11 @@ namespace CS2_SimpleAdmin.Menus new Tuple("$16000", 16000) }; - var menu = AdminMenu.CreateMenu($"Set Money: {player?.PlayerName}"); + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_set_money"] ?? "Set Money"}: {player?.PlayerName}"); - foreach (var moneyTuple in moneyArray) + foreach (var (optionName, value) in moneyArray) { - var optionName = moneyTuple.Item1; - menu.AddMenuOption(optionName, (_, _) => { SetMoney(admin, player, moneyTuple.Item2); }); + menu.AddMenuOption(optionName, (_, _) => { SetMoney(admin, player, value); }); } AdminMenu.OpenMenu(admin, menu); diff --git a/Menus/ManageAdminsMenu.cs b/Menus/ManageAdminsMenu.cs index 6d9c81b..023eafe 100644 --- a/Menus/ManageAdminsMenu.cs +++ b/Menus/ManageAdminsMenu.cs @@ -1,6 +1,5 @@ using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; -using CounterStrikeSharp.API.Modules.Menu; namespace CS2_SimpleAdmin.Menus { @@ -8,30 +7,34 @@ namespace CS2_SimpleAdmin.Menus { public static void OpenMenu(CCSPlayerController admin) { - if (admin == null || admin.IsValid == false) + if (admin.IsValid == false) return; - if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false) + var localizer = CS2_SimpleAdmin._localizer; + if (AdminManager.PlayerHasPermissions(admin, "@css/root") == false) { - // TODO: Localize - admin.PrintToChat("[Simple Admin] You do not have permissions to use this command."); + admin.PrintToChat(localizer?["sa_prefix"] ?? + "[SimpleAdmin] " + + (localizer?["sa_no_permission"] ?? "You do not have permissions to use this command") + ); return; } - BaseMenu menu = AdminMenu.CreateMenu("Manage Admins"); - List options = new(); - - // TODO: Localize options - // options added in order - - options.Add(new ChatMenuOptionData("Add Admin", () => PlayersMenu.OpenRealPlayersMenu(admin, "Add Admin", AddAdminMenu))); - options.Add(new ChatMenuOptionData("Remove Admin", () => PlayersMenu.OpenAdminPlayersMenu(admin, "Remove Admin", RemoveAdmin, player => player != admin && admin.CanTarget(player)))); - options.Add(new ChatMenuOptionData("Reload Admins", () => ReloadAdmins(admin))); + var menu = AdminMenu.CreateMenu(localizer?["sa_menu_admins_manage"] ?? "Admins Manage"); + List options = + [ + new ChatMenuOptionData(localizer?["sa_admin_add"] ?? "Add Admin", + () => PlayersMenu.OpenRealPlayersMenu(admin, localizer?["sa_admin_add"] ?? "Add Admin", AddAdminMenu)), + new ChatMenuOptionData(localizer?["sa_admin_remove"] ?? "Remove Admin", + () => PlayersMenu.OpenAdminPlayersMenu(admin, localizer?["sa_admin_remove"] ?? "Remove Admin", RemoveAdmin, + player => player != admin && admin.CanTarget(player))), + new ChatMenuOptionData(localizer?["sa_admin_reload"] ?? "Reload Admins", () => ReloadAdmins(admin)) + ]; foreach (var menuOptionData in options) { - var menuName = menuOptionData.name; - menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + var menuName = menuOptionData.Name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled); } AdminMenu.OpenMenu(admin, menu); @@ -39,28 +42,12 @@ namespace CS2_SimpleAdmin.Menus private static void AddAdminMenu(CCSPlayerController admin, CCSPlayerController player) { - var flags = new[] - { - new Tuple("Generic", "@css/generic"), - new Tuple("Chat", "@css/chat"), - new Tuple("Change Map", "@css/changemap"), - new Tuple("Slay", "@css/slay"), - new Tuple("Kick", "@css/kick"), - new Tuple("Ban", "@css/ban"), - new Tuple("Unban", "@css/unban"), - new Tuple("Cheats", "@css/cheats"), - new Tuple("CVAR", "@css/cvar"), - new Tuple("RCON", "@css/rcon"), - new Tuple("Root", "@css/root"), - }; + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_admin_add"] ?? "Add Admin"}: {player.PlayerName}"); - var menu = AdminMenu.CreateMenu($"Add Admin: {player.PlayerName}"); - - foreach (var flagsTuple in flags) + foreach (var adminFlag in CS2_SimpleAdmin.Instance.Config.MenuConfigs.AdminFlags) { - var optionName = flagsTuple.Item1; - var disabled = AdminManager.PlayerHasPermissions(player, flagsTuple.Item2); - menu.AddMenuOption(optionName, (_, _) => { AddAdmin(admin, player, flagsTuple.Item2); }, disabled); + var disabled = AdminManager.PlayerHasPermissions(player, adminFlag.Flag); + menu.AddMenuOption(adminFlag.Name, (_, _) => { AddAdmin(admin, player, adminFlag.Flag); }, disabled); } AdminMenu.OpenMenu(admin, menu); diff --git a/Menus/ManagePlayersMenu.cs b/Menus/ManagePlayersMenu.cs index 814c5d4..93b4411 100644 --- a/Menus/ManagePlayersMenu.cs +++ b/Menus/ManagePlayersMenu.cs @@ -1,6 +1,5 @@ using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; -using CounterStrikeSharp.API.Modules.Menu; using CounterStrikeSharp.API.Modules.Utils; namespace CS2_SimpleAdmin.Menus @@ -12,14 +11,17 @@ namespace CS2_SimpleAdmin.Menus if (admin.IsValid == false) return; + var localizer = CS2_SimpleAdmin._localizer; if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false) { - // TODO: Localize - admin.PrintToChat("[Simple Admin] You do not have permissions to use this command."); + admin.PrintToChat(localizer?["sa_prefix"] ?? + "[SimpleAdmin] " + + (localizer?["sa_no_permission"] ?? "You do not have permissions to use this command") + ); return; } - var menu = AdminMenu.CreateMenu("Manage Players"); + var menu = AdminMenu.CreateMenu(localizer?["sa_menu_players_manage"] ?? "Manage Players"); List options = []; // permissions @@ -33,36 +35,30 @@ namespace CS2_SimpleAdmin.Menus if (hasSlay) { - options.Add(new ChatMenuOptionData("Slap", () => PlayersMenu.OpenMenu(admin, "Slap", SlapMenu))); - options.Add(new ChatMenuOptionData("Slay", () => PlayersMenu.OpenMenu(admin, "Slay", Slay))); + options.Add(new ChatMenuOptionData(localizer?["sa_slap"] ?? "Slap", () => PlayersMenu.OpenMenu(admin, localizer?["sa_slap"] ?? "Slap", SlapMenu))); + options.Add(new ChatMenuOptionData(localizer?["sa_slay"] ?? "Slay", () => PlayersMenu.OpenMenu(admin, localizer?["sa_slay"] ?? "Slay", Slay))); } if (hasKick) - { - options.Add(new ChatMenuOptionData("Kick", () => PlayersMenu.OpenMenu(admin, "Kick", KickMenu))); - } + options.Add(new ChatMenuOptionData(localizer?["sa_kick"] ?? "Kick", () => PlayersMenu.OpenMenu(admin, localizer?["sa_kick"] ?? "Kick", KickMenu))); if (hasBan) - { - options.Add(new ChatMenuOptionData("Ban", () => PlayersMenu.OpenRealPlayersMenu(admin, "Ban", (admin, player) => DurationMenu.OpenMenu(admin, $"Ban: {player?.PlayerName}", player, BanMenu)))); - } + options.Add(new ChatMenuOptionData(localizer?["sa_ban"] ?? "Ban", () => PlayersMenu.OpenRealPlayersMenu(admin, localizer?["sa_ban"] ?? "Ban", (admin, player) => DurationMenu.OpenMenu(admin, $"{localizer?["sa_ban"] ?? "Ban"}: {player.PlayerName}", player, BanMenu)))); if (hasChat) { - options.Add(new ChatMenuOptionData("Gag", () => PlayersMenu.OpenRealPlayersMenu(admin, "Gag", (admin, player) => DurationMenu.OpenMenu(admin, $"Gag: {player?.PlayerName}", player, GagMenu)))); - options.Add(new ChatMenuOptionData("Mute", () => PlayersMenu.OpenRealPlayersMenu(admin, "Mute", (admin, player) => DurationMenu.OpenMenu(admin, $"Mute: {player?.PlayerName}", player, MuteMenu)))); - options.Add(new ChatMenuOptionData("Silence", () => PlayersMenu.OpenRealPlayersMenu(admin, "Silence", (admin, player) => DurationMenu.OpenMenu(admin, $"Silence: {player?.PlayerName}", player, SilenceMenu)))); + options.Add(new ChatMenuOptionData(localizer?["sa_gag"] ?? "Gag", () => PlayersMenu.OpenRealPlayersMenu(admin, localizer?["sa_gag"] ?? "Gag", (admin, player) => DurationMenu.OpenMenu(admin, $"{localizer?["sa_gag"] ?? "Gag"}: {player.PlayerName}", player, GagMenu)))); + options.Add(new ChatMenuOptionData(localizer?["sa_mute"] ?? "Mute", () => PlayersMenu.OpenRealPlayersMenu(admin, localizer?["sa_mute"] ?? "Mute", (admin, player) => DurationMenu.OpenMenu(admin, $"{localizer?["sa_mute"] ?? "Mute"}: {player.PlayerName}", player, MuteMenu)))); + options.Add(new ChatMenuOptionData(localizer?["sa_silence"] ?? "Silence", () => PlayersMenu.OpenRealPlayersMenu(admin, localizer?["sa_silence"] ?? "Silence", (admin, player) => DurationMenu.OpenMenu(admin, $"{localizer?["sa_silence"] ?? "Silence"}: {player.PlayerName}", player, SilenceMenu)))); } if (hasKick) - { - options.Add(new ChatMenuOptionData("Force Team", () => PlayersMenu.OpenMenu(admin, "Force Team", ForceTeamMenu))); - } + options.Add(new ChatMenuOptionData(localizer?["sa_team_force"] ?? "Force Team", () => PlayersMenu.OpenMenu(admin, localizer?["sa_team_force"] ?? "Force Team", ForceTeamMenu))); foreach (var menuOptionData in options) { - var menuName = menuOptionData.name; - menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + var menuName = menuOptionData.Name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled); } AdminMenu.OpenMenu(admin, menu); @@ -70,7 +66,7 @@ namespace CS2_SimpleAdmin.Menus private static void SlapMenu(CCSPlayerController admin, CCSPlayerController? player) { - var menu = AdminMenu.CreateMenu($"Slap: {player?.PlayerName}"); + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_slap"] ?? "Slap"}: {player?.PlayerName}"); List options = [ // options added in order @@ -84,8 +80,8 @@ namespace CS2_SimpleAdmin.Menus foreach (var menuOptionData in options) { - var menuName = menuOptionData.name; - menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + var menuName = menuOptionData.Name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled); } AdminMenu.OpenMenu(admin, menu); @@ -93,33 +89,28 @@ namespace CS2_SimpleAdmin.Menus private static void ApplySlapAndKeepMenu(CCSPlayerController admin, CCSPlayerController? player, int damage) { - if (player is null || !player.IsValid) return; + if (player is not { IsValid: true }) return; + CS2_SimpleAdmin.Instance.Slap(admin, player, damage); SlapMenu(admin, player); } private static void Slay(CCSPlayerController admin, CCSPlayerController? player) { - if (player is not null && player.IsValid) - CS2_SimpleAdmin.Instance.Slay(admin, player); + if (player is not { IsValid: true }) return; + + CS2_SimpleAdmin.Instance.Slay(admin, player); } private static void KickMenu(CCSPlayerController admin, CCSPlayerController? player) { - var menu = AdminMenu.CreateMenu($"Kick: {player?.PlayerName}"); - List options = - [ - "Voice Abuse", - "Chat Abuse", - "Admin disrespect", - "Other" - ]; + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_kick"] ?? "Kick"}: {player?.PlayerName}"); - foreach (var option in options) + foreach (var option in CS2_SimpleAdmin.Instance.Config.MenuConfigs.KickReasons) { menu.AddMenuOption(option, (_, _) => { - if (player is not null && player.IsValid) + if (player is { IsValid: true }) Kick(admin, player, option); }); } @@ -127,29 +118,22 @@ namespace CS2_SimpleAdmin.Menus AdminMenu.OpenMenu(admin, menu); } - private static void Kick(CCSPlayerController admin, CCSPlayerController? player, string reason) + private static void Kick(CCSPlayerController admin, CCSPlayerController? player, string? reason) { - if (player is not null && player.IsValid) - CS2_SimpleAdmin.Instance.Kick(admin, player, reason); + if (player is not { IsValid: true }) return; + + CS2_SimpleAdmin.Instance.Kick(admin, player, reason); } private static void BanMenu(CCSPlayerController admin, CCSPlayerController? player, int duration) { - var menu = AdminMenu.CreateMenu($"Ban: {player?.PlayerName}"); - List options = - [ - "Hacking", - "Voice Abuse", - "Chat Abuse", - "Admin disrespect", - "Other" - ]; + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_ban"] ?? "Ban"}: {player?.PlayerName}"); - foreach (var option in options) + foreach (var option in CS2_SimpleAdmin.Instance.Config.MenuConfigs.BanReasons) { menu.AddMenuOption(option, (_, _) => { - if (player is not null && player.IsValid) + if (player is { IsValid: true }) Ban(admin, player, duration, option); }); } @@ -159,29 +143,21 @@ namespace CS2_SimpleAdmin.Menus private static void Ban(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason) { - if (player is not null && player.IsValid) - CS2_SimpleAdmin.Instance.Ban(admin, player, duration, reason); + if (player is not { IsValid: true }) return; + + CS2_SimpleAdmin.Instance.Ban(admin, player, duration, reason); } private static void GagMenu(CCSPlayerController admin, CCSPlayerController? player, int duration) { // TODO: Localize and make options in config? - var menu = AdminMenu.CreateMenu($"Gag: {player?.PlayerName}"); - List options = - [ - "Advertising", - "Spamming", - "Spectator camera abuse", - "Hate", - "Admin disrespect", - "Other" - ]; + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_gag"] ?? "Gag"}: {player?.PlayerName}"); - foreach (var option in options) + foreach (var option in CS2_SimpleAdmin.Instance.Config.MenuConfigs.MuteReasons) { menu.AddMenuOption(option, (_, _) => { - if (player is not null && player.IsValid) + if (player is { IsValid: true }) Gag(admin, player, duration, option); }); } @@ -191,31 +167,21 @@ namespace CS2_SimpleAdmin.Menus private static void Gag(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason) { - if (player is not null && player.IsValid) - CS2_SimpleAdmin.Instance.Gag(admin, player, duration, reason); + if (player is not { IsValid: true }) return; + + CS2_SimpleAdmin.Gag(admin, player, duration, reason); } private static void MuteMenu(CCSPlayerController admin, CCSPlayerController? player, int duration) { // TODO: Localize and make options in config? - var menu = AdminMenu.CreateMenu($"Mute: {player?.PlayerName}"); - List options = - [ - "Shouting", - "Playing music", - "Advertising", - "Spamming", - "Spectator camera abuse", - "Hate", - "Admin disrespect", - "Other" - ]; + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_mute"] ?? "Mute"}: {player?.PlayerName}"); - foreach (var option in options) + foreach (var option in CS2_SimpleAdmin.Instance.Config.MenuConfigs.MuteReasons) { menu.AddMenuOption(option, (_, _) => { - if (player is not null && player.IsValid) + if (player is { IsValid: true }) Mute(admin, player, duration, option); }); } @@ -225,31 +191,21 @@ namespace CS2_SimpleAdmin.Menus private static void Mute(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason) { - if (player is not null && player.IsValid) - CS2_SimpleAdmin.Instance.Mute(admin, player, duration, reason); + if (player is not { IsValid: true }) return; + + CS2_SimpleAdmin.Instance.Mute(admin, player, duration, reason); } private static void SilenceMenu(CCSPlayerController admin, CCSPlayerController? player, int duration) { // TODO: Localize and make options in config? - var menu = AdminMenu.CreateMenu($"Silence: {player?.PlayerName}"); - List options = - [ - "Shouting", - "Playing music", - "Advertising", - "Spamming", - "Spectator camera abuse", - "Hate", - "Admin disrespect", - "Other" - ]; + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_silence"] ?? "Silence"}: {player?.PlayerName}"); - foreach (var option in options) + foreach (var option in CS2_SimpleAdmin.Instance.Config.MenuConfigs.MuteReasons) { menu.AddMenuOption(option, (_, _) => { - if (player is not null && player.IsValid) + if (player is { IsValid: true }) Silence(admin, player, duration, option); }); } @@ -259,26 +215,27 @@ namespace CS2_SimpleAdmin.Menus private static void Silence(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason) { - if (player is not null && player.IsValid) - CS2_SimpleAdmin.Instance.Silence(admin, player, duration, reason); + if (player is not { IsValid: true }) return; + + CS2_SimpleAdmin.Instance.Silence(admin, player, duration, reason); } private static void ForceTeamMenu(CCSPlayerController admin, CCSPlayerController? player) { // TODO: Localize - var menu = AdminMenu.CreateMenu($"Force {player?.PlayerName}'s Team"); + var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_team_force"] ?? "Force Team"} {player?.PlayerName}"); List options = [ - new ChatMenuOptionData("CT", () => ForceTeam(admin, player, "ct", CsTeam.CounterTerrorist)), - new ChatMenuOptionData("T", () => ForceTeam(admin, player, "t", CsTeam.Terrorist)), - new ChatMenuOptionData("Swap", () => ForceTeam(admin, player, "swap", CsTeam.Spectator)), - new ChatMenuOptionData("Spectator", () => ForceTeam(admin, player, "spec", CsTeam.Spectator)), + new ChatMenuOptionData(CS2_SimpleAdmin._localizer?["sa_team_ct"] ?? "CT", () => ForceTeam(admin, player, "ct", CsTeam.CounterTerrorist)), + new ChatMenuOptionData(CS2_SimpleAdmin._localizer?["sa_team_t"] ?? "T", () => ForceTeam(admin, player, "t", CsTeam.Terrorist)), + new ChatMenuOptionData(CS2_SimpleAdmin._localizer?["sa_team_swap"] ?? "Swap", () => ForceTeam(admin, player, "swap", CsTeam.Spectator)), + new ChatMenuOptionData(CS2_SimpleAdmin._localizer?["sa_team_spec"] ?? "Spec", () => ForceTeam(admin, player, "spec", CsTeam.Spectator)), ]; foreach (var menuOptionData in options) { - var menuName = menuOptionData.name; - menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + var menuName = menuOptionData.Name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled); } AdminMenu.OpenMenu(admin, menu); @@ -286,8 +243,9 @@ namespace CS2_SimpleAdmin.Menus private static void ForceTeam(CCSPlayerController admin, CCSPlayerController? player, string teamName, CsTeam teamNum) { - if (player is not null && player.IsValid) - CS2_SimpleAdmin.Instance.ChangeTeam(admin, player, teamName, teamNum, true); + if (player is not { IsValid: true }) return; + + CS2_SimpleAdmin.Instance.ChangeTeam(admin, player, teamName, teamNum, true); } } } \ No newline at end of file diff --git a/Menus/ManageServerMenu.cs b/Menus/ManageServerMenu.cs index ea75e80..35817ee 100644 --- a/Menus/ManageServerMenu.cs +++ b/Menus/ManageServerMenu.cs @@ -1,6 +1,5 @@ using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; -using CounterStrikeSharp.API.Modules.Menu; namespace CS2_SimpleAdmin.Menus { @@ -8,62 +7,58 @@ namespace CS2_SimpleAdmin.Menus { public static void OpenMenu(CCSPlayerController admin) { - if (admin == null || admin.IsValid == false) + if (admin.IsValid == false) return; + var localizer = CS2_SimpleAdmin._localizer; if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false) { - // TODO: Localize - admin.PrintToChat("[Simple Admin] You do not have permissions to use this command."); + admin.PrintToChat(localizer?["sa_prefix"] ?? + "[SimpleAdmin] " + + (localizer?["sa_no_permission"] ?? "You do not have permissions to use this command") + ); return; } - BaseMenu menu = AdminMenu.CreateMenu("Manage Server"); - List options = new(); + var menu = AdminMenu.CreateMenu(localizer?["sa_menu_server_manage"] ?? "Server Manage"); + List options = []; // permissions bool hasMap = AdminManager.PlayerHasPermissions(admin, "@css/changemap"); - // TODO: Localize options // options added in order if (hasMap) { - options.Add(new ChatMenuOptionData("Change Map", () => ChangeMapMenu(admin))); + options.Add(new ChatMenuOptionData(localizer?["sa_changemap"] ?? "Change Map", () => ChangeMapMenu(admin))); } - options.Add(new ChatMenuOptionData("Restart Game", () => CS2_SimpleAdmin.RestartGame(admin))); + options.Add(new ChatMenuOptionData(localizer?["sa_restart_game"] ?? "Restart Game", () => CS2_SimpleAdmin.RestartGame(admin))); - foreach (ChatMenuOptionData menuOptionData in options) + foreach (var menuOptionData in options) { - string menuName = menuOptionData.name; - menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + var menuName = menuOptionData.Name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled); } AdminMenu.OpenMenu(admin, menu); } - public static void ChangeMapMenu(CCSPlayerController admin) + private static void ChangeMapMenu(CCSPlayerController admin) { - BaseMenu menu = AdminMenu.CreateMenu($"Change Map"); - List options = new(); + var menu = AdminMenu.CreateMenu(CS2_SimpleAdmin._localizer?["sa_changemap"] ?? "Change Map"); + List options = []; - List maps = CS2_SimpleAdmin.Instance.Config.DefaultMaps; - foreach (string map in maps) - { - options.Add(new ChatMenuOptionData(map, () => ExecuteChangeMap(admin, map, false))); - } + var maps = CS2_SimpleAdmin.Instance.Config.DefaultMaps; + options.AddRange(maps.Select(map => new ChatMenuOptionData(map, () => ExecuteChangeMap(admin, map, false)))); - List wsMaps = CS2_SimpleAdmin.Instance.Config.WorkshopMaps; - foreach (string map in wsMaps) - { - options.Add(new ChatMenuOptionData($"{map} (WS)", () => ExecuteChangeMap(admin, map, true))); - } + var wsMaps = CS2_SimpleAdmin.Instance.Config.WorkshopMaps; + options.AddRange(wsMaps.Select(map => new ChatMenuOptionData($"{map} (WS)", () => ExecuteChangeMap(admin, map, true)))); - foreach (ChatMenuOptionData menuOptionData in options) + foreach (var menuOptionData in options) { - string menuName = menuOptionData.name; - menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + var menuName = menuOptionData.Name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled); } AdminMenu.OpenMenu(admin, menu); diff --git a/Menus/PlayersMenu.cs b/Menus/PlayersMenu.cs index 5ed5a4e..3af0530 100644 --- a/Menus/PlayersMenu.cs +++ b/Menus/PlayersMenu.cs @@ -1,6 +1,5 @@ using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; -using CounterStrikeSharp.API.Modules.Menu; using System.Web; namespace CS2_SimpleAdmin.Menus @@ -14,7 +13,7 @@ namespace CS2_SimpleAdmin.Menus public static void OpenAdminPlayersMenu(CCSPlayerController admin, string menuName, Action onSelectAction, Func? enableFilter = null) { - OpenMenu(admin, menuName, onSelectAction, p => AdminManager.GetPlayerAdminData(p)?.Flags?.Count > 0); + OpenMenu(admin, menuName, onSelectAction, p => AdminManager.GetPlayerAdminData(p)?.Flags.Count > 0); } public static void OpenAliveMenu(CCSPlayerController admin, string menuName, Action onSelectAction, Func? enableFilter = null) @@ -45,7 +44,7 @@ namespace CS2_SimpleAdmin.Menus if (optionName != null) menu.AddMenuOption(optionName, (_, _) => { - if (player != null) onSelectAction?.Invoke(admin, player); + if (player != null) onSelectAction.Invoke(admin, player); }, enabled == false); } diff --git a/PlayerInfo.cs b/PlayerInfo.cs index 4115a87..b8c0b41 100644 --- a/PlayerInfo.cs +++ b/PlayerInfo.cs @@ -2,7 +2,6 @@ { public class PlayerInfo { - public int? Index { get; set; } public int UserId { get; init; } public int Slot { get; init; } public string? SteamId { get; init; } diff --git a/lang/ar.json b/lang/ar.json index 02e81ce..0cc38f7 100644 --- a/lang/ar.json +++ b/lang/ar.json @@ -1,6 +1,47 @@ { + "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", + "sa_unknown": "مجهول", + "sa_no_permission": "ليس لديك الصلاحيات لاستخدام هذا الأمر.", + + "sa_admin_add": "إضافة مسؤول", + "sa_admin_remove": "إزالة المسؤول", + "sa_admin_reload": "إعادة تحميل المسؤولين", + + "sa_godmode": "وضع الإله", + "sa_noclip": "بدون قصاصات", + "sa_respawn": "إعادة الظهور", + "sa_give_weapon": "إعطاء سلاح", + "sa_strip_weapons": "تجريد الأسلحة", + "sa_freeze": "تجميد", + "sa_set_hp": "تعيين الصحة", + "sa_set_speed": "تعيين السرعة", + "sa_set_gravity": "تعيين الجاذبية", + "sa_set_money": "تعيين المال", + + "sa_changemap": "تغيير الخريطة", + "sa_restart_game": "إعادة تشغيل اللعبة", + + "sa_team_ct": "CT", + "sa_team_t": "T", + "sa_team_swap": "تبديل", + "sa_team_spec": "المشاهدة", + + "sa_slap": "صفعة", + "sa_slay": "قتل", + "sa_kick": "طرد", + "sa_ban": "حظر", + "sa_gag": "كتم", + "sa_mute": "كتم", + "sa_silence": "صمت", + "sa_team_force": "فرض الفريق", + + "sa_menu_custom_commands": "الأوامر المخصصة", + "sa_menu_server_manage": "إدارة الخادم", + "sa_menu_fun_commands": "أوامر ممتعة", + "sa_menu_admins_manage": "إدارة المسؤولين", + "sa_menu_players_manage": "إدارة اللاعبين", "sa_player": "اللاعب", "sa_steamid": "معرف البخار", diff --git a/lang/en.json b/lang/en.json index a2d39ce..41c07be 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,6 +1,47 @@ { + "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", + "sa_unknown": "Unknown", + "sa_no_permission": "You do not have permissions to use this command.", + + "sa_admin_add": "Add Admin", + "sa_admin_remove": "Remove Admin", + "sa_admin_reload": "Reload Admins", + + "sa_godmode": "God Mode", + "sa_noclip": "No Clip", + "sa_respawn": "Respawn", + "sa_give_weapon": "Give Weapon", + "sa_strip_weapons": "Strip Weapons", + "sa_freeze": "Freeze", + "sa_set_hp": "Set Hp", + "sa_set_speed": "Set Speed", + "sa_set_gravity": "Set Gravity", + "sa_set_money": "Set Money", + + "sa_changemap": "Change Map", + "sa_restart_game": "Restart Game", + + "sa_team_ct": "CT", + "sa_team_t": "T", + "sa_team_swap": "Swap", + "sa_team_spec": "Spec", + + "sa_slap": "Slap", + "sa_slay": "slay", + "sa_kick": "Kick", + "sa_ban": "Ban", + "sa_gag": "Gag", + "sa_mute": "Mute", + "sa_silence": "Silence", + "sa_team_force": "Force Team", + + "sa_menu_custom_commands": "Custom Commands", + "sa_menu_server_manage": "Server Manage", + "sa_menu_fun_commands": "Fun Commands", + "sa_menu_admins_manage": "Admins Manage", + "sa_menu_players_manage": "Players Manage", "sa_player": "Player", "sa_steamid": "SteamID", @@ -9,11 +50,11 @@ "sa_admin": "Admin", "sa_permanent": "Permanent", - "sa_discord_penalty_ban": "Ban registrered", - "sa_discord_penalty_mute": "Mute registrered", - "sa_discord_penalty_gag": "Gag registrered", - "sa_discord_penalty_silence": "Silence registrered", - "sa_discord_penalty_unknown": "Unknown registrered", + "sa_discord_penalty_ban": "Ban registered", + "sa_discord_penalty_mute": "Mute registered", + "sa_discord_penalty_gag": "Gag registered", + "sa_discord_penalty_silence": "Silence registered", + "sa_discord_penalty_unknown": "Unknown registered", "sa_player_ban_message_time": "You have been banned for {lightred}{0}{default} for {lightred}{1}{default} minutes by {lightred}{2}{default}!", "sa_player_ban_message_perm": "You have been banned permanently for {lightred}{0}{default} by {lightred}{1}{default}!", diff --git a/lang/es.json b/lang/es.json index cd1c49c..6672605 100644 --- a/lang/es.json +++ b/lang/es.json @@ -1,6 +1,47 @@ { + "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", + "sa_unknown": "Desconocido", + "sa_no_permission": "No tienes permisos para usar este comando.", + + "sa_admin_add": "Agregar Administrador", + "sa_admin_remove": "Eliminar Administrador", + "sa_admin_reload": "Recargar Administradores", + + "sa_godmode": "Modo Dios", + "sa_noclip": "Sin Colisión", + "sa_respawn": "Reaparecer", + "sa_give_weapon": "Dar Arma", + "sa_strip_weapons": "Eliminar Armas", + "sa_freeze": "Congelar", + "sa_set_hp": "Establecer Vida", + "sa_set_speed": "Establecer Velocidad", + "sa_set_gravity": "Establecer Gravedad", + "sa_set_money": "Establecer Dinero", + + "sa_changemap": "Cambiar Mapa", + "sa_restart_game": "Reiniciar Juego", + + "sa_team_ct": "CT", + "sa_team_t": "T", + "sa_team_swap": "Intercambiar", + "sa_team_spec": "Espectador", + + "sa_slap": "Golpear", + "sa_slay": "Matar", + "sa_kick": "Expulsar", + "sa_ban": "Banear", + "sa_gag": "Callar", + "sa_mute": "Silenciar", + "sa_silence": "Silencio", + "sa_team_force": "Forzar Equipo", + + "sa_menu_custom_commands": "Comandos Personalizados", + "sa_menu_server_manage": "Administrar Servidor", + "sa_menu_fun_commands": "Comandos Divertidos", + "sa_menu_admins_manage": "Administrar Administradores", + "sa_menu_players_manage": "Administrar Jugadores", "sa_player": "Jugador", "sa_steamid": "ID de Steam", diff --git a/lang/fa.json b/lang/fa.json index 1c057ba..79307b5 100644 --- a/lang/fa.json +++ b/lang/fa.json @@ -1,6 +1,47 @@ { + "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", + "sa_unknown": "ناشناخته", + "sa_no_permission": "شما دسترسی برای استفاده از این دستور را ندارید.", + + "sa_admin_add": "افزودن مدیر", + "sa_admin_remove": "حذف مدیر", + "sa_admin_reload": "بارگذاری مجدد مدیران", + + "sa_godmode": "حالت خدا", + "sa_noclip": "بدون بریدن", + "sa_respawn": "باززایی", + "sa_give_weapon": "دادن اسلحه", + "sa_strip_weapons": "برداشتن اسلحه", + "sa_freeze": "یخ‌زدن", + "sa_set_hp": "تنظیم پلیر", + "sa_set_speed": "تنظیم سرعت", + "sa_set_gravity": "تنظیم گرانش", + "sa_set_money": "تنظیم پول", + + "sa_changemap": "تغییر نقشه", + "sa_restart_game": "شروع مجدد بازی", + + "sa_team_ct": "CT", + "sa_team_t": "T", + "sa_team_swap": "جابه‌جایی", + "sa_team_spec": "ناظر", + + "sa_slap": "چپاد زدن", + "sa_slay": "کشتن", + "sa_kick": "اخراج", + "sa_ban": "مسدود کردن", + "sa_gag": "بی‌صدا کردن", + "sa_mute": "بی‌صدا کردن", + "sa_silence": "سکوت", + "sa_team_force": "اجبار تیم", + + "sa_menu_custom_commands": "دستورات سفارشی", + "sa_menu_server_manage": "مدیریت سرور", + "sa_menu_fun_commands": "دستورات جالب", + "sa_menu_admins_manage": "مدیریت مدیران", + "sa_menu_players_manage": "مدیریت بازیکنان", "sa_player": "بازیکن", "sa_steamid": "شناسه استیم", diff --git a/lang/fr.json b/lang/fr.json index 27797e7..54ca4fe 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -1,6 +1,47 @@ { + "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", + "sa_unknown": "Inconnu", + "sa_no_permission": "Vous n'avez pas les permissions pour utiliser cette commande.", + + "sa_admin_add": "Ajouter un administrateur", + "sa_admin_remove": "Supprimer un administrateur", + "sa_admin_reload": "Recharger les administrateurs", + + "sa_godmode": "Mode Dieu", + "sa_noclip": "Mode Spectateur", + "sa_respawn": "Réapparaître", + "sa_give_weapon": "Donner une arme", + "sa_strip_weapons": "Retirer les armes", + "sa_freeze": "Geler", + "sa_set_hp": "Définir les PV", + "sa_set_speed": "Définir la vitesse", + "sa_set_gravity": "Définir la gravité", + "sa_set_money": "Définir l'argent", + + "sa_changemap": "Changer de carte", + "sa_restart_game": "Redémarrer le jeu", + + "sa_team_ct": "CT", + "sa_team_t": "T", + "sa_team_swap": "Échanger", + "sa_team_spec": "Spectateur", + + "sa_slap": "Gifler", + "sa_slay": "Tuer", + "sa_kick": "Expulser", + "sa_ban": "Bannir", + "sa_gag": "Réduire au silence", + "sa_mute": "Muter", + "sa_silence": "Silence", + "sa_team_force": "Forcer l'équipe", + + "sa_menu_custom_commands": "Commandes personnalisées", + "sa_menu_server_manage": "Gérer le serveur", + "sa_menu_fun_commands": "Commandes amusantes", + "sa_menu_admins_manage": "Gérer les administrateurs", + "sa_menu_players_manage": "Gérer les joueurs", "sa_player": "Joueur", "sa_steamid": "ID Steam", diff --git a/lang/lv.json b/lang/lv.json index f8e2ea1..46f0115 100644 --- a/lang/lv.json +++ b/lang/lv.json @@ -1,6 +1,47 @@ { + "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", + "sa_unknown": "Nezināms", + "sa_no_permission": "Jums nav atļauju izmantot šo komandu.", + + "sa_admin_add": "Pievienot administratoru", + "sa_admin_remove": "Noņemt administratoru", + "sa_admin_reload": "Pārlādēt administratorus", + + "sa_godmode": "Dieva režīms", + "sa_noclip": "Bez šķēršļiem", + "sa_respawn": "Atdzimt", + "sa_give_weapon": "Dot ieroci", + "sa_strip_weapons": "Noņemt ieročus", + "sa_freeze": "Salauzt", + "sa_set_hp": "Iestatīt veselību", + "sa_set_speed": "Iestatīt ātrumu", + "sa_set_gravity": "Iestatīt gravitāciju", + "sa_set_money": "Iestatīt naudu", + + "sa_changemap": "Mainīt karti", + "sa_restart_game": "Restartēt spēli", + + "sa_team_ct": "CT", + "sa_team_t": "T", + "sa_team_swap": "Mainīt", + "sa_team_spec": "Skatītājs", + + "sa_slap": "Plašs", + "sa_slay": "Nogalināt", + "sa_kick": "Izraidīt", + "sa_ban": "Bloķēt", + "sa_gag": "Izslēgt runu", + "sa_mute": "Noklusināt", + "sa_silence": "Klusums", + "sa_team_force": "Spēka komanda", + + "sa_menu_custom_commands": "Pielāgotās komandas", + "sa_menu_server_manage": "Servera pārvaldība", + "sa_menu_fun_commands": "Jautras komandas", + "sa_menu_admins_manage": "Administratoru pārvaldība", + "sa_menu_players_manage": "Spēlētāju pārvaldība", "sa_player": "Spēlētājs", "sa_steamid": "Steam ID", diff --git a/lang/pl.json b/lang/pl.json index 2ddddd7..661863a 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -1,6 +1,47 @@ { + "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", + "sa_unknown": "Brak", + "sa_no_permission": "Nie masz uprawnień do korzystania z tej komendy.", + + "sa_admin_add": "Dodaj administratora", + "sa_admin_remove": "Usuń administratora", + "sa_admin_reload": "Przeładuj administratorów", + + "sa_godmode": "Tryb Boga", + "sa_noclip": "Tryb Latania", + "sa_respawn": "Odrodzenie", + "sa_give_weapon": "Daj broń", + "sa_strip_weapons": "Usuń bronie", + "sa_freeze": "Zamroź", + "sa_set_hp": "Ustaw HP", + "sa_set_speed": "Ustaw prędkość", + "sa_set_gravity": "Ustaw grawitację", + "sa_set_money": "Ustaw pieniądze", + + "sa_changemap": "Zmień mapę", + "sa_restart_game": "Zrestartuj mapę", + + "sa_team_ct": "CT", + "sa_team_t": "T", + "sa_team_swap": "Zamień", + "sa_team_spec": "Spec", + + "sa_slap": "Uderz", + "sa_slay": "Zabij", + "sa_kick": "Wyrzuć", + "sa_ban": "Zbanuj", + "sa_gag": "Zaknebluj", + "sa_mute": "Wycisz", + "sa_silence": "Ucisz", + "sa_team_force": "Wymuś drużynę", + + "sa_menu_custom_commands": "Komendy niestandardowe", + "sa_menu_server_manage": "Zarządzaj serwerem", + "sa_menu_fun_commands": "Komendy rozrywkowe", + "sa_menu_admins_manage": "Zarządzaj administratorami", + "sa_menu_players_manage": "Zarządzaj graczami", "sa_player": "Gracz", "sa_steamid": "SteamID", diff --git a/lang/pt-BR.json b/lang/pt-BR.json index b8a987d..0b0ee1d 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -1,6 +1,47 @@ { + "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", + "sa_unknown": "Desconhecido", + "sa_no_permission": "Você não tem permissão para usar este comando.", + + "sa_admin_add": "Adicionar Admin", + "sa_admin_remove": "Remover Admin", + "sa_admin_reload": "Recarregar Admins", + + "sa_godmode": "Modo Deus", + "sa_noclip": "Modo Espectador", + "sa_respawn": "Ressurgir", + "sa_give_weapon": "Dar Arma", + "sa_strip_weapons": "Remover Armas", + "sa_freeze": "Congelar", + "sa_set_hp": "Definir HP", + "sa_set_speed": "Definir Velocidade", + "sa_set_gravity": "Definir Gravidade", + "sa_set_money": "Definir Dinheiro", + + "sa_changemap": "Mudar Mapa", + "sa_restart_game": "Reiniciar Jogo", + + "sa_team_ct": "CT", + "sa_team_t": "T", + "sa_team_swap": "Trocar", + "sa_team_spec": "Espec", + + "sa_slap": "Tapa", + "sa_slay": "Matar", + "sa_kick": "Expulsar", + "sa_ban": "Banir", + "sa_gag": "Silenciar", + "sa_mute": "Mutar", + "sa_silence": "Silêncio", + "sa_team_force": "Forçar Time", + + "sa_menu_custom_commands": "Comandos Personalizados", + "sa_menu_server_manage": "Gerenciar Servidor", + "sa_menu_fun_commands": "Comandos Divertidos", + "sa_menu_admins_manage": "Gerenciar Admins", + "sa_menu_players_manage": "Gerenciar Jogadores", "sa_player": "Jogador", "sa_steamid": "SteamID", diff --git a/lang/ru.json b/lang/ru.json index 6b30dd0..e5cc262 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -1,6 +1,47 @@ { + "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", + "sa_unknown": "Неизвестный", + "sa_no_permission": "У вас нет прав для использования этой команды.", + + "sa_admin_add": "Добавить администратора", + "sa_admin_remove": "Удалить администратора", + "sa_admin_reload": "Перезагрузить администраторов", + + "sa_godmode": "Режим бога", + "sa_noclip": "Режим бесконечного прохождения", + "sa_respawn": "Возрождение", + "sa_give_weapon": "Выдать оружие", + "sa_strip_weapons": "Удалить оружие", + "sa_freeze": "Заморозить", + "sa_set_hp": "Установить здоровье", + "sa_set_speed": "Установить скорость", + "sa_set_gravity": "Установить гравитацию", + "sa_set_money": "Установить деньги", + + "sa_changemap": "Сменить карту", + "sa_restart_game": "Перезапустить игру", + + "sa_team_ct": "CT", + "sa_team_t": "T", + "sa_team_swap": "Поменять", + "sa_team_spec": "Спец", + + "sa_slap": "Шлепнуть", + "sa_slay": "Убить", + "sa_kick": "Выгнать", + "sa_ban": "Забанить", + "sa_gag": "Заглушить", + "sa_mute": "Отключить звук", + "sa_silence": "Тишина", + "sa_team_force": "Принудить к команде", + + "sa_menu_custom_commands": "Пользовательские команды", + "sa_menu_server_manage": "Управление сервером", + "sa_menu_fun_commands": "Развлекательные команды", + "sa_menu_admins_manage": "Управление администраторами", + "sa_menu_players_manage": "Управление игроками", "sa_player": "Игрок", "sa_steamid": "SteamID", diff --git a/lang/tr.json b/lang/tr.json index b337b6d..42dc51f 100644 --- a/lang/tr.json +++ b/lang/tr.json @@ -1,6 +1,47 @@ { + "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", + "sa_unknown": "Bilinmeyen", + "sa_no_permission": "Bu komutu kullanma izniniz yok.", + + "sa_admin_add": "Yönetici Ekle", + "sa_admin_remove": "Yönetici Kaldır", + "sa_admin_reload": "Yöneticileri Yeniden Yükle", + + "sa_godmode": "Tanrı Modu", + "sa_noclip": "Duvar Arkası Modu", + "sa_respawn": "Tekrar Doğma", + "sa_give_weapon": "Silah Ver", + "sa_strip_weapons": "Silahları Çıkart", + "sa_freeze": "Dondur", + "sa_set_hp": "HP Ayarla", + "sa_set_speed": "Hız Ayarla", + "sa_set_gravity": "Yerçekimi Ayarla", + "sa_set_money": "Para Ayarla", + + "sa_changemap": "Haritayı Değiştir", + "sa_restart_game": "Oyunu Yeniden Başlat", + + "sa_team_ct": "CT", + "sa_team_t": "T", + "sa_team_swap": "Değiştir", + "sa_team_spec": "İzleyici", + + "sa_slap": "Tokatla", + "sa_slay": "Öldür", + "sa_kick": "At", + "sa_ban": "Yasakla", + "sa_gag": "Ağzını Kapat", + "sa_mute": "Sustur", + "sa_silence": "Sessizlik", + "sa_team_force": "Takımı Zorla", + + "sa_menu_custom_commands": "Özel Komutlar", + "sa_menu_server_manage": "Sunucu Yönetimi", + "sa_menu_fun_commands": "Eğlenceli Komutlar", + "sa_menu_admins_manage": "Yönetici Yönetimi", + "sa_menu_players_manage": "Oyuncu Yönetimi", "sa_player": "Oyuncu", "sa_steamid": "SteamID", diff --git a/lang/zh-Hans.json b/lang/zh-Hans.json index 895c242..cee2630 100644 --- a/lang/zh-Hans.json +++ b/lang/zh-Hans.json @@ -1,6 +1,47 @@ { + "sa_title": "SimpleAdmin", "sa_prefix": "{lightred}[SA] {default}", + "sa_unknown": "未知", + "sa_no_permission": "您没有权限使用此命令。", + + "sa_admin_add": "添加管理员", + "sa_admin_remove": "移除管理员", + "sa_admin_reload": "重新加载管理员", + + "sa_godmode": "上帝模式", + "sa_noclip": "穿墙模式", + "sa_respawn": "重生", + "sa_give_weapon": "给予武器", + "sa_strip_weapons": "剥夺武器", + "sa_freeze": "冻结", + "sa_set_hp": "设置生命值", + "sa_set_speed": "设置速度", + "sa_set_gravity": "设置重力", + "sa_set_money": "设置金钱", + + "sa_changemap": "更换地图", + "sa_restart_game": "重启游戏", + + "sa_team_ct": "CT", + "sa_team_t": "T", + "sa_team_swap": "交换", + "sa_team_spec": "观战", + + "sa_slap": "掌掴", + "sa_slay": "杀死", + "sa_kick": "踢出", + "sa_ban": "封禁", + "sa_gag": "禁言", + "sa_mute": "静音", + "sa_silence": "沉默", + "sa_team_force": "强制队伍", + + "sa_menu_custom_commands": "自定义命令", + "sa_menu_server_manage": "服务器管理", + "sa_menu_fun_commands": "娱乐命令", + "sa_menu_admins_manage": "管理员管理", + "sa_menu_players_manage": "玩家管理", "sa_player": "玩家", "sa_steamid": "SteamID",