From 4fd268b2356d4464d930f6fbd1c2c3a1e7250027 Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Wed, 31 Jan 2024 17:06:54 +0100 Subject: [PATCH] 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); + } + } +}