diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index 751d38a..b9d7467 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -13,9 +13,9 @@ using System.Collections.Concurrent; namespace CS2_SimpleAdmin; [MinimumApiVersion(163)] -public partial class CS2_SimpleAdmin: BasePlugin, IPluginConfig +public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig { - public static CS2_SimpleAdmin Instance { get; private set; } = null; + public static CS2_SimpleAdmin Instance { get; private set; } = new(); public static IStringLocalizer? _localizer; public static Dictionary voteAnswers = new Dictionary(); @@ -38,15 +38,13 @@ public partial class CS2_SimpleAdmin: BasePlugin, IPluginConfig? CBasePlayerController_SetPawnFunc = null; public override string ModuleName => "CS2-SimpleAdmin"; public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; - public override string ModuleAuthor => "daffyy"; - public override string ModuleVersion => "1.3.1a"; + public override string ModuleAuthor => "daffyy & Dliix66"; + public override string ModuleVersion => "1.3.2a"; public CS2_SimpleAdminConfig Config { get; set; } = new(); public override void Load(bool hotReload) { - Instance = this; - registerEvents(); if (hotReload) diff --git a/CS2-SimpleAdmin.csproj b/CS2-SimpleAdmin.csproj index 84b2f44..35ac26b 100644 --- a/CS2-SimpleAdmin.csproj +++ b/CS2-SimpleAdmin.csproj @@ -12,7 +12,7 @@ - + diff --git a/Commands/basebans.cs b/Commands/basebans.cs index f4ab09c..91d54ea 100644 --- a/Commands/basebans.cs +++ b/Commands/basebans.cs @@ -55,11 +55,12 @@ namespace CS2_SimpleAdmin }); } - internal void Ban(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, BanManager banManager = null) + internal void Ban(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, BanManager? banManager = null) { + if (_database == null) return; callerName ??= caller == null ? "Console" : caller.PlayerName; banManager ??= new BanManager(_database, Config); - + if (player.PawnIsAlive) { player.Pawn.Value!.Freeze(); diff --git a/Commands/basecommands.cs b/Commands/basecommands.cs index db34324..435f92d 100644 --- a/Commands/basecommands.cs +++ b/Commands/basecommands.cs @@ -8,10 +8,9 @@ using CounterStrikeSharp.API.Modules.Commands.Targeting; using CounterStrikeSharp.API.Modules.Cvars; using CounterStrikeSharp.API.Modules.Entities; using CounterStrikeSharp.API.Modules.Utils; +using CS2_SimpleAdmin.Menus; using Microsoft.Extensions.Logging; using System.Text; -using CS2_SimpleAdmin.Menus; -using Discord.Rest; namespace CS2_SimpleAdmin { @@ -27,20 +26,16 @@ namespace CS2_SimpleAdmin { try { - using (var connection = await _database.GetConnectionAsync()) - { - var commandText = "ALTER TABLE `sa_mutes` CHANGE `type` `type` ENUM('GAG','MUTE', 'SILENCE', '') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'GAG';"; + using var connection = await _database.GetConnectionAsync(); + var commandText = "ALTER TABLE `sa_mutes` CHANGE `type` `type` ENUM('GAG','MUTE', 'SILENCE', '') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'GAG';"; - using (var command = connection.CreateCommand()) - { - command.CommandText = commandText; - await command.ExecuteNonQueryAsync(); - } - } + using var command = connection.CreateCommand(); + command.CommandText = commandText; + await command.ExecuteNonQueryAsync(); } catch (Exception ex) { - Logger.LogError($"{ex.Message}"); + Logger.LogError(ex.Message); } }); } @@ -55,7 +50,7 @@ namespace CS2_SimpleAdmin AdminMenu.OpenMenu(caller); } - + [ConsoleCommand("css_adminhelp")] [RequiresPermissions("@css/generic")] public void OnAdminHelpCommand(CCSPlayerController? caller, CommandInfo command) @@ -117,6 +112,7 @@ namespace CS2_SimpleAdmin public 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); _ = _adminManager.AddAdminBySteamId(steamid, name, flags, immunity, time, globalAdmin); @@ -157,6 +153,7 @@ 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); @@ -173,7 +170,7 @@ namespace CS2_SimpleAdmin AdminManager.RemovePlayerAdminData(steamId); } }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); - + string msg = $"Removed flags from '{steamid}'"; if (command != null) command.ReplyToCommand(msg); @@ -197,6 +194,7 @@ namespace CS2_SimpleAdmin public void ReloadAdmins() { + if (_database == null) return; foreach (SteamID steamId in AdminSQLManager._adminCache.Keys.ToList()) { if (AdminSQLManager._adminCache.TryRemove(steamId, out _)) @@ -260,7 +258,7 @@ namespace CS2_SimpleAdmin List playersToTarget = targets!.Players.Where(player => player != null && player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList(); - Database database = new Database(dbConnectionString); + Database database = new(dbConnectionString); BanManager _banManager = new(database, Config); MuteManager _muteManager = new(_database); @@ -268,7 +266,7 @@ namespace CS2_SimpleAdmin { if (caller!.CanTarget(player)) { - PlayerInfo playerInfo = new PlayerInfo + PlayerInfo playerInfo = new() { UserId = player.UserId, Index = (int)player.Index, @@ -288,7 +286,7 @@ namespace CS2_SimpleAdmin Server.NextFrame(() => { Action printMethod = caller == null ? Server.PrintToConsole : caller.PrintToConsole; - + printMethod($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------"); printMethod($"• Clan: \"{player!.Clan}\" Name: \"{playerInfo.Name}\""); @@ -384,7 +382,7 @@ namespace CS2_SimpleAdmin }); } - public void Kick(CCSPlayerController? caller, CCSPlayerController player, string reason = "Unknown", string callerName = null) + public void Kick(CCSPlayerController? caller, CCSPlayerController player, string reason = "Unknown", string? callerName = null) { callerName ??= caller == null ? "Console" : caller.PlayerName; if (player.PawnIsAlive) @@ -430,7 +428,7 @@ namespace CS2_SimpleAdmin ChangeMap(caller, map, command); } - public void ChangeMap(CCSPlayerController caller, string map, CommandInfo? command = null) + public void ChangeMap(CCSPlayerController? caller, string map, CommandInfo? command = null) { string callerName = caller == null ? "Console" : caller.PlayerName; string _command = string.Empty; @@ -506,7 +504,7 @@ namespace CS2_SimpleAdmin ChangeWorkshopMap(caller, map, command); } - public void ChangeWorkshopMap(CCSPlayerController caller, string map, CommandInfo? command = null) + public void ChangeWorkshopMap(CCSPlayerController? caller, string map, CommandInfo? command = null) { string callerName = caller == null ? "Console" : caller.PlayerName; string _command = string.Empty; @@ -597,7 +595,7 @@ namespace CS2_SimpleAdmin command.ReplyToCommand($"{callerName} executed command {command.ArgString}."); Logger.LogInformation($"{callerName} executed command ({command.ArgString})."); } - + [ConsoleCommand("css_rr")] [ConsoleCommand("css_rg")] [ConsoleCommand("css_restart")] @@ -609,7 +607,7 @@ namespace CS2_SimpleAdmin RestartGame(caller); } - public void RestartGame(CCSPlayerController admin) + public static void RestartGame(CCSPlayerController? admin) { // TODO: Localize var name = admin == null ? "Console" : admin.PlayerName; diff --git a/Commands/basecomms.cs b/Commands/basecomms.cs index 75a081e..51196cd 100644 --- a/Commands/basecomms.cs +++ b/Commands/basecomms.cs @@ -55,12 +55,13 @@ namespace CS2_SimpleAdmin }); } - internal void Gag(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, MuteManager muteManager = null, PlayerPenaltyManager playerPenaltyManager = null) + internal void Gag(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, PlayerPenaltyManager? playerPenaltyManager = null) { + if (_database == null) return; callerName ??= caller == null ? "Console" : caller.PlayerName; muteManager ??= new MuteManager(_database); playerPenaltyManager ??= new PlayerPenaltyManager(); - + PlayerInfo playerInfo = new PlayerInfo { SteamId = player?.SteamID.ToString(), @@ -383,12 +384,13 @@ namespace CS2_SimpleAdmin }); } - internal void Mute(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, MuteManager muteManager = null, PlayerPenaltyManager playerPenaltyManager = null) + internal void Mute(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, PlayerPenaltyManager? playerPenaltyManager = null) { + if (_database == null) return; callerName ??= caller == null ? "Console" : caller.PlayerName; muteManager ??= new MuteManager(_database); playerPenaltyManager ??= new PlayerPenaltyManager(); - + PlayerInfo playerInfo = new PlayerInfo { SteamId = player?.SteamID.ToString(), @@ -688,12 +690,13 @@ namespace CS2_SimpleAdmin }); } - internal void Silence(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, MuteManager muteManager = null, PlayerPenaltyManager playerPenaltyManager = null) + internal void Silence(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, PlayerPenaltyManager? playerPenaltyManager = null) { + if (_database == null) return; callerName ??= caller == null ? "Console" : caller.PlayerName; muteManager ??= new MuteManager(_database); playerPenaltyManager ??= new PlayerPenaltyManager(); - + PlayerInfo playerInfo = new PlayerInfo { SteamId = player?.SteamID.ToString(), @@ -716,6 +719,8 @@ namespace CS2_SimpleAdmin if (TagsDetected) Server.ExecuteCommand($"css_tag_mute {player!.SteamID}"); + player!.VoiceFlags = VoiceFlags.Muted; + playerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time); if (time == 0) diff --git a/Commands/basevotes.cs b/Commands/basevotes.cs index 6c36606..c15e778 100644 --- a/Commands/basevotes.cs +++ b/Commands/basevotes.cs @@ -16,7 +16,7 @@ namespace CS2_SimpleAdmin [CommandHelper(minArgs: 2, usage: " [... options ...]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] public void OnVoteCommand(CCSPlayerController? caller, CommandInfo command) { - string callerName= caller == null ? "Console" : caller.PlayerName; + string callerName = caller == null ? "Console" : caller.PlayerName; if (command.GetArg(1) == null || command.GetArg(1).Length < 0 || command.ArgCount < 2) return; @@ -38,7 +38,7 @@ namespace CS2_SimpleAdmin for (int i = 2; i <= answersCount - 1; i++) { voteAnswers.Add(command.GetArg(i), 0); - voteMenu.AddMenuOption(command.GetArg(i), Helper.handleVotes); + voteMenu.AddMenuOption(command.GetArg(i), Helper.HandleVotes); } foreach (CCSPlayerController _player in Helper.GetValidPlayers()) diff --git a/Commands/funcommands.cs b/Commands/funcommands.cs index b0932c4..4aeda87 100644 --- a/Commands/funcommands.cs +++ b/Commands/funcommands.cs @@ -36,7 +36,7 @@ namespace CS2_SimpleAdmin }); } - public void NoClip(CCSPlayerController? caller, CCSPlayerController player, string callerName = null) + public void NoClip(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null) { callerName ??= caller == null ? "Console" : caller.PlayerName; player!.Pawn.Value!.ToggleNoclip(); @@ -84,7 +84,7 @@ namespace CS2_SimpleAdmin }); } - public void Freeze(CCSPlayerController? caller, CCSPlayerController player, int time, string callerName = null) + public void Freeze(CCSPlayerController? caller, CCSPlayerController player, int time, string? callerName = null) { callerName ??= caller == null ? "Console" : caller.PlayerName; @@ -132,7 +132,7 @@ namespace CS2_SimpleAdmin }); } - public void Unfreeze(CCSPlayerController? caller, CCSPlayerController player, string callerName = null) + public void Unfreeze(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null) { callerName ??= caller == null ? "Console" : caller.PlayerName; diff --git a/Commands/playercommands.cs b/Commands/playercommands.cs index 39381e6..772986c 100644 --- a/Commands/playercommands.cs +++ b/Commands/playercommands.cs @@ -5,11 +5,11 @@ using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Commands.Targeting; using CounterStrikeSharp.API.Modules.Entities; +using CounterStrikeSharp.API.Modules.Entities.Constants; using CounterStrikeSharp.API.Modules.Memory; using CounterStrikeSharp.API.Modules.Utils; using System.Collections.Concurrent; using System.Text; -using CounterStrikeSharp.API.Modules.Entities.Constants; namespace CS2_SimpleAdmin { @@ -38,13 +38,13 @@ namespace CS2_SimpleAdmin }); } - public void Slay(CCSPlayerController? caller, CCSPlayerController player, string callerName = null) + public void Slay(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null) { if (!player.IsBot && player.SteamID.ToString().Length != 17) return; callerName ??= caller == null ? "Console" : caller.PlayerName; - + player.CommitSuicide(false, true); if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot)) @@ -113,20 +113,20 @@ namespace CS2_SimpleAdmin }); } - public void GiveWeapon(CCSPlayerController? caller, CCSPlayerController player, CsItem weapon, string callerName = null) + public void GiveWeapon(CCSPlayerController? caller, CCSPlayerController player, CsItem weapon, string? callerName = null) { player.GiveNamedItem(weapon); SubGiveWeapon(caller, player, weapon.ToString(), callerName); } - public void GiveWeapon(CCSPlayerController? caller, CCSPlayerController player, string weaponName, string callerName = null) + public void GiveWeapon(CCSPlayerController? caller, CCSPlayerController player, string weaponName, string? callerName = null) { player.GiveNamedItem(weaponName); SubGiveWeapon(caller, player, weaponName, callerName); } - public void SubGiveWeapon(CCSPlayerController? caller, CCSPlayerController player, string weaponName, string callerName = null) + public void SubGiveWeapon(CCSPlayerController? caller, CCSPlayerController player, string weaponName, string? callerName = null) { callerName ??= caller == null ? "Console" : caller.PlayerName; - + if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot)) { foreach (CCSPlayerController _player in Helper.GetValidPlayers()) @@ -167,10 +167,10 @@ namespace CS2_SimpleAdmin }); } - public void StripWeapons(CCSPlayerController? caller, CCSPlayerController player, string callerName = null) + public void StripWeapons(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null) { callerName ??= caller == null ? "Console" : caller.PlayerName; - + if (!player.IsBot && player.SteamID.ToString().Length != 17) return; @@ -219,11 +219,13 @@ namespace CS2_SimpleAdmin }); } - public void SetHp(CCSPlayerController? caller, CCSPlayerController player, int health, string callerName = null) + public void SetHp(CCSPlayerController? caller, CCSPlayerController player, int health, string? callerName = null) { if (!player.IsBot && player.SteamID.ToString().Length != 17) return; + callerName = caller == null ? "Console" : caller.PlayerName; + player.SetHp(health); if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot)) @@ -272,12 +274,12 @@ namespace CS2_SimpleAdmin }); } - public void SetSpeed(CCSPlayerController? caller, CCSPlayerController player, double speed, string callerName = null) + public void SetSpeed(CCSPlayerController? caller, CCSPlayerController player, double speed, string? callerName = null) { callerName ??= caller == null ? "Console" : caller.PlayerName; - + player.SetSpeed((float)speed); - + if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot)) { foreach (CCSPlayerController _player in Helper.GetValidPlayers()) @@ -321,10 +323,10 @@ namespace CS2_SimpleAdmin }); } - public void God(CCSPlayerController? caller, CCSPlayerController player, string callerName = null) + public void God(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null) { callerName ??= caller == null ? "Console" : caller.PlayerName; - + if (player != null) { if (!godPlayers.Contains(player.Slot)) @@ -388,7 +390,7 @@ namespace CS2_SimpleAdmin }); } - public void Slap(CCSPlayerController? caller, CCSPlayerController player, int damage, string callerName = null) + public void Slap(CCSPlayerController? caller, CCSPlayerController player, int damage, string? callerName = null) { callerName ??= caller == null ? "Console" : caller.PlayerName; player!.Pawn.Value!.Slap(damage); @@ -414,7 +416,7 @@ namespace CS2_SimpleAdmin { string callerName = caller == null ? "Console" : caller.PlayerName; string teamName = command.GetArg(2).ToLower(); - string _teamName; + string _teamName = "SPEC"; CsTeam teamNum = CsTeam.Spectator; TargetResult? targets = GetTarget(command); @@ -456,17 +458,17 @@ namespace CS2_SimpleAdmin bool kill = command.GetArg(3).ToLower().Equals("-k"); playersToTarget.ForEach(player => { - ChangeTeam(caller, player, teamName, teamNum, kill, callerName); + ChangeTeam(caller, player, _teamName.ToLower(), teamNum, kill, callerName); }); } - public void ChangeTeam(CCSPlayerController? caller, CCSPlayerController player, string teamName, CsTeam teamNum, bool kill, string callerName = null) + public void ChangeTeam(CCSPlayerController? caller, CCSPlayerController player, string teamName, CsTeam teamNum, bool kill, string? callerName = null) { if (!player.IsBot && player.SteamID.ToString().Length != 17) return; callerName ??= caller == null ? "Console" : caller.PlayerName; - + if (!teamName.Equals("swap")) { if (player.PawnIsAlive && teamNum != CsTeam.Spectator && !kill && Config.TeamSwitchType == 1) @@ -578,10 +580,10 @@ namespace CS2_SimpleAdmin }); } - public void Respawn(CCSPlayerController? caller, CCSPlayerController player, string callerName = null) + public void Respawn(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null) { callerName ??= caller == null ? "Console" : caller.PlayerName; - + if (CBasePlayerController_SetPawnFunc == null || player.PlayerPawn.Value == null || !player.PlayerPawn.IsValid) return; var playerPawn = player.PlayerPawn.Value; diff --git a/Helper.cs b/Helper.cs index 6135d8d..8fc8327 100644 --- a/Helper.cs +++ b/Helper.cs @@ -43,6 +43,13 @@ namespace CS2_SimpleAdmin return Utilities.GetPlayers().FindAll(p => p != null && p.IsValid && p.SteamID.ToString().Length == 17 && p.Connected == PlayerConnectedState.PlayerConnected && !p.IsBot && !p.IsHLTV); } + public static List GetValidPlayersWithBots() + { + return Utilities.GetPlayers().FindAll(p => + p != null && p.IsValid && p.SteamID.ToString().Length == 17 && p.Connected == PlayerConnectedState.PlayerConnected && !p.IsBot && !p.IsHLTV || + p != null && p.IsValid && p.Connected == PlayerConnectedState.PlayerConnected && p.IsBot && !p.IsHLTV + ); + } public static bool IsValidSteamID64(string input) { @@ -64,15 +71,11 @@ namespace CS2_SimpleAdmin { if (steamid == null || (flags == null && immunity == 0)) { - //Console.WriteLine("Invalid input: steamid is null or both flags and immunity are not provided."); return; } - //Console.WriteLine($"Setting immunity for SteamID {steamid} to {immunity}"); - if (flags != null) { - //Console.WriteLine($"Applying flags to SteamID {steamid}:"); foreach (var flag in flags) { @@ -96,33 +99,9 @@ namespace CS2_SimpleAdmin catch (Exception) { return; - //Console.WriteLine($"An error occurred: {ex}"); } } - - /* - public static TargetResult GetTarget(string target, out CCSPlayerController? player) - { - player = null; - - if (target.StartsWith("#") && int.TryParse(target.AsSpan(1), out var userid)) - { - player = Utilities.GetPlayerFromUserid(userid); - } - else - { - var matches = GetPlayerFromName(target); - if (matches.Count > 1) - return TargetResult.Multiple; - - player = matches.FirstOrDefault(); - } - - return player?.IsValid == true ? TargetResult.Single : TargetResult.None; - } - */ - public static void KickPlayer(ushort userId, string? reason = null) { Server.ExecuteCommand($"kickid {userId} {reason}"); @@ -155,7 +134,7 @@ namespace CS2_SimpleAdmin return message; } - internal static void handleVotes(CCSPlayerController player, ChatMenuOption option) + internal static void HandleVotes(CCSPlayerController player, ChatMenuOption option) { if (CS2_SimpleAdmin.voteInProgress && !CS2_SimpleAdmin.votePlayers.Contains(player.Slot)) { @@ -216,7 +195,7 @@ namespace CS2_SimpleAdmin public unsafe void Set(string str) { - byte[] bytes = this.GetStringBytes(str); + byte[] bytes = SchemaString.GetStringBytes(str); for (int i = 0; i < bytes.Length; i++) { @@ -226,7 +205,7 @@ namespace CS2_SimpleAdmin Unsafe.Write((void*)(this.Handle.ToInt64() + bytes.Length), 0); } - private byte[] GetStringBytes(string str) + private static byte[] GetStringBytes(string str) { return Encoding.ASCII.GetBytes(str); } diff --git a/Menus/AdminMenu.cs b/Menus/AdminMenu.cs index 3f8bf0e..34af359 100644 --- a/Menus/AdminMenu.cs +++ b/Menus/AdminMenu.cs @@ -22,7 +22,7 @@ namespace CS2_SimpleAdmin.Menus MenuManager.OpenChatMenu(player, chatMenu); } } - + public static void OpenMenu(CCSPlayerController admin) { if (admin == null || admin.IsValid == false) @@ -44,7 +44,7 @@ namespace CS2_SimpleAdmin.Menus new ChatMenuOptionData("Manage Server", () => ManageServerMenu.OpenMenu(admin)), new ChatMenuOptionData("Fun actions", () => FunActionsMenu.OpenMenu(admin)), }; - + if (AdminManager.PlayerHasPermissions(admin, "@css/root")) options.Add(new ChatMenuOptionData("Manage Admins", () => ManageAdminsMenu.OpenMenu(admin))); diff --git a/Menus/DurationMenu.cs b/Menus/DurationMenu.cs index 294643a..153db3e 100644 --- a/Menus/DurationMenu.cs +++ b/Menus/DurationMenu.cs @@ -1,4 +1,3 @@ -using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Menu; diff --git a/Menus/FunActionsMenu.cs b/Menus/FunActionsMenu.cs index 803c9b9..345aeb1 100644 --- a/Menus/FunActionsMenu.cs +++ b/Menus/FunActionsMenu.cs @@ -7,7 +7,7 @@ namespace CS2_SimpleAdmin.Menus { public static class FunActionsMenu { - private static Dictionary _weaponsCache = null; + private static Dictionary? _weaponsCache = null; private static Dictionary GetWeaponsCache { get @@ -15,11 +15,13 @@ namespace CS2_SimpleAdmin.Menus if (_weaponsCache == null) { Array weaponsArray = Enum.GetValues(typeof(CsItem)); - + // avoid duplicates in the menu _weaponsCache = new(); foreach (CsItem item in weaponsArray) { + if (item == CsItem.Tablet) continue; + _weaponsCache[(int)item] = item; } } @@ -93,7 +95,7 @@ namespace CS2_SimpleAdmin.Menus private static void GiveWeaponMenu(CCSPlayerController admin, CCSPlayerController player) { BaseMenu menu = AdminMenu.CreateMenu($"Give Weapon: {player.PlayerName}"); - + foreach (KeyValuePair weapon in GetWeaponsCache) { menu.AddMenuOption(weapon.Value.ToString(), (_, _) => { GiveWeapon(admin, player, weapon.Value); }); @@ -114,6 +116,8 @@ namespace CS2_SimpleAdmin.Menus private static void Freeze(CCSPlayerController admin, CCSPlayerController player) { + if (!(player.PlayerPawn?.Value?.IsValid ?? false)) return; + if (player.PlayerPawn.Value.MoveType != MoveType_t.MOVETYPE_OBSOLETE) CS2_SimpleAdmin.Instance.Freeze(admin, player, -1); else diff --git a/Menus/ManagePlayersMenu.cs b/Menus/ManagePlayersMenu.cs index 8afa7b3..c803044 100644 --- a/Menus/ManagePlayersMenu.cs +++ b/Menus/ManagePlayersMenu.cs @@ -1,4 +1,3 @@ -using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Menu; diff --git a/Menus/ManageServerMenu.cs b/Menus/ManageServerMenu.cs index 3ed0645..dd4cf58 100644 --- a/Menus/ManageServerMenu.cs +++ b/Menus/ManageServerMenu.cs @@ -1,4 +1,3 @@ -using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Menu; @@ -33,7 +32,7 @@ namespace CS2_SimpleAdmin.Menus options.Add(new ChatMenuOptionData("Change Map", () => ChangeMapMenu(admin))); } - options.Add(new ChatMenuOptionData("Restart Game", () => CS2_SimpleAdmin.Instance.RestartGame(admin))); + options.Add(new ChatMenuOptionData("Restart Game", () => CS2_SimpleAdmin.RestartGame(admin))); foreach (ChatMenuOptionData menuOptionData in options) { diff --git a/Menus/PlayersMenu.cs b/Menus/PlayersMenu.cs index 4c7a7f6..2a1ddc8 100644 --- a/Menus/PlayersMenu.cs +++ b/Menus/PlayersMenu.cs @@ -1,4 +1,3 @@ -using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Menu; @@ -6,16 +5,16 @@ namespace CS2_SimpleAdmin.Menus { public static class PlayersMenu { - public static void OpenAliveMenu(CCSPlayerController admin, string menuName, Action onSelectAction, Func enableFilter = null) + public static void OpenAliveMenu(CCSPlayerController admin, string menuName, Action onSelectAction, Func? enableFilter = null) { OpenMenu(admin, menuName, onSelectAction, p => p.PawnIsAlive); } - public static void OpenMenu(CCSPlayerController admin, string menuName, Action onSelectAction, Func enableFilter = null) + public static void OpenMenu(CCSPlayerController admin, string menuName, Action onSelectAction, Func? enableFilter = null) { BaseMenu menu = AdminMenu.CreateMenu(menuName); - IEnumerable players = Helper.GetValidPlayers().Where(p => p.Connected == PlayerConnectedState.PlayerConnected); + IEnumerable players = Helper.GetValidPlayersWithBots(); foreach (CCSPlayerController player in players) { string optionName = player.PlayerName; diff --git a/README.md b/README.md index b63471e..b819d36 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Manage your Counter-Strike 2 server by simple commands :) ``` ### Requirments -- [CounterStrikeSharp](https://github.com/roflmuffin/CounterStrikeSharp/) **tested on v163** +- [CounterStrikeSharp](https://github.com/roflmuffin/CounterStrikeSharp/) **tested on v166** - MySQL **tested on MySQL (MariaDB) Server version: 10.11.4-MariaDB-1~deb12u1 Debian 12**