From efd9ab5c2289862439dbddc49f65e2bb4cd2a494 Mon Sep 17 00:00:00 2001 From: daffyyyy Date: Tue, 12 Dec 2023 19:46:19 +0100 Subject: [PATCH] css_vote and small fixes --- CS2-SimpleAdmin.cs | 66 ++++++++++++++++++++++++++++++++++++++++++++-- Helper.cs | 7 +++++ PlayerUtils.cs | 3 ++- README.md | 3 ++- lang/en.json | 9 +++++-- lang/pl.json | 7 ++++- 6 files changed, 88 insertions(+), 7 deletions(-) diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index fa0e36b..089ee0c 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -7,6 +7,7 @@ using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Commands.Targeting; using CounterStrikeSharp.API.Modules.Cvars; using CounterStrikeSharp.API.Modules.Memory; +using CounterStrikeSharp.API.Modules.Menu; using CounterStrikeSharp.API.Modules.Utils; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; @@ -21,13 +22,15 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig gaggedPlayers = new ConcurrentBag(); public static ConcurrentBag mutedPlayers = new ConcurrentBag(); + public static Dictionary answers = new Dictionary(); public static bool TagsDetected = false; + public static bool VoteInProgress = false; internal string dbConnectionString = string.Empty; public override string ModuleName => "CS2-SimpleAdmin"; public override string ModuleDescription => ""; public override string ModuleAuthor => "daffyy"; - public override string ModuleVersion => "1.2.0a"; + public override string ModuleVersion => "1.2.1a"; public CS2_SimpleAdminConfig Config { get; set; } = new(); @@ -1140,6 +1143,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig [... options ...]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] + public void OnVoteCommand(CCSPlayerController? caller, CommandInfo command) + { + if (command.GetArg(1) == null || command.GetArg(1).Length < 0 || command.ArgCount < 2) + return; + + string question = command.GetArg(1); + int answersCount = command.ArgCount; + + ChatMenu voteMenu = new(_localizer!["sa_admin_vote_menu_title", question]); + + for (int i = 2; i <= answersCount - 1; i++) + { + answers.Add(command.GetArg(i), 0); + voteMenu.AddMenuOption(command.GetArg(i), Helper.handleVotes); + } + + Helper.PrintToCenterAll(_localizer!["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]); + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]); + Server.PrintToChatAll(sb.ToString()); + + VoteInProgress = true; + + foreach (var p in Utilities.GetPlayers().Where(p => p.IsValid && !p.IsBot && !p.IsHLTV)) + { + if (p == null) continue; + ChatMenus.OpenMenu(p, voteMenu); + } + + AddTimer(40, () => + { + StringBuilder sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_vote_message_results", question]); + Server.PrintToChatAll(sb.ToString()); + + foreach (KeyValuePair kvp in answers) + { + sb = new(_localizer!["sa_prefix"]); + sb.Append(_localizer["sa_admin_vote_message_results_answer", kvp.Key, kvp.Value]); + Server.PrintToChatAll(sb.ToString()); + } + + VoteInProgress = false; + + }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); + + return; + } + [ConsoleCommand("css_map")] [RequiresPermissions("@css/changemap")] [CommandHelper(minArgs: 1, usage: "", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] @@ -1227,7 +1290,6 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig p.IsValid && !p.IsBot && !p.IsHLTV && AdminManager.PlayerHasPermissions(p, "@css/chat"))) { diff --git a/Helper.cs b/Helper.cs index 08b6bfa..3305f4a 100644 --- a/Helper.cs +++ b/Helper.cs @@ -3,6 +3,7 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Modules.Utils; using System.Reflection; using System.Text.RegularExpressions; +using CounterStrikeSharp.API.Modules.Menu; namespace CS2_SimpleAdmin { @@ -99,5 +100,11 @@ namespace CS2_SimpleAdmin return message; } + internal static void handleVotes(CCSPlayerController player, ChatMenuOption option) + { + if (CS2_SimpleAdmin.VoteInProgress) + CS2_SimpleAdmin.answers[option.Text]++; + } + } } diff --git a/PlayerUtils.cs b/PlayerUtils.cs index 0ffaaf8..e2484fa 100644 --- a/PlayerUtils.cs +++ b/PlayerUtils.cs @@ -1,5 +1,6 @@ using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; +using CounterStrikeSharp.API.Modules.Menu; using CounterStrikeSharp.API.Modules.Utils; using System.Text; @@ -42,7 +43,7 @@ public static class PlayerUtils public static void Freeze(this CBasePlayerPawn pawn) { - pawn.MoveType = MoveType_t.MOVETYPE_NONE; + pawn.MoveType = MoveType_t.MOVETYPE_OBSOLETE; } public static void Unfreeze(this CBasePlayerPawn pawn) diff --git a/README.md b/README.md index 9e40293..e539578 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Manage your Counter-Strike 2 server by simple commands :) ### Commands ```js - css_admin - Display all admin commands // @css/generic -- css_who - Display informations about player // @css/generic +- css_who <#userid or name> - Display informations about player // @css/generic - css_players - Display player list // @css/generic - css_ban <#userid or name> [time in minutes/0 perm] [reason] - Ban player // @css/ban - css_addban [time in minutes/0 perm] [reason] - Ban player via steamid64 // @css/ban @@ -27,6 +27,7 @@ Manage your Counter-Strike 2 server by simple commands :) - css_slay <#userid or name> - Kill player // @css/slay - css_slap <#userid or name> [damage] - Slap player // @css/slay - css_team <#userid or name> [] - Change player team // @css/kick +- css_vote <"Question?"> ["Answer1"] ["Answer2"] ... - Create vote // @css/generic - css_map - Change map // @css/changemap - css_wsmap - Change workshop map // @css/changemap - css_asay - Say message to all admins // @css/chat diff --git a/lang/en.json b/lang/en.json index 0c08f72..16dcefc 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1,6 +1,6 @@ { "sa_prefix": "{lightred}[SA] {default}", - "sa_adminhelp": "{GREEN}[ CS2-SimpleAdmin HELP ]{DEFAULT}\n- css_ban <#userid or name> [time in minutes/0 perm] [reason] - Ban player\n- css_addban [time in minutes/0 perm] [reason] - Ban player via steamid64\n- css_banip [time in minutes/0 perm] [reason] - Ban player via IP address\n- css_unban - Unban player\n- css_kick <#userid or name> [reason] - Kick player\n- css_gag <#userid or name> [time in minutes/0 perm] [reason] - Gag player\n- css_addgag [time in minutes/0 perm] [reason] - Gag player via steamid64\n- css_unmute - Ungag player\n- css_mute <#userid or name> [time in minutes/0 perm] [reason] - Mute player\n- css_addmute [time in minutes/0 perm] [reason] - Mute player via steamid64\n- css_give <#userid or name> - Give player a weapon\n- css_slay <#userid or name> - Kill player\n- css_slap <#userid or name> [damage] - Slap player\n- css_map - Change map\n- css_wsmap - Change workshop map\n- css_asay - Say message to all admins\n- css_say - Say message as admin in chat\n- css_psay <#userid or name> - Sends private message to player\n- css_csay - Say message as admin in center\n- css_hsay - Say message as admin in hud\n- css_noclip <#userid or name> - Toggle noclip for player\n- css_freeze <#userid or name> [duration] - Freeze player\n- css_unfreeze <#userid or name> - Unfreeze player\n- css_respawn <#userid or name> - Respawn player\n- css_cvar - Change cvar value\n- css_rcon - Run command as server", + "sa_adminhelp": "{GREEN}[ CS2-SimpleAdmin HELP ]{DEFAULT}\n- css_who <#userid or name> - Display informations about player\n- css_players - Display player list\n- css_ban <#userid or name> [time in minutes/0 perm] [reason] - Ban player\n- css_addban [time in minutes/0 perm] [reason] - Ban player via steamid64\n- css_banip [time in minutes/0 perm] [reason] - Ban player via IP address\n- css_unban - Unban player\n- css_kick <#userid or name> [reason] - Kick player\n- css_gag <#userid or name> [time in minutes/0 perm] [reason] - Gag player\n- css_addgag [time in minutes/0 perm] [reason] - Gag player via steamid64\n- css_unmute - Ungag player\n- css_mute <#userid or name> [time in minutes/0 perm] [reason] - Mute player\n- css_addmute [time in minutes/0 perm] [reason] - Mute player via steamid64\n- css_give <#userid or name> - Give player a weapon\n- css_slay <#userid or name> - Kill player\n- css_slap <#userid or name> [damage] - Slap player\n- css_vote <'Question?'> ['Answer1'] ['Answer2'] ... - Create vote\n- css_map - Change map\n- css_wsmap - Change workshop map\n- css_asay - Say message to all admins\n- css_say - Say message as admin in chat\n- css_psay <#userid or name> - Sends private message to player\n- css_csay - Say message as admin in center\n- css_hsay - Say message as admin in hud\n- css_noclip <#userid or name> - Toggle noclip for player\n- css_freeze <#userid or name> [duration] - Freeze player\n- css_unfreeze <#userid or name> - Unfreeze player\n- css_respawn <#userid or name> - Respawn player\n- css_cvar - Change cvar value\n- css_rcon - Run command as server", "sa_player_ban_message_time": "You have been banned for {lightred}{0}{default} for {lightred}{1}{default} minutes by {lightred}{2}{default}!", "sa_player_ban_message_perm": "You have been banned permanently for {lightred}{0}{default} by {lightred}{1}{default}!", "sa_player_kick_message": "You have been kicked for {lightred}{0}{default} by {lightred}{1}{default}!", @@ -21,8 +21,13 @@ "sa_admin_changemap_message": "Admin {lightred}{0}{default} changed map to {lightred}{1}{default}!", "sa_admin_noclip_message": "Admin {lightred}{0}{default} toggled noclip for {lightred}{1}{default}!", "sa_admin_freeze_message": "Admin {lightred}{0}{default} freezed {lightred}{1}{default}!", - "sa_admin_umfreeze_message": "Admin {lightred}{0}{default} umfreezed {lightred}{1}{default}!", + "sa_admin_unfreeze_message": "Admin {lightred}{0}{default} umfreezed {lightred}{1}{default}!", "sa_admin_respawn_message": "Admin {lightred}{0}{default} respawned {lightred}{1}{default}!", + "sa_admin_team_message": "Admin {lightred}{0}{default} transfered {lightred}{1}{default} to {lightred}{2}{default}!", + "sa_admin_vote_menu_title": "{lime}VOTING FOR {gold}{0}", + "sa_admin_vote_message": "Admin {lightred}{0}{default} started voting for {lightred}{1}{default}", + "sa_admin_vote_message_results": "{lime}VOTING RESULTS FOR {gold}{0}", + "sa_admin_vote_message_results_answer": "{lime}{0} {default}- {gold}{1}", "sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{default}", "sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(PLAYER) {lightred}{0}{default}: {lightred}{1}{default}" diff --git a/lang/pl.json b/lang/pl.json index d496dc6..9ed7288 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -1,6 +1,6 @@ { "sa_prefix": "{lightred}[SA] {default}", - "sa_adminhelp": "{GREEN}[ CS2-SimpleAdmin HELP ]{DEFAULT}\n- css_ban <#userid or name> [time in minutes/0 perm] [reason] - Ban player\n- css_addban [time in minutes/0 perm] [reason] - Ban player via steamid64\n- css_banip [time in minutes/0 perm] [reason] - Ban player via IP address\n- css_unban - Unban player\n- css_kick <#userid or name> [reason] - Kick player\n- css_gag <#userid or name> [time in minutes/0 perm] [reason] - Gag player\n- css_addgag [time in minutes/0 perm] [reason] - Gag player via steamid64\n- css_unmute - Ungag player\n- css_mute <#userid or name> [time in minutes/0 perm] [reason] - Mute player\n- css_addmute [time in minutes/0 perm] [reason] - Mute player via steamid64\n- css_give <#userid or name> - Give player a weapon\n- css_slay <#userid or name> - Kill player\n- css_slap <#userid or name> [damage] - Slap player\n- css_map - Change map\n- css_wsmap - Change workshop map\n- css_asay - Say message to all admins\n- css_say - Say message as admin in chat\n- css_psay <#userid or name> - Sends private message to player\n- css_csay - Say message as admin in center\n- css_hsay - Say message as admin in hud\n- css_noclip <#userid or name> - Toggle noclip for player\n- css_freeze <#userid or name> [duration] - Freeze player\n- css_unfreeze <#userid or name> - Unfreeze player\n- css_respawn <#userid or name> - Respawn player\n- css_cvar - Change cvar value\n- css_rcon - Run command as server", + "sa_adminhelp": "{GREEN}[ CS2-SimpleAdmin HELP ]{DEFAULT}\n- css_who <#userid or name> - Display informations about player\n- css_players - Display player list\n- css_ban <#userid or name> [time in minutes/0 perm] [reason] - Ban player\n- css_addban [time in minutes/0 perm] [reason] - Ban player via steamid64\n- css_banip [time in minutes/0 perm] [reason] - Ban player via IP address\n- css_unban - Unban player\n- css_kick <#userid or name> [reason] - Kick player\n- css_gag <#userid or name> [time in minutes/0 perm] [reason] - Gag player\n- css_addgag [time in minutes/0 perm] [reason] - Gag player via steamid64\n- css_unmute - Ungag player\n- css_mute <#userid or name> [time in minutes/0 perm] [reason] - Mute player\n- css_addmute [time in minutes/0 perm] [reason] - Mute player via steamid64\n- css_give <#userid or name> - Give player a weapon\n- css_slay <#userid or name> - Kill player\n- css_slap <#userid or name> [damage] - Slap player\n- css_vote <'Question?'> ['Answer1'] ['Answer2'] ... - Create vote\n- css_map - Change map\n- css_wsmap - Change workshop map\n- css_asay - Say message to all admins\n- css_say - Say message as admin in chat\n- css_psay <#userid or name> - Sends private message to player\n- css_csay - Say message as admin in center\n- css_hsay - Say message as admin in hud\n- css_noclip <#userid or name> - Toggle noclip for player\n- css_freeze <#userid or name> [duration] - Freeze player\n- css_unfreeze <#userid or name> - Unfreeze player\n- css_respawn <#userid or name> - Respawn player\n- css_cvar - Change cvar value\n- css_rcon - Run command as server", "sa_player_ban_message_time": "Zostałeś zbanowany za {lightred}{0}{default} na {lightred}{1}{default} minut przez {lightred}{2}{default}!", "sa_player_ban_message_perm": "Zostałeś zbanowany na zawsze za {lightred}{0}{default} przez {lightred}{1}{default}!", "sa_player_kick_message": "Zostałeś wyrzucony za {lightred}{0}{default} przez {lightred}{1}{default}!", @@ -23,6 +23,11 @@ "sa_admin_freeze_message": "Admin {lightred}{0}{default} zamroził {lightred}{1}{default}!", "sa_admin_umfreeze_message": "Admin {lightred}{0}{default} odmroził {lightred}{1}{default}!", "sa_admin_respawn_message": "Admin {lightred}{0}{default} odrodził {lightred}{1}{default}!", + "sa_admin_team_message": "Admin {lightred}{0}{default} przerzucił {lightred}{1}{default} do {lightred}{2}{default}!", + "sa_admin_vote_menu_title": "{lime}GŁOSOWANIE NA {gold}{0}", + "sa_admin_vote_message": "Admin {lightred}{0}{default} rozpoczął głosowanie na {lightred}{1}{default}", + "sa_admin_vote_message_results": "{lime}WYNIKI GŁOSOWANIA {gold}{0}", + "sa_admin_vote_message_results_answer": "{lime}{0} {default}- {gold}[{1}]", "sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{default}", "sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}", "sa_adminchat_template_player": "{SILVER}(GRACZ) {lightred}{0}{default}: {lightred}{1}{default}"