Update Commands.cs

This commit is contained in:
Nereziel
2024-02-24 21:15:45 +01:00
parent ad73e0a85d
commit acf4a766ca

View File

@@ -1,6 +1,8 @@
using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Menu; using CounterStrikeSharp.API.Modules.Menu;
using Newtonsoft.Json.Linq;
using System.Text;
namespace WeaponPaints namespace WeaponPaints
{ {
@@ -125,325 +127,373 @@ namespace WeaponPaints
} }
} }
private void SetupKnifeMenu() private void SetupKnifeMenu()
{ {
if (!Config.Additional.KnifeEnabled || !g_bCommandsAllowed) return; if (!Config.Additional.KnifeEnabled || !g_bCommandsAllowed) return;
var knivesOnly = weaponList var knivesOnly = GetKnivesOnly();
.Where(pair => pair.Key.StartsWith("weapon_knife") || pair.Key.StartsWith("weapon_bayonet")) var giveItemMenu = new ChatMenu(Localizer["wp_knife_menu_title"]);
.ToDictionary(pair => pair.Key, pair => pair.Value);
var giveItemMenu = new ChatMenu(Localizer["wp_knife_menu_title"]); AddMenuOptions(giveItemMenu, knivesOnly);
var handleGive = (CCSPlayerController player, ChatMenuOption option) => AddCommandToOpenKnifeMenu(giveItemMenu);
{ }
if (!Utility.IsPlayerValid(player)) return;
var knifeName = option.Text; private Dictionary<string, string> GetKnivesOnly()
var knifeKey = knivesOnly.FirstOrDefault(x => x.Value == knifeName).Key; {
if (!string.IsNullOrEmpty(knifeKey)) return weaponList
{ .Where(pair => pair.Key.StartsWith("weapon_knife") || pair.Key.StartsWith("weapon_bayonet"))
if (!string.IsNullOrEmpty(Localizer["wp_knife_menu_select"])) .ToDictionary(pair => pair.Key, pair => pair.Value);
{ }
player!.Print(Localizer["wp_knife_menu_select", knifeName]);
}
if (!string.IsNullOrEmpty(Localizer["wp_knife_menu_kill"]) && Config.Additional.CommandKillEnabled) private void AddMenuOptions(ChatMenu giveItemMenu, Dictionary<string, string> knivesOnly)
{ {
player!.Print(Localizer["wp_knife_menu_kill"]); foreach (var knifePair in knivesOnly)
} {
giveItemMenu.AddMenuOption(knifePair.Value, (player, option) => HandleGiveOption(player, option, knivesOnly));
}
}
PlayerInfo playerInfo = new PlayerInfo private void HandleGiveOption(CCSPlayerController player, ChatMenuOption option, Dictionary<string, string> knivesOnly)
{ {
UserId = player.UserId, if (!Utility.IsPlayerValid(player)) return;
Slot = player.Slot,
Index = (int)player.Index,
SteamId = player.SteamID.ToString(),
Name = player.PlayerName,
IpAddress = player.IpAddress?.Split(":")[0]
};
g_playersKnife[player.Slot] = knifeKey; var knifeName = option.Text;
var knifeKey = knivesOnly.FirstOrDefault(x => x.Value == knifeName).Key;
if (!string.IsNullOrEmpty(knifeKey))
{
PrintMessages(player, knifeName);
SetPlayerKnife(player, knifeKey);
SyncKnifeToDatabase(player, knifeKey);
}
}
if (g_bCommandsAllowed && (LifeState_t)player.LifeState == LifeState_t.LIFE_ALIVE) private void PrintMessages(CCSPlayerController player, string knifeName)
RefreshWeapons(player); {
if (!string.IsNullOrEmpty(Localizer["wp_knife_menu_select"]))
{
player!.Print(Localizer["wp_knife_menu_select", knifeName]);
}
if (weaponSync != null) if (!string.IsNullOrEmpty(Localizer["wp_knife_menu_kill"]) && Config.Additional.CommandKillEnabled)
Task.Run(async () => await weaponSync.SyncKnifeToDatabase(playerInfo, knifeKey)); {
} player!.Print(Localizer["wp_knife_menu_kill"]);
}; }
foreach (var knifePair in knivesOnly) }
{
giveItemMenu.AddMenuOption(knifePair.Value, handleGive);
}
AddCommand($"css_{Config.Additional.CommandKnife}", "Knife Menu", (player, info) =>
{
if (!Utility.IsPlayerValid(player) || !g_bCommandsAllowed) return;
if (player == null || player.UserId == null) return; private void SetPlayerKnife(CCSPlayerController player, string knifeKey)
{
g_playersKnife[player.Slot] = knifeKey;
if (player != null && !commandsCooldown.TryGetValue(player.Slot, out DateTime cooldownEndTime) || if (g_bCommandsAllowed && (LifeState_t)player.LifeState == LifeState_t.LIFE_ALIVE)
player != null && DateTime.UtcNow >= (commandsCooldown.TryGetValue(player.Slot, out cooldownEndTime) ? cooldownEndTime : DateTime.UtcNow)) RefreshWeapons(player);
{ }
commandsCooldown[player.Slot] = DateTime.UtcNow.AddSeconds(Config.CmdRefreshCooldownSeconds);
giveItemMenu.PostSelectAction = PostSelectAction.Close;
MenuManager.OpenChatMenu(player, giveItemMenu);
return;
}
if (!string.IsNullOrEmpty(Localizer["wp_command_cooldown"]))
{
player!.Print(Localizer["wp_command_cooldown"]);
}
});
}
private void SetupSkinsMenu() private void SyncKnifeToDatabase(CCSPlayerController player, string knifeKey)
{ {
var classNamesByWeapon = weaponList.ToDictionary(kvp => kvp.Value, kvp => kvp.Key); if (weaponSync != null)
var weaponSelectionMenu = new ChatMenu(Localizer["wp_skin_menu_weapon_title"]); Task.Run(async () => await weaponSync.SyncKnifeToDatabase(GetPlayerInfo(player), knifeKey));
}
// Function to handle skin selection for a specific weapon private PlayerInfo GetPlayerInfo(CCSPlayerController player)
var handleWeaponSelection = (CCSPlayerController? player, ChatMenuOption option) => {
{ return new PlayerInfo
if (!Utility.IsPlayerValid(player)) return; {
UserId = player.UserId,
Slot = player.Slot,
Index = (int)player.Index,
SteamId = player.SteamID.ToString(),
Name = player.PlayerName,
IpAddress = player.IpAddress?.Split(":")[0]
};
}
string selectedWeapon = option.Text; private void AddCommandToOpenKnifeMenu(ChatMenu giveItemMenu)
if (classNamesByWeapon.TryGetValue(selectedWeapon, out string? selectedWeaponClassname)) {
{ AddCommand($"css_{Config.Additional.CommandKnife}", "Knife Menu", (player, info) =>
if (selectedWeaponClassname == null) return; {
var skinsForSelectedWeapon = skinsList?.Where(skin => if (!Utility.IsPlayerValid(player) || !g_bCommandsAllowed) return;
skin != null &&
skin.TryGetValue("weapon_name", out var weaponName) &&
weaponName?.ToString() == selectedWeaponClassname
)?.ToList();
var skinSubMenu = new ChatMenu(Localizer["wp_skin_menu_skin_title", selectedWeapon]); if (player == null || player.UserId == null) return;
skinSubMenu.PostSelectAction = PostSelectAction.Close;
// Function to handle skin selection for the chosen weapon if (IsCommandAllowed(player))
var handleSkinSelection = (CCSPlayerController p, ChatMenuOption opt) => {
{ commandsCooldown[player.Slot] = DateTime.UtcNow.AddSeconds(Config.CmdRefreshCooldownSeconds);
if (!Utility.IsPlayerValid(p)) return; giveItemMenu.PostSelectAction = PostSelectAction.Close;
MenuManager.OpenChatMenu(player, giveItemMenu);
return;
}
if (!string.IsNullOrEmpty(Localizer["wp_command_cooldown"]))
{
player!.Print(Localizer["wp_command_cooldown"]);
}
});
}
private bool IsCommandAllowed(CCSPlayerController player)
{
if (!commandsCooldown.TryGetValue(player.Slot, out DateTime cooldownEndTime))
{
return true;
}
return DateTime.UtcNow >= cooldownEndTime;
}
string steamId = p.SteamID.ToString(); private void SetupSkinsMenu()
var firstSkin = skinsList?.FirstOrDefault(skin => {
{ var classNamesByWeapon = weaponList.ToDictionary(kvp => kvp.Value, kvp => kvp.Key);
if (skin != null && skin.TryGetValue("weapon_name", out var weaponName)) var weaponSelectionMenu = new ChatMenu(Localizer["wp_skin_menu_weapon_title"]);
{
return weaponName?.ToString() == selectedWeaponClassname;
}
return false;
});
string selectedSkin = opt.Text; // Add weapon options to the weapon selection menu
string selectedPaintID = selectedSkin.Split('(')[1].Trim(')').Trim(); foreach (var weaponClass in weaponList.Keys)
{
string weaponName = weaponList[weaponClass];
weaponSelectionMenu.AddMenuOption(weaponName, (player, option) => HandleWeaponSelection(player, option, classNamesByWeapon));
}
if (firstSkin != null && // Command to open the weapon selection menu for players
firstSkin.TryGetValue("weapon_defindex", out var weaponDefIndexObj) && AddCommand($"css_{Config.Additional.CommandSkinSelection}", "Skins selection menu", (player, info) => OpenWeaponSelectionMenu(player, weaponSelectionMenu));
weaponDefIndexObj != null && }
int.TryParse(weaponDefIndexObj.ToString(), out var weaponDefIndex) &&
int.TryParse(selectedPaintID, out var paintID))
{
if (Config.Additional.ShowSkinImage && skinsList != null)
{
var foundSkin = skinsList.FirstOrDefault(skin =>
((int?)skin?["weapon_defindex"] ?? 0) == weaponDefIndex &&
((int?)skin?["paint"] ?? 0) == paintID &&
skin?["image"] != null
);
string image = foundSkin?["image"]?.ToString() ?? "";
PlayerWeaponImage[p.Slot] = image;
AddTimer(2.0f, () => PlayerWeaponImage.Remove(p.Slot), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
}
p.Print(Localizer["wp_skin_menu_select", selectedSkin]); private void HandleWeaponSelection(CCSPlayerController? player, ChatMenuOption option, Dictionary<string, string> classNamesByWeapon)
{
if (!Utility.IsPlayerValid(player)) return;
if (!gPlayerWeaponsInfo[p.Slot].ContainsKey(weaponDefIndex)) string selectedWeapon = option.Text;
{ if (classNamesByWeapon.TryGetValue(selectedWeapon, out string? selectedWeaponClassname))
gPlayerWeaponsInfo[p.Slot][weaponDefIndex] = new WeaponInfo(); {
} if (selectedWeaponClassname == null) return;
var skinsForSelectedWeapon = skinsList?.Where(skin =>
skin != null &&
skin.TryGetValue("weapon_name", out var weaponName) &&
weaponName?.ToString() == selectedWeaponClassname
)?.ToList();
gPlayerWeaponsInfo[p.Slot][weaponDefIndex].Paint = paintID; var skinSubMenu = new ChatMenu(Localizer["wp_skin_menu_skin_title", selectedWeapon]);
gPlayerWeaponsInfo[p.Slot][weaponDefIndex].Wear = 0.00f; skinSubMenu.PostSelectAction = PostSelectAction.Close;
gPlayerWeaponsInfo[p.Slot][weaponDefIndex].Seed = 0;
PlayerInfo playerInfo = new PlayerInfo // Add skin options to the submenu for the selected weapon
{ if (skinsForSelectedWeapon != null)
UserId = p.UserId, {
Index = (int)p.Index, foreach (var skin in skinsForSelectedWeapon.Where(s => s != null))
SteamId = p.SteamID.ToString(), {
Name = p.PlayerName, if (skin.TryGetValue("paint_name", out var paintNameObj) && skin.TryGetValue("paint", out var paintObj))
IpAddress = p.IpAddress?.Split(":")[0] {
}; var paintName = paintNameObj?.ToString();
var paint = paintObj?.ToString();
if (g_bCommandsAllowed && (LifeState_t)p.LifeState == LifeState_t.LIFE_ALIVE) if (!string.IsNullOrEmpty(paintName) && !string.IsNullOrEmpty(paint))
{ {
RefreshWeapons(player); var optionText = new StringBuilder(paintName).Append(" (").Append(paint).Append(")").ToString();
} skinSubMenu.AddMenuOption(optionText, (p, opt) => HandleSkinSelection(p, opt, selectedWeaponClassname));
} }
}; }
}
}
if (player != null && Utility.IsPlayerValid(player))
MenuManager.OpenChatMenu(player, skinSubMenu);
}
}
// Add skin options to the submenu for the selected weapon private void HandleSkinSelection(CCSPlayerController p, ChatMenuOption opt, string selectedWeaponClassname)
if (skinsForSelectedWeapon != null) {
{ if (!Utility.IsPlayerValid(p)) return;
foreach (var skin in skinsForSelectedWeapon.Where(s => s != null))
{
if (skin.TryGetValue("paint_name", out var paintNameObj) && skin.TryGetValue("paint", out var paintObj))
{
var paintName = paintNameObj?.ToString();
var paint = paintObj?.ToString();
if (!string.IsNullOrEmpty(paintName) && !string.IsNullOrEmpty(paint)) string steamId = p.SteamID.ToString();
{ var firstSkin = skinsList?.Find(skin =>
skinSubMenu.AddMenuOption($"{paintName} ({paint})", handleSkinSelection); {
} if (skin != null && skin.TryGetValue("weapon_name", out var weaponName))
} {
} return weaponName?.ToString() == selectedWeaponClassname;
} }
if (player != null && Utility.IsPlayerValid(player)) return false;
MenuManager.OpenChatMenu(player, skinSubMenu); });
}
};
// Add weapon options to the weapon selection menu string selectedSkin = opt.Text;
foreach (var weaponClass in weaponList.Keys) string selectedPaintID = selectedSkin.Split('(')[1].Trim(')').Trim();
{
string weaponName = weaponList[weaponClass];
weaponSelectionMenu.AddMenuOption(weaponName, handleWeaponSelection);
}
// Command to open the weapon selection menu for players
AddCommand($"css_{Config.Additional.CommandSkinSelection}", "Skins selection menu", (player, info) =>
{
if (!Utility.IsPlayerValid(player)) return;
if (player == null || player.UserId == null) return; if (firstSkin != null &&
firstSkin.TryGetValue("weapon_defindex", out var weaponDefIndexObj) &&
weaponDefIndexObj != null &&
int.TryParse(weaponDefIndexObj.ToString(), out var weaponDefIndex) &&
int.TryParse(selectedPaintID, out var paintID))
{
HandleSkinImage(p, weaponDefIndex, paintID);
p.Print(Localizer["wp_skin_menu_select", selectedSkin]);
UpdatePlayerWeaponInfo(p, weaponDefIndex, paintID);
}
}
if (player != null && !commandsCooldown.TryGetValue(player.Slot, out DateTime cooldownEndTime) || private void HandleSkinImage(CCSPlayerController p, int weaponDefIndex, int paintID)
player != null && DateTime.UtcNow >= (commandsCooldown.TryGetValue(player.Slot, out cooldownEndTime) ? cooldownEndTime : DateTime.UtcNow)) {
{ if (Config.Additional.ShowSkinImage && skinsList != null)
commandsCooldown[player.Slot] = DateTime.UtcNow.AddSeconds(Config.CmdRefreshCooldownSeconds); {
MenuManager.OpenChatMenu(player, weaponSelectionMenu); var foundSkin = skinsList.FirstOrDefault(skin =>
return; ((int?)skin?["weapon_defindex"] ?? 0) == weaponDefIndex &&
} ((int?)skin?["paint"] ?? 0) == paintID &&
if (!string.IsNullOrEmpty(Localizer["wp_command_cooldown"])) skin?["image"] != null
{ );
player!.Print(Localizer["wp_command_cooldown"]); string image = foundSkin?["image"]?.ToString() ?? "";
} PlayerWeaponImage[p.Slot] = image;
}); AddTimer(2.0f, () => PlayerWeaponImage.Remove(p.Slot), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
} }
}
private void SetupGlovesMenu() private void UpdatePlayerWeaponInfo(CCSPlayerController p, int weaponDefIndex, int paintID)
{ {
var glovesSelectionMenu = new ChatMenu(Localizer["wp_glove_menu_title"]); if (!gPlayerWeaponsInfo[p.Slot].ContainsKey(weaponDefIndex))
glovesSelectionMenu.PostSelectAction = PostSelectAction.Close; {
gPlayerWeaponsInfo[p.Slot][weaponDefIndex] = new WeaponInfo();
}
var handleGloveSelection = (CCSPlayerController? player, ChatMenuOption option) => gPlayerWeaponsInfo[p.Slot][weaponDefIndex].Paint = paintID;
{ gPlayerWeaponsInfo[p.Slot][weaponDefIndex].Wear = 0.00f;
if (!Utility.IsPlayerValid(player) || player is null) return; gPlayerWeaponsInfo[p.Slot][weaponDefIndex].Seed = 0;
string selectedPaintName = option.Text; if (g_bCommandsAllowed && (LifeState_t)p.LifeState == LifeState_t.LIFE_ALIVE)
{
RefreshWeapons(p);
}
}
var selectedGlove = glovesList.FirstOrDefault(g => g.ContainsKey("paint_name") && g["paint_name"]?.ToString() == selectedPaintName); private void OpenWeaponSelectionMenu(CCSPlayerController? player, ChatMenu weaponSelectionMenu)
if (selectedGlove != null) {
{ if (!Utility.IsPlayerValid(player)) return;
if (
selectedGlove != null &&
selectedGlove.ContainsKey("weapon_defindex") &&
selectedGlove.ContainsKey("paint") &&
int.TryParse(selectedGlove["weapon_defindex"]?.ToString(), out int weaponDefindex) &&
int.TryParse(selectedGlove["paint"]?.ToString(), out int paint)
)
{
if (Config.Additional.ShowSkinImage)
{
string image = selectedGlove["image"]?.ToString() ?? "";
PlayerWeaponImage[player.Slot] = image;
AddTimer(2.0f, () => PlayerWeaponImage.Remove(player.Slot), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
}
PlayerInfo playerInfo = new PlayerInfo if (player == null || player.UserId == null) return;
{
UserId = player.UserId,
Slot = player.Slot,
Index = (int)player.Index,
SteamId = player.SteamID.ToString(),
Name = player.PlayerName,
IpAddress = player.IpAddress?.Split(":")[0]
};
if (paint != 0) if (player != null && !commandsCooldown.TryGetValue(player.Slot, out DateTime cooldownEndTime) ||
{ player != null && DateTime.UtcNow >= (commandsCooldown.TryGetValue(player.Slot, out cooldownEndTime) ? cooldownEndTime : DateTime.UtcNow))
g_playersGlove[player.Slot] = (ushort)weaponDefindex; {
commandsCooldown[player.Slot] = DateTime.UtcNow.AddSeconds(Config.CmdRefreshCooldownSeconds);
MenuManager.OpenChatMenu(player, weaponSelectionMenu);
return;
}
if (!string.IsNullOrEmpty(Localizer["wp_command_cooldown"]))
{
player!.Print(Localizer["wp_command_cooldown"]);
}
}
private void SetupGlovesMenu()
{
var glovesSelectionMenu = new ChatMenu(Localizer["wp_glove_menu_title"]);
glovesSelectionMenu.PostSelectAction = PostSelectAction.Close;
if (!gPlayerWeaponsInfo[player.Slot].ContainsKey(weaponDefindex)) var handleGloveSelection = (CCSPlayerController? player, ChatMenuOption option) =>
{ {
WeaponInfo weaponInfo = new(); if (!Utility.IsPlayerValid(player) || player is null) return;
weaponInfo.Paint = paint;
gPlayerWeaponsInfo[player.Slot][weaponDefindex] = weaponInfo;
}
}
else
{
g_playersGlove.TryRemove(player.Slot, out _);
}
if (!string.IsNullOrEmpty(Localizer["wp_glove_menu_select"])) string selectedPaintName = option.Text;
{ var selectedGlove = glovesList.FirstOrDefault(g => g.ContainsKey("paint_name") && g["paint_name"]?.ToString() == selectedPaintName);
player!.Print(Localizer["wp_glove_menu_select", selectedPaintName]); if (selectedGlove != null)
} {
HandleSelectedGlove(player, selectedGlove, selectedPaintName);
}
};
AddGloveOptionsToMenu(glovesSelectionMenu, handleGloveSelection);
AddCommandToOpenGloveSelectionMenu(glovesSelectionMenu);
}
void HandleSelectedGlove(CCSPlayerController? player, JObject selectedGlove, string selectedPaintName)
{
if (selectedGlove != null &&
selectedGlove.ContainsKey("weapon_defindex") &&
selectedGlove.ContainsKey("paint") &&
int.TryParse(selectedGlove["weapon_defindex"]?.ToString(), out int weaponDefindex) &&
int.TryParse(selectedGlove["paint"]?.ToString(), out int paint))
{
if (Config.Additional.ShowSkinImage)
{
string image = selectedGlove["image"]?.ToString() ?? "";
PlayerWeaponImage[player.Slot] = image;
AddTimer(2.0f, () => PlayerWeaponImage.Remove(player.Slot), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
}
if (weaponSync != null) PlayerInfo playerInfo = new PlayerInfo
{ {
Task.Run(async () => UserId = player.UserId,
{ Slot = player.Slot,
await weaponSync.SyncGloveToDatabase(playerInfo, weaponDefindex); Index = (int)player.Index,
SteamId = player.SteamID.ToString(),
Name = player.PlayerName,
IpAddress = player.IpAddress?.Split(":")[0]
};
if (!gPlayerWeaponsInfo[playerInfo.Slot].ContainsKey(weaponDefindex)) if (paint != 0)
{ {
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex] = new WeaponInfo(); g_playersGlove[player.Slot] = (ushort)weaponDefindex;
}
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Paint = paint; if (!gPlayerWeaponsInfo[player.Slot].TryGetValue(weaponDefindex, out _))
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Wear = 0.00f; {
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex].Seed = 0; WeaponInfo weaponInfo = new();
weaponInfo.Paint = paint;
gPlayerWeaponsInfo[player.Slot][weaponDefindex] = weaponInfo;
}
}
else
{
g_playersGlove.TryRemove(player.Slot, out _);
}
}); if (!string.IsNullOrEmpty(Localizer["wp_glove_menu_select"]))
} {
RefreshGloves(player); player!.Print(Localizer["wp_glove_menu_select", selectedPaintName]);
} }
};
};
// Add weapon options to the weapon selection menu if (weaponSync != null)
foreach (var gloveObject in glovesList) {
{ Task.Run(async () =>
string paintName = gloveObject["paint_name"]?.ToString() ?? ""; {
await weaponSync.SyncGloveToDatabase(playerInfo, weaponDefindex);
if (paintName.Length > 0) if (!gPlayerWeaponsInfo[playerInfo.Slot].TryGetValue(weaponDefindex, out var weaponInfo))
glovesSelectionMenu.AddMenuOption(paintName, handleGloveSelection); {
} weaponInfo = new WeaponInfo();
gPlayerWeaponsInfo[playerInfo.Slot][weaponDefindex] = weaponInfo;
}
// Command to open the weapon selection menu for players weaponInfo.Paint = paint;
AddCommand($"css_{Config.Additional.CommandGlove}", "Gloves selection menu", (player, info) => weaponInfo.Wear = 0.00f;
{ weaponInfo.Seed = 0;
if (!Utility.IsPlayerValid(player) || !g_bCommandsAllowed) return;
if (player == null || player.UserId == null) return; });
}
RefreshGloves(player);
}
}
if (player != null && !commandsCooldown.TryGetValue(player.Slot, out DateTime cooldownEndTime) || private void AddGloveOptionsToMenu(ChatMenu glovesSelectionMenu, Action<CCSPlayerController?, ChatMenuOption> handleGloveSelection)
player != null && DateTime.UtcNow >= (commandsCooldown.TryGetValue(player.Slot, out cooldownEndTime) ? cooldownEndTime : DateTime.UtcNow)) {
{ foreach (var gloveObject in glovesList)
commandsCooldown[player.Slot] = DateTime.UtcNow.AddSeconds(Config.CmdRefreshCooldownSeconds); {
MenuManager.OpenChatMenu(player, glovesSelectionMenu); string paintName = gloveObject["paint_name"]?.ToString() ?? "";
return;
} if (paintName.Length > 0)
if (!string.IsNullOrEmpty(Localizer["wp_command_cooldown"])) glovesSelectionMenu.AddMenuOption(paintName, handleGloveSelection);
{ }
player!.Print(Localizer["wp_command_cooldown"]); }
}
}); private void AddCommandToOpenGloveSelectionMenu(ChatMenu glovesSelectionMenu)
} {
AddCommand($"css_{Config.Additional.CommandGlove}", "Gloves selection menu", (player, info) =>
{
if (!Utility.IsPlayerValid(player) || !g_bCommandsAllowed) return;
if (player == null || player.UserId == null) return;
if (player != null && !commandsCooldown.TryGetValue(player.Slot, out DateTime cooldownEndTime) ||
player != null && DateTime.UtcNow >= (commandsCooldown.TryGetValue(player.Slot, out cooldownEndTime) ? cooldownEndTime : DateTime.UtcNow))
{
commandsCooldown[player.Slot] = DateTime.UtcNow.AddSeconds(Config.CmdRefreshCooldownSeconds);
MenuManager.OpenChatMenu(player, glovesSelectionMenu);
return;
}
if (!string.IsNullOrEmpty(Localizer["wp_command_cooldown"]))
{
player!.Print(Localizer["wp_command_cooldown"]);
}
});
}
} }
} }