Minor changes

This commit is contained in:
Dawid Bepierszcz
2024-02-13 01:35:45 +01:00
parent af66802b37
commit 4e898a6509
16 changed files with 92 additions and 109 deletions

View File

@@ -13,9 +13,9 @@ using System.Collections.Concurrent;
namespace CS2_SimpleAdmin;
[MinimumApiVersion(163)]
public partial class CS2_SimpleAdmin: BasePlugin, IPluginConfig<CS2_SimpleAdminConfig>
public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdminConfig>
{
public static CS2_SimpleAdmin Instance { get; private set; } = null;
public static CS2_SimpleAdmin Instance { get; private set; } = new();
public static IStringLocalizer? _localizer;
public static Dictionary<string, int> voteAnswers = new Dictionary<string, int>();
@@ -38,15 +38,13 @@ public partial class CS2_SimpleAdmin: BasePlugin, IPluginConfig<CS2_SimpleAdminC
public static MemoryFunctionVoid<CBasePlayerController, CCSPlayerPawn, bool, bool>? CBasePlayerController_SetPawnFunc = null;
public override string ModuleName => "CS2-SimpleAdmin";
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
public override string ModuleAuthor => "daffyy";
public override string ModuleVersion => "1.3.1a";
public override string ModuleAuthor => "daffyy & Dliix66";
public override string ModuleVersion => "1.3.2a";
public CS2_SimpleAdminConfig Config { get; set; } = new();
public override void Load(bool hotReload)
{
Instance = this;
registerEvents();
if (hotReload)

View File

@@ -12,7 +12,7 @@
<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.166" />
<PackageReference Include="Dapper" Version="*" />
<PackageReference Include="Discord.Net.Webhook" Version="3.13.0" />
<PackageReference Include="Discord.Net.Webhook" Version="3.13.1" />
<PackageReference Include="MySqlConnector" Version="2.3.5" />
<PackageReference Include="Newtonsoft.Json" Version="*" />
</ItemGroup>

View File

@@ -55,11 +55,12 @@ namespace CS2_SimpleAdmin
});
}
internal void Ban(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, BanManager banManager = null)
internal void Ban(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, BanManager? banManager = null)
{
if (_database == null) return;
callerName ??= caller == null ? "Console" : caller.PlayerName;
banManager ??= new BanManager(_database, Config);
if (player.PawnIsAlive)
{
player.Pawn.Value!.Freeze();

View File

@@ -8,10 +8,9 @@ using CounterStrikeSharp.API.Modules.Commands.Targeting;
using CounterStrikeSharp.API.Modules.Cvars;
using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Utils;
using CS2_SimpleAdmin.Menus;
using Microsoft.Extensions.Logging;
using System.Text;
using CS2_SimpleAdmin.Menus;
using Discord.Rest;
namespace CS2_SimpleAdmin
{
@@ -27,20 +26,16 @@ namespace CS2_SimpleAdmin
{
try
{
using (var connection = await _database.GetConnectionAsync())
{
var commandText = "ALTER TABLE `sa_mutes` CHANGE `type` `type` ENUM('GAG','MUTE', 'SILENCE', '') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'GAG';";
using var connection = await _database.GetConnectionAsync();
var commandText = "ALTER TABLE `sa_mutes` CHANGE `type` `type` ENUM('GAG','MUTE', 'SILENCE', '') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'GAG';";
using (var command = connection.CreateCommand())
{
command.CommandText = commandText;
await command.ExecuteNonQueryAsync();
}
}
using var command = connection.CreateCommand();
command.CommandText = commandText;
await command.ExecuteNonQueryAsync();
}
catch (Exception ex)
{
Logger.LogError($"{ex.Message}");
Logger.LogError(ex.Message);
}
});
}
@@ -55,7 +50,7 @@ namespace CS2_SimpleAdmin
AdminMenu.OpenMenu(caller);
}
[ConsoleCommand("css_adminhelp")]
[RequiresPermissions("@css/generic")]
public void OnAdminHelpCommand(CCSPlayerController? caller, CommandInfo command)
@@ -117,6 +112,7 @@ namespace CS2_SimpleAdmin
public void AddAdmin(CCSPlayerController? caller, string steamid, string name, string flags, int immunity, int time = 0, bool globalAdmin = false, CommandInfo? command = null)
{
if (_database == null) return;
AdminSQLManager _adminManager = new(_database);
_ = _adminManager.AddAdminBySteamId(steamid, name, flags, immunity, time, globalAdmin);
@@ -157,6 +153,7 @@ namespace CS2_SimpleAdmin
public void RemoveAdmin(CCSPlayerController? caller, string steamid, bool globalDelete = false, CommandInfo? command = null)
{
if (_database == null) return;
AdminSQLManager _adminManager = new(_database);
_ = _adminManager.DeleteAdminBySteamId(steamid, globalDelete);
@@ -173,7 +170,7 @@ namespace CS2_SimpleAdmin
AdminManager.RemovePlayerAdminData(steamId);
}
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
string msg = $"Removed flags from '{steamid}'";
if (command != null)
command.ReplyToCommand(msg);
@@ -197,6 +194,7 @@ namespace CS2_SimpleAdmin
public void ReloadAdmins()
{
if (_database == null) return;
foreach (SteamID steamId in AdminSQLManager._adminCache.Keys.ToList())
{
if (AdminSQLManager._adminCache.TryRemove(steamId, out _))
@@ -260,7 +258,7 @@ namespace CS2_SimpleAdmin
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => player != null && player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
Database database = new Database(dbConnectionString);
Database database = new(dbConnectionString);
BanManager _banManager = new(database, Config);
MuteManager _muteManager = new(_database);
@@ -268,7 +266,7 @@ namespace CS2_SimpleAdmin
{
if (caller!.CanTarget(player))
{
PlayerInfo playerInfo = new PlayerInfo
PlayerInfo playerInfo = new()
{
UserId = player.UserId,
Index = (int)player.Index,
@@ -288,7 +286,7 @@ namespace CS2_SimpleAdmin
Server.NextFrame(() =>
{
Action<string> printMethod = caller == null ? Server.PrintToConsole : caller.PrintToConsole;
printMethod($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------");
printMethod($"• Clan: \"{player!.Clan}\" Name: \"{playerInfo.Name}\"");
@@ -384,7 +382,7 @@ namespace CS2_SimpleAdmin
});
}
public void Kick(CCSPlayerController? caller, CCSPlayerController player, string reason = "Unknown", string callerName = null)
public void Kick(CCSPlayerController? caller, CCSPlayerController player, string reason = "Unknown", string? callerName = null)
{
callerName ??= caller == null ? "Console" : caller.PlayerName;
if (player.PawnIsAlive)
@@ -430,7 +428,7 @@ namespace CS2_SimpleAdmin
ChangeMap(caller, map, command);
}
public void ChangeMap(CCSPlayerController caller, string map, CommandInfo? command = null)
public void ChangeMap(CCSPlayerController? caller, string map, CommandInfo? command = null)
{
string callerName = caller == null ? "Console" : caller.PlayerName;
string _command = string.Empty;
@@ -506,7 +504,7 @@ namespace CS2_SimpleAdmin
ChangeWorkshopMap(caller, map, command);
}
public void ChangeWorkshopMap(CCSPlayerController caller, string map, CommandInfo? command = null)
public void ChangeWorkshopMap(CCSPlayerController? caller, string map, CommandInfo? command = null)
{
string callerName = caller == null ? "Console" : caller.PlayerName;
string _command = string.Empty;
@@ -597,7 +595,7 @@ namespace CS2_SimpleAdmin
command.ReplyToCommand($"{callerName} executed command {command.ArgString}.");
Logger.LogInformation($"{callerName} executed command ({command.ArgString}).");
}
[ConsoleCommand("css_rr")]
[ConsoleCommand("css_rg")]
[ConsoleCommand("css_restart")]
@@ -609,7 +607,7 @@ namespace CS2_SimpleAdmin
RestartGame(caller);
}
public void RestartGame(CCSPlayerController admin)
public static void RestartGame(CCSPlayerController? admin)
{
// TODO: Localize
var name = admin == null ? "Console" : admin.PlayerName;

View File

@@ -55,12 +55,13 @@ namespace CS2_SimpleAdmin
});
}
internal void Gag(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, MuteManager muteManager = null, PlayerPenaltyManager playerPenaltyManager = null)
internal void Gag(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, PlayerPenaltyManager? playerPenaltyManager = null)
{
if (_database == null) return;
callerName ??= caller == null ? "Console" : caller.PlayerName;
muteManager ??= new MuteManager(_database);
playerPenaltyManager ??= new PlayerPenaltyManager();
PlayerInfo playerInfo = new PlayerInfo
{
SteamId = player?.SteamID.ToString(),
@@ -383,12 +384,13 @@ namespace CS2_SimpleAdmin
});
}
internal void Mute(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, MuteManager muteManager = null, PlayerPenaltyManager playerPenaltyManager = null)
internal void Mute(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, PlayerPenaltyManager? playerPenaltyManager = null)
{
if (_database == null) return;
callerName ??= caller == null ? "Console" : caller.PlayerName;
muteManager ??= new MuteManager(_database);
playerPenaltyManager ??= new PlayerPenaltyManager();
PlayerInfo playerInfo = new PlayerInfo
{
SteamId = player?.SteamID.ToString(),
@@ -688,12 +690,13 @@ namespace CS2_SimpleAdmin
});
}
internal void Silence(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, MuteManager muteManager = null, PlayerPenaltyManager playerPenaltyManager = null)
internal void Silence(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, PlayerPenaltyManager? playerPenaltyManager = null)
{
if (_database == null) return;
callerName ??= caller == null ? "Console" : caller.PlayerName;
muteManager ??= new MuteManager(_database);
playerPenaltyManager ??= new PlayerPenaltyManager();
PlayerInfo playerInfo = new PlayerInfo
{
SteamId = player?.SteamID.ToString(),
@@ -716,6 +719,8 @@ namespace CS2_SimpleAdmin
if (TagsDetected)
Server.ExecuteCommand($"css_tag_mute {player!.SteamID}");
player!.VoiceFlags = VoiceFlags.Muted;
playerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time);
if (time == 0)

View File

@@ -16,7 +16,7 @@ namespace CS2_SimpleAdmin
[CommandHelper(minArgs: 2, usage: "<question> [... options ...]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
public void OnVoteCommand(CCSPlayerController? caller, CommandInfo command)
{
string callerName= caller == null ? "Console" : caller.PlayerName;
string callerName = caller == null ? "Console" : caller.PlayerName;
if (command.GetArg(1) == null || command.GetArg(1).Length < 0 || command.ArgCount < 2)
return;
@@ -38,7 +38,7 @@ namespace CS2_SimpleAdmin
for (int i = 2; i <= answersCount - 1; i++)
{
voteAnswers.Add(command.GetArg(i), 0);
voteMenu.AddMenuOption(command.GetArg(i), Helper.handleVotes);
voteMenu.AddMenuOption(command.GetArg(i), Helper.HandleVotes);
}
foreach (CCSPlayerController _player in Helper.GetValidPlayers())

View File

@@ -36,7 +36,7 @@ namespace CS2_SimpleAdmin
});
}
public void NoClip(CCSPlayerController? caller, CCSPlayerController player, string callerName = null)
public void NoClip(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null)
{
callerName ??= caller == null ? "Console" : caller.PlayerName;
player!.Pawn.Value!.ToggleNoclip();
@@ -84,7 +84,7 @@ namespace CS2_SimpleAdmin
});
}
public void Freeze(CCSPlayerController? caller, CCSPlayerController player, int time, string callerName = null)
public void Freeze(CCSPlayerController? caller, CCSPlayerController player, int time, string? callerName = null)
{
callerName ??= caller == null ? "Console" : caller.PlayerName;
@@ -132,7 +132,7 @@ namespace CS2_SimpleAdmin
});
}
public void Unfreeze(CCSPlayerController? caller, CCSPlayerController player, string callerName = null)
public void Unfreeze(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null)
{
callerName ??= caller == null ? "Console" : caller.PlayerName;

View File

@@ -5,11 +5,11 @@ using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Commands.Targeting;
using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Entities.Constants;
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
{
@@ -38,13 +38,13 @@ namespace CS2_SimpleAdmin
});
}
public void Slay(CCSPlayerController? caller, CCSPlayerController player, string callerName = null)
public void Slay(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null)
{
if (!player.IsBot && player.SteamID.ToString().Length != 17)
return;
callerName ??= caller == null ? "Console" : caller.PlayerName;
player.CommitSuicide(false, true);
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
@@ -113,20 +113,20 @@ namespace CS2_SimpleAdmin
});
}
public void GiveWeapon(CCSPlayerController? caller, CCSPlayerController player, CsItem weapon, string callerName = null)
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)
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)
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())
@@ -167,10 +167,10 @@ namespace CS2_SimpleAdmin
});
}
public void StripWeapons(CCSPlayerController? caller, CCSPlayerController player, string callerName = null)
public void StripWeapons(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null)
{
callerName ??= caller == null ? "Console" : caller.PlayerName;
if (!player.IsBot && player.SteamID.ToString().Length != 17)
return;
@@ -219,11 +219,13 @@ namespace CS2_SimpleAdmin
});
}
public void SetHp(CCSPlayerController? caller, CCSPlayerController player, int health, string callerName = null)
public void SetHp(CCSPlayerController? caller, CCSPlayerController player, int health, string? callerName = null)
{
if (!player.IsBot && player.SteamID.ToString().Length != 17)
return;
callerName = caller == null ? "Console" : caller.PlayerName;
player.SetHp(health);
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
@@ -272,12 +274,12 @@ namespace CS2_SimpleAdmin
});
}
public void SetSpeed(CCSPlayerController? caller, CCSPlayerController player, double speed, string callerName = null)
public void SetSpeed(CCSPlayerController? caller, CCSPlayerController player, double speed, string? callerName = null)
{
callerName ??= caller == null ? "Console" : caller.PlayerName;
player.SetSpeed((float)speed);
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
{
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
@@ -321,10 +323,10 @@ namespace CS2_SimpleAdmin
});
}
public void God(CCSPlayerController? caller, CCSPlayerController player, string callerName = null)
public void God(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null)
{
callerName ??= caller == null ? "Console" : caller.PlayerName;
if (player != null)
{
if (!godPlayers.Contains(player.Slot))
@@ -388,7 +390,7 @@ namespace CS2_SimpleAdmin
});
}
public void Slap(CCSPlayerController? caller, CCSPlayerController player, int damage, string callerName = null)
public void Slap(CCSPlayerController? caller, CCSPlayerController player, int damage, string? callerName = null)
{
callerName ??= caller == null ? "Console" : caller.PlayerName;
player!.Pawn.Value!.Slap(damage);
@@ -414,7 +416,7 @@ namespace CS2_SimpleAdmin
{
string callerName = caller == null ? "Console" : caller.PlayerName;
string teamName = command.GetArg(2).ToLower();
string _teamName;
string _teamName = "SPEC";
CsTeam teamNum = CsTeam.Spectator;
TargetResult? targets = GetTarget(command);
@@ -456,17 +458,17 @@ namespace CS2_SimpleAdmin
bool kill = command.GetArg(3).ToLower().Equals("-k");
playersToTarget.ForEach(player =>
{
ChangeTeam(caller, player, teamName, teamNum, kill, callerName);
ChangeTeam(caller, player, _teamName.ToLower(), teamNum, kill, callerName);
});
}
public void ChangeTeam(CCSPlayerController? caller, CCSPlayerController player, string teamName, CsTeam teamNum, bool kill, string callerName = null)
public void ChangeTeam(CCSPlayerController? caller, CCSPlayerController player, string teamName, CsTeam teamNum, bool kill, string? callerName = null)
{
if (!player.IsBot && player.SteamID.ToString().Length != 17)
return;
callerName ??= caller == null ? "Console" : caller.PlayerName;
if (!teamName.Equals("swap"))
{
if (player.PawnIsAlive && teamNum != CsTeam.Spectator && !kill && Config.TeamSwitchType == 1)
@@ -578,10 +580,10 @@ namespace CS2_SimpleAdmin
});
}
public void Respawn(CCSPlayerController? caller, CCSPlayerController player, string callerName = null)
public void Respawn(CCSPlayerController? caller, CCSPlayerController player, string? callerName = null)
{
callerName ??= caller == null ? "Console" : caller.PlayerName;
if (CBasePlayerController_SetPawnFunc == null || player.PlayerPawn.Value == null || !player.PlayerPawn.IsValid) return;
var playerPawn = player.PlayerPawn.Value;

View File

@@ -43,6 +43,13 @@ namespace CS2_SimpleAdmin
return Utilities.GetPlayers().FindAll(p => p != null && p.IsValid && p.SteamID.ToString().Length == 17 && p.Connected == PlayerConnectedState.PlayerConnected && !p.IsBot && !p.IsHLTV);
}
public static List<CCSPlayerController> GetValidPlayersWithBots()
{
return Utilities.GetPlayers().FindAll(p =>
p != null && p.IsValid && p.SteamID.ToString().Length == 17 && p.Connected == PlayerConnectedState.PlayerConnected && !p.IsBot && !p.IsHLTV ||
p != null && p.IsValid && p.Connected == PlayerConnectedState.PlayerConnected && p.IsBot && !p.IsHLTV
);
}
public static bool IsValidSteamID64(string input)
{
@@ -64,15 +71,11 @@ namespace CS2_SimpleAdmin
{
if (steamid == null || (flags == null && immunity == 0))
{
//Console.WriteLine("Invalid input: steamid is null or both flags and immunity are not provided.");
return;
}
//Console.WriteLine($"Setting immunity for SteamID {steamid} to {immunity}");
if (flags != null)
{
//Console.WriteLine($"Applying flags to SteamID {steamid}:");
foreach (var flag in flags)
{
@@ -96,33 +99,9 @@ namespace CS2_SimpleAdmin
catch (Exception)
{
return;
//Console.WriteLine($"An error occurred: {ex}");
}
}
/*
public static TargetResult GetTarget(string target, out CCSPlayerController? player)
{
player = null;
if (target.StartsWith("#") && int.TryParse(target.AsSpan(1), out var userid))
{
player = Utilities.GetPlayerFromUserid(userid);
}
else
{
var matches = GetPlayerFromName(target);
if (matches.Count > 1)
return TargetResult.Multiple;
player = matches.FirstOrDefault();
}
return player?.IsValid == true ? TargetResult.Single : TargetResult.None;
}
*/
public static void KickPlayer(ushort userId, string? reason = null)
{
Server.ExecuteCommand($"kickid {userId} {reason}");
@@ -155,7 +134,7 @@ namespace CS2_SimpleAdmin
return message;
}
internal static void handleVotes(CCSPlayerController player, ChatMenuOption option)
internal static void HandleVotes(CCSPlayerController player, ChatMenuOption option)
{
if (CS2_SimpleAdmin.voteInProgress && !CS2_SimpleAdmin.votePlayers.Contains(player.Slot))
{
@@ -216,7 +195,7 @@ namespace CS2_SimpleAdmin
public unsafe void Set(string str)
{
byte[] bytes = this.GetStringBytes(str);
byte[] bytes = SchemaString<SchemaClass>.GetStringBytes(str);
for (int i = 0; i < bytes.Length; i++)
{
@@ -226,7 +205,7 @@ namespace CS2_SimpleAdmin
Unsafe.Write((void*)(this.Handle.ToInt64() + bytes.Length), 0);
}
private byte[] GetStringBytes(string str)
private static byte[] GetStringBytes(string str)
{
return Encoding.ASCII.GetBytes(str);
}

View File

@@ -22,7 +22,7 @@ namespace CS2_SimpleAdmin.Menus
MenuManager.OpenChatMenu(player, chatMenu);
}
}
public static void OpenMenu(CCSPlayerController admin)
{
if (admin == null || admin.IsValid == false)
@@ -44,7 +44,7 @@ namespace CS2_SimpleAdmin.Menus
new ChatMenuOptionData("Manage Server", () => ManageServerMenu.OpenMenu(admin)),
new ChatMenuOptionData("Fun actions", () => FunActionsMenu.OpenMenu(admin)),
};
if (AdminManager.PlayerHasPermissions(admin, "@css/root"))
options.Add(new ChatMenuOptionData("Manage Admins", () => ManageAdminsMenu.OpenMenu(admin)));

View File

@@ -1,4 +1,3 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Menu;

View File

@@ -7,7 +7,7 @@ namespace CS2_SimpleAdmin.Menus
{
public static class FunActionsMenu
{
private static Dictionary<int, CsItem> _weaponsCache = null;
private static Dictionary<int, CsItem>? _weaponsCache = null;
private static Dictionary<int, CsItem> GetWeaponsCache
{
get
@@ -15,11 +15,13 @@ namespace CS2_SimpleAdmin.Menus
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;
}
}
@@ -93,7 +95,7 @@ namespace CS2_SimpleAdmin.Menus
private static void GiveWeaponMenu(CCSPlayerController admin, CCSPlayerController player)
{
BaseMenu menu = AdminMenu.CreateMenu($"Give Weapon: {player.PlayerName}");
foreach (KeyValuePair<int, CsItem> weapon in GetWeaponsCache)
{
menu.AddMenuOption(weapon.Value.ToString(), (_, _) => { GiveWeapon(admin, player, weapon.Value); });
@@ -114,6 +116,8 @@ namespace CS2_SimpleAdmin.Menus
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

View File

@@ -1,4 +1,3 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Menu;

View File

@@ -1,4 +1,3 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Menu;
@@ -33,7 +32,7 @@ namespace CS2_SimpleAdmin.Menus
options.Add(new ChatMenuOptionData("Change Map", () => ChangeMapMenu(admin)));
}
options.Add(new ChatMenuOptionData("Restart Game", () => CS2_SimpleAdmin.Instance.RestartGame(admin)));
options.Add(new ChatMenuOptionData("Restart Game", () => CS2_SimpleAdmin.RestartGame(admin)));
foreach (ChatMenuOptionData menuOptionData in options)
{

View File

@@ -1,4 +1,3 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Menu;
@@ -6,16 +5,16 @@ namespace CS2_SimpleAdmin.Menus
{
public static class PlayersMenu
{
public static void OpenAliveMenu(CCSPlayerController admin, string menuName, Action<CCSPlayerController, CCSPlayerController> onSelectAction, Func<CCSPlayerController, bool> enableFilter = null)
public static void OpenAliveMenu(CCSPlayerController admin, string menuName, Action<CCSPlayerController, CCSPlayerController> onSelectAction, Func<CCSPlayerController, bool>? enableFilter = null)
{
OpenMenu(admin, menuName, onSelectAction, p => p.PawnIsAlive);
}
public static void OpenMenu(CCSPlayerController admin, string menuName, Action<CCSPlayerController, CCSPlayerController> onSelectAction, Func<CCSPlayerController, bool> enableFilter = null)
public static void OpenMenu(CCSPlayerController admin, string menuName, Action<CCSPlayerController, CCSPlayerController> onSelectAction, Func<CCSPlayerController, bool>? enableFilter = null)
{
BaseMenu menu = AdminMenu.CreateMenu(menuName);
IEnumerable<CCSPlayerController> players = Helper.GetValidPlayers().Where(p => p.Connected == PlayerConnectedState.PlayerConnected);
IEnumerable<CCSPlayerController> players = Helper.GetValidPlayersWithBots();
foreach (CCSPlayerController player in players)
{
string optionName = player.PlayerName;

View File

@@ -62,7 +62,7 @@ Manage your Counter-Strike 2 server by simple commands :)
```
### Requirments
- [CounterStrikeSharp](https://github.com/roflmuffin/CounterStrikeSharp/) **tested on v163**
- [CounterStrikeSharp](https://github.com/roflmuffin/CounterStrikeSharp/) **tested on v166**
- MySQL **tested on MySQL (MariaDB) Server version: 10.11.4-MariaDB-1~deb12u1 Debian 12**