1.2.0a UPDATE

Required CSS 124
This commit is contained in:
daffyyyy
2023-12-12 12:20:27 +01:00
parent 454643431a
commit 34342c5134
12 changed files with 919 additions and 318 deletions

View File

@@ -109,6 +109,26 @@ namespace CS2_SimpleAdmin
return banCount > 0;
}
public async Task<int> GetPlayerBans(PlayerInfo player)
{
string sql = "SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)";
int banCount;
await using var connection = _dbConnection;
await connection.OpenAsync();
if (!string.IsNullOrEmpty(player.IpAddress))
{
banCount = await connection.ExecuteScalarAsync<int>(sql, new { PlayerSteamID = player.SteamId, PlayerIP = player.IpAddress });
}
else
{
banCount = await connection.ExecuteScalarAsync<int>(sql, new { PlayerSteamID = player.SteamId, PlayerIP = DBNull.Value });
}
return banCount;
}
public async Task UnbanPlayer(string playerPattern)
{
if (playerPattern == null || playerPattern.Length <= 1)

File diff suppressed because it is too large Load Diff

View File

@@ -9,9 +9,13 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.98" />
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.124" />
<PackageReference Include="Dapper" Version="*" />
<PackageReference Include="MySqlConnector" Version="*" />
</ItemGroup>
<ItemGroup>
<None Update="lang\**\*.*" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
</Project>

View File

@@ -3,58 +3,9 @@ using System.Text.Json.Serialization;
namespace CS2_SimpleAdmin
{
public class Messages
{
[JsonPropertyName("PlayerBanMessageTime")]
public string PlayerBanMessageTime { get; set; } = "You have been banned for {REASON} for {TIME} minutes by {ADMIN}!";
[JsonPropertyName("PlayerBanMessagePerm")]
public string PlayerBanMessagePerm { get; set; } = "You have been banned permanently for {REASON} by {ADMIN}!";
[JsonPropertyName("PlayerKickMessage")]
public string PlayerKickMessage { get; set; } = "You have been kicked for {REASON} by {ADMIN}!";
[JsonPropertyName("PlayerGagMessageTime")]
public string PlayerGagMessageTime { get; set; } = "You have been gagged for {REASON} for {TIME} minutes by {ADMIN}!";
[JsonPropertyName("PlayerGagMessagePerm")]
public string PlayerGagMessagePerm { get; set; } = "You have been gagged permanently for {REASON} by {ADMIN}!";
[JsonPropertyName("AdminBanMessageTime")]
public string AdminBanMessageTime { get; set; } = "Admin {ADMIN} banned {PLAYER} for {REASON} for {TIME} minutes!";
[JsonPropertyName("AdminBanMessagePerm")]
public string AdminBanMessagePerm { get; set; } = "Admin {ADMIN} banned {PLAYER} permanently for {REASON}";
[JsonPropertyName("AdminKickMessage")]
public string AdminKickMessage { get; set; } = "Admin {ADMIN} kicked {PLAYER} for {REASON}!";
[JsonPropertyName("AdminGagMessageTime")]
public string AdminGagMessageTime { get; set; } = "Admin {ADMIN} gagged {PLAYER} for {REASON} for {TIME} minutes!";
[JsonPropertyName("AdminGagMessagePerm")]
public string AdminGagMessagePerm { get; set; } = "Admin {ADMIN} gagged {PLAYER} permanently for {REASON}";
[JsonPropertyName("AdminSlayMessage")]
public string AdminSlayMessage { get; set; } = "Admin {ADMIN} slayed {PLAYER}!";
[JsonPropertyName("AdminSlapMessage")]
public string AdminSlapMessage { get; set; } = "Admin {ADMIN} slapped {PLAYER}!";
[JsonPropertyName("AdminChangeMap")]
public string AdminChangeMap { get; set; } = "Admin {ADMIN} changed map to {MAP}!";
[JsonPropertyName("AdminNoclipMessage")]
public string AdminNoclipMessage { get; set; } = "Admin {ADMIN} toggled noclip for {PLAYER}!";
[JsonPropertyName("AdminFreezeMessage")]
public string AdminFreezeMessage { get; set; } = "Admin {ADMIN} freezed {PLAYER}!";
[JsonPropertyName("AdminUnFreezeMessage")]
public string AdminUnFreezeMessage { get; set; } = "Admin {ADMIN} unfreezed {PLAYER}!";
[JsonPropertyName("AdminRespawnMessage")]
public string AdminRespawnMessage { get; set; } = "Admin {ADMIN} respawned {PLAYER}!";
[JsonPropertyName("AdminSayPrefix")]
public string AdminSayPrefix { get; set; } = "{RED}ADMIN: {DEFAULT}";
[JsonPropertyName("AdminHelpCommand")]
public string AdminHelpCommand { get; set; } = "{GREEN}[ CS2-SimpleAdmin HELP ]{DEFAULT}\n- css_ban <#userid or name> [time in minutes/0 perm] [reason] - Ban player\n- css_addban <steamid> [time in minutes/0 perm] [reason] - Ban player via steamid64\n" +
"- css_banip <ip> [time in minutes/0 perm] [reason] - Ban player via IP address\n- css_unban <steamid or name or ip> - Unban player\n" +
"- css_kick <#userid or name> [reason] - Kick player\n- css_gag <#userid or name> [time in minutes/0 perm] [reason] - Gag player\n- css_addgag <steamid> [time in minutes/0 perm] [reason] - Gag player via steamid64\n" +
"- css_unmute <steamid or name> <type [gag/mute] - Unmute player\n" +
"- css_slay <#userid or name> - Kill player\n- css_slap <#userid or name> [damage] - Slap player\n- css_map <mapname> - Change map\n- css_wsmap <name or id> - Change workshop map\n- css_say <message> - Say message as admin in chat\n" +
"- css_psay <#userid or name> <message> - Sends private message to player\n- css_csay <message> - Say message as admin in center\n- css_hsay <message> - Say message as admin in hud\n" +
"- css_noclip <#userid or name> - Toggle noclip for player\n- css_freeze <#userid or name> [duration] - Freeze player\n- css_unfreeze <#userid or name> - Unfreeze player\n" +
"- css_respawn <#userid or name> - Respawn player\n- css_cvar <cvar> <value> - Change cvar value\n- css_rcon <command> - Run command as server";
}
public class CS2_SimpleAdminConfig : BasePluginConfig
{
public override int Version { get; set; } = 1;
public override int Version { get; set; } = 2;
[JsonPropertyName("DatabaseHost")]
public string DatabaseHost { get; set; } = "";
@@ -71,13 +22,9 @@ namespace CS2_SimpleAdmin
[JsonPropertyName("DatabaseName")]
public string DatabaseName { get; set; } = "";
[JsonPropertyName("Prefix")]
public string Prefix { get; set; } = "{GREEN}[SimpleAdmin]";
[JsonPropertyName("KickTime")]
public int KickTime { get; set; } = 10;
[JsonPropertyName("Messages")]
public Messages Messages { get; set; } = new Messages();
[JsonPropertyName("DisableDangerousCommands")]
public bool DisableDangerousCommands { get; set; } = true;
}
}

View File

@@ -3,7 +3,7 @@ using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Utils;
using System.Text;
using static CounterStrikeSharp.API.Core.Listeners;
namespace CS2_SimpleAdmin
@@ -17,8 +17,8 @@ namespace CS2_SimpleAdmin
RegisterListener<OnMapStart>(OnMapStart);
AddCommandListener("say", OnCommandSay);
AddCommandListener("say_team", OnCommandTeamSay);
AddCommandListener("callvote", OnCommandCallVote);
}
private HookResult OnCommandSay(CCSPlayerController? player, CommandInfo info)
{
if (player == null || !player.IsValid || info.GetArg(1).Length == 0) return HookResult.Continue;
@@ -40,11 +40,26 @@ namespace CS2_SimpleAdmin
return HookResult.Handled;
}
if (info.GetArg(1).StartsWith("@") && AdminManager.PlayerHasPermissions(player, "@css/chat"))
if (info.GetArg(1).StartsWith("@"))
{
StringBuilder sb = new();
if (AdminManager.PlayerHasPermissions(player, "@css/chat"))
{
sb.Append(_localizer!["sa_adminchat_template_admin", player.PlayerName, info.GetArg(1).Remove(0, 1)]);
foreach (var p in Utilities.GetPlayers().Where(p => p.IsValid && !p.IsBot && !p.IsHLTV && AdminManager.PlayerHasPermissions(p, "@css/chat")))
{
p.PrintToChat($" {ChatColors.Lime}(ADMIN) {ChatColors.Default}{player.PlayerName}: {info.GetArg(1).Remove(0, 1)}");
p.PrintToChat(sb.ToString());
}
}
else
{
sb.Append(_localizer!["sa_adminchat_template_player", player.PlayerName, info.GetArg(1).Remove(0, 1)]);
player.PrintToChat(sb.ToString());
foreach (var p in Utilities.GetPlayers().Where(p => p.IsValid && !p.IsBot && !p.IsHLTV && AdminManager.PlayerHasPermissions(p, "@css/chat")))
{
p.PrintToChat(sb.ToString());
}
}
return HookResult.Handled;
@@ -53,11 +68,26 @@ namespace CS2_SimpleAdmin
return HookResult.Continue;
}
private HookResult OnCommandCallVote(CCSPlayerController? player, CommandInfo info)
{
string reason = info.GetArg(1);
if (reason == "kick" || reason == "ban")
{
int.TryParse(info.GetArg(2), out int target);
if (target > 0)
{
if (!player!.CanTarget(Utilities.GetPlayerFromUserid(target)))
return HookResult.Handled;
}
}
return HookResult.Continue;
}
private void OnClientAuthorized(int playerSlot, SteamID steamID)
{
int playerIndex = playerSlot + 1;
CCSPlayerController? player = Utilities.GetPlayerFromIndex(playerIndex);
CCSPlayerController? player = Utilities.GetPlayerFromSlot(playerSlot);
if (player == null || !player.IsValid || player.IsBot || player.IsHLTV)
return;
@@ -82,7 +112,7 @@ namespace CS2_SimpleAdmin
Task.Run(async () =>
{
if (player == null) return;
if (player == null || !player.IsValid) return;
BanManager _banManager = new(dbConnectionString);
bool isBanned = await _banManager.IsPlayerBanned(playerInfo);
@@ -91,7 +121,7 @@ namespace CS2_SimpleAdmin
Server.NextFrame(() =>
{
if (player == null) return;
if (player == null || !player.IsValid) return;
if (isBanned)
{
Helper.KickPlayer((ushort)player.UserId!, "Banned");
@@ -108,12 +138,36 @@ namespace CS2_SimpleAdmin
if (muteType == "GAG")
{
// Chat mute
if (!gaggedPlayers.Any(index => index == player.Index))
gaggedPlayers.Add((int)player.Index);
if (TagsDetected)
NativeAPI.IssueServerCommand($"css_tag_mute {player.Index}");
if (duration.Minutes >= 0 && duration.Minutes <= 30)
{
AddTimer(durationInSeconds, () =>
{
if (player == null || !player.IsValid || player.AuthorizedSteamID == null) return;
if (gaggedPlayers.Contains((int)player.Index))
{
if (gaggedPlayers.TryTake(out int removedItem) && removedItem != (int)player.Index)
{
gaggedPlayers.Add(removedItem);
}
}
if (TagsDetected)
NativeAPI.IssueServerCommand($"css_tag_unmute {player.Index}");
MuteManager _muteManager = new(dbConnectionString);
_ = _muteManager.UnmutePlayer(player.AuthorizedSteamID.SteamId64.ToString(), 0);
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
}
/*
CCSPlayerController currentPlayer = player;
@@ -130,13 +184,26 @@ namespace CS2_SimpleAdmin
}
else
{
// Mic mute
}
}
}
});
});
// Voice mute
player.VoiceFlags = VoiceFlags.Muted;
if (duration.Minutes >= 0 && duration.Minutes <= 30)
{
AddTimer(durationInSeconds, () =>
{
if (player == null || !player.IsValid || player.AuthorizedSteamID == null) return;
player.VoiceFlags = VoiceFlags.Normal;
MuteManager _muteManager = new(dbConnectionString);
_ = _muteManager.UnmutePlayer(player.AuthorizedSteamID.SteamId64.ToString(), 1);
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
}
}
}
}
});
});
}
private void OnClientDisconnect(int playerSlot)

View File

@@ -45,6 +45,7 @@ namespace CS2_SimpleAdmin
return Regex.IsMatch(input, pattern);
}
/*
public static TargetResult GetTarget(string target, out CCSPlayerController? player)
{
player = null;
@@ -64,6 +65,7 @@ namespace CS2_SimpleAdmin
return player?.IsValid == true ? TargetResult.Single : TargetResult.None;
}
*/
public static void KickPlayer(ushort userId, string? reason = null)
{

View File

@@ -1,4 +1,5 @@
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Entities;
using Dapper;
using MySqlConnector;
using System.Data;
@@ -88,6 +89,19 @@ namespace CS2_SimpleAdmin
return activeMutes;
}
public async Task<int> GetPlayerMutes(string steamId)
{
await using var connection = _dbConnection;
await connection.OpenAsync();
int muteCount;
string sql = "SELECT COUNT(*) FROM sa_mutes WHERE player_steamid = @PlayerSteamID";
muteCount = await connection.ExecuteScalarAsync<int>(sql, new { PlayerSteamID = steamId });
return muteCount;
}
public async Task UnmutePlayer(string playerPattern, int type = 0)
{
if (playerPattern == null || playerPattern.Length <= 1)

View File

@@ -1,6 +1,7 @@
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Utils;
using System.Text;
namespace CS2_SimpleAdmin;
@@ -10,9 +11,16 @@ public static class PlayerUtils
{
PerformSlap(pawn, damage);
}
public static void Print(this CCSPlayerController controller, string message = "")
{
StringBuilder _message = new(CS2_SimpleAdmin._localizer!["sa_prefix"]);
_message.Append(message);
controller.PrintToChat(_message.ToString());
}
public static bool CanTarget(this CCSPlayerController controller, CCSPlayerController target)
{
if (target.IsBot) return true;
return AdminManager.CanPlayerTarget(controller, target);
}

View File

@@ -4,7 +4,8 @@
Manage your Counter-Strike 2 server by simple commands :)
### Info
It's only plugin base, I don't have much time for more extensive development, so if you want to help, do it :)
~~It's only plugin base~~, I don't have much time for more extensive development, so if you want to help, do it :)
**The plugin will be developed as much as possible**, so it is no longer just a base for other plugins
### Commands
```js
@@ -16,7 +17,11 @@ It's only plugin base, I don't have much time for more extensive development, so
- css_kick <#userid or name> [reason] - Kick player / @css/kick
- css_gag <#userid or name> [time in minutes/0 perm] [reason] - Gag player // @css/chat
- css_addgag <steamid> [time in minutes/0 perm] [reason] - Gag player via steamid64 // @css/chat
- css_unmute <steamid or name> <type [gag/mute] - Unmute player // @css/chat
- css_ungag <steamid or name> - Ungag player // @css/chat
- css_mute <#userid or name> [time in minutes/0 perm] [reason] - Mute player // @css/chat
- css_addmute <steamid> [time in minutes/0 perm] [reason] - Mute player via steamid64 // @css/chat
- css_unmute <steamid or name> - Unmute player // @css/chat
- css_give <#userid or name> <weapon> - Give weapon to player // @css/cheats
- css_slay <#userid or name> - Kill player // @css/slay
- css_slap <#userid or name> [damage] - Slap player // @css/slay
- css_team <#userid or name> [<ct/tt/spec>] - Change player team // @css/kick
@@ -34,7 +39,7 @@ It's only plugin base, I don't have much time for more extensive development, so
- css_cvar <cvar> <value> - Change cvar value // @css/cvar
- css_rcon <command> - Run command as server // @css/rcon
- @Message - Say message to all admins // @css/chat
- team_chat @Message - Say message to all admins // @css/chat
```
### Requirments

View File

@@ -1,8 +0,0 @@
namespace CS2_SimpleAdmin;
internal enum TargetResult
{
None,
Multiple,
Single
}

29
lang/en.json Normal file
View File

@@ -0,0 +1,29 @@
{
"sa_prefix": "{lightred}[SA] {default}",
"sa_adminhelp": "{GREEN}[ CS2-SimpleAdmin HELP ]{DEFAULT}\n- css_ban <#userid or name> [time in minutes/0 perm] [reason] - Ban player\n- css_addban <steamid> [time in minutes/0 perm] [reason] - Ban player via steamid64\n- css_banip <ip> [time in minutes/0 perm] [reason] - Ban player via IP address\n- css_unban <steamid or name or ip> - Unban player\n- css_kick <#userid or name> [reason] - Kick player\n- css_gag <#userid or name> [time in minutes/0 perm] [reason] - Gag player\n- css_addgag <steamid> [time in minutes/0 perm] [reason] - Gag player via steamid64\n- css_unmute <steamid or name> - Ungag player\n- css_mute <#userid or name> [time in minutes/0 perm] [reason] - Mute player\n- css_addmute <steamid> [time in minutes/0 perm] [reason] - Mute player via steamid64\n- css_give <#userid or name> <weapon> - Give player a weapon\n- css_slay <#userid or name> - Kill player\n- css_slap <#userid or name> [damage] - Slap player\n- css_map <mapname> - Change map\n- css_wsmap <name or id> - Change workshop map\n- css_asay <message> - Say message to all admins\n- css_say <message> - Say message as admin in chat\n- css_psay <#userid or name> <message> - Sends private message to player\n- css_csay <message> - Say message as admin in center\n- css_hsay <message> - Say message as admin in hud\n- css_noclip <#userid or name> - Toggle noclip for player\n- css_freeze <#userid or name> [duration] - Freeze player\n- css_unfreeze <#userid or name> - Unfreeze player\n- css_respawn <#userid or name> - Respawn player\n- css_cvar <cvar> <value> - Change cvar value\n- css_rcon <command> - Run command as server",
"sa_player_ban_message_time": "You have been banned for {lightred}{0}{default} for {lightred}{1}{default} minutes by {lightred}{2}{default}!",
"sa_player_ban_message_perm": "You have been banned permanently for {lightred}{0}{default} by {lightred}{1}{default}!",
"sa_player_kick_message": "You have been kicked for {lightred}{0}{default} by {lightred}{1}{default}!",
"sa_player_gag_message_time": "You have been gagged for {lightred}{0}{default} for {lightred}{1}{default} minutes by {lightred}{2}{default}!",
"sa_player_gag_message_perm": "You have been gagged permanently for {lightred}{0}{default} by {lightred}{1}{default}!",
"sa_player_mute_message_time": "You have been muted for {lightred}{0}{default} for {lightred}{1}{default} minutes by {lightred}{2}{default}!",
"sa_player_mute_message_perm": "You have been muted permanently for {lightred}{0}{default} by {lightred}{1}{default}!",
"sa_admin_ban_message_time": "Admin {lightred}{0}{default} banned {lightred}{1}{default} for {lightred}{2}{default} for {lightred}{3}{default} minutes!",
"sa_admin_ban_message_perm": "Admin {lightred}{0}{default} banned {lightred}{1}{default} permanently for {lightred}{2}{default}!",
"sa_admin_kick_message": "Admin {lightred}{0}{default} kicked {lightred}{1}{default} for {lightred}{2}{default}!",
"sa_admin_gag_message_time": "Admin {lightred}{0}{default} gagged {lightred}{1}{default} for {lightred}{2}{default} for {lightred}{3}{default} minutes!",
"sa_admin_gag_message_perm": "Admin {lightred}{0}{default} gagged {lightred}{1}{default} permanently for {lightred}{2}{default}!",
"sa_admin_mute_message_time": "Admin {lightred}{0}{default} muted {lightred}{1}{default} for {lightred}{2}{default} for {lightred}{3}{default} minutes!",
"sa_admin_mute_message_perm": "Admin {lightred}{0}{default} muted {lightred}{1}{default} permanently for {lightred}{2}{default}!",
"sa_admin_give_message": "Admin {lightred}{0}{default} gave {lightred}{1}{default} a {lightred}{WE{default}APON}!",
"sa_admin_slay_message": "Admin {lightred}{0}{default} slayed {lightred}{1}{default}!",
"sa_admin_slap_message": "Admin {lightred}{0}{default} slapped {lightred}{1}{default}!",
"sa_admin_changemap_message": "Admin {lightred}{0}{default} changed map to {lightred}{1}{default}!",
"sa_admin_noclip_message": "Admin {lightred}{0}{default} toggled noclip for {lightred}{1}{default}!",
"sa_admin_freeze_message": "Admin {lightred}{0}{default} freezed {lightred}{1}{default}!",
"sa_admin_umfreeze_message": "Admin {lightred}{0}{default} umfreezed {lightred}{1}{default}!",
"sa_admin_respawn_message": "Admin {lightred}{0}{default} respawned {lightred}{1}{default}!",
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{default}",
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(PLAYER) {lightred}{0}{default}: {lightred}{1}{default}"
}

29
lang/pl.json Normal file
View File

@@ -0,0 +1,29 @@
{
"sa_prefix": "{lightred}[SA] {default}",
"sa_adminhelp": "{GREEN}[ CS2-SimpleAdmin HELP ]{DEFAULT}\n- css_ban <#userid or name> [time in minutes/0 perm] [reason] - Ban player\n- css_addban <steamid> [time in minutes/0 perm] [reason] - Ban player via steamid64\n- css_banip <ip> [time in minutes/0 perm] [reason] - Ban player via IP address\n- css_unban <steamid or name or ip> - Unban player\n- css_kick <#userid or name> [reason] - Kick player\n- css_gag <#userid or name> [time in minutes/0 perm] [reason] - Gag player\n- css_addgag <steamid> [time in minutes/0 perm] [reason] - Gag player via steamid64\n- css_unmute <steamid or name> - Ungag player\n- css_mute <#userid or name> [time in minutes/0 perm] [reason] - Mute player\n- css_addmute <steamid> [time in minutes/0 perm] [reason] - Mute player via steamid64\n- css_give <#userid or name> <weapon> - Give player a weapon\n- css_slay <#userid or name> - Kill player\n- css_slap <#userid or name> [damage] - Slap player\n- css_map <mapname> - Change map\n- css_wsmap <name or id> - Change workshop map\n- css_asay <message> - Say message to all admins\n- css_say <message> - Say message as admin in chat\n- css_psay <#userid or name> <message> - Sends private message to player\n- css_csay <message> - Say message as admin in center\n- css_hsay <message> - Say message as admin in hud\n- css_noclip <#userid or name> - Toggle noclip for player\n- css_freeze <#userid or name> [duration] - Freeze player\n- css_unfreeze <#userid or name> - Unfreeze player\n- css_respawn <#userid or name> - Respawn player\n- css_cvar <cvar> <value> - Change cvar value\n- css_rcon <command> - Run command as server",
"sa_player_ban_message_time": "Zostałeś zbanowany za {lightred}{0}{default} na {lightred}{1}{default} minut przez {lightred}{2}{default}!",
"sa_player_ban_message_perm": "Zostałeś zbanowany na zawsze za {lightred}{0}{default} przez {lightred}{1}{default}!",
"sa_player_kick_message": "Zostałeś wyrzucony za {lightred}{0}{default} przez {lightred}{1}{default}!",
"sa_player_gag_message_time": "Zostałeś zakneblowany za {lightred}{0}{default} na {lightred}{1}{default} minut przez {lightred}{2}{default}!",
"sa_player_gag_message_perm": "Zostałeś zakneblowany na zawsze za {lightred}{0}{default} przez {lightred}{1}{default}!",
"sa_player_mute_message_time": "Zostałeś uciszony za {lightred}{0}{default} na {lightred}{1}{default} minute przez {lightred}{2}{default}!",
"sa_player_mute_message_perm": "Zostałeś uciszony na zawsze za {lightred}{0}{default} przez {lightred}{1}{default}!",
"sa_admin_ban_message_time": "Admin {lightred}{0}{default} zbanował {lightred}{1}{default} za {lightred}{2}{default} na {lightred}{3}{default} minut!",
"sa_admin_ban_message_perm": "Admin {lightred}{0}{default} zbanował {lightred}{1}{default} na zawsze za {lightred}{2}{default}!",
"sa_admin_kick_message": "Admin {lightred}{0}{default} wyrzucił {lightred}{1}{default} za {lightred}{2}{default}!",
"sa_admin_gag_message_time": "Admin {lightred}{0}{default} zakneblował {lightred}{1}{default} za {lightred}{2}{default} na {lightred}{3}{default} minut!",
"sa_admin_gag_message_perm": "Admin {lightred}{0}{default} zakneblował {lightred}{1}{default} na zawsze za {lightred}{2}{default}!",
"sa_admin_mute_message_time": "Admin {lightred}{0}{default} uciszył {lightred}{1}{default} za {lightred}{2}{default} na {lightred}{3}{default} minut!",
"sa_admin_mute_message_perm": "Admin {lightred}{0}{default} uciszył {lightred}{1}{default} na zawsze za {lightred}{2}{default}!",
"sa_admin_give_message": "Admin {lightred}{0}{default} dał {lightred}{1}{default} przedmiot {lightred}{WE{default}APON}!",
"sa_admin_slay_message": "Admin {lightred}{0}{default} zgładził {lightred}{1}{default}!",
"sa_admin_slap_message": "Admin {lightred}{0}{default} uderzył {lightred}{1}{default}!",
"sa_admin_changemap_message": "Admin {lightred}{0}{default} zmienił mapę na {lightred}{1}{default}!",
"sa_admin_noclip_message": "Admin {lightred}{0}{default} ustawił latanie dla {lightred}{1}{default}!",
"sa_admin_freeze_message": "Admin {lightred}{0}{default} zamroził {lightred}{1}{default}!",
"sa_admin_umfreeze_message": "Admin {lightred}{0}{default} odmroził {lightred}{1}{default}!",
"sa_admin_respawn_message": "Admin {lightred}{0}{default} odrodził {lightred}{1}{default}!",
"sa_adminsay_prefix": "{RED}ADMIN: {lightred}{0}{default}",
"sa_adminchat_template_admin": "{LIME}(ADMIN) {lightred}{0}{default}: {lightred}{1}{default}",
"sa_adminchat_template_player": "{SILVER}(GRACZ) {lightred}{0}{default}: {lightred}{1}{default}"
}