From 751c97b4cf79659bec65504e63d9b6da00f108ba Mon Sep 17 00:00:00 2001 From: Valentin Barat Date: Mon, 12 Feb 2024 14:19:44 +0100 Subject: [PATCH] Added restart game and change map menus --- CS2-SimpleAdmin.cs | 22 +++++++++-- Menus/AdminMenu.cs | 2 +- Menus/ManagePlayersMenu.cs | 1 - Menus/ManageServerMenu.cs | 79 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 99 insertions(+), 5 deletions(-) create mode 100644 Menus/ManageServerMenu.cs diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index f388524..6d75144 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -2370,9 +2370,14 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] public void OnMapCommand(CCSPlayerController? caller, CommandInfo command) { - string _command = string.Empty; string? map = command.GetCommandString.Split(" ")[1]; + ChangeMap(caller, map); + } + public void ChangeMap(CCSPlayerController? caller, string map, CommandInfo? command = null) + { + string _command = string.Empty; + if (map.StartsWith("ws:")) { if (long.TryParse(map.Replace("ws:", ""), out long mapId)) @@ -2393,7 +2398,13 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig ManagePlayersMenu.OpenMenu(admin)), - new ChatMenuOptionData("Manage Server", null), + new ChatMenuOptionData("Manage Server", () => ManageServerMenu.OpenMenu(admin)), new ChatMenuOptionData("Fun actions", null), new ChatMenuOptionData("Manage Admins", null) }; diff --git a/Menus/ManagePlayersMenu.cs b/Menus/ManagePlayersMenu.cs index d51ed84..106f3f0 100644 --- a/Menus/ManagePlayersMenu.cs +++ b/Menus/ManagePlayersMenu.cs @@ -30,7 +30,6 @@ namespace CS2_SimpleAdmin.Menus // TODO: Localize options // options added in order - //options.Add(new ChatMenuOptionData("Who Is", () => PlayersMenu.OpenMenu(admin, "Who is", WhoIs))); if (hasSlay) { diff --git a/Menus/ManageServerMenu.cs b/Menus/ManageServerMenu.cs new file mode 100644 index 0000000..c203a3b --- /dev/null +++ b/Menus/ManageServerMenu.cs @@ -0,0 +1,79 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using CounterStrikeSharp.API.Modules.Admin; +using CounterStrikeSharp.API.Modules.Menu; + +namespace CS2_SimpleAdmin.Menus +{ + public static class ManageServerMenu + { + 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; + } + + CenterHtmlMenu menu = new CenterHtmlMenu("Manage Server"); + List options = new(); + + // permissions + bool hasMap = AdminManager.PlayerHasPermissions(admin, "@css/changemap"); + + // TODO: Localize options + // options added in order + + if (hasMap) + { + options.Add(new ChatMenuOptionData("Change Map", () => ChangeMapMenu(admin))); + } + + options.Add(new ChatMenuOptionData("Restart Game", () => CS2_SimpleAdmin.Instance.RestartGame(admin))); + + 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 ChangeMapMenu(CCSPlayerController admin) + { + CenterHtmlMenu menu = new CenterHtmlMenu($"Change Map"); + List options = new(); + + string[] maps = Server.GetMapList(); + foreach (string map in maps) + { + options.Add(new ChatMenuOptionData(map, () => ExecuteChangeMap(admin, map, false))); + } + + List wsMaps = new(); // TODO: Get from config to add workshopmaps + foreach (string map in wsMaps) + { + options.Add(new ChatMenuOptionData($"{map} (WS)", () => ExecuteChangeMap(admin, map, true))); + } + + 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 ExecuteChangeMap(CCSPlayerController admin, string mapName, bool workshop) + { + if (workshop) + CS2_SimpleAdmin.Instance.ChangeWSMap(admin, mapName); + } + } +}