From fd97e4349019e543fb81106955f8f7e56cccb19f Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 15:59:19 +0100 Subject: [PATCH 01/51] Updated version to 1.3.0 --- CS2-SimpleAdmin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index e14d8f7..19fdbae 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -36,7 +36,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig "CS2-SimpleAdmin"; public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; public override string ModuleAuthor => "daffyy"; - public override string ModuleVersion => "1.2.8d"; + public override string ModuleVersion => "1.3.0"; public CS2_SimpleAdminConfig Config { get; set; } = new(); From bad4289c5c48102eb4eb65e577856272ceb1a074 Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 16:05:08 +0100 Subject: [PATCH 02/51] Added instance getter on the base plugin class for the menus --- CS2-SimpleAdmin.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index 19fdbae..c14c5cd 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -21,6 +21,8 @@ namespace CS2_SimpleAdmin; [MinimumApiVersion(159)] public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig { + public static CS2_SimpleAdmin Instance { get; private set; } + public static IStringLocalizer? _localizer; public static ConcurrentBag gaggedPlayers = new ConcurrentBag(); //public static ConcurrentBag mutedPlayers = new ConcurrentBag(); @@ -42,6 +44,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig Date: Wed, 31 Jan 2024 17:06:54 +0100 Subject: [PATCH 03/51] Base menu structure done --- Menus/AdminMenu.cs | 41 +++++++++++++ Menus/ChatMenuOptionData.cs | 23 ++++++++ Menus/DurationMenu.cs | 32 +++++++++++ Menus/ManagePlayersMenu.cs | 111 ++++++++++++++++++++++++++++++++++++ Menus/PlayersMenu.cs | 23 ++++++++ 5 files changed, 230 insertions(+) create mode 100644 Menus/AdminMenu.cs create mode 100644 Menus/ChatMenuOptionData.cs create mode 100644 Menus/DurationMenu.cs create mode 100644 Menus/ManagePlayersMenu.cs create mode 100644 Menus/PlayersMenu.cs diff --git a/Menus/AdminMenu.cs b/Menus/AdminMenu.cs new file mode 100644 index 0000000..3755569 --- /dev/null +++ b/Menus/AdminMenu.cs @@ -0,0 +1,41 @@ +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Admin; +using CounterStrikeSharp.API.Modules.Menu; + +namespace CS2_SimpleAdmin.Menus +{ + public static class AdminMenu + { + public static void OpenMenu(CCSPlayerController admin) + { + if (admin == null || admin.IsValid == false) + return; + + if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false) + { + // TODO: Localize + admin.PrintToChat("[Simple Admin] You do not have permissions to use this command."); + return; + } + + //bool xpRights = AdminManager.PlayerHasPermissions(admin, "@wcs/xp"); + + CenterHtmlMenu menu = new CenterHtmlMenu("Simple Admin"); + ChatMenuOptionData[] options = new[] + { + new ChatMenuOptionData("Manage Players", () => ManagePlayersMenu.OpenMenu(admin)) + //new ChatMenuOptionData("Manage Server", () => GiveXp.OpenMenu(admin, false)), + //new ChatMenuOptionData("Fun actions", () => GiveXp.OpenMenu(admin, true)), + //new ChatMenuOptionData("Manage Admins", () => GiveLevels.OpenMenu(admin, false)) + }; + + foreach (ChatMenuOptionData menuOptionData in options) + { + string menuName = menuOptionData.name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + } + + MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); + } + } +} diff --git a/Menus/ChatMenuOptionData.cs b/Menus/ChatMenuOptionData.cs new file mode 100644 index 0000000..eb28d13 --- /dev/null +++ b/Menus/ChatMenuOptionData.cs @@ -0,0 +1,23 @@ +namespace CS2_SimpleAdmin.Menus +{ + public class ChatMenuOptionData + { + 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; + } + } +} diff --git a/Menus/DurationMenu.cs b/Menus/DurationMenu.cs new file mode 100644 index 0000000..43bb701 --- /dev/null +++ b/Menus/DurationMenu.cs @@ -0,0 +1,32 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Menu; + +namespace CS2_SimpleAdmin.Menus +{ + public static class DurationMenu + { + public static Tuple[] _durations = new[] + { + new Tuple("1 minute", 60), + new Tuple("5 minutes", 60 * 5), + new Tuple("15 minutes", 60 * 15), + new Tuple("1 hour", 60 * 60), + new Tuple("1 day", 60 * 60 * 24), + new Tuple("Permanent", 0) + }; + + public static void OpenMenu(CCSPlayerController admin, string menuName, CCSPlayerController player, Action onSelectAction) + { + CenterHtmlMenu menu = new CenterHtmlMenu(menuName); + + foreach (Tuple duration in _durations) + { + string optionName = duration.Item1; + menu.AddMenuOption(optionName, (_, _) => { onSelectAction?.Invoke(admin, player, duration.Item2); }); + } + + MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); + } + } +} diff --git a/Menus/ManagePlayersMenu.cs b/Menus/ManagePlayersMenu.cs new file mode 100644 index 0000000..b9ccd75 --- /dev/null +++ b/Menus/ManagePlayersMenu.cs @@ -0,0 +1,111 @@ +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Admin; +using CounterStrikeSharp.API.Modules.Menu; + +namespace CS2_SimpleAdmin.Menus +{ + public static class ManagePlayersMenu + { + public static void OpenMenu(CCSPlayerController admin) + { + if (admin == null || admin.IsValid == false) + return; + + if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false) + { + // TODO: Localize + admin.PrintToChat("[Simple Admin] You do not have permissions to use this command."); + return; + } + + //bool xpRights = AdminManager.PlayerHasPermissions(admin, "@wcs/xp"); + + CenterHtmlMenu menu = new CenterHtmlMenu("Manage Players"); + List options = new(); + + // permissions + bool hasSlay = AdminManager.PlayerHasPermissions(admin, "@css/slay"); + bool hasKick = AdminManager.PlayerHasPermissions(admin, "@css/kick"); + bool hasBan = AdminManager.PlayerHasPermissions(admin, "@css/ban"); + bool hasChat = AdminManager.PlayerHasPermissions(admin, "@css/chat"); + + // options added in order + options.Add(new ChatMenuOptionData("Who is", () => PlayersMenu.OpenMenu(admin, "Who is", WhoIs))); + + if (hasSlay) + { + options.Add(new ChatMenuOptionData("Slap", () => PlayersMenu.OpenMenu(admin, "Slap", SlapMenu))); + options.Add(new ChatMenuOptionData("Slay", () => PlayersMenu.OpenMenu(admin, "Slay", Slay))); + } + + if (hasKick) + { + options.Add(new ChatMenuOptionData("Kick", () => PlayersMenu.OpenMenu(admin, "Kick", Kick))); + } + + if (hasBan) + { + options.Add(new ChatMenuOptionData("Ban", () => PlayersMenu.OpenMenu(admin, "Ban", (admin, player) => DurationMenu.OpenMenu(admin, "Ban", player, Ban)))); + } + + if (hasChat) + { + options.Add(new ChatMenuOptionData("Gag", () => PlayersMenu.OpenMenu(admin, "Gag", (admin, player) => DurationMenu.OpenMenu(admin, "Gag", player, Gag)))); + options.Add(new ChatMenuOptionData("Mute", () => PlayersMenu.OpenMenu(admin, "Mute", (admin, player) => DurationMenu.OpenMenu(admin, "Mute", player, Mute)))); + } + + if (hasKick) + { + options.Add(new ChatMenuOptionData("Force Team", () => PlayersMenu.OpenMenu(admin, "Force Team", ForceTeam))); + } + + foreach (ChatMenuOptionData menuOptionData in options) + { + string menuName = menuOptionData.name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + } + + MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); + } + + private static void WhoIs(CCSPlayerController admin, CCSPlayerController player) + { + // TODO: WhoIs + } + + private static void SlapMenu(CCSPlayerController admin, CCSPlayerController player) + { + // TODO: Slap + } + + private static void Slay(CCSPlayerController admin, CCSPlayerController player) + { + // TODO: Slay + } + + private static void Kick(CCSPlayerController admin, CCSPlayerController player) + { + // TODO: Kick + } + + private static void Ban(CCSPlayerController admin, CCSPlayerController player, int duration) + { + // TODO: Ban + } + + private static void Gag(CCSPlayerController admin, CCSPlayerController player, int duration) + { + // TODO: Gag + } + + private static void Mute(CCSPlayerController admin, CCSPlayerController player, int duration) + { + // TODO: Mute + } + + private static void ForceTeam(CCSPlayerController admin, CCSPlayerController player) + { + // TODO: ForceTeam + } + } +} diff --git a/Menus/PlayersMenu.cs b/Menus/PlayersMenu.cs new file mode 100644 index 0000000..2244c8e --- /dev/null +++ b/Menus/PlayersMenu.cs @@ -0,0 +1,23 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Menu; + +namespace CS2_SimpleAdmin.Menus +{ + public static class PlayersMenu + { + public static void OpenMenu(CCSPlayerController admin, string menuName, Action onSelectAction) + { + CenterHtmlMenu menu = new CenterHtmlMenu(menuName); + + IEnumerable players = Utilities.GetPlayers().Where(p => p.Connected == PlayerConnectedState.PlayerConnected); + foreach (CCSPlayerController player in players) + { + string optionName = player.PlayerName; + menu.AddMenuOption(optionName, (_, _) => { onSelectAction?.Invoke(admin, player); }); + } + + MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); + } + } +} From 65b33c17ead62c429cd33ecb2a9f886994d3e662 Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 17:19:13 +0100 Subject: [PATCH 04/51] Moved css_who command to ManagePlayersMenu.cs --- CS2-SimpleAdmin.cs | 74 ++------------------------------------ Menus/ManagePlayersMenu.cs | 67 ++++++++++++++++++++++++++++------ Menus/PlayersMenu.cs | 2 +- 3 files changed, 60 insertions(+), 83 deletions(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index c14c5cd..ef1437d 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -15,6 +15,7 @@ using Microsoft.Extensions.Logging; using MySqlConnector; using System.Collections.Concurrent; using System.Text; +using CS2_SimpleAdmin.Menus; namespace CS2_SimpleAdmin; @@ -306,82 +307,11 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid && !player.IsBot && !player.IsHLTV).ToList(); - BanManager _banManager = new(dbConnectionString, Config); - MuteManager _muteManager = new(dbConnectionString); - playersToTarget.ForEach(player => { if (caller!.CanTarget(player)) { - PlayerInfo playerInfo = new PlayerInfo - { - UserId = player.UserId, - Index = (int)player.Index, - SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(), - Name = player?.PlayerName, - IpAddress = player?.IpAddress?.Split(":")[0] - }; - - Task.Run(async () => - { - int totalBans = 0; - int totalMutes = 0; - - totalBans = await _banManager.GetPlayerBans(playerInfo); - totalMutes = await _muteManager.GetPlayerMutes(playerInfo.SteamId!); - - Server.NextFrame(() => - { - if (caller != null) - { - caller!.PrintToConsole($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------"); - - caller!.PrintToConsole($"• Clan: \"{player!.Clan}\" Name: \"{playerInfo.Name}\""); - caller!.PrintToConsole($"• UserID: \"{playerInfo.UserId}\""); - if (playerInfo.SteamId != null) - caller!.PrintToConsole($"• SteamID64: \"{playerInfo.SteamId}\""); - if (player.AuthorizedSteamID != null) - { - caller!.PrintToConsole($"• SteamID2: \"{player.AuthorizedSteamID.SteamId2}\""); - caller!.PrintToConsole($"• Community link: \"{player.AuthorizedSteamID.ToCommunityUrl()}\""); - } - if (playerInfo.IpAddress != null) - caller!.PrintToConsole($"• IP Address: \"{playerInfo.IpAddress}\""); - caller!.PrintToConsole($"• Ping: \"{player.Ping}\""); - if (player.AuthorizedSteamID != null) - { - caller!.PrintToConsole($"• Total Bans: \"{totalBans}\""); - caller!.PrintToConsole($"• Total Mutes: \"{totalMutes}\""); - } - - caller!.PrintToConsole($"--------- END INFO ABOUT \"{player.PlayerName}\" ---------"); - } - else - { - Server.PrintToConsole($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------"); - - Server.PrintToConsole($"• Clan: \"{player!.Clan}\" Name: \"{playerInfo.Name}\""); - Server.PrintToConsole($"• UserID: \"{playerInfo.UserId}\""); - if (playerInfo.SteamId != null) - Server.PrintToConsole($"• SteamID64: \"{playerInfo.SteamId}\""); - if (player.AuthorizedSteamID != null) - { - Server.PrintToConsole($"• SteamID2: \"{player.AuthorizedSteamID.SteamId2}\""); - Server.PrintToConsole($"• Community link: \"{player.AuthorizedSteamID.ToCommunityUrl()}\""); - } - if (playerInfo.IpAddress != null) - Server.PrintToConsole($"• IP Address: \"{playerInfo.IpAddress}\""); - Server.PrintToConsole($"• Ping: \"{player.Ping}\""); - if (player.AuthorizedSteamID != null) - { - Server.PrintToConsole($"• Total Bans: \"{totalBans}\""); - Server.PrintToConsole($"• Total Mutes: \"{totalMutes}\""); - } - - Server.PrintToConsole($"--------- END INFO ABOUT \"{player.PlayerName}\" ---------"); - } - }); - }); + ManagePlayersMenu.WhoIs(caller, player); } }); } diff --git a/Menus/ManagePlayersMenu.cs b/Menus/ManagePlayersMenu.cs index b9ccd75..b560cda 100644 --- a/Menus/ManagePlayersMenu.cs +++ b/Menus/ManagePlayersMenu.cs @@ -1,3 +1,4 @@ +using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Menu; @@ -30,7 +31,7 @@ namespace CS2_SimpleAdmin.Menus bool hasChat = AdminManager.PlayerHasPermissions(admin, "@css/chat"); // options added in order - options.Add(new ChatMenuOptionData("Who is", () => PlayersMenu.OpenMenu(admin, "Who is", WhoIs))); + options.Add(new ChatMenuOptionData("Who Is", () => PlayersMenu.OpenMenu(admin, "Who is", WhoIs))); if (hasSlay) { @@ -68,42 +69,88 @@ namespace CS2_SimpleAdmin.Menus MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); } - private static void WhoIs(CCSPlayerController admin, CCSPlayerController player) + public static void WhoIs(CCSPlayerController admin, CCSPlayerController player) { - // TODO: WhoIs + BanManager banManager = new(CS2_SimpleAdmin.Instance.dbConnectionString, CS2_SimpleAdmin.Instance.Config); + MuteManager muteManager = new(CS2_SimpleAdmin.Instance.dbConnectionString); + + PlayerInfo playerInfo = new PlayerInfo + { + UserId = player.UserId, + Index = (int)player.Index, + SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(), + Name = player?.PlayerName, + IpAddress = player?.IpAddress?.Split(":")[0] + }; + + Task.Run(async () => + { + int totalBans = 0; + int totalMutes = 0; + + totalBans = await banManager.GetPlayerBans(playerInfo); + totalMutes = await muteManager.GetPlayerMutes(playerInfo.SteamId!); + + Server.NextFrame(() => + { + Action printMethod = admin == null ? Server.PrintToConsole : admin.PrintToConsole; + printMethod($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------"); + + printMethod($"• Clan: \"{player!.Clan}\" Name: \"{playerInfo.Name}\""); + printMethod($"• UserID: \"{playerInfo.UserId}\""); + if (playerInfo.SteamId != null) + printMethod($"• SteamID64: \"{playerInfo.SteamId}\""); + if (player.AuthorizedSteamID != null) + { + printMethod($"• SteamID2: \"{player.AuthorizedSteamID.SteamId2}\""); + printMethod($"• Community link: \"{player.AuthorizedSteamID.ToCommunityUrl()}\""); + } + + if (playerInfo.IpAddress != null) + printMethod($"• IP Address: \"{playerInfo.IpAddress}\""); + printMethod($"• Ping: \"{player.Ping}\""); + if (player.AuthorizedSteamID != null) + { + printMethod($"• Total Bans: \"{totalBans}\""); + printMethod($"• Total Mutes: \"{totalMutes}\""); + } + + printMethod($"--------- END INFO ABOUT \"{player.PlayerName}\" ---------"); + }); + }); } - private static void SlapMenu(CCSPlayerController admin, CCSPlayerController player) + public static void SlapMenu(CCSPlayerController admin, CCSPlayerController player) { // TODO: Slap } - private static void Slay(CCSPlayerController admin, CCSPlayerController player) + public static void Slay(CCSPlayerController admin, CCSPlayerController player) { // TODO: Slay } - private static void Kick(CCSPlayerController admin, CCSPlayerController player) + public static void Kick(CCSPlayerController admin, CCSPlayerController player) { // TODO: Kick } - private static void Ban(CCSPlayerController admin, CCSPlayerController player, int duration) + public static void Ban(CCSPlayerController admin, CCSPlayerController player, int duration) { // TODO: Ban } - private static void Gag(CCSPlayerController admin, CCSPlayerController player, int duration) + public static void Gag(CCSPlayerController admin, CCSPlayerController player, int duration) { // TODO: Gag } - private static void Mute(CCSPlayerController admin, CCSPlayerController player, int duration) + public static void Mute(CCSPlayerController admin, CCSPlayerController player, int duration) { // TODO: Mute } - private static void ForceTeam(CCSPlayerController admin, CCSPlayerController player) + public static void ForceTeam(CCSPlayerController admin, CCSPlayerController player) { // TODO: ForceTeam } diff --git a/Menus/PlayersMenu.cs b/Menus/PlayersMenu.cs index 2244c8e..c2cf318 100644 --- a/Menus/PlayersMenu.cs +++ b/Menus/PlayersMenu.cs @@ -14,7 +14,7 @@ namespace CS2_SimpleAdmin.Menus foreach (CCSPlayerController player in players) { string optionName = player.PlayerName; - menu.AddMenuOption(optionName, (_, _) => { onSelectAction?.Invoke(admin, player); }); + menu.AddMenuOption(optionName, (_, _) => { onSelectAction?.Invoke(admin, player); }, admin.CanTarget(player) == false); } MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); From f622701f5e576e6d195180e34287c30141a4bf0a Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 17:29:28 +0100 Subject: [PATCH 05/51] Made slap menu --- CS2-SimpleAdmin.cs | 21 ++++--- Menus/ManagePlayersMenu.cs | 119 ++++++++++++++++++++++--------------- 2 files changed, 83 insertions(+), 57 deletions(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index ef1437d..02c0533 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -1486,17 +1486,22 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig options = new(); @@ -69,88 +67,111 @@ namespace CS2_SimpleAdmin.Menus MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); } - public static void WhoIs(CCSPlayerController admin, CCSPlayerController player) + private static void WhoIs(CCSPlayerController admin, CCSPlayerController player) { BanManager banManager = new(CS2_SimpleAdmin.Instance.dbConnectionString, CS2_SimpleAdmin.Instance.Config); MuteManager muteManager = new(CS2_SimpleAdmin.Instance.dbConnectionString); - + PlayerInfo playerInfo = new PlayerInfo + { + UserId = player.UserId, + Index = (int)player.Index, + SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(), + Name = player?.PlayerName, + IpAddress = player?.IpAddress?.Split(":")[0] + }; + + Task.Run(async () => + { + int totalBans = 0; + int totalMutes = 0; + + totalBans = await banManager.GetPlayerBans(playerInfo); + totalMutes = await muteManager.GetPlayerMutes(playerInfo.SteamId!); + + Server.NextFrame(() => { - UserId = player.UserId, - Index = (int)player.Index, - SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(), - Name = player?.PlayerName, - IpAddress = player?.IpAddress?.Split(":")[0] - }; + Action printMethod = admin == null ? Server.PrintToConsole : admin.PrintToConsole; + printMethod($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------"); - Task.Run(async () => - { - int totalBans = 0; - int totalMutes = 0; - - totalBans = await banManager.GetPlayerBans(playerInfo); - totalMutes = await muteManager.GetPlayerMutes(playerInfo.SteamId!); - - Server.NextFrame(() => + printMethod($"• Clan: \"{player!.Clan}\" Name: \"{playerInfo.Name}\""); + printMethod($"• UserID: \"{playerInfo.UserId}\""); + if (playerInfo.SteamId != null) + printMethod($"• SteamID64: \"{playerInfo.SteamId}\""); + if (player.AuthorizedSteamID != null) { - Action printMethod = admin == null ? Server.PrintToConsole : admin.PrintToConsole; - printMethod($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------"); + printMethod($"• SteamID2: \"{player.AuthorizedSteamID.SteamId2}\""); + printMethod($"• Community link: \"{player.AuthorizedSteamID.ToCommunityUrl()}\""); + } - printMethod($"• Clan: \"{player!.Clan}\" Name: \"{playerInfo.Name}\""); - printMethod($"• UserID: \"{playerInfo.UserId}\""); - if (playerInfo.SteamId != null) - printMethod($"• SteamID64: \"{playerInfo.SteamId}\""); - if (player.AuthorizedSteamID != null) - { - printMethod($"• SteamID2: \"{player.AuthorizedSteamID.SteamId2}\""); - printMethod($"• Community link: \"{player.AuthorizedSteamID.ToCommunityUrl()}\""); - } + if (playerInfo.IpAddress != null) + printMethod($"• IP Address: \"{playerInfo.IpAddress}\""); + printMethod($"• Ping: \"{player.Ping}\""); + if (player.AuthorizedSteamID != null) + { + printMethod($"• Total Bans: \"{totalBans}\""); + printMethod($"• Total Mutes: \"{totalMutes}\""); + } - if (playerInfo.IpAddress != null) - printMethod($"• IP Address: \"{playerInfo.IpAddress}\""); - printMethod($"• Ping: \"{player.Ping}\""); - if (player.AuthorizedSteamID != null) - { - printMethod($"• Total Bans: \"{totalBans}\""); - printMethod($"• Total Mutes: \"{totalMutes}\""); - } - - printMethod($"--------- END INFO ABOUT \"{player.PlayerName}\" ---------"); - }); + printMethod($"--------- END INFO ABOUT \"{player.PlayerName}\" ---------"); }); + }); } - public static void SlapMenu(CCSPlayerController admin, CCSPlayerController player) + private static void SlapMenu(CCSPlayerController admin, CCSPlayerController player) { - // TODO: Slap + CenterHtmlMenu menu = new CenterHtmlMenu($"Slap {player.PlayerName}"); + List options = new(); + + // options added in order + options.Add(new ChatMenuOptionData("0 hp", () => ApplySlapAndKeepMenu(admin, player, 0))); + options.Add(new ChatMenuOptionData("1 hp", () => ApplySlapAndKeepMenu(admin, player, 1))); + options.Add(new ChatMenuOptionData("5 hp", () => ApplySlapAndKeepMenu(admin, player, 5))); + options.Add(new ChatMenuOptionData("10 hp", () => ApplySlapAndKeepMenu(admin, player, 10))); + options.Add(new ChatMenuOptionData("50 hp", () => ApplySlapAndKeepMenu(admin, player, 50))); + options.Add(new ChatMenuOptionData("100 hp", () => ApplySlapAndKeepMenu(admin, player, 100))); + + foreach (ChatMenuOptionData menuOptionData in options) + { + string menuName = menuOptionData.name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + } + + MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); } - public static void Slay(CCSPlayerController admin, CCSPlayerController player) + private static void ApplySlapAndKeepMenu(CCSPlayerController admin, CCSPlayerController player, int i) + { + CS2_SimpleAdmin.Instance.Slap(admin, player, i); + SlapMenu(admin, player); + } + + private static void Slay(CCSPlayerController admin, CCSPlayerController player) { // TODO: Slay } - public static void Kick(CCSPlayerController admin, CCSPlayerController player) + private static void Kick(CCSPlayerController admin, CCSPlayerController player) { // TODO: Kick } - public static void Ban(CCSPlayerController admin, CCSPlayerController player, int duration) + private static void Ban(CCSPlayerController admin, CCSPlayerController player, int duration) { // TODO: Ban } - public static void Gag(CCSPlayerController admin, CCSPlayerController player, int duration) + private static void Gag(CCSPlayerController admin, CCSPlayerController player, int duration) { // TODO: Gag } - public static void Mute(CCSPlayerController admin, CCSPlayerController player, int duration) + private static void Mute(CCSPlayerController admin, CCSPlayerController player, int duration) { // TODO: Mute } - public static void ForceTeam(CCSPlayerController admin, CCSPlayerController player) + private static void ForceTeam(CCSPlayerController admin, CCSPlayerController player) { // TODO: ForceTeam } From 232f487d01e18005aa7e8558d6011da7247eb44d Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 17:39:03 +0100 Subject: [PATCH 06/51] Fixed who --- BanManager.cs | 2 +- CS2-SimpleAdmin.cs | 58 ++++++++++++++++++++++++++++++++++++-- Menus/ManagePlayersMenu.cs | 48 +------------------------------ 3 files changed, 58 insertions(+), 50 deletions(-) diff --git a/BanManager.cs b/BanManager.cs index a11f949..aec7fde 100644 --- a/BanManager.cs +++ b/BanManager.cs @@ -3,7 +3,7 @@ using MySqlConnector; namespace CS2_SimpleAdmin { - internal class BanManager + public class BanManager { private readonly MySqlConnection _dbConnection; private readonly CS2_SimpleAdminConfig _config; diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index 02c0533..dc7c3f1 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -306,16 +306,70 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig playersToTarget = targets!.Players.Where(player => caller!.CanTarget(player) && player != null && player.IsValid && !player.IsBot && !player.IsHLTV).ToList(); - + + BanManager banManager = new(dbConnectionString, Config); + MuteManager muteManager = new(dbConnectionString); + playersToTarget.ForEach(player => { if (caller!.CanTarget(player)) { - ManagePlayersMenu.WhoIs(caller, player); + Who(caller, player, banManager, muteManager); } }); } + public void Who(CCSPlayerController? caller, CCSPlayerController player, BanManager banManager = null, MuteManager muteManager = null) + { + banManager ??= new(dbConnectionString, Config); + muteManager ??= new(dbConnectionString); + + PlayerInfo playerInfo = new PlayerInfo + { + UserId = player.UserId, + Index = (int)player.Index, + SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(), + Name = player?.PlayerName, + IpAddress = player?.IpAddress?.Split(":")[0] + }; + + Task.Run(async () => + { + int totalBans = 0; + int totalMutes = 0; + + totalBans = await banManager.GetPlayerBans(playerInfo); + totalMutes = await muteManager.GetPlayerMutes(playerInfo.SteamId!); + + Server.NextFrame(() => + { + Action printMethod = caller == null ? Server.PrintToConsole : caller.PrintToConsole; + printMethod($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------"); + + printMethod($"• Clan: \"{player!.Clan}\" Name: \"{playerInfo.Name}\""); + printMethod($"• UserID: \"{playerInfo.UserId}\""); + if (playerInfo.SteamId != null) + printMethod($"• SteamID64: \"{playerInfo.SteamId}\""); + if (player.AuthorizedSteamID != null) + { + printMethod($"• SteamID2: \"{player.AuthorizedSteamID.SteamId2}\""); + printMethod($"• Community link: \"{player.AuthorizedSteamID.ToCommunityUrl()}\""); + } + + if (playerInfo.IpAddress != null) + printMethod($"• IP Address: \"{playerInfo.IpAddress}\""); + printMethod($"• Ping: \"{player.Ping}\""); + if (player.AuthorizedSteamID != null) + { + printMethod($"• Total Bans: \"{totalBans}\""); + printMethod($"• Total Mutes: \"{totalMutes}\""); + } + + printMethod($"--------- END INFO ABOUT \"{player.PlayerName}\" ---------"); + }); + }); + } + [ConsoleCommand("css_players")] [CommandHelper(whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] [RequiresPermissions("@css/generic")] diff --git a/Menus/ManagePlayersMenu.cs b/Menus/ManagePlayersMenu.cs index b8cc902..be9fa08 100644 --- a/Menus/ManagePlayersMenu.cs +++ b/Menus/ManagePlayersMenu.cs @@ -69,53 +69,7 @@ namespace CS2_SimpleAdmin.Menus private static void WhoIs(CCSPlayerController admin, CCSPlayerController player) { - BanManager banManager = new(CS2_SimpleAdmin.Instance.dbConnectionString, CS2_SimpleAdmin.Instance.Config); - MuteManager muteManager = new(CS2_SimpleAdmin.Instance.dbConnectionString); - - PlayerInfo playerInfo = new PlayerInfo - { - UserId = player.UserId, - Index = (int)player.Index, - SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(), - Name = player?.PlayerName, - IpAddress = player?.IpAddress?.Split(":")[0] - }; - - Task.Run(async () => - { - int totalBans = 0; - int totalMutes = 0; - - totalBans = await banManager.GetPlayerBans(playerInfo); - totalMutes = await muteManager.GetPlayerMutes(playerInfo.SteamId!); - - Server.NextFrame(() => - { - Action printMethod = admin == null ? Server.PrintToConsole : admin.PrintToConsole; - printMethod($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------"); - - printMethod($"• Clan: \"{player!.Clan}\" Name: \"{playerInfo.Name}\""); - printMethod($"• UserID: \"{playerInfo.UserId}\""); - if (playerInfo.SteamId != null) - printMethod($"• SteamID64: \"{playerInfo.SteamId}\""); - if (player.AuthorizedSteamID != null) - { - printMethod($"• SteamID2: \"{player.AuthorizedSteamID.SteamId2}\""); - printMethod($"• Community link: \"{player.AuthorizedSteamID.ToCommunityUrl()}\""); - } - - if (playerInfo.IpAddress != null) - printMethod($"• IP Address: \"{playerInfo.IpAddress}\""); - printMethod($"• Ping: \"{player.Ping}\""); - if (player.AuthorizedSteamID != null) - { - printMethod($"• Total Bans: \"{totalBans}\""); - printMethod($"• Total Mutes: \"{totalMutes}\""); - } - - printMethod($"--------- END INFO ABOUT \"{player.PlayerName}\" ---------"); - }); - }); + CS2_SimpleAdmin.Instance.Who(admin, player); } private static void SlapMenu(CCSPlayerController admin, CCSPlayerController player) From 5fbd21aec2c78b6de29eb9aeb2bb3acc0fedc091 Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 18:03:08 +0100 Subject: [PATCH 07/51] Slay and kick done --- CS2-SimpleAdmin.cs | 72 ++++++++++++++++++++++---------------- Menus/ManagePlayersMenu.cs | 4 +-- 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index dc7c3f1..fa1a209 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -404,7 +404,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] public void OnKickCommand(CCSPlayerController? caller, CommandInfo command) { - string reason = "Unknown"; + string reason = null; TargetResult? targets = GetTarget(command); if (targets == null) return; @@ -422,32 +422,37 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig= 2) - { - player.PrintToCenter(_localizer!["sa_player_kick_message", reason, caller == null ? "Console" : caller.PlayerName]); - AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!, reason)); - } - else - { - AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!)); - } - - if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_kick_message", caller == null ? "Console" : caller.PlayerName, player.PlayerName, reason]); - Server.PrintToChatAll(sb.ToString()); - } + Kick(caller, player, reason); } }); } + public void Kick(CCSPlayerController? caller, CCSPlayerController player, string reason = null) + { + if (player.PawnIsAlive) + { + player.Pawn.Value!.Freeze(); + player.CommitSuicide(true, true); + } + + if (string.IsNullOrEmpty(reason) == false) + { + player.PrintToCenter(_localizer!["sa_player_kick_message", reason, caller == null ? "Console" : caller.PlayerName]); + AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!, reason)); + } + else + { + AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!)); + } + + if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) + { + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_kick_message", caller == null ? "Console" : caller.PlayerName, player.PlayerName, reason]); + Server.PrintToChatAll(sb.ToString()); + } + } + [ConsoleCommand("css_gag")] [RequiresPermissions("@css/chat")] [CommandHelper(minArgs: 1, usage: "<#userid or name> [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] @@ -1341,17 +1346,22 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig { - player.CommitSuicide(false, true); - - if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_slay_message", caller == null ? "Console" : caller.PlayerName, player.PlayerName]); - Server.PrintToChatAll(sb.ToString()); - } + Slay(caller, player); }); } + public void Slay(CCSPlayerController? caller, CCSPlayerController player) + { + player.CommitSuicide(false, true); + + if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) + { + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_slay_message", caller == null ? "Console" : caller.PlayerName, player.PlayerName]); + Server.PrintToChatAll(sb.ToString()); + } + } + [ConsoleCommand("css_give")] [RequiresPermissions("@css/cheats")] [CommandHelper(minArgs: 2, usage: "<#userid or name> ", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] diff --git a/Menus/ManagePlayersMenu.cs b/Menus/ManagePlayersMenu.cs index be9fa08..0c3a910 100644 --- a/Menus/ManagePlayersMenu.cs +++ b/Menus/ManagePlayersMenu.cs @@ -102,12 +102,12 @@ namespace CS2_SimpleAdmin.Menus private static void Slay(CCSPlayerController admin, CCSPlayerController player) { - // TODO: Slay + CS2_SimpleAdmin.Instance.Slay(admin, player); } private static void Kick(CCSPlayerController admin, CCSPlayerController player) { - // TODO: Kick + CS2_SimpleAdmin.Instance.Kick(admin, player); } private static void Ban(CCSPlayerController admin, CCSPlayerController player, int duration) From 60ebb698a373c0756b6e237bc97d64a7c434368b Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 21:44:38 +0100 Subject: [PATCH 08/51] ban/gag/mute --- CS2-SimpleAdmin.cs | 276 ++++++++++++++++++++----------------- Menus/ManagePlayersMenu.cs | 82 +++++++++-- 2 files changed, 222 insertions(+), 136 deletions(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index fa1a209..82cb430 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -459,7 +459,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig { - await _muteManager.MutePlayer(playerInfo, adminInfo, reason, time); + await muteManager.MutePlayer(playerInfo, adminInfo, reason, time); }); if (TagsDetected) @@ -550,8 +560,6 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig - { - await _muteManager.MutePlayer(playerInfo, adminInfo, reason, time, 1); - }); - - - if (time > 0 && time <= 30) - { - AddTimer(time * 60, () => - { - if (player == null || !player.IsValid || player.AuthorizedSteamID == null) return; - - //MuteManager _muteManager = new(dbConnectionString); - //_ = _muteManager.UnmutePlayer(player.AuthorizedSteamID.SteamId64.ToString(), 1); - - /* - if (mutedPlayers.Contains((int)player.Index)) - { - if (mutedPlayers.TryTake(out int removedItem) && removedItem != (int)player.Index) - { - mutedPlayers.Add(removedItem); - } - } - */ - - player.VoiceFlags = VoiceFlags.Normal; - }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); - } - - if (time == 0) - { - player!.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); - - if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_mute_message_perm", caller == null ? "Console" : caller.PlayerName, player.PlayerName, reason]); - Server.PrintToChatAll(sb.ToString()); - } - } - else - { - player!.PrintToCenter(_localizer!["sa_player_mute_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); - - if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_mute_message_time", caller == null ? "Console" : caller.PlayerName, player.PlayerName, reason, time]); - Server.PrintToChatAll(sb.ToString()); - } - } + Mute(caller, player, time, reason, _muteManager); } }); } + public void Mute(CCSPlayerController? caller, CCSPlayerController player, int time, string reason = null, MuteManager muteManager = null) + { + reason ??= "Unknown"; + muteManager ??= new(dbConnectionString); + + PlayerInfo playerInfo = new PlayerInfo + { + SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(), + Name = player?.PlayerName, + IpAddress = player?.IpAddress?.Split(":")[0] + }; + + PlayerInfo adminInfo = new PlayerInfo + { + SteamId = caller?.AuthorizedSteamID?.SteamId64.ToString(), + Name = caller?.PlayerName, + IpAddress = caller?.IpAddress?.Split(":")[0] + }; + + /* + if (!mutedPlayers.Contains((ushort)player.UserId)) + mutedPlayers.Add((ushort)player.UserId); + */ + + player!.VoiceFlags = VoiceFlags.Muted; + + Task.Run(async () => { await muteManager.MutePlayer(playerInfo, adminInfo, reason, time, 1); }); + + + if (time > 0 && time <= 30) + { + AddTimer(time * 60, () => + { + if (player == null || !player.IsValid || player.AuthorizedSteamID == null) + return; + + //MuteManager _muteManager = new(dbConnectionString); + //_ = _muteManager.UnmutePlayer(player.AuthorizedSteamID.SteamId64.ToString(), 1); + + /* + if (mutedPlayers.Contains((int)player.Index)) + { + if (mutedPlayers.TryTake(out int removedItem) && removedItem != (int)player.Index) + { + mutedPlayers.Add(removedItem); + } + } + */ + + player.VoiceFlags = VoiceFlags.Normal; + }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); + } + + if (time == 0) + { + player!.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); + + if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) + { + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_mute_message_perm", caller == null ? "Console" : caller.PlayerName, player.PlayerName, reason]); + Server.PrintToChatAll(sb.ToString()); + } + } + else + { + player!.PrintToCenter(_localizer!["sa_player_mute_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + + if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) + { + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_mute_message_time", caller == null ? "Console" : caller.PlayerName, player.PlayerName, reason, time]); + Server.PrintToChatAll(sb.ToString()); + } + } + } + [ConsoleCommand("css_addmute")] [RequiresPermissions("@css/chat")] [CommandHelper(minArgs: 1, usage: " [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] @@ -1098,59 +1112,67 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig - { - await _banManager.BanPlayer(playerInfo, adminInfo, reason, time); - }); - - AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player!.UserId!)); - - if (time == 0) - { - player!.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); - - if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_ban_message_perm", caller == null ? "Console" : caller.PlayerName, player.PlayerName, reason]); - Server.PrintToChatAll(sb.ToString()); - } - } - else - { - player!.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); - - if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_ban_message_time", caller == null ? "Console" : caller.PlayerName, player.PlayerName, reason, time]); - Server.PrintToChatAll(sb.ToString()); - } - } + Ban(caller, player, time, reason, _banManager); } }); } + public void Ban(CCSPlayerController? caller, CCSPlayerController player, int time, string reason = null, BanManager banManager = null) + { + reason ??= "Unknown"; + banManager ??= new(dbConnectionString, Config); + + if (player.PawnIsAlive) + { + player.Pawn.Value!.Freeze(); + player.CommitSuicide(true, true); + } + + PlayerInfo playerInfo = new PlayerInfo + { + SteamId = player?.AuthorizedSteamID?.SteamId64.ToString(), + Name = player?.PlayerName, + IpAddress = player?.IpAddress?.Split(":")[0] + }; + + PlayerInfo adminInfo = new PlayerInfo + { + SteamId = caller?.AuthorizedSteamID?.SteamId64.ToString(), + Name = caller?.PlayerName, + IpAddress = caller?.IpAddress?.Split(":")[0] + }; + + Task.Run(async () => + { + await banManager.BanPlayer(playerInfo, adminInfo, reason, time); + }); + + AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player!.UserId!)); + + if (time == 0) + { + player!.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]); + + if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) + { + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_ban_message_perm", caller == null ? "Console" : caller.PlayerName, player.PlayerName, reason]); + Server.PrintToChatAll(sb.ToString()); + } + } + else + { + player!.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]); + + if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) + { + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_ban_message_time", caller == null ? "Console" : caller.PlayerName, player.PlayerName, reason, time]); + Server.PrintToChatAll(sb.ToString()); + } + } + } + [ConsoleCommand("css_addban")] [RequiresPermissions("@css/ban")] [CommandHelper(minArgs: 1, usage: " [time in minutes/0 perm] [reason]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] diff --git a/Menus/ManagePlayersMenu.cs b/Menus/ManagePlayersMenu.cs index 0c3a910..dd41c53 100644 --- a/Menus/ManagePlayersMenu.cs +++ b/Menus/ManagePlayersMenu.cs @@ -44,13 +44,13 @@ namespace CS2_SimpleAdmin.Menus if (hasBan) { - options.Add(new ChatMenuOptionData("Ban", () => PlayersMenu.OpenMenu(admin, "Ban", (admin, player) => DurationMenu.OpenMenu(admin, "Ban", player, Ban)))); + options.Add(new ChatMenuOptionData("Ban", () => PlayersMenu.OpenMenu(admin, "Ban", (admin, player) => DurationMenu.OpenMenu(admin, "Ban", player, BanMenu)))); } if (hasChat) { - options.Add(new ChatMenuOptionData("Gag", () => PlayersMenu.OpenMenu(admin, "Gag", (admin, player) => DurationMenu.OpenMenu(admin, "Gag", player, Gag)))); - options.Add(new ChatMenuOptionData("Mute", () => PlayersMenu.OpenMenu(admin, "Mute", (admin, player) => DurationMenu.OpenMenu(admin, "Mute", player, Mute)))); + options.Add(new ChatMenuOptionData("Gag", () => PlayersMenu.OpenMenu(admin, "Gag", (admin, player) => DurationMenu.OpenMenu(admin, "Gag", player, GagMenu)))); + options.Add(new ChatMenuOptionData("Mute", () => PlayersMenu.OpenMenu(admin, "Mute", (admin, player) => DurationMenu.OpenMenu(admin, "Mute", player, MuteMenu)))); } if (hasKick) @@ -110,19 +110,83 @@ namespace CS2_SimpleAdmin.Menus CS2_SimpleAdmin.Instance.Kick(admin, player); } - private static void Ban(CCSPlayerController admin, CCSPlayerController player, int duration) + private static void BanMenu(CCSPlayerController admin, CCSPlayerController player, int duration) { - // TODO: Ban + CenterHtmlMenu menu = new CenterHtmlMenu($"Ban {player.PlayerName}"); + List options = new() + { + "Hacking", + "Voice Abuse", + "Chat Abuse", + "Admin disrespect", + "Other" + }; + + foreach (string option in options) + { + menu.AddMenuOption(option, (_, _) => { Ban(admin, player, duration, option); }); + } + + MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); } - private static void Gag(CCSPlayerController admin, CCSPlayerController player, int duration) + private static void Ban(CCSPlayerController admin, CCSPlayerController player, int duration, string reason) { - // TODO: Gag + CS2_SimpleAdmin.Instance.Ban(admin, player, duration, reason); } - private static void Mute(CCSPlayerController admin, CCSPlayerController player, int duration) + private static void GagMenu(CCSPlayerController admin, CCSPlayerController player, int duration) { - // TODO: Mute + CenterHtmlMenu menu = new CenterHtmlMenu($"Gag {player.PlayerName}"); + List options = new() + { + "Advertising", + "Spamming", + "Spectator camera abuse", + "Hate", + "Admin disrespect", + "Other" + }; + + foreach (string option in options) + { + menu.AddMenuOption(option, (_, _) => { Gag(admin, player, duration, option); }); + } + + MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); + } + + private static void Gag(CCSPlayerController admin, CCSPlayerController player, int duration, string reason) + { + CS2_SimpleAdmin.Instance.Gag(admin, player, duration, reason); + } + + private static void MuteMenu(CCSPlayerController admin, CCSPlayerController player, int duration) + { + CenterHtmlMenu menu = new CenterHtmlMenu($"Mute {player.PlayerName}"); + List options = new() + { + "Shouting", + "Playing music", + "Advertising", + "Spamming", + "Spectator camera abuse", + "Hate", + "Admin disrespect", + "Other" + }; + + foreach (string option in options) + { + menu.AddMenuOption(option, (_, _) => { Mute(admin, player, duration, option); }); + } + + MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); + } + + private static void Mute(CCSPlayerController admin, CCSPlayerController player, int duration, string reason) + { + CS2_SimpleAdmin.Instance.Mute(admin, player, duration, reason); } private static void ForceTeam(CCSPlayerController admin, CCSPlayerController player) From a266f776a8f8c2f775f916c27bd8a8251fd805ef Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 21:45:42 +0100 Subject: [PATCH 09/51] Duration in minutes --- Menus/DurationMenu.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Menus/DurationMenu.cs b/Menus/DurationMenu.cs index 43bb701..5581153 100644 --- a/Menus/DurationMenu.cs +++ b/Menus/DurationMenu.cs @@ -8,11 +8,11 @@ namespace CS2_SimpleAdmin.Menus { public static Tuple[] _durations = new[] { - new Tuple("1 minute", 60), - new Tuple("5 minutes", 60 * 5), - new Tuple("15 minutes", 60 * 15), - new Tuple("1 hour", 60 * 60), - new Tuple("1 day", 60 * 60 * 24), + 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) }; From a80de2d7dced3fbda6510b9dc94ffb551cc6e774 Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 22:05:48 +0100 Subject: [PATCH 10/51] Change team down --- CS2-SimpleAdmin.cs | 57 +++++++++++++++++++++----------------- Menus/DurationMenu.cs | 1 + Menus/ManagePlayersMenu.cs | 26 +++++++++++++++-- 3 files changed, 57 insertions(+), 27 deletions(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index 82cb430..1657b0e 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -1627,39 +1627,46 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig { - if (!teamName.Equals("swap")) - { - if (player.PawnIsAlive && teamNum != CsTeam.Spectator && !command.GetArg(3).ToLower().Equals("-k")) - player.SwitchTeam(teamNum); - else - player.ChangeTeam(teamNum); - } + ChangeTeam(caller, player, _teamName, teamNum, kill); + }); + } + + public void ChangeTeam(CCSPlayerController? caller, CCSPlayerController player, string teamName, CsTeam teamNum, bool kill) + { + if (!teamName.Equals("swap")) + { + if (player.PawnIsAlive && teamNum != CsTeam.Spectator && !kill) + player.SwitchTeam(teamNum); else + player.ChangeTeam(teamNum); + } + else + { + if (player.TeamNum != (byte)CsTeam.Spectator) { - if (player.TeamNum != (byte)CsTeam.Spectator) + teamNum = (CsTeam)player.TeamNum == CsTeam.Terrorist ? CsTeam.CounterTerrorist : CsTeam.Terrorist; + teamName = teamNum == CsTeam.Terrorist ? "TT" : "CT"; + if (player.PawnIsAlive && !kill) { - CsTeam teamNum = (CsTeam)player.TeamNum == CsTeam.Terrorist ? CsTeam.CounterTerrorist : CsTeam.Terrorist; - _teamName = teamNum == CsTeam.Terrorist ? "TT" : "CT"; - if (player.PawnIsAlive && !command.GetArg(3).ToLower().Equals("-k")) - { - player.SwitchTeam(teamNum); - } - else - { - player.ChangeTeam(teamNum); - } + player.SwitchTeam(teamNum); + } + else + { + player.ChangeTeam(teamNum); } } + } - if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_team_message", caller == null ? "Console" : caller.PlayerName, player.PlayerName, _teamName]); - Server.PrintToChatAll(sb.ToString()); - } - }); + if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains((ushort)caller.UserId)) + { + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_team_message", caller == null ? "Console" : caller.PlayerName, player.PlayerName, teamName]); + Server.PrintToChatAll(sb.ToString()); + } } [ConsoleCommand("css_vote")] diff --git a/Menus/DurationMenu.cs b/Menus/DurationMenu.cs index 5581153..ead4bd0 100644 --- a/Menus/DurationMenu.cs +++ b/Menus/DurationMenu.cs @@ -6,6 +6,7 @@ namespace CS2_SimpleAdmin.Menus { public static class DurationMenu { + // TODO: Localize public static Tuple[] _durations = new[] { new Tuple("1 minute", 1), diff --git a/Menus/ManagePlayersMenu.cs b/Menus/ManagePlayersMenu.cs index dd41c53..86b0255 100644 --- a/Menus/ManagePlayersMenu.cs +++ b/Menus/ManagePlayersMenu.cs @@ -28,6 +28,7 @@ namespace CS2_SimpleAdmin.Menus bool hasBan = AdminManager.PlayerHasPermissions(admin, "@css/ban"); bool hasChat = AdminManager.PlayerHasPermissions(admin, "@css/chat"); + // TODO: Localize options // options added in order options.Add(new ChatMenuOptionData("Who Is", () => PlayersMenu.OpenMenu(admin, "Who is", WhoIs))); @@ -55,7 +56,7 @@ namespace CS2_SimpleAdmin.Menus if (hasKick) { - options.Add(new ChatMenuOptionData("Force Team", () => PlayersMenu.OpenMenu(admin, "Force Team", ForceTeam))); + options.Add(new ChatMenuOptionData("Force Team", () => PlayersMenu.OpenMenu(admin, "Force Team", ForceTeamMenu))); } foreach (ChatMenuOptionData menuOptionData in options) @@ -137,6 +138,7 @@ namespace CS2_SimpleAdmin.Menus private static void GagMenu(CCSPlayerController admin, CCSPlayerController player, int duration) { + // TODO: Localize and make options in config? CenterHtmlMenu menu = new CenterHtmlMenu($"Gag {player.PlayerName}"); List options = new() { @@ -163,6 +165,7 @@ namespace CS2_SimpleAdmin.Menus private static void MuteMenu(CCSPlayerController admin, CCSPlayerController player, int duration) { + // TODO: Localize and make options in config? CenterHtmlMenu menu = new CenterHtmlMenu($"Mute {player.PlayerName}"); List options = new() { @@ -189,7 +192,26 @@ namespace CS2_SimpleAdmin.Menus CS2_SimpleAdmin.Instance.Mute(admin, player, duration, reason); } - private static void ForceTeam(CCSPlayerController admin, CCSPlayerController player) + private static void ForceTeamMenu(CCSPlayerController admin, CCSPlayerController player) + { + // TODO: Localize + CenterHtmlMenu menu = new CenterHtmlMenu($"Force {player.PlayerName}'s Team"); + List options = new(); + options.Add(new ChatMenuOptionData("CT", () => ForceTeam(admin, player, "ct"))); + options.Add(new ChatMenuOptionData("T", () => ForceTeam(admin, player, "t"))); + options.Add(new ChatMenuOptionData("Swap", () => ForceTeam(admin, player, "swap"))); + options.Add(new ChatMenuOptionData("Spectator", () => ForceTeam(admin, player, "spec"))); + + foreach (ChatMenuOptionData menuOptionData in options) + { + string menuName = menuOptionData.name; + menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); + } + + MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu); + } + + private static void ForceTeam(CCSPlayerController admin, CCSPlayerController player, string teamName) { // TODO: ForceTeam } From 6848847f21207013adc102836d654c2ec0661e10 Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 22:10:45 +0100 Subject: [PATCH 11/51] default null instance --- CS2-SimpleAdmin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index 1657b0e..c66cb91 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -22,7 +22,7 @@ namespace CS2_SimpleAdmin; [MinimumApiVersion(159)] public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig { - public static CS2_SimpleAdmin Instance { get; private set; } + public static CS2_SimpleAdmin Instance { get; private set; } = null; public static IStringLocalizer? _localizer; public static ConcurrentBag gaggedPlayers = new ConcurrentBag(); From fb827f4f0d610900ed15c94ec3d8723e3abd7919 Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 23:04:11 +0100 Subject: [PATCH 12/51] Changed commands to open the menu --- CS2-SimpleAdmin.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index c66cb91..b8c1d8d 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -157,9 +157,9 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig ", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] From 0cd16531852eb1d992150ea5ebb3efd96eba07dd Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 23:06:04 +0100 Subject: [PATCH 13/51] Commented out css_who as its not relevant IMO --- Menus/ManagePlayersMenu.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Menus/ManagePlayersMenu.cs b/Menus/ManagePlayersMenu.cs index 86b0255..66b6243 100644 --- a/Menus/ManagePlayersMenu.cs +++ b/Menus/ManagePlayersMenu.cs @@ -30,7 +30,7 @@ namespace CS2_SimpleAdmin.Menus // TODO: Localize options // options added in order - options.Add(new ChatMenuOptionData("Who Is", () => PlayersMenu.OpenMenu(admin, "Who is", WhoIs))); + //options.Add(new ChatMenuOptionData("Who Is", () => PlayersMenu.OpenMenu(admin, "Who is", WhoIs))); if (hasSlay) { From 66f0ebe08cd32dbe4ba7679c2a0a10dea0fccbd2 Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 23:08:26 +0100 Subject: [PATCH 14/51] Enabled other menus for visual screenshot --- Menus/AdminMenu.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Menus/AdminMenu.cs b/Menus/AdminMenu.cs index 3755569..c939570 100644 --- a/Menus/AdminMenu.cs +++ b/Menus/AdminMenu.cs @@ -23,10 +23,10 @@ namespace CS2_SimpleAdmin.Menus CenterHtmlMenu menu = new CenterHtmlMenu("Simple Admin"); ChatMenuOptionData[] options = new[] { - new ChatMenuOptionData("Manage Players", () => ManagePlayersMenu.OpenMenu(admin)) - //new ChatMenuOptionData("Manage Server", () => GiveXp.OpenMenu(admin, false)), - //new ChatMenuOptionData("Fun actions", () => GiveXp.OpenMenu(admin, true)), - //new ChatMenuOptionData("Manage Admins", () => GiveLevels.OpenMenu(admin, false)) + new ChatMenuOptionData("Manage Players", () => ManagePlayersMenu.OpenMenu(admin)), + new ChatMenuOptionData("Manage Server", null), + new ChatMenuOptionData("Fun actions", null), + new ChatMenuOptionData("Manage Admins", null) }; foreach (ChatMenuOptionData menuOptionData in options) From 9acab82f86933a53d30d484c91deff102c6226b6 Mon Sep 17 00:00:00 2001 From: Dawid Bepierszcz <41084667+daffyyyy@users.noreply.github.com> Date: Wed, 31 Jan 2024 23:57:14 +0100 Subject: [PATCH 15/51] Small changes - Correct version - null warnings --- CS2-SimpleAdmin.cs | 831 +++++++++++++++++++++++++++------------------ 1 file changed, 496 insertions(+), 335 deletions(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index b8c1d8d..cb74684 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -8,6 +8,7 @@ using CounterStrikeSharp.API.Modules.Commands.Targeting; using CounterStrikeSharp.API.Modules.Cvars; using CounterStrikeSharp.API.Modules.Entities; using CounterStrikeSharp.API.Modules.Memory; +using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions; using CounterStrikeSharp.API.Modules.Menu; using CounterStrikeSharp.API.Modules.Utils; using Microsoft.Extensions.Localization; @@ -15,15 +16,12 @@ using Microsoft.Extensions.Logging; using MySqlConnector; using System.Collections.Concurrent; using System.Text; -using CS2_SimpleAdmin.Menus; namespace CS2_SimpleAdmin; [MinimumApiVersion(159)] public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig { - public static CS2_SimpleAdmin Instance { get; private set; } = null; - public static IStringLocalizer? _localizer; public static ConcurrentBag gaggedPlayers = new ConcurrentBag(); //public static ConcurrentBag mutedPlayers = new ConcurrentBag(); @@ -39,20 +37,22 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig "CS2-SimpleAdmin"; public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; public override string ModuleAuthor => "daffyy"; - public override string ModuleVersion => "1.3.0"; + public override string ModuleVersion => "1.2.9a"; + + private MemoryFunctionVoid? CBasePlayerController_SetPawnFunc; public CS2_SimpleAdminConfig Config { get; set; } = new(); public override void Load(bool hotReload) { - Instance = this; - registerEvents(); if (hotReload) { OnMapStart(string.Empty); } + + CBasePlayerController_SetPawnFunc = new MemoryFunctionVoid(@"\x55\x48\x89\xE5\x41\x57\x41\x56\x41\x55\x41\x54\x49\x89\xFC\x53\x48\x89\xF3\x48\x81\xEC\xC8\x00\x00\x00"); } public void OnConfigParsed(CS2_SimpleAdminConfig config) @@ -157,9 +157,9 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig ", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] @@ -275,39 +265,44 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig