mirror of
https://github.com/daffyyyy/CS2-SimpleAdmin.git
synced 2026-02-17 18:39:07 +00:00
Merge remote-tracking branch 'origin/main'
# Conflicts: # Menus/CustomCommandsMenu.cs
This commit is contained in:
@@ -21,7 +21,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
private static ConcurrentBag<int> godPlayers = [];
|
private static ConcurrentBag<int> godPlayers = [];
|
||||||
private static ConcurrentBag<int> silentPlayers = [];
|
private static ConcurrentBag<int> silentPlayers = [];
|
||||||
private static ConcurrentBag<string> bannedPlayers = [];
|
private static ConcurrentBag<string> bannedPlayers = [];
|
||||||
private static bool TagsDetected = false;
|
private static bool TagsDetected;
|
||||||
public static bool voteInProgress = false;
|
public static bool voteInProgress = false;
|
||||||
public static int? ServerId = null;
|
public static int? ServerId = null;
|
||||||
|
|
||||||
@@ -33,11 +33,11 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
|
|
||||||
internal static ILogger? _logger;
|
internal static ILogger? _logger;
|
||||||
|
|
||||||
public static MemoryFunctionVoid<CBasePlayerController, CCSPlayerPawn, bool, bool>? CBasePlayerController_SetPawnFunc = null;
|
public static MemoryFunctionVoid<CBasePlayerController, CCSPlayerPawn, bool, bool>? CBasePlayerControllerSetPawnFunc;
|
||||||
public override string ModuleName => "CS2-SimpleAdmin";
|
public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)");
|
||||||
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
|
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
|
||||||
public override string ModuleAuthor => "daffyy & Dliix66";
|
public override string ModuleAuthor => "daffyy & Dliix66";
|
||||||
public override string ModuleVersion => "1.4.1a";
|
public override string ModuleVersion => "1.4.2a";
|
||||||
|
|
||||||
public CS2_SimpleAdminConfig Config { get; set; } = new();
|
public CS2_SimpleAdminConfig Config { get; set; } = new();
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
OnMapStart(string.Empty);
|
OnMapStart(string.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
CBasePlayerController_SetPawnFunc = new MemoryFunctionVoid<CBasePlayerController, CCSPlayerPawn, bool, bool>(GameData.GetSignature("CBasePlayerController_SetPawn"));
|
CBasePlayerControllerSetPawnFunc = new MemoryFunctionVoid<CBasePlayerController, CCSPlayerPawn, bool, bool>(GameData.GetSignature("CBasePlayerController_SetPawn"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnConfigParsed(CS2_SimpleAdminConfig config)
|
public void OnConfigParsed(CS2_SimpleAdminConfig config)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.215" />
|
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.220" />
|
||||||
<PackageReference Include="Dapper" Version="2.1.35" />
|
<PackageReference Include="Dapper" Version="2.1.35" />
|
||||||
<PackageReference Include="Discord.Net.Webhook" Version="3.14.1" />
|
<PackageReference Include="Discord.Net.Webhook" Version="3.14.1" />
|
||||||
<PackageReference Include="MySqlConnector" Version="2.3.7" />
|
<PackageReference Include="MySqlConnector" Version="2.3.7" />
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration;
|
|||||||
using CounterStrikeSharp.API.Core.Translations;
|
using CounterStrikeSharp.API.Core.Translations;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin
|
namespace CS2_SimpleAdmin
|
||||||
@@ -23,7 +22,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
||||||
|
|
||||||
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
||||||
{
|
{
|
||||||
@@ -31,7 +30,7 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
Database database = new(dbConnectionString);
|
Database database = new(dbConnectionString);
|
||||||
BanManager _banManager = new(database, Config);
|
BanManager banManager = new(database, Config);
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out var time);
|
int.TryParse(command.GetArg(2), out var time);
|
||||||
|
|
||||||
@@ -42,7 +41,7 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (caller!.CanTarget(player))
|
if (caller!.CanTarget(player))
|
||||||
{
|
{
|
||||||
Ban(caller, player, time, reason, callerName, _banManager, command);
|
Ban(caller, player, time, reason, callerName, banManager, command);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -84,7 +83,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (playerInfo.IpAddress != null && !bannedPlayers.Contains(playerInfo.IpAddress))
|
if (playerInfo.IpAddress != null && !bannedPlayers.Contains(playerInfo.IpAddress))
|
||||||
bannedPlayers.Add(playerInfo.IpAddress);
|
bannedPlayers.Add(playerInfo.IpAddress);
|
||||||
if (!bannedPlayers.Contains(player!.SteamID.ToString()))
|
if (!bannedPlayers.Contains(player.SteamID.ToString()))
|
||||||
bannedPlayers.Add(player.SteamID.ToString());
|
bannedPlayers.Add(player.SteamID.ToString());
|
||||||
|
|
||||||
if (time == 0)
|
if (time == 0)
|
||||||
@@ -92,7 +91,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (!player.IsBot && !player.IsHLTV)
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
@@ -113,7 +112,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (!player.IsBot && !player.IsHLTV)
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
@@ -158,8 +157,6 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
var reason = _localizer?["sa_unknown"] ?? "Unknown";
|
var reason = _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
Database database = new(dbConnectionString);
|
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out var time);
|
int.TryParse(command.GetArg(2), out var time);
|
||||||
|
|
||||||
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
||||||
@@ -184,7 +181,7 @@ namespace CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
player!.Pawn.Value!.Freeze();
|
player.Pawn.Value!.Freeze();
|
||||||
if (player.UserId.HasValue)
|
if (player.UserId.HasValue)
|
||||||
AddTimer(Config.KickTime, () => Helper.KickPlayer(player.UserId.Value), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
AddTimer(Config.KickTime, () => Helper.KickPlayer(player.UserId.Value), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
@@ -193,7 +190,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (!player.IsBot && !player.IsHLTV)
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
@@ -213,7 +210,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (player is { IsBot: false, IsHLTV: false })
|
if (player is { IsBot: false, IsHLTV: false })
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
@@ -236,15 +233,15 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
BanManager _banManager = new(_database, Config);
|
BanManager banManager = new(_database, Config);
|
||||||
await _banManager.AddBanBySteamid(steamid, adminInfo, reason, time);
|
await banManager.AddBanBySteamid(steamid, adminInfo, reason, time);
|
||||||
});
|
});
|
||||||
|
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
//Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, _discordWebhookClientPenalty, _localizer);
|
//Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Ban, _discordWebhookClientPenalty, _localizer);
|
||||||
|
|
||||||
command?.ReplyToCommand($"Banned player with steamid {steamid}.");
|
command.ReplyToCommand($"Banned player with steamid {steamid}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
[ConsoleCommand("css_banip")]
|
[ConsoleCommand("css_banip")]
|
||||||
@@ -295,14 +292,14 @@ namespace CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
player!.Pawn.Value!.Freeze();
|
player.Pawn.Value!.Freeze();
|
||||||
|
|
||||||
if (time == 0)
|
if (time == 0)
|
||||||
{
|
{
|
||||||
if (player is { IsBot: false, IsHLTV: false })
|
if (player is { IsBot: false, IsHLTV: false })
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
@@ -320,10 +317,10 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!player.IsBot && !player.IsHLTV)
|
if (player is { IsBot: false, IsHLTV: false })
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
@@ -352,14 +349,14 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
BanManager _banManager = new(_database, Config);
|
BanManager banManager = new(_database, Config);
|
||||||
await _banManager.AddBanByIp(ipAddress, adminInfo, reason, time);
|
await banManager.AddBanByIp(ipAddress, adminInfo, reason, time);
|
||||||
});
|
});
|
||||||
|
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
|
|
||||||
command?.ReplyToCommand($"Banned player with IP address {ipAddress}.");
|
command.ReplyToCommand($"Banned player with IP address {ipAddress}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
[ConsoleCommand("css_unban")]
|
[ConsoleCommand("css_unban")]
|
||||||
@@ -380,8 +377,8 @@ namespace CS2_SimpleAdmin
|
|||||||
var pattern = command.GetArg(1);
|
var pattern = command.GetArg(1);
|
||||||
var reason = command.GetArg(2);
|
var reason = command.GetArg(2);
|
||||||
|
|
||||||
BanManager _banManager = new(_database, Config);
|
BanManager banManager = new(_database, Config);
|
||||||
Task.Run(async () => await _banManager.UnbanPlayer(pattern, callerSteamId, reason));
|
Task.Run(async () => await banManager.UnbanPlayer(pattern, callerSteamId, reason));
|
||||||
|
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration;
|
|||||||
using CounterStrikeSharp.API.Core.Translations;
|
using CounterStrikeSharp.API.Core.Translations;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
|
||||||
using CounterStrikeSharp.API.Modules.Memory;
|
using CounterStrikeSharp.API.Modules.Memory;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@@ -18,7 +17,6 @@ namespace CS2_SimpleAdmin
|
|||||||
public void OnAdminToAdminSayCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnAdminToAdminSayCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
if (caller == null || !caller.IsValid || command.GetCommandString[command.GetCommandString.IndexOf(' ')..].Length == 0) return;
|
if (caller == null || !caller.IsValid || command.GetCommandString[command.GetCommandString.IndexOf(' ')..].Length == 0) return;
|
||||||
var callerName = caller.PlayerName;
|
|
||||||
|
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
@@ -45,7 +43,6 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (command.GetCommandString[command.GetCommandString.IndexOf(' ')..].Length == 0) return;
|
if (command.GetCommandString[command.GetCommandString.IndexOf(' ')..].Length == 0) return;
|
||||||
|
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]);
|
var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]);
|
||||||
var utf8String = Encoding.UTF8.GetString(utf8BytesString);
|
var utf8String = Encoding.UTF8.GetString(utf8BytesString);
|
||||||
|
|
||||||
@@ -72,7 +69,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
||||||
|
|
||||||
//Helper.LogCommand(caller, command);
|
//Helper.LogCommand(caller, command);
|
||||||
|
|
||||||
@@ -95,7 +92,6 @@ namespace CS2_SimpleAdmin
|
|||||||
[RequiresPermissions("@css/chat")]
|
[RequiresPermissions("@css/chat")]
|
||||||
public void OnAdminCenterSayCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnAdminCenterSayCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]);
|
var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]);
|
||||||
var utf8String = Encoding.UTF8.GetString(utf8BytesString);
|
var utf8String = Encoding.UTF8.GetString(utf8BytesString);
|
||||||
|
|
||||||
@@ -110,7 +106,6 @@ namespace CS2_SimpleAdmin
|
|||||||
[RequiresPermissions("@css/chat")]
|
[RequiresPermissions("@css/chat")]
|
||||||
public void OnAdminHudSayCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnAdminHudSayCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]);
|
var utf8BytesString = Encoding.UTF8.GetBytes(command.GetCommandString[command.GetCommandString.IndexOf(' ')..]);
|
||||||
var utf8String = Encoding.UTF8.GetString(utf8BytesString);
|
var utf8String = Encoding.UTF8.GetString(utf8BytesString);
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration;
|
|||||||
using CounterStrikeSharp.API.Core.Translations;
|
using CounterStrikeSharp.API.Core.Translations;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
|
||||||
using CounterStrikeSharp.API.Modules.Cvars;
|
using CounterStrikeSharp.API.Modules.Cvars;
|
||||||
using CounterStrikeSharp.API.Modules.Entities;
|
using CounterStrikeSharp.API.Modules.Entities;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
@@ -97,7 +96,6 @@ namespace CS2_SimpleAdmin
|
|||||||
public void OnAddAdminCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnAddAdminCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
|
|
||||||
if (!Helper.IsValidSteamId64(command.GetArg(1)))
|
if (!Helper.IsValidSteamId64(command.GetArg(1)))
|
||||||
{
|
{
|
||||||
@@ -120,10 +118,8 @@ namespace CS2_SimpleAdmin
|
|||||||
var flags = command.GetArg(3);
|
var flags = command.GetArg(3);
|
||||||
var globalAdmin = command.GetArg(4).ToLower().Equals("-g") || command.GetArg(5).ToLower().Equals("-g") ||
|
var globalAdmin = command.GetArg(4).ToLower().Equals("-g") || command.GetArg(5).ToLower().Equals("-g") ||
|
||||||
command.GetArg(6).ToLower().Equals("-g");
|
command.GetArg(6).ToLower().Equals("-g");
|
||||||
var immunity = 0;
|
int.TryParse(command.GetArg(4), out var immunity);
|
||||||
int.TryParse(command.GetArg(4), out immunity);
|
int.TryParse(command.GetArg(5), out var time);
|
||||||
var time = 0;
|
|
||||||
int.TryParse(command.GetArg(5), out time);
|
|
||||||
|
|
||||||
AddAdmin(caller, steamid, name, flags, immunity, time, globalAdmin, command);
|
AddAdmin(caller, steamid, name, flags, immunity, time, globalAdmin, command);
|
||||||
}
|
}
|
||||||
@@ -131,10 +127,10 @@ namespace CS2_SimpleAdmin
|
|||||||
public static void AddAdmin(CCSPlayerController? caller, string steamid, string name, string flags, int immunity, int time = 0, bool globalAdmin = false, CommandInfo? command = null)
|
public static 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;
|
if (_database == null) return;
|
||||||
AdminSQLManager _adminManager = new(_database);
|
AdminSQLManager adminManager = new(_database);
|
||||||
|
|
||||||
var flagsList = flags.Split(',').Select(flag => flag.Trim()).ToList();
|
var flagsList = flags.Split(',').Select(flag => flag.Trim()).ToList();
|
||||||
_ = _adminManager.AddAdminBySteamId(steamid, name, flagsList, immunity, time, globalAdmin);
|
_ = adminManager.AddAdminBySteamId(steamid, name, flagsList, immunity, time, globalAdmin);
|
||||||
|
|
||||||
if (command != null)
|
if (command != null)
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
@@ -155,7 +151,6 @@ namespace CS2_SimpleAdmin
|
|||||||
public void OnDelAdminCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnDelAdminCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
|
|
||||||
if (!Helper.IsValidSteamId64(command.GetArg(1)))
|
if (!Helper.IsValidSteamId64(command.GetArg(1)))
|
||||||
{
|
{
|
||||||
@@ -172,16 +167,16 @@ namespace CS2_SimpleAdmin
|
|||||||
public void RemoveAdmin(CCSPlayerController? caller, string steamid, bool globalDelete = false, CommandInfo? command = null)
|
public void RemoveAdmin(CCSPlayerController? caller, string steamid, bool globalDelete = false, CommandInfo? command = null)
|
||||||
{
|
{
|
||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
AdminSQLManager _adminManager = new(_database);
|
AdminSQLManager adminManager = new(_database);
|
||||||
_ = _adminManager.DeleteAdminBySteamId(steamid, globalDelete);
|
_ = adminManager.DeleteAdminBySteamId(steamid, globalDelete);
|
||||||
|
|
||||||
AddTimer(2, () =>
|
AddTimer(2, () =>
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(steamid) || !SteamID.TryParse(steamid, out var steamId) ||
|
if (string.IsNullOrEmpty(steamid) || !SteamID.TryParse(steamid, out var steamId) ||
|
||||||
steamId == null) return;
|
steamId == null) return;
|
||||||
if (AdminSQLManager._adminCache.ContainsKey(steamId))
|
if (AdminSQLManager.AdminCache.ContainsKey(steamId))
|
||||||
{
|
{
|
||||||
AdminSQLManager._adminCache.TryRemove(steamId, out _);
|
AdminSQLManager.AdminCache.TryRemove(steamId, out _);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminManager.ClearPlayerPermissions(steamId);
|
AdminManager.ClearPlayerPermissions(steamId);
|
||||||
@@ -222,19 +217,18 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
var groupName = command.GetArg(1);
|
var groupName = command.GetArg(1);
|
||||||
var flags = command.GetArg(2);
|
var flags = command.GetArg(2);
|
||||||
var immunity = 0;
|
int.TryParse(command.GetArg(3), out var immunity);
|
||||||
int.TryParse(command.GetArg(3), out immunity);
|
|
||||||
|
|
||||||
AddGroup(caller, groupName, flags, immunity, command);
|
AddGroup(caller, groupName, flags, immunity, command);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void AddGroup(CCSPlayerController? caller, string name, string flags, int immunity, CommandInfo? command = null)
|
private static void AddGroup(CCSPlayerController? caller, string name, string flags, int immunity, CommandInfo? command = null)
|
||||||
{
|
{
|
||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
AdminSQLManager _adminManager = new(_database);
|
AdminSQLManager adminManager = new(_database);
|
||||||
|
|
||||||
var flagsList = flags.Split(',').Select(flag => flag.Trim()).ToList();
|
var flagsList = flags.Split(',').Select(flag => flag.Trim()).ToList();
|
||||||
_ = _adminManager.AddGroup(name, flagsList, immunity);
|
_ = adminManager.AddGroup(name, flagsList, immunity);
|
||||||
|
|
||||||
if (command != null)
|
if (command != null)
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
@@ -270,8 +264,8 @@ namespace CS2_SimpleAdmin
|
|||||||
private void RemoveGroup(CCSPlayerController? caller, string name, CommandInfo? command = null)
|
private void RemoveGroup(CCSPlayerController? caller, string name, CommandInfo? command = null)
|
||||||
{
|
{
|
||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
AdminSQLManager _adminManager = new(_database);
|
AdminSQLManager adminManager = new(_database);
|
||||||
_ = _adminManager.DeleteGroup(name);
|
_ = adminManager.DeleteGroup(name);
|
||||||
|
|
||||||
AddTimer(2, () =>
|
AddTimer(2, () =>
|
||||||
{
|
{
|
||||||
@@ -307,21 +301,21 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
|
|
||||||
for (var index = 0; index < AdminSQLManager._adminCache.Keys.ToList().Count; index++)
|
for (var index = 0; index < AdminSQLManager.AdminCache.Keys.ToList().Count; index++)
|
||||||
{
|
{
|
||||||
var steamId = AdminSQLManager._adminCache.Keys.ToList()[index];
|
var steamId = AdminSQLManager.AdminCache.Keys.ToList()[index];
|
||||||
if (!AdminSQLManager._adminCache.TryRemove(steamId, out _)) continue;
|
if (!AdminSQLManager.AdminCache.TryRemove(steamId, out _)) continue;
|
||||||
|
|
||||||
AdminManager.ClearPlayerPermissions(steamId);
|
AdminManager.ClearPlayerPermissions(steamId);
|
||||||
AdminManager.RemovePlayerAdminData(steamId);
|
AdminManager.RemovePlayerAdminData(steamId);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminSQLManager _adminManager = new(_database);
|
AdminSQLManager adminManager = new(_database);
|
||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await _adminManager.CrateGroupsJsonFile();
|
await adminManager.CrateGroupsJsonFile();
|
||||||
await _adminManager.CreateAdminsJsonFile();
|
await adminManager.CreateAdminsJsonFile();
|
||||||
|
|
||||||
AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json");
|
AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json");
|
||||||
AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json");
|
AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json");
|
||||||
@@ -369,7 +363,6 @@ namespace CS2_SimpleAdmin
|
|||||||
public void OnWhoCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnWhoCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
|
|
||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
@@ -377,11 +370,11 @@ namespace CS2_SimpleAdmin
|
|||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
//Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
//Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
||||||
|
|
||||||
Database database = new(dbConnectionString);
|
Database database = new(dbConnectionString);
|
||||||
BanManager _banManager = new(database, Config);
|
BanManager banManager = new(database, Config);
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
@@ -390,19 +383,15 @@ namespace CS2_SimpleAdmin
|
|||||||
PlayerInfo playerInfo = new()
|
PlayerInfo playerInfo = new()
|
||||||
{
|
{
|
||||||
UserId = player.UserId.Value,
|
UserId = player.UserId.Value,
|
||||||
Index = (int)player.Index,
|
SteamId = player.SteamID.ToString(),
|
||||||
SteamId = player?.SteamID.ToString(),
|
Name = player.PlayerName,
|
||||||
Name = player?.PlayerName,
|
IpAddress = player.IpAddress?.Split(":")[0]
|
||||||
IpAddress = player?.IpAddress?.Split(":")[0]
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
var totalBans = 0;
|
var totalBans = await banManager.GetPlayerBans(playerInfo);
|
||||||
var totalMutes = 0;
|
var totalMutes = await muteManager.GetPlayerMutes(playerInfo.SteamId);
|
||||||
|
|
||||||
totalBans = await _banManager.GetPlayerBans(playerInfo);
|
|
||||||
totalMutes = await _muteManager.GetPlayerMutes(playerInfo.SteamId!);
|
|
||||||
|
|
||||||
await Server.NextFrameAsync(() =>
|
await Server.NextFrameAsync(() =>
|
||||||
{
|
{
|
||||||
@@ -410,7 +399,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
printMethod($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------");
|
printMethod($"--------- INFO ABOUT \"{playerInfo.Name}\" ---------");
|
||||||
|
|
||||||
printMethod($"• Clan: \"{player!.Clan}\" Name: \"{playerInfo.Name}\"");
|
printMethod($"• Clan: \"{player.Clan}\" Name: \"{playerInfo.Name}\"");
|
||||||
printMethod($"• UserID: \"{playerInfo.UserId}\"");
|
printMethod($"• UserID: \"{playerInfo.UserId}\"");
|
||||||
if (playerInfo.SteamId != null)
|
if (playerInfo.SteamId != null)
|
||||||
printMethod($"• SteamID64: \"{playerInfo.SteamId}\"");
|
printMethod($"• SteamID64: \"{playerInfo.SteamId}\"");
|
||||||
@@ -443,13 +432,13 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller != null)
|
if (caller != null)
|
||||||
{
|
{
|
||||||
caller!.PrintToConsole($"--------- PLAYER LIST ---------");
|
caller.PrintToConsole($"--------- PLAYER LIST ---------");
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
caller!.PrintToConsole(
|
caller.PrintToConsole(
|
||||||
$"• [#{player.UserId}] \"{player.PlayerName}\" (IP Address: \"{player.IpAddress?.Split(":")[0]}\" SteamID64: \"{player.SteamID}\")");
|
$"• [#{player.UserId}] \"{player.PlayerName}\" (IP Address: \"{player.IpAddress?.Split(":")[0]}\" SteamID64: \"{player.SteamID}\")");
|
||||||
});
|
});
|
||||||
caller!.PrintToConsole($"--------- END PLAYER LIST ---------");
|
caller.PrintToConsole($"--------- END PLAYER LIST ---------");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -475,7 +464,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (targets == null)
|
if (targets == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players
|
var playersToTarget = targets.Players
|
||||||
.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
|
.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
||||||
@@ -498,7 +487,7 @@ namespace CS2_SimpleAdmin
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Kick(CCSPlayerController? caller, CCSPlayerController? player, string reason = "Unknown", string? callerName = null, CommandInfo? command = null)
|
public void Kick(CCSPlayerController? caller, CCSPlayerController? player, string? reason = "Unknown", string? callerName = null, CommandInfo? command = null)
|
||||||
{
|
{
|
||||||
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
||||||
if (player != null && player.PawnIsAlive)
|
if (player != null && player.PawnIsAlive)
|
||||||
@@ -555,20 +544,17 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
public void ChangeMap(CCSPlayerController? caller, string map, CommandInfo? command = null)
|
public void ChangeMap(CCSPlayerController? caller, string map, CommandInfo? command = null)
|
||||||
{
|
{
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
string _command;
|
|
||||||
|
|
||||||
map = map.ToLower();
|
map = map.ToLower();
|
||||||
|
|
||||||
if (map.StartsWith("ws:"))
|
if (map.StartsWith("ws:"))
|
||||||
{
|
{
|
||||||
_command = long.TryParse(map.Replace("ws:", ""), out var mapId)
|
var issuedCommand = long.TryParse(map.Replace("ws:", ""), out var mapId)
|
||||||
? $"host_workshop_map {mapId}"
|
? $"host_workshop_map {mapId}"
|
||||||
: $"ds_workshop_changelevel {map.Replace("ws:", "")}";
|
: $"ds_workshop_changelevel {map.Replace("ws:", "")}";
|
||||||
|
|
||||||
AddTimer(3.0f, () =>
|
AddTimer(3.0f, () =>
|
||||||
{
|
{
|
||||||
Server.ExecuteCommand(_command);
|
Server.ExecuteCommand(issuedCommand);
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -622,12 +608,9 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
public void ChangeWorkshopMap(CCSPlayerController? caller, string map, CommandInfo? command = null)
|
public void ChangeWorkshopMap(CCSPlayerController? caller, string map, CommandInfo? command = null)
|
||||||
{
|
{
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
string _command;
|
|
||||||
|
|
||||||
map = map.ToLower();
|
map = map.ToLower();
|
||||||
|
|
||||||
_command = long.TryParse(map, out var mapId) ? $"host_workshop_map {mapId}" : $"ds_workshop_changelevel {map}";
|
var issuedCommand = long.TryParse(map, out var mapId) ? $"host_workshop_map {mapId}" : $"ds_workshop_changelevel {map}";
|
||||||
|
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
@@ -644,7 +627,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
AddTimer(3.0f, () =>
|
AddTimer(3.0f, () =>
|
||||||
{
|
{
|
||||||
Server.ExecuteCommand(_command);
|
Server.ExecuteCommand(issuedCommand);
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
if (command == null) return;
|
if (command == null) return;
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration;
|
|||||||
using CounterStrikeSharp.API.Core.Translations;
|
using CounterStrikeSharp.API.Core.Translations;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin
|
namespace CS2_SimpleAdmin
|
||||||
@@ -19,41 +18,39 @@ namespace CS2_SimpleAdmin
|
|||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
var callerName = caller == null ? "Console" : caller.PlayerName;
|
||||||
|
|
||||||
var time = 0;
|
|
||||||
var reason = _localizer?["sa_unknown"] ?? "Unknown";
|
var reason = _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
||||||
|
|
||||||
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out time);
|
int.TryParse(command.GetArg(2), out var time);
|
||||||
|
|
||||||
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
||||||
reason = command.GetArg(3);
|
reason = command.GetArg(3);
|
||||||
|
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
var playerPenaltyManager = new PlayerPenaltyManager();
|
var playerPenaltyManager = new PlayerPenaltyManager();
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
if (caller!.CanTarget(player))
|
if (caller!.CanTarget(player))
|
||||||
{
|
{
|
||||||
Gag(caller, player, time, reason, callerName, _muteManager, playerPenaltyManager, command);
|
Gag(caller, player, time, reason, callerName, muteManager, playerPenaltyManager, command);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Gag(CCSPlayerController? caller, CCSPlayerController? player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, PlayerPenaltyManager? playerPenaltyManager = null, CommandInfo? command = null)
|
internal static void Gag(CCSPlayerController? caller, CCSPlayerController? player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, PlayerPenaltyManager? playerPenaltyManager = null, CommandInfo? command = null)
|
||||||
{
|
{
|
||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
||||||
muteManager ??= new MuteManager(_database);
|
muteManager ??= new MuteManager(_database);
|
||||||
playerPenaltyManager ??= new PlayerPenaltyManager();
|
|
||||||
|
|
||||||
var playerInfo = new PlayerInfo
|
var playerInfo = new PlayerInfo
|
||||||
{
|
{
|
||||||
@@ -80,7 +77,7 @@ namespace CS2_SimpleAdmin
|
|||||||
PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Gag, DateTime.Now.AddMinutes(time), time);
|
PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Gag, DateTime.Now.AddMinutes(time), time);
|
||||||
if (time == 0)
|
if (time == 0)
|
||||||
{
|
{
|
||||||
if (!player!.IsBot && !player.IsHLTV)
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -103,11 +100,11 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!player!.IsBot && !player.IsHLTV)
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_gag_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_gag_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,13 +149,11 @@ namespace CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var time = 0;
|
|
||||||
var reason = _localizer?["sa_unknown"] ?? "Unknown";
|
var reason = _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
var playerPenaltyManager = new PlayerPenaltyManager();
|
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out time);
|
int.TryParse(command.GetArg(2), out var time);
|
||||||
|
|
||||||
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
||||||
reason = command.GetArg(3);
|
reason = command.GetArg(3);
|
||||||
@@ -187,7 +182,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (!player.IsBot && !player.IsHLTV)
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_gag_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_gag_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
@@ -208,7 +203,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (player is { IsBot: false, IsHLTV: false })
|
if (player is { IsBot: false, IsHLTV: false })
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_gag_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_gag_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
@@ -226,9 +221,9 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (TagsDetected)
|
if (TagsDetected)
|
||||||
Server.ExecuteCommand($"css_tag_mute {player!.SteamID}");
|
Server.ExecuteCommand($"css_tag_mute {player.SteamID}");
|
||||||
|
|
||||||
PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Gag, DateTime.Now.AddMinutes(time), time);
|
PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Gag, DateTime.Now.AddMinutes(time), time);
|
||||||
}
|
}
|
||||||
|
|
||||||
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Gag, _discordWebhookClientPenalty, _localizer);
|
Helper.SendDiscordPenaltyMessage(caller, player, reason, time, Helper.PenaltyType.Gag, _discordWebhookClientPenalty, _localizer);
|
||||||
@@ -236,13 +231,13 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await _muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 0);
|
await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time);
|
||||||
});
|
});
|
||||||
|
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
|
|
||||||
command?.ReplyToCommand($"Gagged player with steamid {steamid}.");
|
command.ReplyToCommand($"Gagged player with steamid {steamid}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
[ConsoleCommand("css_ungag")]
|
[ConsoleCommand("css_ungag")]
|
||||||
@@ -251,7 +246,6 @@ namespace CS2_SimpleAdmin
|
|||||||
public void OnUngagCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnUngagCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
var callerSteamId = caller?.SteamID.ToString() ?? "Console";
|
var callerSteamId = caller?.SteamID.ToString() ?? "Console";
|
||||||
|
|
||||||
var foundPlayerName = string.Empty;
|
var foundPlayerName = string.Empty;
|
||||||
@@ -270,9 +264,7 @@ namespace CS2_SimpleAdmin
|
|||||||
var found = false;
|
var found = false;
|
||||||
|
|
||||||
var pattern = command.GetArg(1);
|
var pattern = command.GetArg(1);
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
|
|
||||||
var playerPenaltyManager = new PlayerPenaltyManager();
|
|
||||||
|
|
||||||
if (Helper.IsValidSteamId64(pattern))
|
if (Helper.IsValidSteamId64(pattern))
|
||||||
{
|
{
|
||||||
@@ -282,10 +274,10 @@ namespace CS2_SimpleAdmin
|
|||||||
var player = matches.FirstOrDefault();
|
var player = matches.FirstOrDefault();
|
||||||
if (player != null && player.IsValid)
|
if (player != null && player.IsValid)
|
||||||
{
|
{
|
||||||
PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Gag);
|
PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Gag);
|
||||||
|
|
||||||
if (TagsDetected)
|
if (TagsDetected)
|
||||||
Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}");
|
Server.ExecuteCommand($"css_tag_unmute {player.SteamID}");
|
||||||
|
|
||||||
found = true;
|
found = true;
|
||||||
foundPlayerName = player.PlayerName;
|
foundPlayerName = player.PlayerName;
|
||||||
@@ -301,12 +293,12 @@ namespace CS2_SimpleAdmin
|
|||||||
var player = matches.FirstOrDefault();
|
var player = matches.FirstOrDefault();
|
||||||
if (player != null && player.IsValid)
|
if (player != null && player.IsValid)
|
||||||
{
|
{
|
||||||
PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Gag);
|
PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Gag);
|
||||||
|
|
||||||
if (TagsDetected)
|
if (TagsDetected)
|
||||||
Server.ExecuteCommand($"css_tag_unmute {player!.SteamID.ToString()}");
|
Server.ExecuteCommand($"css_tag_unmute {player.SteamID.ToString()}");
|
||||||
|
|
||||||
pattern = player!.SteamID.ToString();
|
pattern = player.SteamID.ToString();
|
||||||
|
|
||||||
found = true;
|
found = true;
|
||||||
foundPlayerName = player.PlayerName;
|
foundPlayerName = player.PlayerName;
|
||||||
@@ -317,12 +309,12 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (found)
|
if (found)
|
||||||
{
|
{
|
||||||
Task.Run(async () => { await _muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason, 0); }); // Unmute by type 0 (gag)
|
Task.Run(async () => { await muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason); }); // Unmute by type 0 (gag)
|
||||||
command.ReplyToCommand($"Ungaged player {foundPlayerName}.");
|
command.ReplyToCommand($"Ungaged player {foundPlayerName}.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Task.Run(async () => { await _muteManager.UnmutePlayer(pattern, callerSteamId, reason, 0); }); // Unmute by type 0 (gag)
|
Task.Run(async () => { await muteManager.UnmutePlayer(pattern, callerSteamId, reason); }); // Unmute by type 0 (gag)
|
||||||
command.ReplyToCommand($"Ungaged offline player with pattern {pattern}.");
|
command.ReplyToCommand($"Ungaged offline player with pattern {pattern}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,31 +357,30 @@ namespace CS2_SimpleAdmin
|
|||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
var callerName = caller == null ? "Console" : caller.PlayerName;
|
||||||
|
|
||||||
var time = 0;
|
|
||||||
var reason = _localizer?["sa_unknown"] ?? "Unknown";
|
var reason = _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
||||||
|
|
||||||
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out time);
|
int.TryParse(command.GetArg(2), out var time);
|
||||||
|
|
||||||
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
||||||
reason = command.GetArg(3);
|
reason = command.GetArg(3);
|
||||||
|
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
var playerPenaltyManager = new PlayerPenaltyManager();
|
var playerPenaltyManager = new PlayerPenaltyManager();
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
if (caller!.CanTarget(player))
|
if (caller!.CanTarget(player))
|
||||||
{
|
{
|
||||||
Mute(caller, player, time, reason, callerName, _muteManager, playerPenaltyManager, command);
|
Mute(caller, player, time, reason, callerName, muteManager, playerPenaltyManager, command);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -421,14 +412,14 @@ namespace CS2_SimpleAdmin
|
|||||||
await muteManager.MutePlayer(playerInfo, adminInfo, reason, time, 1);
|
await muteManager.MutePlayer(playerInfo, adminInfo, reason, time, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Mute, DateTime.Now.AddMinutes(time), time);
|
PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Mute, DateTime.Now.AddMinutes(time), time);
|
||||||
|
|
||||||
if (time == 0)
|
if (time == 0)
|
||||||
{
|
{
|
||||||
if (!player.IsBot && !player.IsHLTV)
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
@@ -449,7 +440,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (player is { IsBot: false, IsHLTV: false })
|
if (player is { IsBot: false, IsHLTV: false })
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_mute_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_mute_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
@@ -493,13 +484,11 @@ namespace CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var time = 0;
|
|
||||||
var reason = _localizer?["sa_unknown"] ?? "Unknown";
|
var reason = _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
var playerPenaltyManager = new PlayerPenaltyManager();
|
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out time);
|
int.TryParse(command.GetArg(2), out var time);
|
||||||
|
|
||||||
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
||||||
reason = command.GetArg(3);
|
reason = command.GetArg(3);
|
||||||
@@ -523,14 +512,14 @@ namespace CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Mute, DateTime.Now.AddMinutes(time), time);
|
PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Mute, DateTime.Now.AddMinutes(time), time);
|
||||||
|
|
||||||
if (time == 0)
|
if (time == 0)
|
||||||
{
|
{
|
||||||
if (player is { IsBot: false, IsHLTV: false })
|
if (player is { IsBot: false, IsHLTV: false })
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
@@ -550,7 +539,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (player is { IsBot: false, IsHLTV: false })
|
if (player is { IsBot: false, IsHLTV: false })
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_mute_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_mute_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
@@ -572,13 +561,13 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await _muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 1);
|
await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
|
|
||||||
command?.ReplyToCommand($"Muted player with steamid {steamid}.");
|
command.ReplyToCommand($"Muted player with steamid {steamid}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
[ConsoleCommand("css_unmute")]
|
[ConsoleCommand("css_unmute")]
|
||||||
@@ -587,7 +576,6 @@ namespace CS2_SimpleAdmin
|
|||||||
public void OnUnmuteCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnUnmuteCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
var callerSteamId = caller?.SteamID.ToString() ?? "Console";
|
var callerSteamId = caller?.SteamID.ToString() ?? "Console";
|
||||||
|
|
||||||
var foundPlayerName = string.Empty;
|
var foundPlayerName = string.Empty;
|
||||||
@@ -605,8 +593,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
var pattern = command.GetArg(1);
|
var pattern = command.GetArg(1);
|
||||||
var found = false;
|
var found = false;
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
PlayerPenaltyManager playerPenaltyManager = new();
|
|
||||||
|
|
||||||
if (Helper.IsValidSteamId64(pattern))
|
if (Helper.IsValidSteamId64(pattern))
|
||||||
{
|
{
|
||||||
@@ -616,7 +603,7 @@ namespace CS2_SimpleAdmin
|
|||||||
var player = matches.FirstOrDefault();
|
var player = matches.FirstOrDefault();
|
||||||
if (player != null && player.IsValid)
|
if (player != null && player.IsValid)
|
||||||
{
|
{
|
||||||
PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Mute);
|
PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Mute);
|
||||||
player.VoiceFlags = VoiceFlags.Normal;
|
player.VoiceFlags = VoiceFlags.Normal;
|
||||||
found = true;
|
found = true;
|
||||||
foundPlayerName = player.PlayerName;
|
foundPlayerName = player.PlayerName;
|
||||||
@@ -632,7 +619,7 @@ namespace CS2_SimpleAdmin
|
|||||||
var player = matches.FirstOrDefault();
|
var player = matches.FirstOrDefault();
|
||||||
if (player != null && player.IsValid)
|
if (player != null && player.IsValid)
|
||||||
{
|
{
|
||||||
PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Mute);
|
PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Mute);
|
||||||
player.VoiceFlags = VoiceFlags.Normal;
|
player.VoiceFlags = VoiceFlags.Normal;
|
||||||
pattern = player.SteamID.ToString();
|
pattern = player.SteamID.ToString();
|
||||||
found = true;
|
found = true;
|
||||||
@@ -644,12 +631,12 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (found)
|
if (found)
|
||||||
{
|
{
|
||||||
Task.Run(async () => { await _muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason, 1); }); // Unmute by type 1 (mute)
|
Task.Run(async () => { await muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason, 1); }); // Unmute by type 1 (mute)
|
||||||
command.ReplyToCommand($"Unmuted player {foundPlayerName}.");
|
command.ReplyToCommand($"Unmuted player {foundPlayerName}.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Task.Run(async () => { await _muteManager.UnmutePlayer(pattern, callerSteamId, reason, 1); }); // Unmute by type 1 (mute)
|
Task.Run(async () => { await muteManager.UnmutePlayer(pattern, callerSteamId, reason, 1); }); // Unmute by type 1 (mute)
|
||||||
command.ReplyToCommand($"Unmuted offline player with pattern {pattern}.");
|
command.ReplyToCommand($"Unmuted offline player with pattern {pattern}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -687,31 +674,30 @@ namespace CS2_SimpleAdmin
|
|||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
var callerName = caller == null ? "Console" : caller.PlayerName;
|
||||||
|
|
||||||
var time = 0;
|
|
||||||
var reason = CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
|
var reason = CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
|
||||||
|
|
||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player.SteamID.ToString().Length == 17 && !player.IsHLTV).ToList();
|
||||||
|
|
||||||
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
if (playersToTarget.Count > 1 && Config.DisableDangerousCommands || playersToTarget.Count == 0)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out time);
|
int.TryParse(command.GetArg(2), out var time);
|
||||||
|
|
||||||
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
||||||
reason = command.GetArg(3);
|
reason = command.GetArg(3);
|
||||||
|
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
var playerPenaltyManager = new PlayerPenaltyManager();
|
var playerPenaltyManager = new PlayerPenaltyManager();
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
if (caller!.CanTarget(player))
|
if (caller!.CanTarget(player))
|
||||||
{
|
{
|
||||||
Silence(caller, player, time, reason, callerName, _muteManager, playerPenaltyManager, command);
|
Silence(caller, player, time, reason, callerName, muteManager, playerPenaltyManager, command);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -721,7 +707,6 @@ namespace CS2_SimpleAdmin
|
|||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
||||||
muteManager ??= new MuteManager(_database);
|
muteManager ??= new MuteManager(_database);
|
||||||
playerPenaltyManager ??= new PlayerPenaltyManager();
|
|
||||||
|
|
||||||
var playerInfo = new PlayerInfo
|
var playerInfo = new PlayerInfo
|
||||||
{
|
{
|
||||||
@@ -746,11 +731,11 @@ namespace CS2_SimpleAdmin
|
|||||||
Server.ExecuteCommand($"css_tag_mute {player!.SteamID}");
|
Server.ExecuteCommand($"css_tag_mute {player!.SteamID}");
|
||||||
|
|
||||||
player!.VoiceFlags = VoiceFlags.Muted;
|
player!.VoiceFlags = VoiceFlags.Muted;
|
||||||
PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time);
|
PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time);
|
||||||
|
|
||||||
if (time == 0)
|
if (time == 0)
|
||||||
{
|
{
|
||||||
if (!player!.IsBot && !player.IsHLTV)
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
@@ -773,11 +758,11 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!player!.IsBot && !player.IsHLTV)
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -823,13 +808,11 @@ namespace CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var time = 0;
|
var reason = _localizer?["sa_unknown"] ?? "Unknown";
|
||||||
var reason = CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
|
|
||||||
|
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
var playerPenaltyManager = new PlayerPenaltyManager();
|
|
||||||
|
|
||||||
int.TryParse(command.GetArg(2), out time);
|
int.TryParse(command.GetArg(2), out var time);
|
||||||
|
|
||||||
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
if (command.ArgCount >= 3 && command.GetArg(3).Length > 0)
|
||||||
reason = command.GetArg(3);
|
reason = command.GetArg(3);
|
||||||
@@ -854,16 +837,16 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (TagsDetected)
|
if (TagsDetected)
|
||||||
Server.ExecuteCommand($"css_tag_mute {player!.SteamID}");
|
Server.ExecuteCommand($"css_tag_mute {player.SteamID}");
|
||||||
|
|
||||||
PlayerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time);
|
PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Silence, DateTime.Now.AddMinutes(time), time);
|
||||||
|
|
||||||
if (time == 0)
|
if (time == 0)
|
||||||
{
|
{
|
||||||
if (!player.IsBot && !player.IsHLTV)
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_silence_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_silence_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
@@ -883,7 +866,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (!player.IsBot && !player.IsHLTV)
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player!.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
player.PrintToCenter(_localizer!["sa_player_silence_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
if (caller == null || !silentPlayers.Contains(caller.Slot))
|
||||||
{
|
{
|
||||||
@@ -904,13 +887,13 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await _muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 2);
|
await muteManager.AddMuteBySteamid(steamid, adminInfo, reason, time, 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
|
|
||||||
command?.ReplyToCommand($"Silenced player with steamid {steamid}.");
|
command.ReplyToCommand($"Silenced player with steamid {steamid}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
[ConsoleCommand("css_unsilence")]
|
[ConsoleCommand("css_unsilence")]
|
||||||
@@ -919,7 +902,6 @@ namespace CS2_SimpleAdmin
|
|||||||
public void OnUnsilenceCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnUnsilenceCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
if (_database == null) return;
|
if (_database == null) return;
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
var callerSteamId = caller?.SteamID.ToString() ?? "Console";
|
var callerSteamId = caller?.SteamID.ToString() ?? "Console";
|
||||||
|
|
||||||
var foundPlayerName = string.Empty;
|
var foundPlayerName = string.Empty;
|
||||||
@@ -937,8 +919,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
var pattern = command.GetArg(1);
|
var pattern = command.GetArg(1);
|
||||||
var found = false;
|
var found = false;
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
PlayerPenaltyManager playerPenaltyManager = new();
|
|
||||||
|
|
||||||
if (Helper.IsValidSteamId64(pattern))
|
if (Helper.IsValidSteamId64(pattern))
|
||||||
{
|
{
|
||||||
@@ -949,9 +930,9 @@ namespace CS2_SimpleAdmin
|
|||||||
if (player != null && player.IsValid)
|
if (player != null && player.IsValid)
|
||||||
{
|
{
|
||||||
if (TagsDetected)
|
if (TagsDetected)
|
||||||
Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}");
|
Server.ExecuteCommand($"css_tag_unmute {player.SteamID}");
|
||||||
|
|
||||||
PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Silence);
|
PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Silence);
|
||||||
player.VoiceFlags = VoiceFlags.Normal;
|
player.VoiceFlags = VoiceFlags.Normal;
|
||||||
found = true;
|
found = true;
|
||||||
foundPlayerName = player.PlayerName;
|
foundPlayerName = player.PlayerName;
|
||||||
@@ -968,9 +949,9 @@ namespace CS2_SimpleAdmin
|
|||||||
if (player != null && player.IsValid)
|
if (player != null && player.IsValid)
|
||||||
{
|
{
|
||||||
if (TagsDetected)
|
if (TagsDetected)
|
||||||
Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}");
|
Server.ExecuteCommand($"css_tag_unmute {player.SteamID}");
|
||||||
|
|
||||||
PlayerPenaltyManager.RemovePenaltiesByType(player!.Slot, PenaltyType.Silence);
|
PlayerPenaltyManager.RemovePenaltiesByType(player.Slot, PenaltyType.Silence);
|
||||||
player.VoiceFlags = VoiceFlags.Normal;
|
player.VoiceFlags = VoiceFlags.Normal;
|
||||||
pattern = player.SteamID.ToString();
|
pattern = player.SteamID.ToString();
|
||||||
found = true;
|
found = true;
|
||||||
@@ -982,15 +963,13 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (found)
|
if (found)
|
||||||
{
|
{
|
||||||
Task.Run(async () => { await _muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason, 2); }); // Unmute by type 2 (silence)
|
Task.Run(async () => { await muteManager.UnmutePlayer(foundPlayerSteamId64, callerSteamId, reason, 2); }); // Unmute by type 2 (silence)
|
||||||
command.ReplyToCommand($"Unsilenced player {foundPlayerName}.");
|
command.ReplyToCommand($"Unsilenced player {foundPlayerName}.");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Task.Run(async () => { await _muteManager.UnmutePlayer(pattern, callerSteamId, reason, 2); }); // Unmute by type 2 (silence)
|
Task.Run(async () => { await muteManager.UnmutePlayer(pattern, callerSteamId, reason, 2); }); // Unmute by type 2 (silence)
|
||||||
command.ReplyToCommand($"Unsilenced offline player with pattern {pattern}.");
|
command.ReplyToCommand($"Unsilenced offline player with pattern {pattern}.");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
TargetResult? targets = GetTarget(command);
|
TargetResult? targets = GetTarget(command);
|
||||||
|
|||||||
@@ -15,8 +15,7 @@ namespace CS2_SimpleAdmin
|
|||||||
[CommandHelper(minArgs: 2, usage: "<question> [... options ...]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 2, usage: "<question> [... options ...]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
public void OnVoteCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnVoteCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
if (command.ArgCount < 2)
|
||||||
if (command.GetArg(1) == null || command.GetArg(1).Length < 0 || command.ArgCount < 2)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
@@ -47,8 +46,8 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
voteMenu.PostSelectAction = PostSelectAction.Close;
|
voteMenu.PostSelectAction = PostSelectAction.Close;
|
||||||
|
|
||||||
Helper.PrintToCenterAll(_localizer!["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]);
|
Helper.PrintToCenterAll(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]);
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
StringBuilder sb = new(_localizer["sa_prefix"]);
|
||||||
sb.Append(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]);
|
sb.Append(_localizer["sa_admin_vote_message", caller == null ? "Console" : caller.PlayerName, question]);
|
||||||
player.PrintToChat(sb.ToString());
|
player.PrintToChat(sb.ToString());
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration;
|
|||||||
using CounterStrikeSharp.API.Core.Translations;
|
using CounterStrikeSharp.API.Core.Translations;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin
|
namespace CS2_SimpleAdmin
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration;
|
|||||||
using CounterStrikeSharp.API.Core.Translations;
|
using CounterStrikeSharp.API.Core.Translations;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||||
using CounterStrikeSharp.API.Modules.Memory;
|
using CounterStrikeSharp.API.Modules.Memory;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
@@ -22,7 +21,7 @@ namespace CS2_SimpleAdmin
|
|||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
@@ -66,7 +65,7 @@ namespace CS2_SimpleAdmin
|
|||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
||||||
var weaponName = command.GetArg(2);
|
var weaponName = command.GetArg(2);
|
||||||
|
|
||||||
// check if item is typed
|
// check if item is typed
|
||||||
@@ -104,10 +103,10 @@ 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)
|
||||||
{
|
{
|
||||||
Helper.LogCommand(caller, $"css_give {player?.PlayerName} {weapon.ToString()}");
|
Helper.LogCommand(caller, $"css_give {player.PlayerName} {weapon.ToString()}");
|
||||||
|
|
||||||
player?.GiveNamedItem(weapon);
|
player.GiveNamedItem(weapon);
|
||||||
SubGiveWeapon(caller, player!, weapon.ToString(), callerName);
|
SubGiveWeapon(caller, player, weapon.ToString(), callerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GiveWeapon(CCSPlayerController? caller, CCSPlayerController player, string weaponName, string? callerName = null, CommandInfo? command = null)
|
private void GiveWeapon(CCSPlayerController? caller, CCSPlayerController player, string weaponName, string? callerName = null, CommandInfo? command = null)
|
||||||
@@ -118,8 +117,8 @@ namespace CS2_SimpleAdmin
|
|||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
player?.GiveNamedItem(weaponName);
|
player.GiveNamedItem(weaponName);
|
||||||
SubGiveWeapon(caller, player!, weaponName, callerName);
|
SubGiveWeapon(caller, player, weaponName, callerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SubGiveWeapon(CCSPlayerController? caller, CCSPlayerController player, string weaponName, string? callerName = null)
|
private void SubGiveWeapon(CCSPlayerController? caller, CCSPlayerController player, string weaponName, string? callerName = null)
|
||||||
@@ -147,7 +146,7 @@ namespace CS2_SimpleAdmin
|
|||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
@@ -190,29 +189,28 @@ namespace CS2_SimpleAdmin
|
|||||||
[CommandHelper(minArgs: 1, usage: "<#userid or name> <health>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 1, usage: "<#userid or name> <health>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
public void OnHpCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnHpCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
int.TryParse(command.GetArg(2), out var health);
|
int.TryParse(command.GetArg(2), out var health);
|
||||||
|
|
||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
if (caller!.CanTarget(player))
|
if (caller!.CanTarget(player))
|
||||||
{
|
{
|
||||||
SetHp(caller, player, health, callerName, command);
|
SetHp(caller, player, health, command);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetHp(CCSPlayerController? caller, CCSPlayerController? player, int health, string? callerName = null, CommandInfo? command = null)
|
public void SetHp(CCSPlayerController? caller, CCSPlayerController? player, int health, CommandInfo? command = null)
|
||||||
{
|
{
|
||||||
if (player != null && !player.IsBot && player.SteamID.ToString().Length != 17)
|
if (player != null && !player.IsBot && player.SteamID.ToString().Length != 17)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
callerName = caller == null ? "Console" : caller.PlayerName;
|
var callerName = caller == null ? "Console" : caller.PlayerName;
|
||||||
|
|
||||||
player.SetHp(health);
|
player.SetHp(health);
|
||||||
|
|
||||||
@@ -245,7 +243,7 @@ namespace CS2_SimpleAdmin
|
|||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
@@ -289,15 +287,14 @@ namespace CS2_SimpleAdmin
|
|||||||
public void OnGravityCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnGravityCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
var callerName = caller == null ? "Console" : caller.PlayerName;
|
||||||
var gravity = 1.0;
|
double.TryParse(command.GetArg(2), out var gravity);
|
||||||
double.TryParse(command.GetArg(2), out gravity);
|
|
||||||
|
|
||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
|
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
@@ -346,7 +343,7 @@ namespace CS2_SimpleAdmin
|
|||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
@@ -393,7 +390,7 @@ namespace CS2_SimpleAdmin
|
|||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
@@ -444,13 +441,12 @@ namespace CS2_SimpleAdmin
|
|||||||
[CommandHelper(minArgs: 1, usage: "<#userid or name> [damage]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 1, usage: "<#userid or name> [damage]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
public void OnSlapCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnSlapCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
|
||||||
var damage = 0;
|
var damage = 0;
|
||||||
|
|
||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
if (command.ArgCount >= 2)
|
if (command.ArgCount >= 2)
|
||||||
{
|
{
|
||||||
@@ -505,7 +501,7 @@ namespace CS2_SimpleAdmin
|
|||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
if (targets == null) return;
|
if (targets == null) return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
switch (teamName)
|
switch (teamName)
|
||||||
{
|
{
|
||||||
@@ -655,10 +651,10 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
||||||
|
|
||||||
if (CBasePlayerController_SetPawnFunc == null || player?.PlayerPawn.Value == null || !player.PlayerPawn.IsValid) return;
|
if (CBasePlayerControllerSetPawnFunc == null || player?.PlayerPawn.Value == null || !player.PlayerPawn.IsValid) return;
|
||||||
|
|
||||||
var playerPawn = player.PlayerPawn.Value;
|
var playerPawn = player.PlayerPawn.Value;
|
||||||
CBasePlayerController_SetPawnFunc.Invoke(player, playerPawn, true, false);
|
CBasePlayerControllerSetPawnFunc.Invoke(player, playerPawn, true, false);
|
||||||
VirtualFunction.CreateVoid<CCSPlayerController>(player.Handle,
|
VirtualFunction.CreateVoid<CCSPlayerController>(player.Handle,
|
||||||
GameData.GetOffset("CCSPlayerController_Respawn"))(player);
|
GameData.GetOffset("CCSPlayerController_Respawn"))(player);
|
||||||
|
|
||||||
@@ -689,14 +685,12 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (caller == null || !caller.PawnIsAlive) return;
|
if (caller == null || !caller.PawnIsAlive) return;
|
||||||
|
|
||||||
var callerName = caller.PlayerName;
|
|
||||||
|
|
||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
|
|
||||||
if (targets == null || targets.Count() > 1)
|
if (targets == null || targets.Count() > 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
@@ -706,13 +700,13 @@ namespace CS2_SimpleAdmin
|
|||||||
if (!player.IsBot && player.SteamID.ToString().Length != 17 || !player.PawnIsAlive)
|
if (!player.IsBot && player.SteamID.ToString().Length != 17 || !player.PawnIsAlive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!caller!.CanTarget(player)) return;
|
if (!caller.CanTarget(player)) return;
|
||||||
caller!.TeleportPlayer(player);
|
caller.TeleportPlayer(player);
|
||||||
caller!.Pawn.Value!.ToggleNoclip();
|
caller.Pawn.Value!.ToggleNoclip();
|
||||||
|
|
||||||
AddTimer(3, () =>
|
AddTimer(3, () =>
|
||||||
{
|
{
|
||||||
caller!.Pawn.Value!.ToggleNoclip();
|
caller.Pawn.Value!.ToggleNoclip();
|
||||||
});
|
});
|
||||||
|
|
||||||
if (silentPlayers.Contains(caller.Slot)) return;
|
if (silentPlayers.Contains(caller.Slot)) return;
|
||||||
@@ -736,14 +730,12 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (caller == null || !caller.PawnIsAlive) return;
|
if (caller == null || !caller.PawnIsAlive) return;
|
||||||
|
|
||||||
var callerName = caller.PlayerName;
|
|
||||||
|
|
||||||
var targets = GetTarget(command);
|
var targets = GetTarget(command);
|
||||||
|
|
||||||
if (targets == null || targets.Count() > 1)
|
if (targets == null || targets.Count() > 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var playersToTarget = targets!.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
|
var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false }).ToList();
|
||||||
|
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
Helper.SendDiscordLogMessage(caller, command, _discordWebhookClientLog, _localizer);
|
||||||
@@ -753,13 +745,13 @@ namespace CS2_SimpleAdmin
|
|||||||
if (!player.IsBot && player.SteamID.ToString().Length != 17 || !player.PawnIsAlive)
|
if (!player.IsBot && player.SteamID.ToString().Length != 17 || !player.PawnIsAlive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!caller!.CanTarget(player)) return;
|
if (!caller.CanTarget(player)) return;
|
||||||
player!.TeleportPlayer(caller!);
|
player.TeleportPlayer(caller);
|
||||||
caller!.Pawn.Value!.ToggleNoclip();
|
caller.Pawn.Value!.ToggleNoclip();
|
||||||
|
|
||||||
AddTimer(3, () =>
|
AddTimer(3, () =>
|
||||||
{
|
{
|
||||||
caller!.Pawn.Value!.ToggleNoclip();
|
caller.Pawn.Value!.ToggleNoclip();
|
||||||
});
|
});
|
||||||
|
|
||||||
if (silentPlayers.Contains(caller.Slot)) return;
|
if (silentPlayers.Contains(caller.Slot)) return;
|
||||||
|
|||||||
101
Config.cs
101
Config.cs
@@ -3,6 +3,24 @@ using System.Text.Json.Serialization;
|
|||||||
|
|
||||||
namespace CS2_SimpleAdmin
|
namespace CS2_SimpleAdmin
|
||||||
{
|
{
|
||||||
|
public class DurationItem
|
||||||
|
{
|
||||||
|
[JsonPropertyName("name")]
|
||||||
|
public required string Name { get; set; }
|
||||||
|
|
||||||
|
[JsonPropertyName("duration")]
|
||||||
|
public int Duration { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class AdminFlag
|
||||||
|
{
|
||||||
|
[JsonPropertyName("name")]
|
||||||
|
public required string Name { get; set; }
|
||||||
|
|
||||||
|
[JsonPropertyName("flag")]
|
||||||
|
public required string Flag { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
public class Discord
|
public class Discord
|
||||||
{
|
{
|
||||||
[JsonPropertyName("DiscordLogWebhook")]
|
[JsonPropertyName("DiscordLogWebhook")]
|
||||||
@@ -12,7 +30,7 @@ namespace CS2_SimpleAdmin
|
|||||||
public string DiscordPenaltyWebhook { get; set; } = "";
|
public string DiscordPenaltyWebhook { get; set; } = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CustomServerCommandData
|
public abstract class CustomServerCommandData
|
||||||
{
|
{
|
||||||
[JsonPropertyName("Flag")]
|
[JsonPropertyName("Flag")]
|
||||||
public string Flag { get; set; } = "@css/generic";
|
public string Flag { get; set; } = "@css/generic";
|
||||||
@@ -27,9 +45,71 @@ namespace CS2_SimpleAdmin
|
|||||||
public bool ExecuteOnClient { get; set; } = false;
|
public bool ExecuteOnClient { get; set; } = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class MenuConfig
|
||||||
|
{
|
||||||
|
[JsonPropertyName("Durations")]
|
||||||
|
public DurationItem[] Durations { get; set; } =
|
||||||
|
[
|
||||||
|
new DurationItem { Name = "1 minute", Duration = 1 },
|
||||||
|
new DurationItem { Name = "5 minutes", Duration = 5 },
|
||||||
|
new DurationItem { Name = "15 minutes", Duration = 15 },
|
||||||
|
new DurationItem { Name = "1 hour", Duration = 60 },
|
||||||
|
new DurationItem { Name = "1 day", Duration = 60 * 24 },
|
||||||
|
new DurationItem { Name = "7 days", Duration = 60 * 24 * 7 },
|
||||||
|
new DurationItem { Name = "14 days", Duration = 60 * 24 * 14 },
|
||||||
|
new DurationItem { Name = "30 days", Duration = 60 * 24 * 30 },
|
||||||
|
new DurationItem { Name = "Permanent", Duration = 0 }
|
||||||
|
];
|
||||||
|
|
||||||
|
[JsonPropertyName("BanReasons")]
|
||||||
|
public List<string> BanReasons { get; set; } =
|
||||||
|
[
|
||||||
|
"Hacking",
|
||||||
|
"Voice Abuse",
|
||||||
|
"Chat Abuse",
|
||||||
|
"Admin disrespect",
|
||||||
|
"Other"
|
||||||
|
];
|
||||||
|
|
||||||
|
[JsonPropertyName("KickReasons")]
|
||||||
|
public List<string> KickReasons { get; set; } =
|
||||||
|
[
|
||||||
|
"Voice Abuse",
|
||||||
|
"Chat Abuse",
|
||||||
|
"Admin disrespect",
|
||||||
|
"Other"
|
||||||
|
];
|
||||||
|
|
||||||
|
[JsonPropertyName("MuteReasons")]
|
||||||
|
public List<string> MuteReasons { get; set; } =
|
||||||
|
[
|
||||||
|
"Advertising",
|
||||||
|
"Spamming",
|
||||||
|
"Spectator camera abuse",
|
||||||
|
"Hate",
|
||||||
|
"Admin disrespect",
|
||||||
|
"Other"
|
||||||
|
];
|
||||||
|
|
||||||
|
[JsonPropertyName("AdminFlags")]
|
||||||
|
public AdminFlag[] AdminFlags { get; set; } =
|
||||||
|
[
|
||||||
|
new AdminFlag { Name = "Generic", Flag = "@css/generic" },
|
||||||
|
new AdminFlag { Name = "Chat", Flag = "@css/chat" },
|
||||||
|
new AdminFlag { Name = "Change Map", Flag = "@css/changemap" },
|
||||||
|
new AdminFlag { Name = "Slay", Flag = "@css/slay" },
|
||||||
|
new AdminFlag { Name = "Kick", Flag = "@css/kick" },
|
||||||
|
new AdminFlag { Name = "Ban", Flag = "@css/ban" },
|
||||||
|
new AdminFlag { Name = "Unban", Flag = "@css/unban" },
|
||||||
|
new AdminFlag { Name = "Cvar", Flag = "@css/cvar" },
|
||||||
|
new AdminFlag { Name = "Rcon", Flag = "@css/rcon" },
|
||||||
|
new AdminFlag { Name = "Root (all flags)", Flag = "@css/root" }
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
public class CS2_SimpleAdminConfig : BasePluginConfig
|
public class CS2_SimpleAdminConfig : BasePluginConfig
|
||||||
{
|
{
|
||||||
[JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 10;
|
[JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 12;
|
||||||
|
|
||||||
[JsonPropertyName("DatabaseHost")]
|
[JsonPropertyName("DatabaseHost")]
|
||||||
public string DatabaseHost { get; set; } = "";
|
public string DatabaseHost { get; set; } = "";
|
||||||
@@ -59,26 +139,29 @@ namespace CS2_SimpleAdmin
|
|||||||
public bool DisableDangerousCommands { get; set; } = true;
|
public bool DisableDangerousCommands { get; set; } = true;
|
||||||
|
|
||||||
[JsonPropertyName("BanType")]
|
[JsonPropertyName("BanType")]
|
||||||
public int BanType { get; set; } = 1;
|
public int BanType { get; } = 1;
|
||||||
[JsonPropertyName("MultiServerMode")]
|
[JsonPropertyName("MultiServerMode")]
|
||||||
public bool MultiServerMode { get; set; } = true;
|
public bool MultiServerMode { get; } = true;
|
||||||
|
|
||||||
[JsonPropertyName("ExpireOldIpBans")]
|
[JsonPropertyName("ExpireOldIpBans")]
|
||||||
public int ExpireOldIpBans { get; set; } = 0;
|
public int ExpireOldIpBans { get; } = 0;
|
||||||
|
|
||||||
[JsonPropertyName("TeamSwitchType")]
|
[JsonPropertyName("TeamSwitchType")]
|
||||||
public int TeamSwitchType { get; set; } = 1;
|
public int TeamSwitchType { get; } = 1;
|
||||||
|
|
||||||
[JsonPropertyName("Discord")]
|
[JsonPropertyName("Discord")]
|
||||||
public Discord Discord { get; set; } = new Discord();
|
public Discord Discord { get; } = new();
|
||||||
|
|
||||||
[JsonPropertyName("DefaultMaps")]
|
[JsonPropertyName("DefaultMaps")]
|
||||||
public List<string> DefaultMaps { get; set; } = [];
|
public List<string> DefaultMaps { get; } = [];
|
||||||
|
|
||||||
[JsonPropertyName("WorkshopMaps")]
|
[JsonPropertyName("WorkshopMaps")]
|
||||||
public List<string> WorkshopMaps { get; set; } = [];
|
public List<string> WorkshopMaps { get; } = [];
|
||||||
|
|
||||||
[JsonPropertyName("CustomServerCommands")]
|
[JsonPropertyName("CustomServerCommands")]
|
||||||
public List<CustomServerCommandData> CustomServerCommands { get; set; } = [];
|
public List<CustomServerCommandData> CustomServerCommands { get; set; } = [];
|
||||||
|
|
||||||
|
[JsonPropertyName("MenuConfig")]
|
||||||
|
public MenuConfig MenuConfigs { get; set; } = new();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
44
Events.cs
44
Events.cs
@@ -7,9 +7,7 @@ using CounterStrikeSharp.API.Modules.Cvars;
|
|||||||
using CounterStrikeSharp.API.Modules.Entities;
|
using CounterStrikeSharp.API.Modules.Entities;
|
||||||
using Dapper;
|
using Dapper;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System.Data;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using static Dapper.SqlMapper;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin;
|
namespace CS2_SimpleAdmin;
|
||||||
|
|
||||||
@@ -50,7 +48,6 @@ public partial class CS2_SimpleAdmin
|
|||||||
#endif
|
#endif
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager();
|
|
||||||
PlayerPenaltyManager.RemoveAllPenalties(player.Slot);
|
PlayerPenaltyManager.RemoveAllPenalties(player.Slot);
|
||||||
|
|
||||||
if (TagsDetected)
|
if (TagsDetected)
|
||||||
@@ -69,7 +66,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
SteamID? authorizedSteamId = player.AuthorizedSteamID;
|
SteamID? authorizedSteamId = player.AuthorizedSteamID;
|
||||||
if (authorizedSteamId != null && AdminSQLManager._adminCache.TryGetValue(authorizedSteamId, out var expirationTime)
|
if (authorizedSteamId != null && AdminSQLManager.AdminCache.TryGetValue(authorizedSteamId, out var expirationTime)
|
||||||
&& expirationTime <= DateTime.Now)
|
&& expirationTime <= DateTime.Now)
|
||||||
{
|
{
|
||||||
AdminManager.ClearPlayerPermissions(authorizedSteamId);
|
AdminManager.ClearPlayerPermissions(authorizedSteamId);
|
||||||
@@ -113,7 +110,6 @@ public partial class CS2_SimpleAdmin
|
|||||||
var playerInfo = new PlayerInfo
|
var playerInfo = new PlayerInfo
|
||||||
{
|
{
|
||||||
UserId = player.UserId.Value,
|
UserId = player.UserId.Value,
|
||||||
Index = (ushort)player.Index,
|
|
||||||
Slot = player.Slot,
|
Slot = player.Slot,
|
||||||
SteamId = player.SteamID.ToString(),
|
SteamId = player.SteamID.ToString(),
|
||||||
Name = player.PlayerName,
|
Name = player.PlayerName,
|
||||||
@@ -124,14 +120,13 @@ public partial class CS2_SimpleAdmin
|
|||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
// Initialize managers
|
// Initialize managers
|
||||||
BanManager _banManager = new(_database, Config);
|
BanManager banManager = new(_database, Config);
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager();
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Check if the player is banned
|
// Check if the player is banned
|
||||||
bool isBanned = await _banManager.IsPlayerBanned(playerInfo);
|
bool isBanned = await banManager.IsPlayerBanned(playerInfo);
|
||||||
if (isBanned)
|
if (isBanned)
|
||||||
{
|
{
|
||||||
// Add player's IP and SteamID to bannedPlayers list if not already present
|
// Add player's IP and SteamID to bannedPlayers list if not already present
|
||||||
@@ -155,7 +150,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if the player is muted
|
// Check if the player is muted
|
||||||
var activeMutes = await _muteManager.IsPlayerMuted(playerInfo.SteamId);
|
var activeMutes = await muteManager.IsPlayerMuted(playerInfo.SteamId);
|
||||||
if (activeMutes.Count > 0)
|
if (activeMutes.Count > 0)
|
||||||
{
|
{
|
||||||
foreach (var mute in activeMutes)
|
foreach (var mute in activeMutes)
|
||||||
@@ -231,8 +226,6 @@ public partial class CS2_SimpleAdmin
|
|||||||
if (info.GetArg(1).Length == 0)
|
if (info.GetArg(1).Length == 0)
|
||||||
return HookResult.Handled;
|
return HookResult.Handled;
|
||||||
|
|
||||||
PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager();
|
|
||||||
|
|
||||||
if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) || PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
|
if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) || PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
|
||||||
return HookResult.Handled;
|
return HookResult.Handled;
|
||||||
|
|
||||||
@@ -248,8 +241,6 @@ public partial class CS2_SimpleAdmin
|
|||||||
if (info.GetArg(1).Length == 0)
|
if (info.GetArg(1).Length == 0)
|
||||||
return HookResult.Handled;
|
return HookResult.Handled;
|
||||||
|
|
||||||
PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager();
|
|
||||||
|
|
||||||
if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) || PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
|
if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) || PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
|
||||||
return HookResult.Handled;
|
return HookResult.Handled;
|
||||||
|
|
||||||
@@ -290,7 +281,6 @@ public partial class CS2_SimpleAdmin
|
|||||||
godPlayers.Clear();
|
godPlayers.Clear();
|
||||||
silentPlayers.Clear();
|
silentPlayers.Clear();
|
||||||
|
|
||||||
PlayerPenaltyManager playerPenaltyManager = new PlayerPenaltyManager();
|
|
||||||
PlayerPenaltyManager.RemoveAllPenalties();
|
PlayerPenaltyManager.RemoveAllPenalties();
|
||||||
|
|
||||||
_database = new Database(dbConnectionString);
|
_database = new Database(dbConnectionString);
|
||||||
@@ -309,17 +299,17 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
AdminSQLManager _adminManager = new(_database);
|
AdminSQLManager adminManager = new(_database);
|
||||||
BanManager _banManager = new(_database, Config);
|
BanManager banManager = new(_database, Config);
|
||||||
MuteManager _muteManager = new(_database);
|
MuteManager muteManager = new(_database);
|
||||||
|
|
||||||
await _banManager.ExpireOldBans();
|
await banManager.ExpireOldBans();
|
||||||
await _muteManager.ExpireOldMutes();
|
await muteManager.ExpireOldMutes();
|
||||||
await _adminManager.DeleteOldAdmins();
|
await adminManager.DeleteOldAdmins();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _banManager.CheckOnlinePlayers(onlinePlayers);
|
await banManager.CheckOnlinePlayers(onlinePlayers);
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
|
|
||||||
@@ -337,7 +327,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
if (!PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) && !PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
|
if (!PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) && !PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
|
||||||
{
|
{
|
||||||
if (TagsDetected)
|
if (TagsDetected)
|
||||||
Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}");
|
Server.ExecuteCommand($"css_tag_unmute {player.SteamID}");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence) ||
|
if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence) ||
|
||||||
@@ -346,7 +336,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
player.VoiceFlags = VoiceFlags.Normal;
|
player.VoiceFlags = VoiceFlags.Normal;
|
||||||
|
|
||||||
if (TagsDetected)
|
if (TagsDetected)
|
||||||
Server.ExecuteCommand($"css_tag_unmute {player!.SteamID}");
|
Server.ExecuteCommand($"css_tag_unmute {player.SteamID}");
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerPenaltyManager.RemoveExpiredPenalties();
|
PlayerPenaltyManager.RemoveExpiredPenalties();
|
||||||
@@ -363,7 +353,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
AdminSQLManager _adminManager = new(_database);
|
AdminSQLManager adminManager = new(_database);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await _database.GetConnectionAsync();
|
||||||
@@ -413,8 +403,8 @@ public partial class CS2_SimpleAdmin
|
|||||||
//await _adminManager.GiveAllGroupsFlags();
|
//await _adminManager.GiveAllGroupsFlags();
|
||||||
//await _adminManager.GiveAllFlags();
|
//await _adminManager.GiveAllFlags();
|
||||||
|
|
||||||
await _adminManager.CrateGroupsJsonFile();
|
await adminManager.CrateGroupsJsonFile();
|
||||||
await _adminManager.CreateAdminsJsonFile();
|
await adminManager.CreateAdminsJsonFile();
|
||||||
|
|
||||||
AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json");
|
AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json");
|
||||||
AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json");
|
AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json");
|
||||||
|
|||||||
91
Helper.cs
91
Helper.cs
@@ -25,6 +25,18 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
internal static CS2_SimpleAdminConfig? Config { get; set; }
|
internal static CS2_SimpleAdminConfig? Config { get; set; }
|
||||||
|
|
||||||
|
public static bool IsDebugBuild
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static List<CCSPlayerController> GetPlayerFromName(string name)
|
public static List<CCSPlayerController> GetPlayerFromName(string name)
|
||||||
{
|
{
|
||||||
return Utilities.GetPlayers().FindAll(x => x.PlayerName.Equals(name, StringComparison.OrdinalIgnoreCase));
|
return Utilities.GetPlayers().FindAll(x => x.PlayerName.Equals(name, StringComparison.OrdinalIgnoreCase));
|
||||||
@@ -47,7 +59,9 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
public static List<CCSPlayerController> GetValidPlayers()
|
public static List<CCSPlayerController> GetValidPlayers()
|
||||||
{
|
{
|
||||||
return Utilities.GetPlayers().FindAll(p => p?.IsValid == true && p.SteamID.ToString().Length == 17 && !string.IsNullOrEmpty(p.IpAddress) && p is { Connected: PlayerConnectedState.PlayerConnected, IsBot: false, IsHLTV: false });
|
return Utilities.GetPlayers().FindAll(p =>
|
||||||
|
p.IsValid && p.SteamID.ToString().Length == 17 && !string.IsNullOrEmpty(p.IpAddress) && p is
|
||||||
|
{ Connected: PlayerConnectedState.PlayerConnected, IsBot: false, IsHLTV: false });
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<CCSPlayerController?> GetValidPlayersWithBots()
|
public static IEnumerable<CCSPlayerController?> GetValidPlayersWithBots()
|
||||||
@@ -96,11 +110,10 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminManager.SetPlayerImmunity(steamid, (uint)immunity);
|
AdminManager.SetPlayerImmunity(steamid, immunity);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -143,7 +156,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
var playerName = caller?.PlayerName ?? "Console";
|
var playerName = caller?.PlayerName ?? "Console";
|
||||||
|
|
||||||
var hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer["sa_unknown"];
|
var hostname = ConVar.Find("hostname")?.StringValue ?? CS2_SimpleAdmin._localizer["sa_unknown"];
|
||||||
|
|
||||||
CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer[
|
CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer[
|
||||||
"sa_discord_log_command",
|
"sa_discord_log_command",
|
||||||
@@ -157,19 +170,19 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
var playerName = caller?.PlayerName ?? "Console";
|
var playerName = caller?.PlayerName ?? "Console";
|
||||||
|
|
||||||
var hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
|
var hostname = ConVar.Find("hostname")?.StringValue ?? CS2_SimpleAdmin._localizer["sa_unknown"];
|
||||||
|
|
||||||
CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer?["sa_discord_log_command",
|
CS2_SimpleAdmin.Instance.Logger.LogInformation($"{CS2_SimpleAdmin._localizer["sa_discord_log_command",
|
||||||
playerName, command]}".Replace("HOSTNAME", hostname).Replace("**", ""));
|
playerName, command]}".Replace("HOSTNAME", hostname).Replace("**", ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<Embed> GenerateEmbedsDiscord(string title, string description, string thumbnailUrl, Color color, string[] fieldNames, string[] fieldValues, bool[] inlineFlags)
|
public static IEnumerable<Embed> GenerateEmbedsDiscord(string title, string description, string thumbnailUrl, Color color, string[] fieldNames, string[] fieldValues, bool[] inlineFlags)
|
||||||
{
|
{
|
||||||
var hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
|
var hostname = ConVar.Find("hostname")?.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
|
||||||
var address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}";
|
var address = $"{ConVar.Find("ip")?.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}";
|
||||||
|
|
||||||
description = description.Replace("{hostname}", hostname ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown");
|
description = description.Replace("{hostname}", hostname);
|
||||||
description = description.Replace("{address}", address ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown");
|
description = description.Replace("{address}", address);
|
||||||
|
|
||||||
var embed = new EmbedBuilder
|
var embed = new EmbedBuilder
|
||||||
{
|
{
|
||||||
@@ -188,7 +201,7 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if ((i + 1) % 2 == 0 && i < fieldNames.Length - 1)
|
if ((i + 1) % 2 == 0 && i < fieldNames.Length - 1)
|
||||||
{
|
{
|
||||||
embed.AddField("\u200b", "\u200b", false);
|
embed.AddField("\u200b", "\u200b");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,7 +212,7 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (discordWebhookClientLog == null || localizer == null) return;
|
if (discordWebhookClientLog == null || localizer == null) return;
|
||||||
|
|
||||||
var communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
|
var communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl() + ">" : "<https://steamcommunity.com/profiles/0>";
|
||||||
var callerName = caller != null ? caller.PlayerName : "Console";
|
var callerName = caller != null ? caller.PlayerName : "Console";
|
||||||
discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", command.GetCommandString]));
|
discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", command.GetCommandString]));
|
||||||
}
|
}
|
||||||
@@ -223,34 +236,34 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (discordWebhookClientPenalty == null || localizer == null) return;
|
if (discordWebhookClientPenalty == null || localizer == null) return;
|
||||||
|
|
||||||
var callerCommunityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
|
var callerCommunityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl() + ">" : "<https://steamcommunity.com/profiles/0>";
|
||||||
var targetCommunityUrl = target != null ? "<" + new SteamID(target.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
|
var targetCommunityUrl = target != null ? "<" + new SteamID(target.SteamID).ToCommunityUrl() + ">" : "<https://steamcommunity.com/profiles/0>";
|
||||||
var callerName = caller != null ? caller.PlayerName : "Console";
|
var callerName = caller != null ? caller.PlayerName : "Console";
|
||||||
var targetName = target != null ? target.PlayerName : localizer?["sa_unknown"] ?? "Unknown";
|
var targetName = target != null ? target.PlayerName : localizer["sa_unknown"];
|
||||||
var targetSteamId = target != null ? new SteamID(target.SteamID).SteamId2.ToString() : localizer?["sa_unknown"] ?? "Unknown";
|
var targetSteamId = target != null ? new SteamID(target.SteamID).SteamId2 : localizer["sa_unknown"];
|
||||||
|
|
||||||
var time = duration != 0 ? ConvertMinutesToTime(duration) : localizer?["sa_permanent"] ?? "Permanent";
|
var time = duration != 0 ? ConvertMinutesToTime(duration) : localizer["sa_permanent"];
|
||||||
|
|
||||||
string[] fieldNames = [
|
string[] fieldNames = [
|
||||||
localizer?["sa_player"] ?? "Player:",
|
localizer["sa_player"],
|
||||||
localizer?["sa_steamid"] ?? "SteamID:",
|
localizer["sa_steamid"],
|
||||||
localizer?["sa_duration"] ?? "Duration:",
|
localizer["sa_duration"],
|
||||||
localizer?["sa_reason"] ?? "Reason:",
|
localizer["sa_reason"],
|
||||||
localizer?["sa_admin"] ?? "Admin:"];
|
localizer["sa_admin"]];
|
||||||
string[] fieldValues = [$"[{targetName}]({targetCommunityUrl})", targetSteamId, time, reason, $"[{callerName}]({callerCommunityUrl})"];
|
string[] fieldValues = [$"[{targetName}]({targetCommunityUrl})", targetSteamId, time, reason, $"[{callerName}]({callerCommunityUrl})"];
|
||||||
bool[] inlineFlags = [true, true, true, false, false];
|
bool[] inlineFlags = [true, true, true, false, false];
|
||||||
|
|
||||||
var hostname = ConVar.Find("hostname")!.StringValue ?? localizer?["sa_unknown"] ?? "Unknown";
|
var hostname = ConVar.Find("hostname")?.StringValue ?? localizer["sa_unknown"];
|
||||||
|
|
||||||
var embed = new EmbedBuilder
|
var embed = new EmbedBuilder
|
||||||
{
|
{
|
||||||
Title = penalty switch
|
Title = penalty switch
|
||||||
{
|
{
|
||||||
PenaltyType.Ban => localizer?["sa_discord_penalty_ban"] ?? "Ban registrered",
|
PenaltyType.Ban => localizer["sa_discord_penalty_ban"],
|
||||||
PenaltyType.Mute => localizer?["sa_discord_penalty_mute"] ?? "Mute registrered",
|
PenaltyType.Mute => localizer["sa_discord_penalty_mute"],
|
||||||
PenaltyType.Gag => localizer?["sa_discord_penalty_gag"] ?? "Gag registrered",
|
PenaltyType.Gag => localizer["sa_discord_penalty_gag"],
|
||||||
PenaltyType.Silence => localizer?["sa_discord_penalty_silence"] ?? "Silence registrered",
|
PenaltyType.Silence => localizer["sa_discord_penalty_silence"],
|
||||||
_ => localizer?["sa_discord_penalty_unknown"] ?? "Unknown registrered",
|
_ => localizer["sa_discord_penalty_unknown"],
|
||||||
},
|
},
|
||||||
|
|
||||||
Color = penalty switch
|
Color = penalty switch
|
||||||
@@ -277,8 +290,8 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
private static string GenerateMessageDiscord(string message)
|
private static string GenerateMessageDiscord(string message)
|
||||||
{
|
{
|
||||||
var hostname = ConVar.Find("hostname")!.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
|
var hostname = ConVar.Find("hostname")?.StringValue ?? CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown";
|
||||||
var address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}";
|
var address = $"{ConVar.Find("ip")?.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}";
|
||||||
|
|
||||||
message = message.Replace("HOSTNAME", hostname);
|
message = message.Replace("HOSTNAME", hostname);
|
||||||
message = message.Replace("ADDRESS", address);
|
message = message.Replace("ADDRESS", address);
|
||||||
@@ -317,18 +330,22 @@ namespace CS2_SimpleAdmin
|
|||||||
caller = null;
|
caller = null;
|
||||||
|
|
||||||
var callerName = caller == null ? "Console" : caller.PlayerName;
|
var callerName = caller == null ? "Console" : caller.PlayerName;
|
||||||
var communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
|
var communityUrl = caller != null
|
||||||
CS2_SimpleAdmin._discordWebhookClientLog.SendMessageAsync(GenerateMessageDiscord(CS2_SimpleAdmin._localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", commandString]));
|
? "<" + new SteamID(caller.SteamID).ToCommunityUrl() + ">"
|
||||||
|
: "<https://steamcommunity.com/profiles/0>";
|
||||||
|
CS2_SimpleAdmin._discordWebhookClientLog.SendMessageAsync(GenerateMessageDiscord(
|
||||||
|
CS2_SimpleAdmin._localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})",
|
||||||
|
commandString]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SchemaString<SchemaClass>(SchemaClass instance, string member)
|
public class SchemaString<TSchemaClass>(TSchemaClass instance, string member)
|
||||||
: NativeObject(Schema.GetSchemaValue<nint>(instance.Handle, typeof(SchemaClass).Name!, member))
|
: NativeObject(Schema.GetSchemaValue<nint>(instance.Handle, typeof(TSchemaClass).Name, member))
|
||||||
where SchemaClass : NativeObject
|
where TSchemaClass : NativeObject
|
||||||
{
|
{
|
||||||
public unsafe void Set(string str)
|
public unsafe void Set(string str)
|
||||||
{
|
{
|
||||||
var bytes = SchemaString<SchemaClass>.GetStringBytes(str);
|
var bytes = GetStringBytes(str);
|
||||||
|
|
||||||
for (var i = 0; i < bytes.Length; i++)
|
for (var i = 0; i < bytes.Length; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,17 +4,14 @@ using Microsoft.Extensions.Logging;
|
|||||||
using MySqlConnector;
|
using MySqlConnector;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using static Dapper.SqlMapper;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin;
|
namespace CS2_SimpleAdmin;
|
||||||
|
|
||||||
public class AdminSQLManager(Database database)
|
public class AdminSQLManager(Database database)
|
||||||
{
|
{
|
||||||
private readonly Database _database = database;
|
|
||||||
|
|
||||||
// Unused for now
|
// Unused for now
|
||||||
//public static readonly ConcurrentDictionary<string, ConcurrentBag<string>> _adminCache = new ConcurrentDictionary<string, ConcurrentBag<string>>();
|
//public static readonly ConcurrentDictionary<string, ConcurrentBag<string>> _adminCache = new ConcurrentDictionary<string, ConcurrentBag<string>>();
|
||||||
public static readonly ConcurrentDictionary<SteamID, DateTime?> _adminCache = new();
|
public static readonly ConcurrentDictionary<SteamID, DateTime?> AdminCache = new();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
public async Task<List<(List<string>, int)>> GetAdminFlags(string steamId)
|
public async Task<List<(List<string>, int)>> GetAdminFlags(string steamId)
|
||||||
@@ -59,28 +56,24 @@ public class AdminSQLManager(Database database)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public async Task<List<(string, string, List<string>, int, DateTime?)>> GetAllPlayersFlags()
|
private async Task<List<(string, string, List<string>, int, DateTime?)>> GetAllPlayersFlags()
|
||||||
{
|
{
|
||||||
var now = DateTime.UtcNow.ToLocalTime();
|
var now = DateTime.UtcNow.ToLocalTime();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
string sql = @"
|
const string sql = """
|
||||||
SELECT sa_admins.player_steamid, sa_admins.player_name, sa_admins_flags.flag, sa_admins.immunity, sa_admins.ends
|
SELECT sa_admins.player_steamid, sa_admins.player_name, sa_admins_flags.flag, sa_admins.immunity, sa_admins.ends
|
||||||
FROM sa_admins_flags
|
FROM sa_admins_flags
|
||||||
JOIN sa_admins ON sa_admins_flags.admin_id = sa_admins.id
|
JOIN sa_admins ON sa_admins_flags.admin_id = sa_admins.id
|
||||||
WHERE (sa_admins.ends IS NULL OR sa_admins.ends > @CurrentTime)
|
WHERE (sa_admins.ends IS NULL OR sa_admins.ends > @CurrentTime)
|
||||||
AND (sa_admins.server_id IS NULL OR sa_admins.server_id = @serverid)
|
AND (sa_admins.server_id IS NULL OR sa_admins.server_id = @serverid)
|
||||||
ORDER BY sa_admins.player_steamid";
|
ORDER BY sa_admins.player_steamid
|
||||||
|
""";
|
||||||
|
|
||||||
var activeFlags = (await connection.QueryAsync(sql, new { CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId }))?.ToList();
|
var activeFlags = (await connection.QueryAsync(sql, new { CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId })).ToList();
|
||||||
|
|
||||||
if (activeFlags == null)
|
|
||||||
{
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
List<(string, string, List<string>, int, DateTime?)> filteredFlagsWithImmunity = [];
|
List<(string, string, List<string>, int, DateTime?)> filteredFlagsWithImmunity = [];
|
||||||
var currentSteamId = string.Empty;
|
var currentSteamId = string.Empty;
|
||||||
@@ -95,7 +88,7 @@ public class AdminSQLManager(Database database)
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!flagInfoDict.TryGetValue("player_steamid", out var steamIdObj) ||
|
if (!flagInfoDict.TryGetValue("player_steamid", out var steamIdObj) ||
|
||||||
!flagInfoDict.TryGetValue("player_name", out var playerNameObj) ||
|
!flagInfoDict.TryGetValue("player_name", out var playerNameObj) ||
|
||||||
!flagInfoDict.TryGetValue("flag", out var flagObj) ||
|
!flagInfoDict.TryGetValue("flag", out var flagObj) ||
|
||||||
@@ -113,11 +106,14 @@ public class AdminSQLManager(Database database)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DateTime.TryParse(endsObj.ToString(), out var parsedEnds))
|
if (ends != null)
|
||||||
{
|
{
|
||||||
ends = parsedEnds;
|
if (DateTime.TryParse(endsObj.ToString(), out var parsedEnds))
|
||||||
|
{
|
||||||
|
ends = parsedEnds;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentSteamId != steamId && !string.IsNullOrEmpty(currentSteamId))
|
if (currentSteamId != steamId && !string.IsNullOrEmpty(currentSteamId))
|
||||||
{
|
{
|
||||||
filteredFlagsWithImmunity.Add((currentSteamId, currentPlayerName, currentFlags, immunityValue, ends));
|
filteredFlagsWithImmunity.Add((currentSteamId, currentPlayerName, currentFlags, immunityValue, ends));
|
||||||
@@ -127,6 +123,7 @@ public class AdminSQLManager(Database database)
|
|||||||
currentSteamId = steamId;
|
currentSteamId = steamId;
|
||||||
currentPlayerName = playerName;
|
currentPlayerName = playerName;
|
||||||
currentFlags.Add(flag);
|
currentFlags.Add(flag);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(currentSteamId))
|
if (!string.IsNullOrEmpty(currentSteamId))
|
||||||
@@ -209,18 +206,19 @@ public class AdminSQLManager(Database database)
|
|||||||
|
|
||||||
private async Task<Dictionary<string, (List<string>, int)>> GetAllGroupsData()
|
private async Task<Dictionary<string, (List<string>, int)>> GetAllGroupsData()
|
||||||
{
|
{
|
||||||
await using MySqlConnection connection = await _database.GetConnectionAsync();
|
await using MySqlConnection connection = await database.GetConnectionAsync();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var sql = "SELECT group_id FROM sa_groups_servers WHERE server_id = @serverid";
|
var sql = "SELECT group_id FROM sa_groups_servers WHERE server_id = @serverid";
|
||||||
var groupDataSql = connection.Query<int>(sql, new { serverid = CS2_SimpleAdmin.ServerId }).ToList();
|
var groupDataSql = connection.Query<int>(sql, new { serverid = CS2_SimpleAdmin.ServerId }).ToList();
|
||||||
|
|
||||||
sql = @"
|
sql = """
|
||||||
SELECT g.group_id, sg.name AS group_name, sg.immunity, f.flag
|
SELECT g.group_id, sg.name AS group_name, sg.immunity, f.flag
|
||||||
FROM sa_groups_flags f
|
FROM sa_groups_flags f
|
||||||
JOIN sa_groups_servers g ON f.group_id = g.group_id
|
JOIN sa_groups_servers g ON f.group_id = g.group_id
|
||||||
JOIN sa_groups sg ON sg.id = g.group_id
|
JOIN sa_groups sg ON sg.id = g.group_id
|
||||||
WHERE g.server_id = @serverid";
|
WHERE g.server_id = @serverid
|
||||||
|
""";
|
||||||
|
|
||||||
var groupData = connection.Query(sql, new { serverid = CS2_SimpleAdmin.ServerId }).ToList();
|
var groupData = connection.Query(sql, new { serverid = CS2_SimpleAdmin.ServerId }).ToList();
|
||||||
|
|
||||||
@@ -350,9 +348,9 @@ public class AdminSQLManager(Database database)
|
|||||||
steamId = id;
|
steamId = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (steamId != null && !_adminCache.ContainsKey(steamId))
|
if (steamId != null && !AdminCache.ContainsKey(steamId))
|
||||||
{
|
{
|
||||||
_adminCache.TryAdd(steamId, player.ends);
|
AdminCache.TryAdd(steamId, player.ends);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new
|
return new
|
||||||
@@ -381,10 +379,11 @@ public class AdminSQLManager(Database database)
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
var sql = "";
|
var sql = globalDelete
|
||||||
sql = globalDelete ? "DELETE FROM sa_admins WHERE player_steamid = @PlayerSteamID" : "DELETE FROM sa_admins WHERE player_steamid = @PlayerSteamID AND server_id = @ServerId";
|
? "DELETE FROM sa_admins WHERE player_steamid = @PlayerSteamID"
|
||||||
|
: "DELETE FROM sa_admins WHERE player_steamid = @PlayerSteamID AND server_id = @ServerId";
|
||||||
|
|
||||||
await connection.ExecuteAsync(sql, new { PlayerSteamID = playerSteamId, CS2_SimpleAdmin.ServerId });
|
await connection.ExecuteAsync(sql, new { PlayerSteamID = playerSteamId, CS2_SimpleAdmin.ServerId });
|
||||||
}
|
}
|
||||||
@@ -405,7 +404,7 @@ public class AdminSQLManager(Database database)
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
// Insert admin into sa_admins table
|
// Insert admin into sa_admins table
|
||||||
const string insertAdminSql = "INSERT INTO `sa_admins` (`player_steamid`, `player_name`, `immunity`, `ends`, `created`, `server_id`) " +
|
const string insertAdminSql = "INSERT INTO `sa_admins` (`player_steamid`, `player_name`, `immunity`, `ends`, `created`, `server_id`) " +
|
||||||
@@ -460,7 +459,7 @@ public class AdminSQLManager(Database database)
|
|||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(groupName) || flagsList.Count == 0) return;
|
if (string.IsNullOrEmpty(groupName) || flagsList.Count == 0) return;
|
||||||
|
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Insert group into sa_groups table
|
// Insert group into sa_groups table
|
||||||
@@ -502,7 +501,7 @@ public class AdminSQLManager(Database database)
|
|||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(groupName)) return;
|
if (string.IsNullOrEmpty(groupName)) return;
|
||||||
|
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
const string sql = "DELETE FROM `sa_groups` WHERE name = @groupName";
|
const string sql = "DELETE FROM `sa_groups` WHERE name = @groupName";
|
||||||
@@ -518,7 +517,7 @@ public class AdminSQLManager(Database database)
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
const string sql = "DELETE FROM sa_admins WHERE ends IS NOT NULL AND ends <= @CurrentTime";
|
const string sql = "DELETE FROM sa_admins WHERE ends IS NOT NULL AND ends <= @CurrentTime";
|
||||||
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now.ToLocalTime() });
|
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now.ToLocalTime() });
|
||||||
|
|||||||
@@ -7,27 +7,23 @@ namespace CS2_SimpleAdmin;
|
|||||||
|
|
||||||
internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
||||||
{
|
{
|
||||||
private readonly Database _database = database;
|
|
||||||
private readonly CS2_SimpleAdminConfig _config = config;
|
|
||||||
|
|
||||||
public async Task BanPlayer(PlayerInfo player, PlayerInfo issuer, string reason, int time = 0)
|
public async Task BanPlayer(PlayerInfo player, PlayerInfo issuer, string reason, int time = 0)
|
||||||
{
|
{
|
||||||
DateTime now = DateTime.UtcNow.ToLocalTime();
|
DateTime now = DateTime.UtcNow.ToLocalTime();
|
||||||
DateTime futureTime = now.AddMinutes(time).ToLocalTime();
|
DateTime futureTime = now.AddMinutes(time).ToLocalTime();
|
||||||
|
|
||||||
|
await using MySqlConnection connection = await database.GetConnectionAsync();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using MySqlConnection connection = await _database.GetConnectionAsync();
|
const string sql =
|
||||||
|
|
||||||
var sql =
|
|
||||||
"INSERT INTO `sa_bans` (`player_steamid`, `player_name`, `player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
"INSERT INTO `sa_bans` (`player_steamid`, `player_name`, `player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
||||||
"VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
"VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
||||||
|
|
||||||
await connection.ExecuteAsync(sql, new
|
await connection.ExecuteAsync(sql, new
|
||||||
{
|
{
|
||||||
playerSteamid = player.SteamId,
|
playerSteamid = player.SteamId,
|
||||||
playerName = player.Name,
|
playerName = player.Name,
|
||||||
playerIp = _config.BanType == 1 ? player.IpAddress : null,
|
playerIp = config.BanType == 1 ? player.IpAddress : null,
|
||||||
adminSteamid = issuer.SteamId ?? "Console",
|
adminSteamid = issuer.SteamId ?? "Console",
|
||||||
adminName = issuer.Name ?? "Console",
|
adminName = issuer.Name ?? "Console",
|
||||||
banReason = reason,
|
banReason = reason,
|
||||||
@@ -49,7 +45,7 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using MySqlConnection connection = await _database.GetConnectionAsync();
|
await using MySqlConnection connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
var sql = "INSERT INTO `sa_bans` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
var sql = "INSERT INTO `sa_bans` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
||||||
"VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
"VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
||||||
@@ -78,7 +74,7 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using MySqlConnection connection = await _database.GetConnectionAsync();
|
await using MySqlConnection connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
var sql = "INSERT INTO `sa_bans` (`player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
var sql = "INSERT INTO `sa_bans` (`player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
||||||
"VALUES (@playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
"VALUES (@playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
||||||
@@ -110,28 +106,25 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
|||||||
CS2_SimpleAdmin._logger.LogCritical($"IsPlayerBanned for {player.Name}");
|
CS2_SimpleAdmin._logger.LogCritical($"IsPlayerBanned for {player.Name}");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int banCount = 0;
|
int banCount;
|
||||||
|
|
||||||
DateTime currentTime = DateTime.Now.ToLocalTime();
|
DateTime currentTime = DateTime.Now.ToLocalTime();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var sql = "";
|
var sql = config.MultiServerMode ? """
|
||||||
|
UPDATE sa_bans
|
||||||
sql = _config.MultiServerMode ? """
|
SET player_ip = CASE WHEN player_ip IS NULL THEN @PlayerIP ELSE player_ip END,
|
||||||
|
player_name = CASE WHEN player_name IS NULL THEN @PlayerName ELSE player_name END
|
||||||
UPDATE sa_bans
|
WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
||||||
SET player_ip = CASE WHEN player_ip IS NULL THEN @PlayerIP ELSE player_ip END,
|
AND status = 'ACTIVE'
|
||||||
player_name = CASE WHEN player_name IS NULL THEN @PlayerName ELSE player_name END
|
AND (duration = 0 OR ends > @CurrentTime);
|
||||||
WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
|
||||||
AND status = 'ACTIVE'
|
SELECT COUNT(*) FROM sa_bans
|
||||||
AND (duration = 0 OR ends > @CurrentTime);
|
WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
||||||
|
AND status = 'ACTIVE'
|
||||||
SELECT COUNT(*) FROM sa_bans
|
AND (duration = 0 OR ends > @CurrentTime);
|
||||||
WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
""" : @"
|
||||||
AND status = 'ACTIVE'
|
|
||||||
AND (duration = 0 OR ends > @CurrentTime);
|
|
||||||
""" : @"
|
|
||||||
UPDATE sa_bans
|
UPDATE sa_bans
|
||||||
SET player_ip = CASE WHEN player_ip IS NULL THEN @PlayerIP ELSE player_ip END,
|
SET player_ip = CASE WHEN player_ip IS NULL THEN @PlayerIP ELSE player_ip END,
|
||||||
player_name = CASE WHEN player_name IS NULL THEN @PlayerName ELSE player_name END
|
player_name = CASE WHEN player_name IS NULL THEN @PlayerName ELSE player_name END
|
||||||
@@ -144,12 +137,12 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
|||||||
AND status = 'ACTIVE'
|
AND status = 'ACTIVE'
|
||||||
AND (duration = 0 OR ends > @CurrentTime) AND server_id = @serverid;";
|
AND (duration = 0 OR ends > @CurrentTime) AND server_id = @serverid;";
|
||||||
|
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
var parameters = new
|
var parameters = new
|
||||||
{
|
{
|
||||||
PlayerSteamID = player.SteamId,
|
PlayerSteamID = player.SteamId,
|
||||||
PlayerIP = _config.BanType == 0 || string.IsNullOrEmpty(player.IpAddress) ? null : player.IpAddress,
|
PlayerIP = config.BanType == 0 || string.IsNullOrEmpty(player.IpAddress) ? null : player.IpAddress,
|
||||||
PlayerName = !string.IsNullOrEmpty(player.Name) ? player.Name : string.Empty,
|
PlayerName = !string.IsNullOrEmpty(player.Name) ? player.Name : string.Empty,
|
||||||
CurrentTime = currentTime,
|
CurrentTime = currentTime,
|
||||||
serverid = CS2_SimpleAdmin.ServerId
|
serverid = CS2_SimpleAdmin.ServerId
|
||||||
@@ -171,13 +164,13 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
|||||||
{
|
{
|
||||||
var sql = "";
|
var sql = "";
|
||||||
|
|
||||||
sql = _config.MultiServerMode
|
sql = config.MultiServerMode
|
||||||
? "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) AND server_id = @serverid"
|
? "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) AND server_id = @serverid"
|
||||||
: "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)";
|
: "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)";
|
||||||
|
|
||||||
int banCount;
|
int banCount;
|
||||||
|
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(player.IpAddress))
|
if (!string.IsNullOrEmpty(player.IpAddress))
|
||||||
{
|
{
|
||||||
@@ -211,10 +204,10 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
|||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
var sqlRetrieveBans = "";
|
string sqlRetrieveBans;
|
||||||
if (_config.MultiServerMode)
|
if (config.MultiServerMode)
|
||||||
{
|
{
|
||||||
sqlRetrieveBans = "SELECT id FROM sa_bans WHERE (player_steamid = @pattern OR player_name = @pattern OR player_ip = @pattern) AND status = 'ACTIVE' " +
|
sqlRetrieveBans = "SELECT id FROM sa_bans WHERE (player_steamid = @pattern OR player_name = @pattern OR player_ip = @pattern) AND status = 'ACTIVE' " +
|
||||||
"AND server_id = @serverid";
|
"AND server_id = @serverid";
|
||||||
@@ -226,7 +219,7 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
|||||||
var bans = await connection.QueryAsync(sqlRetrieveBans, new { pattern = playerPattern, serverid = CS2_SimpleAdmin.ServerId });
|
var bans = await connection.QueryAsync(sqlRetrieveBans, new { pattern = playerPattern, serverid = CS2_SimpleAdmin.ServerId });
|
||||||
|
|
||||||
var bansList = bans as dynamic[] ?? bans.ToArray();
|
var bansList = bans as dynamic[] ?? bans.ToArray();
|
||||||
if (!bansList.Any())
|
if (bansList.Length == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const string sqlAdmin = "SELECT id FROM sa_admins WHERE player_steamid = @adminSteamId";
|
const string sqlAdmin = "SELECT id FROM sa_admins WHERE player_steamid = @adminSteamId";
|
||||||
@@ -269,10 +262,10 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
var sql = "";
|
string sql;
|
||||||
|
|
||||||
if (_config.MultiServerMode)
|
if (config.MultiServerMode)
|
||||||
{
|
{
|
||||||
sql = "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) AND status = 'ACTIVE' AND" +
|
sql = "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP) AND status = 'ACTIVE' AND" +
|
||||||
" server_id = @serverid";
|
" server_id = @serverid";
|
||||||
@@ -314,7 +307,7 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
|||||||
{
|
{
|
||||||
var currentTime = DateTime.UtcNow.ToLocalTime();
|
var currentTime = DateTime.UtcNow.ToLocalTime();
|
||||||
|
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -327,7 +320,7 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
|||||||
|
|
||||||
var sql = "";
|
var sql = "";
|
||||||
|
|
||||||
sql = _config.MultiServerMode ? """
|
sql = config.MultiServerMode ? """
|
||||||
|
|
||||||
UPDATE sa_bans
|
UPDATE sa_bans
|
||||||
SET
|
SET
|
||||||
@@ -354,10 +347,10 @@ internal class BanManager(Database database, CS2_SimpleAdminConfig config)
|
|||||||
|
|
||||||
await connection.ExecuteAsync(sql, new { currentTime, serverid = CS2_SimpleAdmin.ServerId });
|
await connection.ExecuteAsync(sql, new { currentTime, serverid = CS2_SimpleAdmin.ServerId });
|
||||||
|
|
||||||
if (_config.ExpireOldIpBans > 0)
|
if (config.ExpireOldIpBans > 0)
|
||||||
{
|
{
|
||||||
var ipBansTime = currentTime.AddDays(-_config.ExpireOldIpBans).ToLocalTime();
|
var ipBansTime = currentTime.AddDays(-config.ExpireOldIpBans).ToLocalTime();
|
||||||
sql = _config.MultiServerMode ? """
|
sql = config.MultiServerMode ? """
|
||||||
|
|
||||||
UPDATE sa_bans
|
UPDATE sa_bans
|
||||||
SET
|
SET
|
||||||
|
|||||||
@@ -1,18 +1,14 @@
|
|||||||
using Dapper;
|
using Dapper;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using MySqlConnector;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin;
|
namespace CS2_SimpleAdmin;
|
||||||
|
|
||||||
internal class MuteManager(Database database)
|
internal class MuteManager(Database database)
|
||||||
{
|
{
|
||||||
private readonly Database _database = database;
|
|
||||||
|
|
||||||
public async Task MutePlayer(PlayerInfo player, PlayerInfo issuer, string reason, int time = 0, int type = 0)
|
public async Task MutePlayer(PlayerInfo player, PlayerInfo issuer, string reason, int time = 0, int type = 0)
|
||||||
{
|
{
|
||||||
if (player.SteamId == null) return;
|
if (player.SteamId == null) return;
|
||||||
|
|
||||||
|
|
||||||
var now = DateTime.UtcNow.ToLocalTime();
|
var now = DateTime.UtcNow.ToLocalTime();
|
||||||
var futureTime = now.AddMinutes(time).ToLocalTime();
|
var futureTime = now.AddMinutes(time).ToLocalTime();
|
||||||
|
|
||||||
@@ -25,7 +21,7 @@ internal class MuteManager(Database database)
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
const string sql =
|
const string sql =
|
||||||
"INSERT INTO `sa_mutes` (`player_steamid`, `player_name`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
|
"INSERT INTO `sa_mutes` (`player_steamid`, `player_name`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
|
||||||
"VALUES (@playerSteamid, @playerName, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
"VALUES (@playerSteamid, @playerName, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
||||||
@@ -64,7 +60,7 @@ internal class MuteManager(Database database)
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
const string sql = "INSERT INTO `sa_mutes` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
|
const string sql = "INSERT INTO `sa_mutes` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
|
||||||
"VALUES (@playerSteamid, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
"VALUES (@playerSteamid, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
||||||
|
|
||||||
@@ -98,9 +94,9 @@ internal class MuteManager(Database database)
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
var currentTime = DateTime.Now.ToLocalTime();
|
var currentTime = DateTime.Now.ToLocalTime();
|
||||||
var sql = "";
|
string sql;
|
||||||
|
|
||||||
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
||||||
{
|
{
|
||||||
@@ -126,11 +122,9 @@ internal class MuteManager(Database database)
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
var sql = "";
|
var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode
|
||||||
|
|
||||||
sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode
|
|
||||||
? "SELECT COUNT(*) FROM sa_mutes WHERE player_steamid = @PlayerSteamID AND server_id = @serverid"
|
? "SELECT COUNT(*) FROM sa_mutes WHERE player_steamid = @PlayerSteamID AND server_id = @serverid"
|
||||||
: "SELECT COUNT(*) FROM sa_mutes WHERE player_steamid = @PlayerSteamID";
|
: "SELECT COUNT(*) FROM sa_mutes WHERE player_steamid = @PlayerSteamID";
|
||||||
|
|
||||||
@@ -152,7 +146,7 @@ internal class MuteManager(Database database)
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
var muteType = type switch
|
var muteType = type switch
|
||||||
{
|
{
|
||||||
@@ -161,7 +155,7 @@ internal class MuteManager(Database database)
|
|||||||
_ => "GAG"
|
_ => "GAG"
|
||||||
};
|
};
|
||||||
|
|
||||||
var sqlRetrieveMutes = "";
|
string sqlRetrieveMutes;
|
||||||
|
|
||||||
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
||||||
{
|
{
|
||||||
@@ -217,10 +211,9 @@ internal class MuteManager(Database database)
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
var sql = "";
|
var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode
|
||||||
sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode
|
|
||||||
? "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime AND server_id = @serverid"
|
? "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime AND server_id = @serverid"
|
||||||
: "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime";
|
: "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime";
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public enum PenaltyType
|
|||||||
public class PlayerPenaltyManager
|
public class PlayerPenaltyManager
|
||||||
{
|
{
|
||||||
private static readonly ConcurrentDictionary<int, Dictionary<PenaltyType, List<(DateTime EndDateTime, int Duration)>>> Penalties =
|
private static readonly ConcurrentDictionary<int, Dictionary<PenaltyType, List<(DateTime EndDateTime, int Duration)>>> Penalties =
|
||||||
new ConcurrentDictionary<int, Dictionary<PenaltyType, List<(DateTime, int)>>>();
|
new();
|
||||||
|
|
||||||
// Add a penalty for a player
|
// Add a penalty for a player
|
||||||
public static void AddPenalty(int slot, PenaltyType penaltyType, DateTime endDateTime, int durationSeconds)
|
public static void AddPenalty(int slot, PenaltyType penaltyType, DateTime endDateTime, int durationSeconds)
|
||||||
|
|||||||
@@ -13,49 +13,53 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
public static void OpenMenu(CCSPlayerController player, BaseMenu menu)
|
public static void OpenMenu(CCSPlayerController player, BaseMenu menu)
|
||||||
{
|
{
|
||||||
if (menu is CenterHtmlMenu centerHtmlMenu)
|
switch (menu)
|
||||||
{
|
{
|
||||||
MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, player, centerHtmlMenu);
|
case CenterHtmlMenu centerHtmlMenu:
|
||||||
}
|
MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, player, centerHtmlMenu);
|
||||||
else if (menu is ChatMenu chatMenu)
|
break;
|
||||||
{
|
case ChatMenu chatMenu:
|
||||||
MenuManager.OpenChatMenu(player, chatMenu);
|
MenuManager.OpenChatMenu(player, chatMenu);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void OpenMenu(CCSPlayerController admin)
|
public static void OpenMenu(CCSPlayerController admin)
|
||||||
{
|
{
|
||||||
if (admin == null || admin.IsValid == false)
|
if (admin.IsValid == false)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
var localizer = CS2_SimpleAdmin._localizer;
|
||||||
if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false)
|
if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false)
|
||||||
{
|
{
|
||||||
// TODO: Localize
|
admin.PrintToChat(localizer?["sa_prefix"] ??
|
||||||
admin.PrintToChat("[Simple Admin] You do not have permissions to use this command.");
|
"[SimpleAdmin] " +
|
||||||
|
(localizer?["sa_no_permission"] ?? "You do not have permissions to use this command")
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseMenu menu = CreateMenu("Simple Admin");
|
var menu = CreateMenu(localizer?["sa_title"] ?? "SimpleAdmin");
|
||||||
List<ChatMenuOptionData> options =
|
List<ChatMenuOptionData> options =
|
||||||
[
|
[
|
||||||
new ChatMenuOptionData("Manage Players", () => ManagePlayersMenu.OpenMenu(admin)),
|
new ChatMenuOptionData(localizer?["sa_menu_players_manage"] ?? "Players Manage", () => ManagePlayersMenu.OpenMenu(admin)),
|
||||||
new ChatMenuOptionData("Manage Server", () => ManageServerMenu.OpenMenu(admin)),
|
new ChatMenuOptionData(localizer?["sa_menu_server_manage"] ?? "Server Manage", () => ManageServerMenu.OpenMenu(admin)),
|
||||||
new ChatMenuOptionData("Fun actions", () => FunActionsMenu.OpenMenu(admin)),
|
new ChatMenuOptionData(localizer?["sa_menu_fun_commands"] ?? "Fun Commands", () => FunActionsMenu.OpenMenu(admin)),
|
||||||
];
|
];
|
||||||
|
|
||||||
List<CustomServerCommandData> customCommands = CS2_SimpleAdmin.Instance.Config.CustomServerCommands;
|
var customCommands = CS2_SimpleAdmin.Instance.Config.CustomServerCommands;
|
||||||
if (customCommands.Count > 0)
|
if (customCommands.Count > 0)
|
||||||
{
|
{
|
||||||
options.Add(new ChatMenuOptionData("Custom Commands", () => CustomCommandsMenu.OpenMenu(admin)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_menu_custom_commands"] ?? "Custom Commands", () => CustomCommandsMenu.OpenMenu(admin)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AdminManager.PlayerHasPermissions(admin, "@css/root"))
|
if (AdminManager.PlayerHasPermissions(admin, "@css/root"))
|
||||||
options.Add(new ChatMenuOptionData("Manage Admins", () => ManageAdminsMenu.OpenMenu(admin)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_menu_admins_manage"] ?? "Admins Manage", () => ManageAdminsMenu.OpenMenu(admin)));
|
||||||
|
|
||||||
foreach (ChatMenuOptionData menuOptionData in options)
|
foreach (var menuOptionData in options)
|
||||||
{
|
{
|
||||||
string menuName = menuOptionData.name;
|
var menuName = menuOptionData.Name;
|
||||||
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled);
|
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenMenu(admin, menu);
|
OpenMenu(admin, menu);
|
||||||
|
|||||||
@@ -1,23 +1,9 @@
|
|||||||
namespace CS2_SimpleAdmin.Menus
|
namespace CS2_SimpleAdmin.Menus
|
||||||
{
|
{
|
||||||
public class ChatMenuOptionData
|
public class ChatMenuOptionData(string name, Action action, bool disabled = false)
|
||||||
{
|
{
|
||||||
public string name;
|
public readonly string Name = name;
|
||||||
public Action action;
|
public readonly Action Action = action;
|
||||||
public bool disabled = true;
|
public readonly bool Disabled = disabled;
|
||||||
|
|
||||||
public ChatMenuOptionData(string name, Action action)
|
|
||||||
{
|
|
||||||
this.name = name;
|
|
||||||
this.action = action;
|
|
||||||
this.disabled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChatMenuOptionData(string name, Action action, bool disabled)
|
|
||||||
{
|
|
||||||
this.name = name;
|
|
||||||
this.action = action;
|
|
||||||
this.disabled = disabled;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Menu;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin.Menus
|
namespace CS2_SimpleAdmin.Menus
|
||||||
{
|
{
|
||||||
@@ -12,27 +11,25 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
if (admin == null || admin.IsValid == false)
|
if (admin == null || admin.IsValid == false)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
var localizer = CS2_SimpleAdmin._localizer;
|
||||||
if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false)
|
if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false)
|
||||||
{
|
{
|
||||||
// TODO: Localize
|
admin.PrintToChat(localizer?["sa_prefix"] ??
|
||||||
admin.PrintToChat("[Simple Admin] You do not have permissions to use this command.");
|
"[SimpleAdmin] " +
|
||||||
|
(localizer?["sa_no_permission"] ?? "You do not have permissions to use this command")
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseMenu menu = AdminMenu.CreateMenu("Custom Commands");
|
var menu = AdminMenu.CreateMenu(localizer?["sa_menu_custom_commands"] ?? "Custom Commands");
|
||||||
List<ChatMenuOptionData> options = new();
|
List<ChatMenuOptionData> options = [];
|
||||||
|
|
||||||
List<CustomServerCommandData> customCommands = CS2_SimpleAdmin.Instance.Config.CustomServerCommands;
|
var customCommands = CS2_SimpleAdmin.Instance.Config.CustomServerCommands;
|
||||||
foreach (CustomServerCommandData customCommand in customCommands)
|
options.AddRange(from customCommand in customCommands
|
||||||
{
|
where !string.IsNullOrEmpty(customCommand.DisplayName) && !string.IsNullOrEmpty(customCommand.Command)
|
||||||
if (string.IsNullOrEmpty(customCommand.DisplayName) || string.IsNullOrEmpty(customCommand.Command))
|
let hasRights = AdminManager.PlayerHasPermissions(admin, customCommand.Flag)
|
||||||
continue;
|
where hasRights
|
||||||
|
select new ChatMenuOptionData(customCommand.DisplayName, () =>
|
||||||
bool hasRights = AdminManager.PlayerHasPermissions(admin, customCommand.Flag);
|
|
||||||
if (!hasRights)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
options.Add(new ChatMenuOptionData(customCommand.DisplayName, () =>
|
|
||||||
{
|
{
|
||||||
Helper.TryLogCommandOnDiscord(admin, customCommand.Command);
|
Helper.TryLogCommandOnDiscord(admin, customCommand.Command);
|
||||||
|
|
||||||
@@ -41,12 +38,11 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
else
|
else
|
||||||
Server.ExecuteCommand(customCommand.Command);
|
Server.ExecuteCommand(customCommand.Command);
|
||||||
}));
|
}));
|
||||||
}
|
|
||||||
|
|
||||||
foreach (ChatMenuOptionData menuOptionData in options)
|
foreach (var menuOptionData in options)
|
||||||
{
|
{
|
||||||
string menuName = menuOptionData.name;
|
var menuName = menuOptionData.Name;
|
||||||
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled);
|
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action(); }, menuOptionData.Disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
|
|||||||
@@ -1,29 +1,16 @@
|
|||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Menu;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin.Menus
|
namespace CS2_SimpleAdmin.Menus
|
||||||
{
|
{
|
||||||
public static class DurationMenu
|
public static class DurationMenu
|
||||||
{
|
{
|
||||||
// TODO: Localize
|
|
||||||
public static Tuple<string, int>[] _durations = new[]
|
|
||||||
{
|
|
||||||
new Tuple<string, int>("1 minute", 1),
|
|
||||||
new Tuple<string, int>("5 minutes", 5),
|
|
||||||
new Tuple<string, int>("15 minutes", 15),
|
|
||||||
new Tuple<string, int>("1 hour", 60),
|
|
||||||
new Tuple<string, int>("1 day", 60 * 24),
|
|
||||||
new Tuple<string, int>("Permanent", 0)
|
|
||||||
};
|
|
||||||
|
|
||||||
public static void OpenMenu(CCSPlayerController admin, string menuName, CCSPlayerController? player, Action<CCSPlayerController, CCSPlayerController?, int> onSelectAction)
|
public static void OpenMenu(CCSPlayerController admin, string menuName, CCSPlayerController? player, Action<CCSPlayerController, CCSPlayerController?, int> onSelectAction)
|
||||||
{
|
{
|
||||||
BaseMenu menu = AdminMenu.CreateMenu(menuName);
|
var menu = AdminMenu.CreateMenu(menuName);
|
||||||
|
|
||||||
foreach (Tuple<string, int> duration in _durations)
|
foreach (var durationItem in CS2_SimpleAdmin.Instance.Config.MenuConfigs.Durations)
|
||||||
{
|
{
|
||||||
string optionName = duration.Item1;
|
menu.AddMenuOption(durationItem.Name, (_, _) => { onSelectAction(admin, player, durationItem.Duration); });
|
||||||
menu.AddMenuOption(optionName, (_, _) => { onSelectAction?.Invoke(admin, player, duration.Item2); });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
|
|||||||
@@ -1,31 +1,29 @@
|
|||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||||
using CounterStrikeSharp.API.Modules.Menu;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin.Menus
|
namespace CS2_SimpleAdmin.Menus
|
||||||
{
|
{
|
||||||
public static class FunActionsMenu
|
public static class FunActionsMenu
|
||||||
{
|
{
|
||||||
private static Dictionary<int, CsItem>? _weaponsCache = null;
|
private static Dictionary<int, CsItem>? _weaponsCache;
|
||||||
|
|
||||||
private static Dictionary<int, CsItem> GetWeaponsCache
|
private static Dictionary<int, CsItem> GetWeaponsCache
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (_weaponsCache == null)
|
if (_weaponsCache != null) return _weaponsCache;
|
||||||
|
|
||||||
|
var weaponsArray = Enum.GetValues(typeof(CsItem));
|
||||||
|
|
||||||
|
// avoid duplicates in the menu
|
||||||
|
_weaponsCache = new Dictionary<int, CsItem>();
|
||||||
|
foreach (CsItem item in weaponsArray)
|
||||||
{
|
{
|
||||||
var weaponsArray = Enum.GetValues(typeof(CsItem));
|
if (item == CsItem.Tablet)
|
||||||
|
continue;
|
||||||
|
|
||||||
// avoid duplicates in the menu
|
_weaponsCache[(int)item] = item;
|
||||||
_weaponsCache = new();
|
|
||||||
foreach (CsItem item in weaponsArray)
|
|
||||||
{
|
|
||||||
if (item == CsItem.Tablet)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
_weaponsCache[(int)item] = item;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return _weaponsCache;
|
return _weaponsCache;
|
||||||
@@ -34,48 +32,50 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
public static void OpenMenu(CCSPlayerController admin)
|
public static void OpenMenu(CCSPlayerController admin)
|
||||||
{
|
{
|
||||||
if (admin == null || admin.IsValid == false)
|
if (admin.IsValid == false)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
var localizer = CS2_SimpleAdmin._localizer;
|
||||||
if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false)
|
if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false)
|
||||||
{
|
{
|
||||||
// TODO: Localize
|
admin.PrintToChat(localizer?["sa_prefix"] ??
|
||||||
admin.PrintToChat("[Simple Admin] You do not have permissions to use this command.");
|
"[SimpleAdmin] " +
|
||||||
|
(localizer?["sa_no_permission"] ?? "You do not have permissions to use this command")
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var menu = AdminMenu.CreateMenu("Fun Actions");
|
var menu = AdminMenu.CreateMenu(localizer?["sa_menu_fun_commands"] ?? "Fun Commands");
|
||||||
List<ChatMenuOptionData> options = new();
|
List<ChatMenuOptionData> options = [];
|
||||||
|
|
||||||
// permissions
|
// permissions
|
||||||
var hasCheats = AdminManager.PlayerHasPermissions(admin, "@css/cheats");
|
var hasCheats = AdminManager.PlayerHasPermissions(admin, "@css/cheats");
|
||||||
var hasSlay = AdminManager.PlayerHasPermissions(admin, "@css/slay");
|
var hasSlay = AdminManager.PlayerHasPermissions(admin, "@css/slay");
|
||||||
|
|
||||||
// TODO: Localize options
|
|
||||||
// options added in order
|
// options added in order
|
||||||
|
|
||||||
if (hasCheats)
|
if (hasCheats)
|
||||||
{
|
{
|
||||||
options.Add(new ChatMenuOptionData("God Mode", () => PlayersMenu.OpenAliveMenu(admin, "God Mode", GodMode)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_godmode"] ?? "God Mode", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_godmode"] ?? "God Mode", GodMode)));
|
||||||
options.Add(new ChatMenuOptionData("No Clip", () => PlayersMenu.OpenAliveMenu(admin, "No Clip", NoClip)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_noclip"] ?? "No Clip", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_noclip"] ?? "No Clip", NoClip)));
|
||||||
options.Add(new ChatMenuOptionData("Respawn", () => PlayersMenu.OpenDeadMenu(admin, "Respawn", Respawn)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_respawn"] ?? "Respawn", () => PlayersMenu.OpenDeadMenu(admin, localizer?["sa_respawn"] ?? "Respawn", Respawn)));
|
||||||
options.Add(new ChatMenuOptionData("Give Weapon", () => PlayersMenu.OpenAliveMenu(admin, "Give Weapon", GiveWeaponMenu)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_give_weapon"] ?? "Give Weapon", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_give_weapon"] ?? "Give Weapon", GiveWeaponMenu)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasSlay)
|
if (hasSlay)
|
||||||
{
|
{
|
||||||
options.Add(new ChatMenuOptionData("Strip All Weapons", () => PlayersMenu.OpenAliveMenu(admin, "Strip All Weapons", StripWeapons)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_strip_weapons"] ?? "Strip Weapons", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_strip_weapons"] ?? "Strip Weapons", StripWeapons)));
|
||||||
options.Add(new ChatMenuOptionData("Freeze", () => PlayersMenu.OpenAliveMenu(admin, "Freeze", Freeze)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_freeze"] ?? "Freeze", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_freeze"] ?? "Freeze", Freeze)));
|
||||||
options.Add(new ChatMenuOptionData("HP", () => PlayersMenu.OpenAliveMenu(admin, "HP", SetHpMenu)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_set_hp"] ?? "Set Hp", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_set_hp"] ?? "Set Hp", SetHpMenu)));
|
||||||
options.Add(new ChatMenuOptionData("Speed", () => PlayersMenu.OpenAliveMenu(admin, "Speed", SetSpeedMenu)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_set_speed"] ?? "Set Speed", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_set_speed"] ?? "Set Speed", SetSpeedMenu)));
|
||||||
options.Add(new ChatMenuOptionData("Gravity", () => PlayersMenu.OpenAliveMenu(admin, "Gravity", SetGravityMenu)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_set_gravity"] ?? "Set Gravity", () => PlayersMenu.OpenAliveMenu(admin, localizer?["sa_set_gravity"] ?? "Set Gravity", SetGravityMenu)));
|
||||||
options.Add(new ChatMenuOptionData("Set Money", () => PlayersMenu.OpenMenu(admin, "Set Money", SetMoneyMenu)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_set_money"] ?? "Set Money", () => PlayersMenu.OpenMenu(admin, localizer?["sa_set_money"] ?? "Set Money", SetMoneyMenu)));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var menuOptionData in options)
|
foreach (var menuOptionData in options)
|
||||||
{
|
{
|
||||||
var menuName = menuOptionData.name;
|
var menuName = menuOptionData.Name;
|
||||||
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled);
|
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action(); }, menuOptionData.Disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
@@ -98,7 +98,7 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
private static void GiveWeaponMenu(CCSPlayerController admin, CCSPlayerController player)
|
private static void GiveWeaponMenu(CCSPlayerController admin, CCSPlayerController player)
|
||||||
{
|
{
|
||||||
var menu = AdminMenu.CreateMenu($"Give Weapon: {player.PlayerName}");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_give_weapon"] ?? "Give Weapon"}: {player.PlayerName}");
|
||||||
|
|
||||||
foreach (var weapon in GetWeaponsCache)
|
foreach (var weapon in GetWeaponsCache)
|
||||||
{
|
{
|
||||||
@@ -120,7 +120,7 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
private static void Freeze(CCSPlayerController admin, CCSPlayerController? player)
|
private static void Freeze(CCSPlayerController admin, CCSPlayerController? player)
|
||||||
{
|
{
|
||||||
if (!(player?.PlayerPawn?.Value?.IsValid ?? false))
|
if (!(player?.PlayerPawn.Value?.IsValid ?? false))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (player.PlayerPawn.Value.MoveType != MoveType_t.MOVETYPE_OBSOLETE)
|
if (player.PlayerPawn.Value.MoveType != MoveType_t.MOVETYPE_OBSOLETE)
|
||||||
@@ -143,18 +143,17 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
new Tuple<string, int>("999", 999)
|
new Tuple<string, int>("999", 999)
|
||||||
};
|
};
|
||||||
|
|
||||||
var menu = AdminMenu.CreateMenu($"Set HP: {player?.PlayerName}");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_set_hp"] ?? "Set Hp"}: {player?.PlayerName}");
|
||||||
|
|
||||||
foreach (var hpTuple in hpArray)
|
foreach (var (optionName, value) in hpArray)
|
||||||
{
|
{
|
||||||
var optionName = hpTuple.Item1;
|
menu.AddMenuOption(optionName, (_, _) => { SetHp(admin, player, value); });
|
||||||
menu.AddMenuOption(optionName, (_, _) => { SetHP(admin, player, hpTuple.Item2); });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SetHP(CCSPlayerController admin, CCSPlayerController? player, int hp)
|
private static void SetHp(CCSPlayerController admin, CCSPlayerController? player, int hp)
|
||||||
{
|
{
|
||||||
CS2_SimpleAdmin.Instance.SetHp(admin, player, hp);
|
CS2_SimpleAdmin.Instance.SetHp(admin, player, hp);
|
||||||
}
|
}
|
||||||
@@ -173,12 +172,11 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
new Tuple<string, float>("4", 4)
|
new Tuple<string, float>("4", 4)
|
||||||
};
|
};
|
||||||
|
|
||||||
var menu = AdminMenu.CreateMenu($"Set Speed: {player?.PlayerName}");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_set_speed"] ?? "Set Speed"}: {player?.PlayerName}");
|
||||||
|
|
||||||
foreach (var speedTuple in speedArray)
|
foreach (var (optionName, value) in speedArray)
|
||||||
{
|
{
|
||||||
var optionName = speedTuple.Item1;
|
menu.AddMenuOption(optionName, (_, _) => { SetSpeed(admin, player, value); });
|
||||||
menu.AddMenuOption(optionName, (_, _) => { SetSpeed(admin, player, speedTuple.Item2); });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
@@ -201,12 +199,11 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
new Tuple<string, float>("2", 2)
|
new Tuple<string, float>("2", 2)
|
||||||
};
|
};
|
||||||
|
|
||||||
var menu = AdminMenu.CreateMenu($"Set Gravity: {player?.PlayerName}");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_set_gravity"] ?? "Set Gravity"}: {player?.PlayerName}");
|
||||||
|
|
||||||
foreach (var gravityTuple in gravityArray)
|
foreach (var (optionName, value) in gravityArray)
|
||||||
{
|
{
|
||||||
var optionName = gravityTuple.Item1;
|
menu.AddMenuOption(optionName, (_, _) => { SetGravity(admin, player, value); });
|
||||||
menu.AddMenuOption(optionName, (_, _) => { SetGravity(admin, player, gravityTuple.Item2); });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
@@ -229,12 +226,11 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
new Tuple<string, int>("$16000", 16000)
|
new Tuple<string, int>("$16000", 16000)
|
||||||
};
|
};
|
||||||
|
|
||||||
var menu = AdminMenu.CreateMenu($"Set Money: {player?.PlayerName}");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_set_money"] ?? "Set Money"}: {player?.PlayerName}");
|
||||||
|
|
||||||
foreach (var moneyTuple in moneyArray)
|
foreach (var (optionName, value) in moneyArray)
|
||||||
{
|
{
|
||||||
var optionName = moneyTuple.Item1;
|
menu.AddMenuOption(optionName, (_, _) => { SetMoney(admin, player, value); });
|
||||||
menu.AddMenuOption(optionName, (_, _) => { SetMoney(admin, player, moneyTuple.Item2); });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Menu;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin.Menus
|
namespace CS2_SimpleAdmin.Menus
|
||||||
{
|
{
|
||||||
@@ -8,30 +7,34 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
{
|
{
|
||||||
public static void OpenMenu(CCSPlayerController admin)
|
public static void OpenMenu(CCSPlayerController admin)
|
||||||
{
|
{
|
||||||
if (admin == null || admin.IsValid == false)
|
if (admin.IsValid == false)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false)
|
var localizer = CS2_SimpleAdmin._localizer;
|
||||||
|
if (AdminManager.PlayerHasPermissions(admin, "@css/root") == false)
|
||||||
{
|
{
|
||||||
// TODO: Localize
|
admin.PrintToChat(localizer?["sa_prefix"] ??
|
||||||
admin.PrintToChat("[Simple Admin] You do not have permissions to use this command.");
|
"[SimpleAdmin] " +
|
||||||
|
(localizer?["sa_no_permission"] ?? "You do not have permissions to use this command")
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseMenu menu = AdminMenu.CreateMenu("Manage Admins");
|
var menu = AdminMenu.CreateMenu(localizer?["sa_menu_admins_manage"] ?? "Admins Manage");
|
||||||
List<ChatMenuOptionData> options = new();
|
List<ChatMenuOptionData> options =
|
||||||
|
[
|
||||||
// TODO: Localize options
|
new ChatMenuOptionData(localizer?["sa_admin_add"] ?? "Add Admin",
|
||||||
// options added in order
|
() => PlayersMenu.OpenRealPlayersMenu(admin, localizer?["sa_admin_add"] ?? "Add Admin", AddAdminMenu)),
|
||||||
|
new ChatMenuOptionData(localizer?["sa_admin_remove"] ?? "Remove Admin",
|
||||||
options.Add(new ChatMenuOptionData("Add Admin", () => PlayersMenu.OpenRealPlayersMenu(admin, "Add Admin", AddAdminMenu)));
|
() => PlayersMenu.OpenAdminPlayersMenu(admin, localizer?["sa_admin_remove"] ?? "Remove Admin", RemoveAdmin,
|
||||||
options.Add(new ChatMenuOptionData("Remove Admin", () => PlayersMenu.OpenAdminPlayersMenu(admin, "Remove Admin", RemoveAdmin, player => player != admin && admin.CanTarget(player))));
|
player => player != admin && admin.CanTarget(player))),
|
||||||
options.Add(new ChatMenuOptionData("Reload Admins", () => ReloadAdmins(admin)));
|
new ChatMenuOptionData(localizer?["sa_admin_reload"] ?? "Reload Admins", () => ReloadAdmins(admin))
|
||||||
|
];
|
||||||
|
|
||||||
foreach (var menuOptionData in options)
|
foreach (var menuOptionData in options)
|
||||||
{
|
{
|
||||||
var menuName = menuOptionData.name;
|
var menuName = menuOptionData.Name;
|
||||||
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled);
|
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
@@ -39,28 +42,12 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
private static void AddAdminMenu(CCSPlayerController admin, CCSPlayerController player)
|
private static void AddAdminMenu(CCSPlayerController admin, CCSPlayerController player)
|
||||||
{
|
{
|
||||||
var flags = new[]
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_admin_add"] ?? "Add Admin"}: {player.PlayerName}");
|
||||||
{
|
|
||||||
new Tuple<string, string>("Generic", "@css/generic"),
|
|
||||||
new Tuple<string, string>("Chat", "@css/chat"),
|
|
||||||
new Tuple<string, string>("Change Map", "@css/changemap"),
|
|
||||||
new Tuple<string, string>("Slay", "@css/slay"),
|
|
||||||
new Tuple<string, string>("Kick", "@css/kick"),
|
|
||||||
new Tuple<string, string>("Ban", "@css/ban"),
|
|
||||||
new Tuple<string, string>("Unban", "@css/unban"),
|
|
||||||
new Tuple<string, string>("Cheats", "@css/cheats"),
|
|
||||||
new Tuple<string, string>("CVAR", "@css/cvar"),
|
|
||||||
new Tuple<string, string>("RCON", "@css/rcon"),
|
|
||||||
new Tuple<string, string>("Root", "@css/root"),
|
|
||||||
};
|
|
||||||
|
|
||||||
var menu = AdminMenu.CreateMenu($"Add Admin: {player.PlayerName}");
|
foreach (var adminFlag in CS2_SimpleAdmin.Instance.Config.MenuConfigs.AdminFlags)
|
||||||
|
|
||||||
foreach (var flagsTuple in flags)
|
|
||||||
{
|
{
|
||||||
var optionName = flagsTuple.Item1;
|
var disabled = AdminManager.PlayerHasPermissions(player, adminFlag.Flag);
|
||||||
var disabled = AdminManager.PlayerHasPermissions(player, flagsTuple.Item2);
|
menu.AddMenuOption(adminFlag.Name, (_, _) => { AddAdmin(admin, player, adminFlag.Flag); }, disabled);
|
||||||
menu.AddMenuOption(optionName, (_, _) => { AddAdmin(admin, player, flagsTuple.Item2); }, disabled);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Menu;
|
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin.Menus
|
namespace CS2_SimpleAdmin.Menus
|
||||||
@@ -12,14 +11,17 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
if (admin.IsValid == false)
|
if (admin.IsValid == false)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
var localizer = CS2_SimpleAdmin._localizer;
|
||||||
if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false)
|
if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false)
|
||||||
{
|
{
|
||||||
// TODO: Localize
|
admin.PrintToChat(localizer?["sa_prefix"] ??
|
||||||
admin.PrintToChat("[Simple Admin] You do not have permissions to use this command.");
|
"[SimpleAdmin] " +
|
||||||
|
(localizer?["sa_no_permission"] ?? "You do not have permissions to use this command")
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var menu = AdminMenu.CreateMenu("Manage Players");
|
var menu = AdminMenu.CreateMenu(localizer?["sa_menu_players_manage"] ?? "Manage Players");
|
||||||
List<ChatMenuOptionData> options = [];
|
List<ChatMenuOptionData> options = [];
|
||||||
|
|
||||||
// permissions
|
// permissions
|
||||||
@@ -33,36 +35,30 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
if (hasSlay)
|
if (hasSlay)
|
||||||
{
|
{
|
||||||
options.Add(new ChatMenuOptionData("Slap", () => PlayersMenu.OpenMenu(admin, "Slap", SlapMenu)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_slap"] ?? "Slap", () => PlayersMenu.OpenMenu(admin, localizer?["sa_slap"] ?? "Slap", SlapMenu)));
|
||||||
options.Add(new ChatMenuOptionData("Slay", () => PlayersMenu.OpenMenu(admin, "Slay", Slay)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_slay"] ?? "Slay", () => PlayersMenu.OpenMenu(admin, localizer?["sa_slay"] ?? "Slay", Slay)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasKick)
|
if (hasKick)
|
||||||
{
|
options.Add(new ChatMenuOptionData(localizer?["sa_kick"] ?? "Kick", () => PlayersMenu.OpenMenu(admin, localizer?["sa_kick"] ?? "Kick", KickMenu)));
|
||||||
options.Add(new ChatMenuOptionData("Kick", () => PlayersMenu.OpenMenu(admin, "Kick", KickMenu)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasBan)
|
if (hasBan)
|
||||||
{
|
options.Add(new ChatMenuOptionData(localizer?["sa_ban"] ?? "Ban", () => PlayersMenu.OpenRealPlayersMenu(admin, localizer?["sa_ban"] ?? "Ban", (admin, player) => DurationMenu.OpenMenu(admin, $"{localizer?["sa_ban"] ?? "Ban"}: {player.PlayerName}", player, BanMenu))));
|
||||||
options.Add(new ChatMenuOptionData("Ban", () => PlayersMenu.OpenRealPlayersMenu(admin, "Ban", (admin, player) => DurationMenu.OpenMenu(admin, $"Ban: {player?.PlayerName}", player, BanMenu))));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasChat)
|
if (hasChat)
|
||||||
{
|
{
|
||||||
options.Add(new ChatMenuOptionData("Gag", () => PlayersMenu.OpenRealPlayersMenu(admin, "Gag", (admin, player) => DurationMenu.OpenMenu(admin, $"Gag: {player?.PlayerName}", player, GagMenu))));
|
options.Add(new ChatMenuOptionData(localizer?["sa_gag"] ?? "Gag", () => PlayersMenu.OpenRealPlayersMenu(admin, localizer?["sa_gag"] ?? "Gag", (admin, player) => DurationMenu.OpenMenu(admin, $"{localizer?["sa_gag"] ?? "Gag"}: {player.PlayerName}", player, GagMenu))));
|
||||||
options.Add(new ChatMenuOptionData("Mute", () => PlayersMenu.OpenRealPlayersMenu(admin, "Mute", (admin, player) => DurationMenu.OpenMenu(admin, $"Mute: {player?.PlayerName}", player, MuteMenu))));
|
options.Add(new ChatMenuOptionData(localizer?["sa_mute"] ?? "Mute", () => PlayersMenu.OpenRealPlayersMenu(admin, localizer?["sa_mute"] ?? "Mute", (admin, player) => DurationMenu.OpenMenu(admin, $"{localizer?["sa_mute"] ?? "Mute"}: {player.PlayerName}", player, MuteMenu))));
|
||||||
options.Add(new ChatMenuOptionData("Silence", () => PlayersMenu.OpenRealPlayersMenu(admin, "Silence", (admin, player) => DurationMenu.OpenMenu(admin, $"Silence: {player?.PlayerName}", player, SilenceMenu))));
|
options.Add(new ChatMenuOptionData(localizer?["sa_silence"] ?? "Silence", () => PlayersMenu.OpenRealPlayersMenu(admin, localizer?["sa_silence"] ?? "Silence", (admin, player) => DurationMenu.OpenMenu(admin, $"{localizer?["sa_silence"] ?? "Silence"}: {player.PlayerName}", player, SilenceMenu))));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasKick)
|
if (hasKick)
|
||||||
{
|
options.Add(new ChatMenuOptionData(localizer?["sa_team_force"] ?? "Force Team", () => PlayersMenu.OpenMenu(admin, localizer?["sa_team_force"] ?? "Force Team", ForceTeamMenu)));
|
||||||
options.Add(new ChatMenuOptionData("Force Team", () => PlayersMenu.OpenMenu(admin, "Force Team", ForceTeamMenu)));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var menuOptionData in options)
|
foreach (var menuOptionData in options)
|
||||||
{
|
{
|
||||||
var menuName = menuOptionData.name;
|
var menuName = menuOptionData.Name;
|
||||||
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled);
|
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
@@ -70,7 +66,7 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
private static void SlapMenu(CCSPlayerController admin, CCSPlayerController? player)
|
private static void SlapMenu(CCSPlayerController admin, CCSPlayerController? player)
|
||||||
{
|
{
|
||||||
var menu = AdminMenu.CreateMenu($"Slap: {player?.PlayerName}");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_slap"] ?? "Slap"}: {player?.PlayerName}");
|
||||||
List<ChatMenuOptionData> options =
|
List<ChatMenuOptionData> options =
|
||||||
[
|
[
|
||||||
// options added in order
|
// options added in order
|
||||||
@@ -84,8 +80,8 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
foreach (var menuOptionData in options)
|
foreach (var menuOptionData in options)
|
||||||
{
|
{
|
||||||
var menuName = menuOptionData.name;
|
var menuName = menuOptionData.Name;
|
||||||
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled);
|
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
@@ -93,33 +89,28 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
private static void ApplySlapAndKeepMenu(CCSPlayerController admin, CCSPlayerController? player, int damage)
|
private static void ApplySlapAndKeepMenu(CCSPlayerController admin, CCSPlayerController? player, int damage)
|
||||||
{
|
{
|
||||||
if (player is null || !player.IsValid) return;
|
if (player is not { IsValid: true }) return;
|
||||||
|
|
||||||
CS2_SimpleAdmin.Instance.Slap(admin, player, damage);
|
CS2_SimpleAdmin.Instance.Slap(admin, player, damage);
|
||||||
SlapMenu(admin, player);
|
SlapMenu(admin, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Slay(CCSPlayerController admin, CCSPlayerController? player)
|
private static void Slay(CCSPlayerController admin, CCSPlayerController? player)
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is not { IsValid: true }) return;
|
||||||
CS2_SimpleAdmin.Instance.Slay(admin, player);
|
|
||||||
|
CS2_SimpleAdmin.Instance.Slay(admin, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void KickMenu(CCSPlayerController admin, CCSPlayerController? player)
|
private static void KickMenu(CCSPlayerController admin, CCSPlayerController? player)
|
||||||
{
|
{
|
||||||
var menu = AdminMenu.CreateMenu($"Kick: {player?.PlayerName}");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_kick"] ?? "Kick"}: {player?.PlayerName}");
|
||||||
List<string> options =
|
|
||||||
[
|
|
||||||
"Voice Abuse",
|
|
||||||
"Chat Abuse",
|
|
||||||
"Admin disrespect",
|
|
||||||
"Other"
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach (var option in options)
|
foreach (var option in CS2_SimpleAdmin.Instance.Config.MenuConfigs.KickReasons)
|
||||||
{
|
{
|
||||||
menu.AddMenuOption(option, (_, _) =>
|
menu.AddMenuOption(option, (_, _) =>
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is { IsValid: true })
|
||||||
Kick(admin, player, option);
|
Kick(admin, player, option);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -127,29 +118,22 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Kick(CCSPlayerController admin, CCSPlayerController? player, string reason)
|
private static void Kick(CCSPlayerController admin, CCSPlayerController? player, string? reason)
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is not { IsValid: true }) return;
|
||||||
CS2_SimpleAdmin.Instance.Kick(admin, player, reason);
|
|
||||||
|
CS2_SimpleAdmin.Instance.Kick(admin, player, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void BanMenu(CCSPlayerController admin, CCSPlayerController? player, int duration)
|
private static void BanMenu(CCSPlayerController admin, CCSPlayerController? player, int duration)
|
||||||
{
|
{
|
||||||
var menu = AdminMenu.CreateMenu($"Ban: {player?.PlayerName}");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_ban"] ?? "Ban"}: {player?.PlayerName}");
|
||||||
List<string> options =
|
|
||||||
[
|
|
||||||
"Hacking",
|
|
||||||
"Voice Abuse",
|
|
||||||
"Chat Abuse",
|
|
||||||
"Admin disrespect",
|
|
||||||
"Other"
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach (var option in options)
|
foreach (var option in CS2_SimpleAdmin.Instance.Config.MenuConfigs.BanReasons)
|
||||||
{
|
{
|
||||||
menu.AddMenuOption(option, (_, _) =>
|
menu.AddMenuOption(option, (_, _) =>
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is { IsValid: true })
|
||||||
Ban(admin, player, duration, option);
|
Ban(admin, player, duration, option);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -159,29 +143,21 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
private static void Ban(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason)
|
private static void Ban(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason)
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is not { IsValid: true }) return;
|
||||||
CS2_SimpleAdmin.Instance.Ban(admin, player, duration, reason);
|
|
||||||
|
CS2_SimpleAdmin.Instance.Ban(admin, player, duration, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void GagMenu(CCSPlayerController admin, CCSPlayerController? player, int duration)
|
private static void GagMenu(CCSPlayerController admin, CCSPlayerController? player, int duration)
|
||||||
{
|
{
|
||||||
// TODO: Localize and make options in config?
|
// TODO: Localize and make options in config?
|
||||||
var menu = AdminMenu.CreateMenu($"Gag: {player?.PlayerName}");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_gag"] ?? "Gag"}: {player?.PlayerName}");
|
||||||
List<string> options =
|
|
||||||
[
|
|
||||||
"Advertising",
|
|
||||||
"Spamming",
|
|
||||||
"Spectator camera abuse",
|
|
||||||
"Hate",
|
|
||||||
"Admin disrespect",
|
|
||||||
"Other"
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach (var option in options)
|
foreach (var option in CS2_SimpleAdmin.Instance.Config.MenuConfigs.MuteReasons)
|
||||||
{
|
{
|
||||||
menu.AddMenuOption(option, (_, _) =>
|
menu.AddMenuOption(option, (_, _) =>
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is { IsValid: true })
|
||||||
Gag(admin, player, duration, option);
|
Gag(admin, player, duration, option);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -191,31 +167,21 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
private static void Gag(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason)
|
private static void Gag(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason)
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is not { IsValid: true }) return;
|
||||||
CS2_SimpleAdmin.Instance.Gag(admin, player, duration, reason);
|
|
||||||
|
CS2_SimpleAdmin.Gag(admin, player, duration, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void MuteMenu(CCSPlayerController admin, CCSPlayerController? player, int duration)
|
private static void MuteMenu(CCSPlayerController admin, CCSPlayerController? player, int duration)
|
||||||
{
|
{
|
||||||
// TODO: Localize and make options in config?
|
// TODO: Localize and make options in config?
|
||||||
var menu = AdminMenu.CreateMenu($"Mute: {player?.PlayerName}");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_mute"] ?? "Mute"}: {player?.PlayerName}");
|
||||||
List<string> options =
|
|
||||||
[
|
|
||||||
"Shouting",
|
|
||||||
"Playing music",
|
|
||||||
"Advertising",
|
|
||||||
"Spamming",
|
|
||||||
"Spectator camera abuse",
|
|
||||||
"Hate",
|
|
||||||
"Admin disrespect",
|
|
||||||
"Other"
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach (var option in options)
|
foreach (var option in CS2_SimpleAdmin.Instance.Config.MenuConfigs.MuteReasons)
|
||||||
{
|
{
|
||||||
menu.AddMenuOption(option, (_, _) =>
|
menu.AddMenuOption(option, (_, _) =>
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is { IsValid: true })
|
||||||
Mute(admin, player, duration, option);
|
Mute(admin, player, duration, option);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -225,31 +191,21 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
private static void Mute(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason)
|
private static void Mute(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason)
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is not { IsValid: true }) return;
|
||||||
CS2_SimpleAdmin.Instance.Mute(admin, player, duration, reason);
|
|
||||||
|
CS2_SimpleAdmin.Instance.Mute(admin, player, duration, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SilenceMenu(CCSPlayerController admin, CCSPlayerController? player, int duration)
|
private static void SilenceMenu(CCSPlayerController admin, CCSPlayerController? player, int duration)
|
||||||
{
|
{
|
||||||
// TODO: Localize and make options in config?
|
// TODO: Localize and make options in config?
|
||||||
var menu = AdminMenu.CreateMenu($"Silence: {player?.PlayerName}");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_silence"] ?? "Silence"}: {player?.PlayerName}");
|
||||||
List<string> options =
|
|
||||||
[
|
|
||||||
"Shouting",
|
|
||||||
"Playing music",
|
|
||||||
"Advertising",
|
|
||||||
"Spamming",
|
|
||||||
"Spectator camera abuse",
|
|
||||||
"Hate",
|
|
||||||
"Admin disrespect",
|
|
||||||
"Other"
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach (var option in options)
|
foreach (var option in CS2_SimpleAdmin.Instance.Config.MenuConfigs.MuteReasons)
|
||||||
{
|
{
|
||||||
menu.AddMenuOption(option, (_, _) =>
|
menu.AddMenuOption(option, (_, _) =>
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is { IsValid: true })
|
||||||
Silence(admin, player, duration, option);
|
Silence(admin, player, duration, option);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -259,26 +215,27 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
private static void Silence(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason)
|
private static void Silence(CCSPlayerController admin, CCSPlayerController? player, int duration, string reason)
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is not { IsValid: true }) return;
|
||||||
CS2_SimpleAdmin.Instance.Silence(admin, player, duration, reason);
|
|
||||||
|
CS2_SimpleAdmin.Instance.Silence(admin, player, duration, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ForceTeamMenu(CCSPlayerController admin, CCSPlayerController? player)
|
private static void ForceTeamMenu(CCSPlayerController admin, CCSPlayerController? player)
|
||||||
{
|
{
|
||||||
// TODO: Localize
|
// TODO: Localize
|
||||||
var menu = AdminMenu.CreateMenu($"Force {player?.PlayerName}'s Team");
|
var menu = AdminMenu.CreateMenu($"{CS2_SimpleAdmin._localizer?["sa_team_force"] ?? "Force Team"} {player?.PlayerName}");
|
||||||
List<ChatMenuOptionData> options =
|
List<ChatMenuOptionData> options =
|
||||||
[
|
[
|
||||||
new ChatMenuOptionData("CT", () => ForceTeam(admin, player, "ct", CsTeam.CounterTerrorist)),
|
new ChatMenuOptionData(CS2_SimpleAdmin._localizer?["sa_team_ct"] ?? "CT", () => ForceTeam(admin, player, "ct", CsTeam.CounterTerrorist)),
|
||||||
new ChatMenuOptionData("T", () => ForceTeam(admin, player, "t", CsTeam.Terrorist)),
|
new ChatMenuOptionData(CS2_SimpleAdmin._localizer?["sa_team_t"] ?? "T", () => ForceTeam(admin, player, "t", CsTeam.Terrorist)),
|
||||||
new ChatMenuOptionData("Swap", () => ForceTeam(admin, player, "swap", CsTeam.Spectator)),
|
new ChatMenuOptionData(CS2_SimpleAdmin._localizer?["sa_team_swap"] ?? "Swap", () => ForceTeam(admin, player, "swap", CsTeam.Spectator)),
|
||||||
new ChatMenuOptionData("Spectator", () => ForceTeam(admin, player, "spec", CsTeam.Spectator)),
|
new ChatMenuOptionData(CS2_SimpleAdmin._localizer?["sa_team_spec"] ?? "Spec", () => ForceTeam(admin, player, "spec", CsTeam.Spectator)),
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach (var menuOptionData in options)
|
foreach (var menuOptionData in options)
|
||||||
{
|
{
|
||||||
var menuName = menuOptionData.name;
|
var menuName = menuOptionData.Name;
|
||||||
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled);
|
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
@@ -286,8 +243,9 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
private static void ForceTeam(CCSPlayerController admin, CCSPlayerController? player, string teamName, CsTeam teamNum)
|
private static void ForceTeam(CCSPlayerController admin, CCSPlayerController? player, string teamName, CsTeam teamNum)
|
||||||
{
|
{
|
||||||
if (player is not null && player.IsValid)
|
if (player is not { IsValid: true }) return;
|
||||||
CS2_SimpleAdmin.Instance.ChangeTeam(admin, player, teamName, teamNum, true);
|
|
||||||
|
CS2_SimpleAdmin.Instance.ChangeTeam(admin, player, teamName, teamNum, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Menu;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin.Menus
|
namespace CS2_SimpleAdmin.Menus
|
||||||
{
|
{
|
||||||
@@ -8,62 +7,58 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
{
|
{
|
||||||
public static void OpenMenu(CCSPlayerController admin)
|
public static void OpenMenu(CCSPlayerController admin)
|
||||||
{
|
{
|
||||||
if (admin == null || admin.IsValid == false)
|
if (admin.IsValid == false)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
var localizer = CS2_SimpleAdmin._localizer;
|
||||||
if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false)
|
if (AdminManager.PlayerHasPermissions(admin, "@css/generic") == false)
|
||||||
{
|
{
|
||||||
// TODO: Localize
|
admin.PrintToChat(localizer?["sa_prefix"] ??
|
||||||
admin.PrintToChat("[Simple Admin] You do not have permissions to use this command.");
|
"[SimpleAdmin] " +
|
||||||
|
(localizer?["sa_no_permission"] ?? "You do not have permissions to use this command")
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseMenu menu = AdminMenu.CreateMenu("Manage Server");
|
var menu = AdminMenu.CreateMenu(localizer?["sa_menu_server_manage"] ?? "Server Manage");
|
||||||
List<ChatMenuOptionData> options = new();
|
List<ChatMenuOptionData> options = [];
|
||||||
|
|
||||||
// permissions
|
// permissions
|
||||||
bool hasMap = AdminManager.PlayerHasPermissions(admin, "@css/changemap");
|
bool hasMap = AdminManager.PlayerHasPermissions(admin, "@css/changemap");
|
||||||
|
|
||||||
// TODO: Localize options
|
|
||||||
// options added in order
|
// options added in order
|
||||||
|
|
||||||
if (hasMap)
|
if (hasMap)
|
||||||
{
|
{
|
||||||
options.Add(new ChatMenuOptionData("Change Map", () => ChangeMapMenu(admin)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_changemap"] ?? "Change Map", () => ChangeMapMenu(admin)));
|
||||||
}
|
}
|
||||||
|
|
||||||
options.Add(new ChatMenuOptionData("Restart Game", () => CS2_SimpleAdmin.RestartGame(admin)));
|
options.Add(new ChatMenuOptionData(localizer?["sa_restart_game"] ?? "Restart Game", () => CS2_SimpleAdmin.RestartGame(admin)));
|
||||||
|
|
||||||
foreach (ChatMenuOptionData menuOptionData in options)
|
foreach (var menuOptionData in options)
|
||||||
{
|
{
|
||||||
string menuName = menuOptionData.name;
|
var menuName = menuOptionData.Name;
|
||||||
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled);
|
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ChangeMapMenu(CCSPlayerController admin)
|
private static void ChangeMapMenu(CCSPlayerController admin)
|
||||||
{
|
{
|
||||||
BaseMenu menu = AdminMenu.CreateMenu($"Change Map");
|
var menu = AdminMenu.CreateMenu(CS2_SimpleAdmin._localizer?["sa_changemap"] ?? "Change Map");
|
||||||
List<ChatMenuOptionData> options = new();
|
List<ChatMenuOptionData> options = [];
|
||||||
|
|
||||||
List<string> maps = CS2_SimpleAdmin.Instance.Config.DefaultMaps;
|
var maps = CS2_SimpleAdmin.Instance.Config.DefaultMaps;
|
||||||
foreach (string map in maps)
|
options.AddRange(maps.Select(map => new ChatMenuOptionData(map, () => ExecuteChangeMap(admin, map, false))));
|
||||||
{
|
|
||||||
options.Add(new ChatMenuOptionData(map, () => ExecuteChangeMap(admin, map, false)));
|
|
||||||
}
|
|
||||||
|
|
||||||
List<string> wsMaps = CS2_SimpleAdmin.Instance.Config.WorkshopMaps;
|
var wsMaps = CS2_SimpleAdmin.Instance.Config.WorkshopMaps;
|
||||||
foreach (string map in wsMaps)
|
options.AddRange(wsMaps.Select(map => new ChatMenuOptionData($"{map} (WS)", () => ExecuteChangeMap(admin, map, true))));
|
||||||
{
|
|
||||||
options.Add(new ChatMenuOptionData($"{map} (WS)", () => ExecuteChangeMap(admin, map, true)));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (ChatMenuOptionData menuOptionData in options)
|
foreach (var menuOptionData in options)
|
||||||
{
|
{
|
||||||
string menuName = menuOptionData.name;
|
var menuName = menuOptionData.Name;
|
||||||
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.action?.Invoke(); }, menuOptionData.disabled);
|
menu.AddMenuOption(menuName, (_, _) => { menuOptionData.Action.Invoke(); }, menuOptionData.Disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdminMenu.OpenMenu(admin, menu);
|
AdminMenu.OpenMenu(admin, menu);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Menu;
|
|
||||||
using System.Web;
|
using System.Web;
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin.Menus
|
namespace CS2_SimpleAdmin.Menus
|
||||||
@@ -14,7 +13,7 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
|
|
||||||
public static void OpenAdminPlayersMenu(CCSPlayerController admin, string menuName, Action<CCSPlayerController, CCSPlayerController> onSelectAction, Func<CCSPlayerController?, bool>? enableFilter = null)
|
public static void OpenAdminPlayersMenu(CCSPlayerController admin, string menuName, Action<CCSPlayerController, CCSPlayerController> onSelectAction, Func<CCSPlayerController?, bool>? enableFilter = null)
|
||||||
{
|
{
|
||||||
OpenMenu(admin, menuName, onSelectAction, p => AdminManager.GetPlayerAdminData(p)?.Flags?.Count > 0);
|
OpenMenu(admin, menuName, onSelectAction, p => AdminManager.GetPlayerAdminData(p)?.Flags.Count > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
@@ -45,7 +44,7 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
if (optionName != null)
|
if (optionName != null)
|
||||||
menu.AddMenuOption(optionName, (_, _) =>
|
menu.AddMenuOption(optionName, (_, _) =>
|
||||||
{
|
{
|
||||||
if (player != null) onSelectAction?.Invoke(admin, player);
|
if (player != null) onSelectAction.Invoke(admin, player);
|
||||||
},
|
},
|
||||||
enabled == false);
|
enabled == false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
{
|
{
|
||||||
public class PlayerInfo
|
public class PlayerInfo
|
||||||
{
|
{
|
||||||
public int? Index { get; set; }
|
|
||||||
public int UserId { get; init; }
|
public int UserId { get; init; }
|
||||||
public int Slot { get; init; }
|
public int Slot { get; init; }
|
||||||
public string? SteamId { get; init; }
|
public string? SteamId { get; init; }
|
||||||
|
|||||||
41
lang/ar.json
41
lang/ar.json
@@ -1,6 +1,47 @@
|
|||||||
{
|
{
|
||||||
|
"sa_title": "SimpleAdmin",
|
||||||
"sa_prefix": "{lightred}[SA] {default}",
|
"sa_prefix": "{lightred}[SA] {default}",
|
||||||
|
|
||||||
"sa_unknown": "مجهول",
|
"sa_unknown": "مجهول",
|
||||||
|
"sa_no_permission": "ليس لديك الصلاحيات لاستخدام هذا الأمر.",
|
||||||
|
|
||||||
|
"sa_admin_add": "إضافة مسؤول",
|
||||||
|
"sa_admin_remove": "إزالة المسؤول",
|
||||||
|
"sa_admin_reload": "إعادة تحميل المسؤولين",
|
||||||
|
|
||||||
|
"sa_godmode": "وضع الإله",
|
||||||
|
"sa_noclip": "بدون قصاصات",
|
||||||
|
"sa_respawn": "إعادة الظهور",
|
||||||
|
"sa_give_weapon": "إعطاء سلاح",
|
||||||
|
"sa_strip_weapons": "تجريد الأسلحة",
|
||||||
|
"sa_freeze": "تجميد",
|
||||||
|
"sa_set_hp": "تعيين الصحة",
|
||||||
|
"sa_set_speed": "تعيين السرعة",
|
||||||
|
"sa_set_gravity": "تعيين الجاذبية",
|
||||||
|
"sa_set_money": "تعيين المال",
|
||||||
|
|
||||||
|
"sa_changemap": "تغيير الخريطة",
|
||||||
|
"sa_restart_game": "إعادة تشغيل اللعبة",
|
||||||
|
|
||||||
|
"sa_team_ct": "CT",
|
||||||
|
"sa_team_t": "T",
|
||||||
|
"sa_team_swap": "تبديل",
|
||||||
|
"sa_team_spec": "المشاهدة",
|
||||||
|
|
||||||
|
"sa_slap": "صفعة",
|
||||||
|
"sa_slay": "قتل",
|
||||||
|
"sa_kick": "طرد",
|
||||||
|
"sa_ban": "حظر",
|
||||||
|
"sa_gag": "كتم",
|
||||||
|
"sa_mute": "كتم",
|
||||||
|
"sa_silence": "صمت",
|
||||||
|
"sa_team_force": "فرض الفريق",
|
||||||
|
|
||||||
|
"sa_menu_custom_commands": "الأوامر المخصصة",
|
||||||
|
"sa_menu_server_manage": "إدارة الخادم",
|
||||||
|
"sa_menu_fun_commands": "أوامر ممتعة",
|
||||||
|
"sa_menu_admins_manage": "إدارة المسؤولين",
|
||||||
|
"sa_menu_players_manage": "إدارة اللاعبين",
|
||||||
|
|
||||||
"sa_player": "اللاعب",
|
"sa_player": "اللاعب",
|
||||||
"sa_steamid": "معرف البخار",
|
"sa_steamid": "معرف البخار",
|
||||||
|
|||||||
51
lang/en.json
51
lang/en.json
@@ -1,6 +1,47 @@
|
|||||||
{
|
{
|
||||||
|
"sa_title": "SimpleAdmin",
|
||||||
"sa_prefix": "{lightred}[SA] {default}",
|
"sa_prefix": "{lightred}[SA] {default}",
|
||||||
|
|
||||||
"sa_unknown": "Unknown",
|
"sa_unknown": "Unknown",
|
||||||
|
"sa_no_permission": "You do not have permissions to use this command.",
|
||||||
|
|
||||||
|
"sa_admin_add": "Add Admin",
|
||||||
|
"sa_admin_remove": "Remove Admin",
|
||||||
|
"sa_admin_reload": "Reload Admins",
|
||||||
|
|
||||||
|
"sa_godmode": "God Mode",
|
||||||
|
"sa_noclip": "No Clip",
|
||||||
|
"sa_respawn": "Respawn",
|
||||||
|
"sa_give_weapon": "Give Weapon",
|
||||||
|
"sa_strip_weapons": "Strip Weapons",
|
||||||
|
"sa_freeze": "Freeze",
|
||||||
|
"sa_set_hp": "Set Hp",
|
||||||
|
"sa_set_speed": "Set Speed",
|
||||||
|
"sa_set_gravity": "Set Gravity",
|
||||||
|
"sa_set_money": "Set Money",
|
||||||
|
|
||||||
|
"sa_changemap": "Change Map",
|
||||||
|
"sa_restart_game": "Restart Game",
|
||||||
|
|
||||||
|
"sa_team_ct": "CT",
|
||||||
|
"sa_team_t": "T",
|
||||||
|
"sa_team_swap": "Swap",
|
||||||
|
"sa_team_spec": "Spec",
|
||||||
|
|
||||||
|
"sa_slap": "Slap",
|
||||||
|
"sa_slay": "slay",
|
||||||
|
"sa_kick": "Kick",
|
||||||
|
"sa_ban": "Ban",
|
||||||
|
"sa_gag": "Gag",
|
||||||
|
"sa_mute": "Mute",
|
||||||
|
"sa_silence": "Silence",
|
||||||
|
"sa_team_force": "Force Team",
|
||||||
|
|
||||||
|
"sa_menu_custom_commands": "Custom Commands",
|
||||||
|
"sa_menu_server_manage": "Server Manage",
|
||||||
|
"sa_menu_fun_commands": "Fun Commands",
|
||||||
|
"sa_menu_admins_manage": "Admins Manage",
|
||||||
|
"sa_menu_players_manage": "Players Manage",
|
||||||
|
|
||||||
"sa_player": "Player",
|
"sa_player": "Player",
|
||||||
"sa_steamid": "SteamID",
|
"sa_steamid": "SteamID",
|
||||||
@@ -9,11 +50,11 @@
|
|||||||
"sa_admin": "Admin",
|
"sa_admin": "Admin",
|
||||||
"sa_permanent": "Permanent",
|
"sa_permanent": "Permanent",
|
||||||
|
|
||||||
"sa_discord_penalty_ban": "Ban registrered",
|
"sa_discord_penalty_ban": "Ban registered",
|
||||||
"sa_discord_penalty_mute": "Mute registrered",
|
"sa_discord_penalty_mute": "Mute registered",
|
||||||
"sa_discord_penalty_gag": "Gag registrered",
|
"sa_discord_penalty_gag": "Gag registered",
|
||||||
"sa_discord_penalty_silence": "Silence registrered",
|
"sa_discord_penalty_silence": "Silence registered",
|
||||||
"sa_discord_penalty_unknown": "Unknown registrered",
|
"sa_discord_penalty_unknown": "Unknown registered",
|
||||||
|
|
||||||
"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_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_ban_message_perm": "You have been banned permanently for {lightred}{0}{default} by {lightred}{1}{default}!",
|
||||||
|
|||||||
41
lang/es.json
41
lang/es.json
@@ -1,6 +1,47 @@
|
|||||||
{
|
{
|
||||||
|
"sa_title": "SimpleAdmin",
|
||||||
"sa_prefix": "{lightred}[SA] {default}",
|
"sa_prefix": "{lightred}[SA] {default}",
|
||||||
|
|
||||||
"sa_unknown": "Desconocido",
|
"sa_unknown": "Desconocido",
|
||||||
|
"sa_no_permission": "No tienes permisos para usar este comando.",
|
||||||
|
|
||||||
|
"sa_admin_add": "Agregar Administrador",
|
||||||
|
"sa_admin_remove": "Eliminar Administrador",
|
||||||
|
"sa_admin_reload": "Recargar Administradores",
|
||||||
|
|
||||||
|
"sa_godmode": "Modo Dios",
|
||||||
|
"sa_noclip": "Sin Colisión",
|
||||||
|
"sa_respawn": "Reaparecer",
|
||||||
|
"sa_give_weapon": "Dar Arma",
|
||||||
|
"sa_strip_weapons": "Eliminar Armas",
|
||||||
|
"sa_freeze": "Congelar",
|
||||||
|
"sa_set_hp": "Establecer Vida",
|
||||||
|
"sa_set_speed": "Establecer Velocidad",
|
||||||
|
"sa_set_gravity": "Establecer Gravedad",
|
||||||
|
"sa_set_money": "Establecer Dinero",
|
||||||
|
|
||||||
|
"sa_changemap": "Cambiar Mapa",
|
||||||
|
"sa_restart_game": "Reiniciar Juego",
|
||||||
|
|
||||||
|
"sa_team_ct": "CT",
|
||||||
|
"sa_team_t": "T",
|
||||||
|
"sa_team_swap": "Intercambiar",
|
||||||
|
"sa_team_spec": "Espectador",
|
||||||
|
|
||||||
|
"sa_slap": "Golpear",
|
||||||
|
"sa_slay": "Matar",
|
||||||
|
"sa_kick": "Expulsar",
|
||||||
|
"sa_ban": "Banear",
|
||||||
|
"sa_gag": "Callar",
|
||||||
|
"sa_mute": "Silenciar",
|
||||||
|
"sa_silence": "Silencio",
|
||||||
|
"sa_team_force": "Forzar Equipo",
|
||||||
|
|
||||||
|
"sa_menu_custom_commands": "Comandos Personalizados",
|
||||||
|
"sa_menu_server_manage": "Administrar Servidor",
|
||||||
|
"sa_menu_fun_commands": "Comandos Divertidos",
|
||||||
|
"sa_menu_admins_manage": "Administrar Administradores",
|
||||||
|
"sa_menu_players_manage": "Administrar Jugadores",
|
||||||
|
|
||||||
"sa_player": "Jugador",
|
"sa_player": "Jugador",
|
||||||
"sa_steamid": "ID de Steam",
|
"sa_steamid": "ID de Steam",
|
||||||
|
|||||||
41
lang/fa.json
41
lang/fa.json
@@ -1,6 +1,47 @@
|
|||||||
{
|
{
|
||||||
|
"sa_title": "SimpleAdmin",
|
||||||
"sa_prefix": "{lightred}[SA] {default}",
|
"sa_prefix": "{lightred}[SA] {default}",
|
||||||
|
|
||||||
"sa_unknown": "ناشناخته",
|
"sa_unknown": "ناشناخته",
|
||||||
|
"sa_no_permission": "شما دسترسی برای استفاده از این دستور را ندارید.",
|
||||||
|
|
||||||
|
"sa_admin_add": "افزودن مدیر",
|
||||||
|
"sa_admin_remove": "حذف مدیر",
|
||||||
|
"sa_admin_reload": "بارگذاری مجدد مدیران",
|
||||||
|
|
||||||
|
"sa_godmode": "حالت خدا",
|
||||||
|
"sa_noclip": "بدون بریدن",
|
||||||
|
"sa_respawn": "باززایی",
|
||||||
|
"sa_give_weapon": "دادن اسلحه",
|
||||||
|
"sa_strip_weapons": "برداشتن اسلحه",
|
||||||
|
"sa_freeze": "یخزدن",
|
||||||
|
"sa_set_hp": "تنظیم پلیر",
|
||||||
|
"sa_set_speed": "تنظیم سرعت",
|
||||||
|
"sa_set_gravity": "تنظیم گرانش",
|
||||||
|
"sa_set_money": "تنظیم پول",
|
||||||
|
|
||||||
|
"sa_changemap": "تغییر نقشه",
|
||||||
|
"sa_restart_game": "شروع مجدد بازی",
|
||||||
|
|
||||||
|
"sa_team_ct": "CT",
|
||||||
|
"sa_team_t": "T",
|
||||||
|
"sa_team_swap": "جابهجایی",
|
||||||
|
"sa_team_spec": "ناظر",
|
||||||
|
|
||||||
|
"sa_slap": "چپاد زدن",
|
||||||
|
"sa_slay": "کشتن",
|
||||||
|
"sa_kick": "اخراج",
|
||||||
|
"sa_ban": "مسدود کردن",
|
||||||
|
"sa_gag": "بیصدا کردن",
|
||||||
|
"sa_mute": "بیصدا کردن",
|
||||||
|
"sa_silence": "سکوت",
|
||||||
|
"sa_team_force": "اجبار تیم",
|
||||||
|
|
||||||
|
"sa_menu_custom_commands": "دستورات سفارشی",
|
||||||
|
"sa_menu_server_manage": "مدیریت سرور",
|
||||||
|
"sa_menu_fun_commands": "دستورات جالب",
|
||||||
|
"sa_menu_admins_manage": "مدیریت مدیران",
|
||||||
|
"sa_menu_players_manage": "مدیریت بازیکنان",
|
||||||
|
|
||||||
"sa_player": "بازیکن",
|
"sa_player": "بازیکن",
|
||||||
"sa_steamid": "شناسه استیم",
|
"sa_steamid": "شناسه استیم",
|
||||||
|
|||||||
41
lang/fr.json
41
lang/fr.json
@@ -1,6 +1,47 @@
|
|||||||
{
|
{
|
||||||
|
"sa_title": "SimpleAdmin",
|
||||||
"sa_prefix": "{lightred}[SA] {default}",
|
"sa_prefix": "{lightred}[SA] {default}",
|
||||||
|
|
||||||
"sa_unknown": "Inconnu",
|
"sa_unknown": "Inconnu",
|
||||||
|
"sa_no_permission": "Vous n'avez pas les permissions pour utiliser cette commande.",
|
||||||
|
|
||||||
|
"sa_admin_add": "Ajouter un administrateur",
|
||||||
|
"sa_admin_remove": "Supprimer un administrateur",
|
||||||
|
"sa_admin_reload": "Recharger les administrateurs",
|
||||||
|
|
||||||
|
"sa_godmode": "Mode Dieu",
|
||||||
|
"sa_noclip": "Mode Spectateur",
|
||||||
|
"sa_respawn": "Réapparaître",
|
||||||
|
"sa_give_weapon": "Donner une arme",
|
||||||
|
"sa_strip_weapons": "Retirer les armes",
|
||||||
|
"sa_freeze": "Geler",
|
||||||
|
"sa_set_hp": "Définir les PV",
|
||||||
|
"sa_set_speed": "Définir la vitesse",
|
||||||
|
"sa_set_gravity": "Définir la gravité",
|
||||||
|
"sa_set_money": "Définir l'argent",
|
||||||
|
|
||||||
|
"sa_changemap": "Changer de carte",
|
||||||
|
"sa_restart_game": "Redémarrer le jeu",
|
||||||
|
|
||||||
|
"sa_team_ct": "CT",
|
||||||
|
"sa_team_t": "T",
|
||||||
|
"sa_team_swap": "Échanger",
|
||||||
|
"sa_team_spec": "Spectateur",
|
||||||
|
|
||||||
|
"sa_slap": "Gifler",
|
||||||
|
"sa_slay": "Tuer",
|
||||||
|
"sa_kick": "Expulser",
|
||||||
|
"sa_ban": "Bannir",
|
||||||
|
"sa_gag": "Réduire au silence",
|
||||||
|
"sa_mute": "Muter",
|
||||||
|
"sa_silence": "Silence",
|
||||||
|
"sa_team_force": "Forcer l'équipe",
|
||||||
|
|
||||||
|
"sa_menu_custom_commands": "Commandes personnalisées",
|
||||||
|
"sa_menu_server_manage": "Gérer le serveur",
|
||||||
|
"sa_menu_fun_commands": "Commandes amusantes",
|
||||||
|
"sa_menu_admins_manage": "Gérer les administrateurs",
|
||||||
|
"sa_menu_players_manage": "Gérer les joueurs",
|
||||||
|
|
||||||
"sa_player": "Joueur",
|
"sa_player": "Joueur",
|
||||||
"sa_steamid": "ID Steam",
|
"sa_steamid": "ID Steam",
|
||||||
|
|||||||
41
lang/lv.json
41
lang/lv.json
@@ -1,6 +1,47 @@
|
|||||||
{
|
{
|
||||||
|
"sa_title": "SimpleAdmin",
|
||||||
"sa_prefix": "{lightred}[SA] {default}",
|
"sa_prefix": "{lightred}[SA] {default}",
|
||||||
|
|
||||||
"sa_unknown": "Nezināms",
|
"sa_unknown": "Nezināms",
|
||||||
|
"sa_no_permission": "Jums nav atļauju izmantot šo komandu.",
|
||||||
|
|
||||||
|
"sa_admin_add": "Pievienot administratoru",
|
||||||
|
"sa_admin_remove": "Noņemt administratoru",
|
||||||
|
"sa_admin_reload": "Pārlādēt administratorus",
|
||||||
|
|
||||||
|
"sa_godmode": "Dieva režīms",
|
||||||
|
"sa_noclip": "Bez šķēršļiem",
|
||||||
|
"sa_respawn": "Atdzimt",
|
||||||
|
"sa_give_weapon": "Dot ieroci",
|
||||||
|
"sa_strip_weapons": "Noņemt ieročus",
|
||||||
|
"sa_freeze": "Salauzt",
|
||||||
|
"sa_set_hp": "Iestatīt veselību",
|
||||||
|
"sa_set_speed": "Iestatīt ātrumu",
|
||||||
|
"sa_set_gravity": "Iestatīt gravitāciju",
|
||||||
|
"sa_set_money": "Iestatīt naudu",
|
||||||
|
|
||||||
|
"sa_changemap": "Mainīt karti",
|
||||||
|
"sa_restart_game": "Restartēt spēli",
|
||||||
|
|
||||||
|
"sa_team_ct": "CT",
|
||||||
|
"sa_team_t": "T",
|
||||||
|
"sa_team_swap": "Mainīt",
|
||||||
|
"sa_team_spec": "Skatītājs",
|
||||||
|
|
||||||
|
"sa_slap": "Plašs",
|
||||||
|
"sa_slay": "Nogalināt",
|
||||||
|
"sa_kick": "Izraidīt",
|
||||||
|
"sa_ban": "Bloķēt",
|
||||||
|
"sa_gag": "Izslēgt runu",
|
||||||
|
"sa_mute": "Noklusināt",
|
||||||
|
"sa_silence": "Klusums",
|
||||||
|
"sa_team_force": "Spēka komanda",
|
||||||
|
|
||||||
|
"sa_menu_custom_commands": "Pielāgotās komandas",
|
||||||
|
"sa_menu_server_manage": "Servera pārvaldība",
|
||||||
|
"sa_menu_fun_commands": "Jautras komandas",
|
||||||
|
"sa_menu_admins_manage": "Administratoru pārvaldība",
|
||||||
|
"sa_menu_players_manage": "Spēlētāju pārvaldība",
|
||||||
|
|
||||||
"sa_player": "Spēlētājs",
|
"sa_player": "Spēlētājs",
|
||||||
"sa_steamid": "Steam ID",
|
"sa_steamid": "Steam ID",
|
||||||
|
|||||||
41
lang/pl.json
41
lang/pl.json
@@ -1,6 +1,47 @@
|
|||||||
{
|
{
|
||||||
|
"sa_title": "SimpleAdmin",
|
||||||
"sa_prefix": "{lightred}[SA] {default}",
|
"sa_prefix": "{lightred}[SA] {default}",
|
||||||
|
|
||||||
"sa_unknown": "Brak",
|
"sa_unknown": "Brak",
|
||||||
|
"sa_no_permission": "Nie masz uprawnień do korzystania z tej komendy.",
|
||||||
|
|
||||||
|
"sa_admin_add": "Dodaj administratora",
|
||||||
|
"sa_admin_remove": "Usuń administratora",
|
||||||
|
"sa_admin_reload": "Przeładuj administratorów",
|
||||||
|
|
||||||
|
"sa_godmode": "Tryb Boga",
|
||||||
|
"sa_noclip": "Tryb Latania",
|
||||||
|
"sa_respawn": "Odrodzenie",
|
||||||
|
"sa_give_weapon": "Daj broń",
|
||||||
|
"sa_strip_weapons": "Usuń bronie",
|
||||||
|
"sa_freeze": "Zamroź",
|
||||||
|
"sa_set_hp": "Ustaw HP",
|
||||||
|
"sa_set_speed": "Ustaw prędkość",
|
||||||
|
"sa_set_gravity": "Ustaw grawitację",
|
||||||
|
"sa_set_money": "Ustaw pieniądze",
|
||||||
|
|
||||||
|
"sa_changemap": "Zmień mapę",
|
||||||
|
"sa_restart_game": "Zrestartuj mapę",
|
||||||
|
|
||||||
|
"sa_team_ct": "CT",
|
||||||
|
"sa_team_t": "T",
|
||||||
|
"sa_team_swap": "Zamień",
|
||||||
|
"sa_team_spec": "Spec",
|
||||||
|
|
||||||
|
"sa_slap": "Uderz",
|
||||||
|
"sa_slay": "Zabij",
|
||||||
|
"sa_kick": "Wyrzuć",
|
||||||
|
"sa_ban": "Zbanuj",
|
||||||
|
"sa_gag": "Zaknebluj",
|
||||||
|
"sa_mute": "Wycisz",
|
||||||
|
"sa_silence": "Ucisz",
|
||||||
|
"sa_team_force": "Wymuś drużynę",
|
||||||
|
|
||||||
|
"sa_menu_custom_commands": "Komendy niestandardowe",
|
||||||
|
"sa_menu_server_manage": "Zarządzaj serwerem",
|
||||||
|
"sa_menu_fun_commands": "Komendy rozrywkowe",
|
||||||
|
"sa_menu_admins_manage": "Zarządzaj administratorami",
|
||||||
|
"sa_menu_players_manage": "Zarządzaj graczami",
|
||||||
|
|
||||||
"sa_player": "Gracz",
|
"sa_player": "Gracz",
|
||||||
"sa_steamid": "SteamID",
|
"sa_steamid": "SteamID",
|
||||||
|
|||||||
@@ -1,6 +1,47 @@
|
|||||||
{
|
{
|
||||||
|
"sa_title": "SimpleAdmin",
|
||||||
"sa_prefix": "{lightred}[SA] {default}",
|
"sa_prefix": "{lightred}[SA] {default}",
|
||||||
|
|
||||||
"sa_unknown": "Desconhecido",
|
"sa_unknown": "Desconhecido",
|
||||||
|
"sa_no_permission": "Você não tem permissão para usar este comando.",
|
||||||
|
|
||||||
|
"sa_admin_add": "Adicionar Admin",
|
||||||
|
"sa_admin_remove": "Remover Admin",
|
||||||
|
"sa_admin_reload": "Recarregar Admins",
|
||||||
|
|
||||||
|
"sa_godmode": "Modo Deus",
|
||||||
|
"sa_noclip": "Modo Espectador",
|
||||||
|
"sa_respawn": "Ressurgir",
|
||||||
|
"sa_give_weapon": "Dar Arma",
|
||||||
|
"sa_strip_weapons": "Remover Armas",
|
||||||
|
"sa_freeze": "Congelar",
|
||||||
|
"sa_set_hp": "Definir HP",
|
||||||
|
"sa_set_speed": "Definir Velocidade",
|
||||||
|
"sa_set_gravity": "Definir Gravidade",
|
||||||
|
"sa_set_money": "Definir Dinheiro",
|
||||||
|
|
||||||
|
"sa_changemap": "Mudar Mapa",
|
||||||
|
"sa_restart_game": "Reiniciar Jogo",
|
||||||
|
|
||||||
|
"sa_team_ct": "CT",
|
||||||
|
"sa_team_t": "T",
|
||||||
|
"sa_team_swap": "Trocar",
|
||||||
|
"sa_team_spec": "Espec",
|
||||||
|
|
||||||
|
"sa_slap": "Tapa",
|
||||||
|
"sa_slay": "Matar",
|
||||||
|
"sa_kick": "Expulsar",
|
||||||
|
"sa_ban": "Banir",
|
||||||
|
"sa_gag": "Silenciar",
|
||||||
|
"sa_mute": "Mutar",
|
||||||
|
"sa_silence": "Silêncio",
|
||||||
|
"sa_team_force": "Forçar Time",
|
||||||
|
|
||||||
|
"sa_menu_custom_commands": "Comandos Personalizados",
|
||||||
|
"sa_menu_server_manage": "Gerenciar Servidor",
|
||||||
|
"sa_menu_fun_commands": "Comandos Divertidos",
|
||||||
|
"sa_menu_admins_manage": "Gerenciar Admins",
|
||||||
|
"sa_menu_players_manage": "Gerenciar Jogadores",
|
||||||
|
|
||||||
"sa_player": "Jogador",
|
"sa_player": "Jogador",
|
||||||
"sa_steamid": "SteamID",
|
"sa_steamid": "SteamID",
|
||||||
|
|||||||
41
lang/ru.json
41
lang/ru.json
@@ -1,6 +1,47 @@
|
|||||||
{
|
{
|
||||||
|
"sa_title": "SimpleAdmin",
|
||||||
"sa_prefix": "{lightred}[SA] {default}",
|
"sa_prefix": "{lightred}[SA] {default}",
|
||||||
|
|
||||||
"sa_unknown": "Неизвестный",
|
"sa_unknown": "Неизвестный",
|
||||||
|
"sa_no_permission": "У вас нет прав для использования этой команды.",
|
||||||
|
|
||||||
|
"sa_admin_add": "Добавить администратора",
|
||||||
|
"sa_admin_remove": "Удалить администратора",
|
||||||
|
"sa_admin_reload": "Перезагрузить администраторов",
|
||||||
|
|
||||||
|
"sa_godmode": "Режим бога",
|
||||||
|
"sa_noclip": "Режим бесконечного прохождения",
|
||||||
|
"sa_respawn": "Возрождение",
|
||||||
|
"sa_give_weapon": "Выдать оружие",
|
||||||
|
"sa_strip_weapons": "Удалить оружие",
|
||||||
|
"sa_freeze": "Заморозить",
|
||||||
|
"sa_set_hp": "Установить здоровье",
|
||||||
|
"sa_set_speed": "Установить скорость",
|
||||||
|
"sa_set_gravity": "Установить гравитацию",
|
||||||
|
"sa_set_money": "Установить деньги",
|
||||||
|
|
||||||
|
"sa_changemap": "Сменить карту",
|
||||||
|
"sa_restart_game": "Перезапустить игру",
|
||||||
|
|
||||||
|
"sa_team_ct": "CT",
|
||||||
|
"sa_team_t": "T",
|
||||||
|
"sa_team_swap": "Поменять",
|
||||||
|
"sa_team_spec": "Спец",
|
||||||
|
|
||||||
|
"sa_slap": "Шлепнуть",
|
||||||
|
"sa_slay": "Убить",
|
||||||
|
"sa_kick": "Выгнать",
|
||||||
|
"sa_ban": "Забанить",
|
||||||
|
"sa_gag": "Заглушить",
|
||||||
|
"sa_mute": "Отключить звук",
|
||||||
|
"sa_silence": "Тишина",
|
||||||
|
"sa_team_force": "Принудить к команде",
|
||||||
|
|
||||||
|
"sa_menu_custom_commands": "Пользовательские команды",
|
||||||
|
"sa_menu_server_manage": "Управление сервером",
|
||||||
|
"sa_menu_fun_commands": "Развлекательные команды",
|
||||||
|
"sa_menu_admins_manage": "Управление администраторами",
|
||||||
|
"sa_menu_players_manage": "Управление игроками",
|
||||||
|
|
||||||
"sa_player": "Игрок",
|
"sa_player": "Игрок",
|
||||||
"sa_steamid": "SteamID",
|
"sa_steamid": "SteamID",
|
||||||
|
|||||||
41
lang/tr.json
41
lang/tr.json
@@ -1,6 +1,47 @@
|
|||||||
{
|
{
|
||||||
|
"sa_title": "SimpleAdmin",
|
||||||
"sa_prefix": "{lightred}[SA] {default}",
|
"sa_prefix": "{lightred}[SA] {default}",
|
||||||
|
|
||||||
"sa_unknown": "Bilinmeyen",
|
"sa_unknown": "Bilinmeyen",
|
||||||
|
"sa_no_permission": "Bu komutu kullanma izniniz yok.",
|
||||||
|
|
||||||
|
"sa_admin_add": "Yönetici Ekle",
|
||||||
|
"sa_admin_remove": "Yönetici Kaldır",
|
||||||
|
"sa_admin_reload": "Yöneticileri Yeniden Yükle",
|
||||||
|
|
||||||
|
"sa_godmode": "Tanrı Modu",
|
||||||
|
"sa_noclip": "Duvar Arkası Modu",
|
||||||
|
"sa_respawn": "Tekrar Doğma",
|
||||||
|
"sa_give_weapon": "Silah Ver",
|
||||||
|
"sa_strip_weapons": "Silahları Çıkart",
|
||||||
|
"sa_freeze": "Dondur",
|
||||||
|
"sa_set_hp": "HP Ayarla",
|
||||||
|
"sa_set_speed": "Hız Ayarla",
|
||||||
|
"sa_set_gravity": "Yerçekimi Ayarla",
|
||||||
|
"sa_set_money": "Para Ayarla",
|
||||||
|
|
||||||
|
"sa_changemap": "Haritayı Değiştir",
|
||||||
|
"sa_restart_game": "Oyunu Yeniden Başlat",
|
||||||
|
|
||||||
|
"sa_team_ct": "CT",
|
||||||
|
"sa_team_t": "T",
|
||||||
|
"sa_team_swap": "Değiştir",
|
||||||
|
"sa_team_spec": "İzleyici",
|
||||||
|
|
||||||
|
"sa_slap": "Tokatla",
|
||||||
|
"sa_slay": "Öldür",
|
||||||
|
"sa_kick": "At",
|
||||||
|
"sa_ban": "Yasakla",
|
||||||
|
"sa_gag": "Ağzını Kapat",
|
||||||
|
"sa_mute": "Sustur",
|
||||||
|
"sa_silence": "Sessizlik",
|
||||||
|
"sa_team_force": "Takımı Zorla",
|
||||||
|
|
||||||
|
"sa_menu_custom_commands": "Özel Komutlar",
|
||||||
|
"sa_menu_server_manage": "Sunucu Yönetimi",
|
||||||
|
"sa_menu_fun_commands": "Eğlenceli Komutlar",
|
||||||
|
"sa_menu_admins_manage": "Yönetici Yönetimi",
|
||||||
|
"sa_menu_players_manage": "Oyuncu Yönetimi",
|
||||||
|
|
||||||
"sa_player": "Oyuncu",
|
"sa_player": "Oyuncu",
|
||||||
"sa_steamid": "SteamID",
|
"sa_steamid": "SteamID",
|
||||||
|
|||||||
@@ -1,6 +1,47 @@
|
|||||||
{
|
{
|
||||||
|
"sa_title": "SimpleAdmin",
|
||||||
"sa_prefix": "{lightred}[SA] {default}",
|
"sa_prefix": "{lightred}[SA] {default}",
|
||||||
|
|
||||||
"sa_unknown": "未知",
|
"sa_unknown": "未知",
|
||||||
|
"sa_no_permission": "您没有权限使用此命令。",
|
||||||
|
|
||||||
|
"sa_admin_add": "添加管理员",
|
||||||
|
"sa_admin_remove": "移除管理员",
|
||||||
|
"sa_admin_reload": "重新加载管理员",
|
||||||
|
|
||||||
|
"sa_godmode": "上帝模式",
|
||||||
|
"sa_noclip": "穿墙模式",
|
||||||
|
"sa_respawn": "重生",
|
||||||
|
"sa_give_weapon": "给予武器",
|
||||||
|
"sa_strip_weapons": "剥夺武器",
|
||||||
|
"sa_freeze": "冻结",
|
||||||
|
"sa_set_hp": "设置生命值",
|
||||||
|
"sa_set_speed": "设置速度",
|
||||||
|
"sa_set_gravity": "设置重力",
|
||||||
|
"sa_set_money": "设置金钱",
|
||||||
|
|
||||||
|
"sa_changemap": "更换地图",
|
||||||
|
"sa_restart_game": "重启游戏",
|
||||||
|
|
||||||
|
"sa_team_ct": "CT",
|
||||||
|
"sa_team_t": "T",
|
||||||
|
"sa_team_swap": "交换",
|
||||||
|
"sa_team_spec": "观战",
|
||||||
|
|
||||||
|
"sa_slap": "掌掴",
|
||||||
|
"sa_slay": "杀死",
|
||||||
|
"sa_kick": "踢出",
|
||||||
|
"sa_ban": "封禁",
|
||||||
|
"sa_gag": "禁言",
|
||||||
|
"sa_mute": "静音",
|
||||||
|
"sa_silence": "沉默",
|
||||||
|
"sa_team_force": "强制队伍",
|
||||||
|
|
||||||
|
"sa_menu_custom_commands": "自定义命令",
|
||||||
|
"sa_menu_server_manage": "服务器管理",
|
||||||
|
"sa_menu_fun_commands": "娱乐命令",
|
||||||
|
"sa_menu_admins_manage": "管理员管理",
|
||||||
|
"sa_menu_players_manage": "玩家管理",
|
||||||
|
|
||||||
"sa_player": "玩家",
|
"sa_player": "玩家",
|
||||||
"sa_steamid": "SteamID",
|
"sa_steamid": "SteamID",
|
||||||
|
|||||||
Reference in New Issue
Block a user