using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Entities.Constants; using CounterStrikeSharp.API.Modules.Menu; namespace CS2_SimpleAdmin.Menus { public static class FunActionsMenu { private static Dictionary? _weaponsCache = null; private static Dictionary GetWeaponsCache { get { 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; } } return _weaponsCache; } } 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; } BaseMenu menu = AdminMenu.CreateMenu("Fun Actions"); List options = new(); // permissions bool hasCheats = AdminManager.PlayerHasPermissions(admin, "@css/cheats"); bool hasSlay = AdminManager.PlayerHasPermissions(admin, "@css/slay"); // TODO: Localize options // options added in order if (hasCheats) { options.Add(new ChatMenuOptionData("God Mode", () => PlayersMenu.OpenAliveMenu(admin, "God Mode", GodMode))); options.Add(new ChatMenuOptionData("No Clip", () => PlayersMenu.OpenAliveMenu(admin, "No Clip", NoClip))); options.Add(new ChatMenuOptionData("Respawn", () => PlayersMenu.OpenAliveMenu(admin, "Respawn", Respawn))); options.Add(new ChatMenuOptionData("Give Weapon", () => PlayersMenu.OpenAliveMenu(admin, "Give Weapon", GiveWeaponMenu))); } if (hasSlay) { options.Add(new ChatMenuOptionData("Strip All Weapons", () => PlayersMenu.OpenAliveMenu(admin, "Strip All Weapons", StripWeapons))); options.Add(new ChatMenuOptionData("Freeze", () => PlayersMenu.OpenAliveMenu(admin, "Freeze", Freeze))); options.Add(new ChatMenuOptionData("HP", () => PlayersMenu.OpenAliveMenu(admin, "HP", SetHpMenu))); options.Add(new ChatMenuOptionData("Speed", () => PlayersMenu.OpenAliveMenu(admin, "Speed", SetSpeedMenu))); } foreach (ChatMenuOptionData menuOptionData in options) { string menuName = menuOptionData.name; menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled); } AdminMenu.OpenMenu(admin, menu); } private static void GodMode(CCSPlayerController admin, CCSPlayerController player) { CS2_SimpleAdmin.Instance.God(admin, player); } private static void NoClip(CCSPlayerController admin, CCSPlayerController player) { CS2_SimpleAdmin.Instance.NoClip(admin, player); } private static void Respawn(CCSPlayerController admin, CCSPlayerController player) { CS2_SimpleAdmin.Instance.Respawn(admin, player); } 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); }); } AdminMenu.OpenMenu(admin, menu); } private static void GiveWeapon(CCSPlayerController admin, CCSPlayerController player, CsItem weaponValue) { CS2_SimpleAdmin.Instance.GiveWeapon(admin, player, weaponValue); } private static void StripWeapons(CCSPlayerController admin, CCSPlayerController player) { CS2_SimpleAdmin.Instance.StripWeapons(admin, player); } 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 CS2_SimpleAdmin.Instance.Unfreeze(admin, player); } private static void SetHpMenu(CCSPlayerController admin, CCSPlayerController player) { Tuple[] _hpArray = new[] { new Tuple("1", 1), new Tuple("10", 10), new Tuple("25", 25), new Tuple("50", 50), new Tuple("100", 100), new Tuple("200", 200), new Tuple("500", 500), new Tuple("999", 999) }; BaseMenu menu = AdminMenu.CreateMenu($"Set HP: {player.PlayerName}"); foreach (Tuple hpTuple in _hpArray) { string optionName = hpTuple.Item1; menu.AddMenuOption(optionName, (_, _) => { SetHP(admin, player, hpTuple.Item2); }); } AdminMenu.OpenMenu(admin, menu); } private static void SetHP(CCSPlayerController admin, CCSPlayerController player, int hp) { CS2_SimpleAdmin.Instance.SetHp(admin, player, hp); } private static void SetSpeedMenu(CCSPlayerController admin, CCSPlayerController player) { Tuple[] _speedArray = new[] { new Tuple("0.1", .1f), new Tuple("0.25", .25f), new Tuple("0.5", .5f), new Tuple("0.75", .75f), new Tuple("1", 1), new Tuple("2", 2), new Tuple("3", 3), new Tuple("4", 4) }; BaseMenu menu = AdminMenu.CreateMenu($"Set Speed: {player.PlayerName}"); foreach (Tuple speedTuple in _speedArray) { string optionName = speedTuple.Item1; menu.AddMenuOption(optionName, (_, _) => { SetSpeed(admin, player, speedTuple.Item2); }); } AdminMenu.OpenMenu(admin, menu); } private static void SetSpeed(CCSPlayerController admin, CCSPlayerController player, float speed) { CS2_SimpleAdmin.Instance.SetSpeed(admin, player, speed); } } }