diff --git a/Commands/playercommands.cs b/Commands/playercommands.cs index f9ebf03..c7b9263 100644 --- a/Commands/playercommands.cs +++ b/Commands/playercommands.cs @@ -9,6 +9,7 @@ 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 { @@ -108,21 +109,36 @@ namespace CS2_SimpleAdmin if (!player.IsBot && player.SteamID.ToString().Length != 17) return; - player.GiveNamedItem(weaponName); + GiveWeapon(caller, player, weaponName, callerName); + }); + } - if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot)) + 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) + { + player.GiveNamedItem(weaponName); + SubGiveWeapon(caller, player, weaponName, callerName); + } + 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()) { - foreach (CCSPlayerController _player in Helper.GetValidPlayers()) + using (new WithTemporaryCulture(_player.GetLanguage())) { - using (new WithTemporaryCulture(_player.GetLanguage())) - { - StringBuilder sb = new(_localizer!["sa_prefix"]); - sb.Append(_localizer["sa_admin_give_message", callerName, player.PlayerName, weaponName]); - _player.PrintToChat(sb.ToString()); - } + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_give_message", callerName, player.PlayerName, weaponName]); + _player.PrintToChat(sb.ToString()); } } - }); + } } [ConsoleCommand("css_strip")] diff --git a/Menus/FunActionsMenu.cs b/Menus/FunActionsMenu.cs index 9723c7b..602ce96 100644 --- a/Menus/FunActionsMenu.cs +++ b/Menus/FunActionsMenu.cs @@ -1,11 +1,32 @@ 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) + { + _weaponsCache[(int)item] = item; + } + } + + return _weaponsCache; + } + } public static void OpenMenu(CCSPlayerController admin) { if (admin == null || admin.IsValid == false) @@ -71,7 +92,21 @@ namespace CS2_SimpleAdmin.Menus private static void GiveWeaponMenu(CCSPlayerController admin, CCSPlayerController player) { - // TODO: show weapon menu + BaseMenu menu = AdminMenu.CreateMenu("Give Weapon"); + + + + 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) @@ -128,7 +163,7 @@ namespace CS2_SimpleAdmin.Menus new Tuple("1", 1), new Tuple("2", 2), new Tuple("3", 3), - new Tuple("4", 4), + new Tuple("4", 4) }; BaseMenu menu = AdminMenu.CreateMenu("Set Speed");