mirror of
https://github.com/daffyyyy/CS2-SimpleAdmin.git
synced 2026-02-21 11:28:14 +00:00
Merge finished
This commit is contained in:
@@ -9,13 +9,11 @@ using Microsoft.Extensions.Localization;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using MySqlConnector;
|
using MySqlConnector;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Text;
|
|
||||||
using CS2_SimpleAdmin.Menus;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin;
|
namespace CS2_SimpleAdmin;
|
||||||
|
|
||||||
[MinimumApiVersion(163)]
|
[MinimumApiVersion(163)]
|
||||||
public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdminConfig>
|
public partial class CS2_SimpleAdmin: BasePlugin, IPluginConfig<CS2_SimpleAdminConfig>
|
||||||
{
|
{
|
||||||
public static CS2_SimpleAdmin Instance { get; private set; } = null;
|
public static CS2_SimpleAdmin Instance { get; private set; } = null;
|
||||||
public static BasePlugin? _plugin = null;
|
public static BasePlugin? _plugin = null;
|
||||||
@@ -30,6 +28,9 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
public static bool voteInProgress = false;
|
public static bool voteInProgress = false;
|
||||||
public static int? ServerId = null;
|
public static int? ServerId = null;
|
||||||
|
|
||||||
|
public static DiscordWebhookClient? _discordWebhookClientLog;
|
||||||
|
public static DiscordWebhookClient? _discordWebhookClientPenalty;
|
||||||
|
|
||||||
internal string dbConnectionString = string.Empty;
|
internal string dbConnectionString = string.Empty;
|
||||||
internal static Database? _database;
|
internal static Database? _database;
|
||||||
|
|
||||||
@@ -49,7 +50,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
_plugin = this;
|
_plugin = this;
|
||||||
|
|
||||||
registerEvents();
|
registerEvents();
|
||||||
|
|
||||||
if (hotReload)
|
if (hotReload)
|
||||||
{
|
{
|
||||||
OnMapStart(string.Empty);
|
OnMapStart(string.Empty);
|
||||||
@@ -73,7 +74,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
UserID = config.DatabaseUser,
|
UserID = config.DatabaseUser,
|
||||||
Password = config.DatabasePassword,
|
Password = config.DatabasePassword,
|
||||||
Port = (uint)config.DatabasePort,
|
Port = (uint)config.DatabasePort,
|
||||||
Pooling = true,
|
Pooling = true
|
||||||
};
|
};
|
||||||
|
|
||||||
dbConnectionString = builder.ConnectionString;
|
dbConnectionString = builder.ConnectionString;
|
||||||
@@ -83,9 +84,9 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using (var connection = await _database.GetConnectionAsync())
|
using (MySqlConnection connection = await _database.GetConnectionAsync())
|
||||||
{
|
{
|
||||||
using var transaction = await connection.BeginTransactionAsync();
|
using MySqlTransaction transaction = await connection.BeginTransactionAsync();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -142,7 +143,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
|
|
||||||
public static void RemoveFromConcurrentBag(ConcurrentBag<int> bag, int playerSlot)
|
public static void RemoveFromConcurrentBag(ConcurrentBag<int> bag, int playerSlot)
|
||||||
{
|
{
|
||||||
var tempList = new List<int>();
|
List<int> tempList = new List<int>();
|
||||||
while (!bag.IsEmpty)
|
while (!bag.IsEmpty)
|
||||||
{
|
{
|
||||||
if (bag.TryTake(out int item) && item != playerSlot)
|
if (bag.TryTake(out int item) && item != playerSlot)
|
||||||
@@ -150,10 +151,10 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
tempList.Add(item);
|
tempList.Add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach (var item in tempList)
|
|
||||||
|
foreach (int item in tempList)
|
||||||
{
|
{
|
||||||
bag.Add(item);
|
bag.Add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,80 +50,88 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (caller!.CanTarget(player))
|
if (caller!.CanTarget(player))
|
||||||
{
|
{
|
||||||
if (player.PawnIsAlive)
|
Ban(caller, player, time, reason, callerName, _banManager);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Ban(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, BanManager banManager = null)
|
||||||
|
{
|
||||||
|
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
||||||
|
banManager ??= new BanManager(_database, Config);
|
||||||
|
|
||||||
|
if (player.PawnIsAlive)
|
||||||
|
{
|
||||||
|
player.Pawn.Value!.Freeze();
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerInfo playerInfo = new PlayerInfo
|
||||||
|
{
|
||||||
|
SteamId = player?.SteamID.ToString(),
|
||||||
|
Name = player?.PlayerName,
|
||||||
|
IpAddress = player?.IpAddress?.Split(":")[0]
|
||||||
|
};
|
||||||
|
|
||||||
|
PlayerInfo adminInfo = new PlayerInfo
|
||||||
|
{
|
||||||
|
SteamId = caller?.SteamID.ToString(),
|
||||||
|
Name = caller?.PlayerName,
|
||||||
|
IpAddress = caller?.IpAddress?.Split(":")[0]
|
||||||
|
};
|
||||||
|
|
||||||
|
Task.Run(async () =>
|
||||||
|
{
|
||||||
|
await banManager.BanPlayer(playerInfo, adminInfo, reason, time);
|
||||||
|
});
|
||||||
|
|
||||||
|
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player!.UserId!), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
|
if (playerInfo.IpAddress != null && !bannedPlayers.Contains(playerInfo.IpAddress))
|
||||||
|
bannedPlayers.Add(playerInfo.IpAddress);
|
||||||
|
if (!bannedPlayers.Contains(player!.SteamID.ToString()))
|
||||||
|
bannedPlayers.Add(player.SteamID.ToString());
|
||||||
|
|
||||||
|
if (time == 0)
|
||||||
|
{
|
||||||
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
player.Pawn.Value!.Freeze();
|
player!.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerInfo playerInfo = new PlayerInfo
|
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
||||||
|
{
|
||||||
|
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
||||||
{
|
{
|
||||||
SteamId = player?.SteamID.ToString(),
|
using (new WithTemporaryCulture(_player.GetLanguage()))
|
||||||
Name = player?.PlayerName,
|
|
||||||
IpAddress = player?.IpAddress?.Split(":")[0]
|
|
||||||
};
|
|
||||||
|
|
||||||
PlayerInfo adminInfo = new PlayerInfo
|
|
||||||
{
|
|
||||||
SteamId = caller?.SteamID.ToString(),
|
|
||||||
Name = caller?.PlayerName,
|
|
||||||
IpAddress = caller?.IpAddress?.Split(":")[0]
|
|
||||||
};
|
|
||||||
|
|
||||||
Task.Run(async () =>
|
|
||||||
{
|
|
||||||
await _banManager.BanPlayer(playerInfo, adminInfo, reason, time);
|
|
||||||
});
|
|
||||||
|
|
||||||
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player!.UserId!), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
|
||||||
|
|
||||||
if (playerInfo.IpAddress != null && !bannedPlayers.Contains(playerInfo.IpAddress))
|
|
||||||
bannedPlayers.Add(playerInfo.IpAddress);
|
|
||||||
if (!bannedPlayers.Contains(player!.SteamID.ToString()))
|
|
||||||
bannedPlayers.Add(player.SteamID.ToString());
|
|
||||||
|
|
||||||
if (time == 0)
|
|
||||||
{
|
|
||||||
if (!player.IsBot && !player.IsHLTV)
|
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
|
||||||
{
|
|
||||||
player!.PrintToCenter(_localizer!["sa_player_ban_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
|
||||||
{
|
{
|
||||||
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
||||||
{
|
sb.Append(_localizer["sa_admin_ban_message_perm", callerName, player.PlayerName, reason]);
|
||||||
using (new WithTemporaryCulture(_player.GetLanguage()))
|
_player.PrintToChat(sb.ToString());
|
||||||
{
|
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
|
||||||
sb.Append(_localizer["sa_admin_ban_message_perm", callerName, player.PlayerName, reason]);
|
|
||||||
_player.PrintToChat(sb.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!player.IsBot && !player.IsHLTV)
|
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
|
||||||
{
|
|
||||||
player!.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
|
||||||
}
|
|
||||||
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
|
||||||
{
|
|
||||||
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
|
||||||
{
|
|
||||||
using (new WithTemporaryCulture(_player.GetLanguage()))
|
|
||||||
{
|
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
|
||||||
sb.Append(_localizer["sa_admin_ban_message_time", callerName, player.PlayerName, reason, time]);
|
|
||||||
_player.PrintToChat(sb.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
|
{
|
||||||
|
player!.PrintToCenter(_localizer!["sa_player_ban_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
|
}
|
||||||
|
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
||||||
|
{
|
||||||
|
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
||||||
|
{
|
||||||
|
using (new WithTemporaryCulture(_player.GetLanguage()))
|
||||||
|
{
|
||||||
|
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
||||||
|
sb.Append(_localizer["sa_admin_ban_message_time", callerName, player.PlayerName, reason, time]);
|
||||||
|
_player.PrintToChat(sb.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[ConsoleCommand("css_addban")]
|
[ConsoleCommand("css_addban")]
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ using CounterStrikeSharp.API.Modules.Entities;
|
|||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Discord.Rest;
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin
|
namespace CS2_SimpleAdmin
|
||||||
{
|
{
|
||||||
@@ -364,50 +365,61 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller!.CanTarget(player))
|
if (caller!.CanTarget(player))
|
||||||
{
|
{
|
||||||
if (player.PawnIsAlive)
|
Kick(caller, player, reason, callerName);
|
||||||
{
|
|
||||||
player.Pawn.Value!.Freeze();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (command.ArgCount >= 2)
|
|
||||||
{
|
|
||||||
if (!player.IsBot && !player.IsHLTV)
|
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
|
||||||
{
|
|
||||||
player.PrintToCenter(_localizer!["sa_player_kick_message", reason, caller == null ? "Console" : caller.PlayerName]);
|
|
||||||
}
|
|
||||||
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!, reason), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains(caller.Slot))
|
|
||||||
{
|
|
||||||
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
|
||||||
{
|
|
||||||
using (new WithTemporaryCulture(_player.GetLanguage()))
|
|
||||||
{
|
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
|
||||||
sb.Append(_localizer["sa_admin_kick_message", callerName, player.PlayerName, reason]);
|
|
||||||
_player.PrintToChat(sb.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Kick(CCSPlayerController? caller, CCSPlayerController player, string reason = "Unknown", string callerName = null)
|
||||||
|
{
|
||||||
|
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
||||||
|
if (player.PawnIsAlive)
|
||||||
|
{
|
||||||
|
player.Pawn.Value!.Freeze();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(reason) == false)
|
||||||
|
{
|
||||||
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
|
{
|
||||||
|
player.PrintToCenter(_localizer!["sa_player_kick_message", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
|
}
|
||||||
|
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!, reason), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player.UserId!), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (caller == null || caller != null && caller.UserId != null && !silentPlayers.Contains(caller.Slot))
|
||||||
|
{
|
||||||
|
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
||||||
|
{
|
||||||
|
using (new WithTemporaryCulture(_player.GetLanguage()))
|
||||||
|
{
|
||||||
|
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
||||||
|
sb.Append(_localizer["sa_admin_kick_message", callerName, player.PlayerName, reason]);
|
||||||
|
_player.PrintToChat(sb.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[ConsoleCommand("css_changemap")]
|
[ConsoleCommand("css_changemap")]
|
||||||
[ConsoleCommand("css_map")]
|
[ConsoleCommand("css_map")]
|
||||||
[RequiresPermissions("@css/changemap")]
|
[RequiresPermissions("@css/changemap")]
|
||||||
[CommandHelper(minArgs: 1, usage: "<mapname>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 1, usage: "<mapname>", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
public void OnMapCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnMapCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
|
{
|
||||||
|
string? map = command.GetCommandString.Split(" ")[1];
|
||||||
|
ChangeMap(caller, map, command);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ChangeMap(CCSPlayerController caller, string map, CommandInfo? command = null)
|
||||||
{
|
{
|
||||||
string callerName = caller == null ? "Console" : caller.PlayerName;
|
string callerName = caller == null ? "Console" : caller.PlayerName;
|
||||||
string _command = string.Empty;
|
string _command = string.Empty;
|
||||||
string? map = command.GetCommandString.Split(" ")[1];
|
|
||||||
|
|
||||||
if (map.StartsWith("ws:"))
|
if (map.StartsWith("ws:"))
|
||||||
{
|
{
|
||||||
@@ -423,7 +435,8 @@ namespace CS2_SimpleAdmin
|
|||||||
if (_discordWebhookClientLog != null && _localizer != null)
|
if (_discordWebhookClientLog != null && _localizer != null)
|
||||||
{
|
{
|
||||||
string communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
|
string communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
|
||||||
_discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(_localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", command.GetCommandString]));
|
string commandName = command?.GetCommandString ?? "css_changemap";
|
||||||
|
_discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(_localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", commandName]));
|
||||||
}
|
}
|
||||||
|
|
||||||
AddTimer(2.0f, () =>
|
AddTimer(2.0f, () =>
|
||||||
@@ -435,7 +448,13 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (!Server.IsMapValid(map))
|
if (!Server.IsMapValid(map))
|
||||||
{
|
{
|
||||||
command.ReplyToCommand($"Map {map} not found.");
|
string msg = $"Map {map} not found.";
|
||||||
|
if (command != null)
|
||||||
|
command.ReplyToCommand(msg);
|
||||||
|
else if (caller != null && caller.IsValid)
|
||||||
|
caller.PrintToChat(msg);
|
||||||
|
else
|
||||||
|
Server.PrintToConsole(msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -468,10 +487,15 @@ namespace CS2_SimpleAdmin
|
|||||||
[CommandHelper(1, "<name or id>")]
|
[CommandHelper(1, "<name or id>")]
|
||||||
[RequiresPermissions("@css/changemap")]
|
[RequiresPermissions("@css/changemap")]
|
||||||
public void OnWorkshopMapCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnWorkshopMapCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
|
{
|
||||||
|
string? map = command.GetArg(1);
|
||||||
|
ChangeWorkshopMap(caller, map, command);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ChangeWorkshopMap(CCSPlayerController caller, string map, CommandInfo? command = null)
|
||||||
{
|
{
|
||||||
string callerName = caller == null ? "Console" : caller.PlayerName;
|
string callerName = caller == null ? "Console" : caller.PlayerName;
|
||||||
string _command = string.Empty;
|
string _command = string.Empty;
|
||||||
string? map = command.GetArg(1);
|
|
||||||
|
|
||||||
if (long.TryParse(map, out long mapId))
|
if (long.TryParse(map, out long mapId))
|
||||||
{
|
{
|
||||||
@@ -498,7 +522,8 @@ namespace CS2_SimpleAdmin
|
|||||||
if (_discordWebhookClientLog != null && _localizer != null)
|
if (_discordWebhookClientLog != null && _localizer != null)
|
||||||
{
|
{
|
||||||
string communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
|
string communityUrl = caller != null ? "<" + new SteamID(caller.SteamID).ToCommunityUrl().ToString() + ">" : "<https://steamcommunity.com/profiles/0>";
|
||||||
_discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(_localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", command.GetCommandString]));
|
string commandName = command?.GetCommandString ?? "css_changewsmap";
|
||||||
|
_discordWebhookClientLog.SendMessageAsync(Helper.GenerateMessageDiscord(_localizer["sa_discord_log_command", $"[{callerName}]({communityUrl})", commandName]));
|
||||||
}
|
}
|
||||||
|
|
||||||
AddTimer(2.0f, () =>
|
AddTimer(2.0f, () =>
|
||||||
@@ -558,5 +583,24 @@ namespace CS2_SimpleAdmin
|
|||||||
command.ReplyToCommand($"{callerName} executed command {command.ArgString}.");
|
command.ReplyToCommand($"{callerName} executed command {command.ArgString}.");
|
||||||
Logger.LogInformation($"{callerName} executed command ({command.ArgString}).");
|
Logger.LogInformation($"{callerName} executed command ({command.ArgString}).");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[ConsoleCommand("css_rr")]
|
||||||
|
[ConsoleCommand("css_rg")]
|
||||||
|
[ConsoleCommand("css_restart")]
|
||||||
|
[ConsoleCommand("css_restartgame")]
|
||||||
|
[RequiresPermissions("@css/generic")]
|
||||||
|
[CommandHelper(minArgs: 1, usage: "", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
|
public void OnRestartCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
|
{
|
||||||
|
RestartGame(caller);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RestartGame(CCSPlayerController admin)
|
||||||
|
{
|
||||||
|
// TODO: Localize
|
||||||
|
var name = admin == null ? "Console" : admin.PlayerName;
|
||||||
|
Server.PrintToChatAll($"[SimpleAdmin] {name}: Restarting game...");
|
||||||
|
Server.ExecuteCommand("mp_restartgame 2");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,78 +50,87 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (caller!.CanTarget(player))
|
if (caller!.CanTarget(player))
|
||||||
{
|
{
|
||||||
PlayerInfo playerInfo = new PlayerInfo
|
Gag(caller, player, time, reason, callerName, _muteManager, playerPenaltyManager);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Gag(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, MuteManager muteManager = null, PlayerPenaltyManager playerPenaltyManager = null)
|
||||||
|
{
|
||||||
|
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
||||||
|
muteManager ??= new MuteManager(_database);
|
||||||
|
playerPenaltyManager ??= new PlayerPenaltyManager();
|
||||||
|
|
||||||
|
PlayerInfo playerInfo = new PlayerInfo
|
||||||
|
{
|
||||||
|
SteamId = player?.SteamID.ToString(),
|
||||||
|
Name = player?.PlayerName,
|
||||||
|
IpAddress = player?.IpAddress?.Split(":")[0]
|
||||||
|
};
|
||||||
|
|
||||||
|
PlayerInfo adminInfo = new PlayerInfo
|
||||||
|
{
|
||||||
|
SteamId = caller?.SteamID.ToString(),
|
||||||
|
Name = caller?.PlayerName,
|
||||||
|
IpAddress = caller?.IpAddress?.Split(":")[0]
|
||||||
|
};
|
||||||
|
|
||||||
|
Task.Run(async () =>
|
||||||
|
{
|
||||||
|
await muteManager.MutePlayer(playerInfo, adminInfo, reason, time);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (TagsDetected)
|
||||||
|
Server.ExecuteCommand($"css_tag_mute {player!.SteamID}");
|
||||||
|
|
||||||
|
playerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Gag, DateTime.Now.AddMinutes(time), time);
|
||||||
|
|
||||||
|
if (time == 0)
|
||||||
|
{
|
||||||
|
if (!player!.IsBot && !player.IsHLTV)
|
||||||
|
{
|
||||||
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
SteamId = player?.SteamID.ToString(),
|
player.PrintToCenter(_localizer!["sa_player_gag_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
Name = player?.PlayerName,
|
|
||||||
IpAddress = player?.IpAddress?.Split(":")[0]
|
|
||||||
};
|
|
||||||
|
|
||||||
PlayerInfo adminInfo = new PlayerInfo
|
|
||||||
{
|
|
||||||
SteamId = caller?.SteamID.ToString(),
|
|
||||||
Name = caller?.PlayerName,
|
|
||||||
IpAddress = caller?.IpAddress?.Split(":")[0]
|
|
||||||
};
|
|
||||||
|
|
||||||
Task.Run(async () =>
|
|
||||||
{
|
|
||||||
await _muteManager.MutePlayer(playerInfo, adminInfo, reason, time);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (TagsDetected)
|
|
||||||
Server.ExecuteCommand($"css_tag_mute {player!.SteamID}");
|
|
||||||
|
|
||||||
playerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Gag, DateTime.Now.AddMinutes(time), time);
|
|
||||||
|
|
||||||
if (time == 0)
|
|
||||||
{
|
|
||||||
if (!player!.IsBot && !player.IsHLTV)
|
|
||||||
{
|
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
|
||||||
{
|
|
||||||
player.PrintToCenter(_localizer!["sa_player_gag_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
|
||||||
{
|
|
||||||
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
|
||||||
{
|
|
||||||
using (new WithTemporaryCulture(_player.GetLanguage()))
|
|
||||||
{
|
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
|
||||||
sb.Append(_localizer["sa_admin_gag_message_perm", callerName, player.PlayerName, reason]);
|
|
||||||
_player.PrintToChat(sb.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
|
||||||
if (!player!.IsBot && !player.IsHLTV)
|
|
||||||
{
|
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
|
||||||
{
|
|
||||||
player!.PrintToCenter(_localizer!["sa_player_gag_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (caller == null || caller != null && caller != null && !silentPlayers.Contains(caller.Slot))
|
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
||||||
|
{
|
||||||
|
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
||||||
|
{
|
||||||
|
using (new WithTemporaryCulture(_player.GetLanguage()))
|
||||||
{
|
{
|
||||||
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
||||||
{
|
sb.Append(_localizer["sa_admin_gag_message_perm", callerName, player.PlayerName, reason]);
|
||||||
using (new WithTemporaryCulture(_player.GetLanguage()))
|
_player.PrintToChat(sb.ToString());
|
||||||
{
|
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
|
||||||
sb.Append(_localizer["sa_admin_gag_message_time", callerName, player.PlayerName, reason, time]);
|
|
||||||
_player.PrintToChat(sb.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!player!.IsBot && !player.IsHLTV)
|
||||||
|
{
|
||||||
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
|
{
|
||||||
|
player!.PrintToCenter(_localizer!["sa_player_gag_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (caller == null || caller != null && caller != null && !silentPlayers.Contains(caller.Slot))
|
||||||
|
{
|
||||||
|
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
||||||
|
{
|
||||||
|
using (new WithTemporaryCulture(_player.GetLanguage()))
|
||||||
|
{
|
||||||
|
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
||||||
|
sb.Append(_localizer["sa_admin_gag_message_time", callerName, player.PlayerName, reason, time]);
|
||||||
|
_player.PrintToChat(sb.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[ConsoleCommand("css_addgag")]
|
[ConsoleCommand("css_addgag")]
|
||||||
@@ -369,72 +378,81 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (caller!.CanTarget(player))
|
if (caller!.CanTarget(player))
|
||||||
{
|
{
|
||||||
PlayerInfo playerInfo = new PlayerInfo
|
Mute(caller, player, time, reason, callerName, _muteManager, playerPenaltyManager);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Mute(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string callerName = null, MuteManager muteManager = null, PlayerPenaltyManager playerPenaltyManager = null)
|
||||||
|
{
|
||||||
|
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
||||||
|
muteManager ??= new MuteManager(_database);
|
||||||
|
playerPenaltyManager ??= new PlayerPenaltyManager();
|
||||||
|
|
||||||
|
PlayerInfo playerInfo = new PlayerInfo
|
||||||
|
{
|
||||||
|
SteamId = player?.SteamID.ToString(),
|
||||||
|
Name = player?.PlayerName,
|
||||||
|
IpAddress = player?.IpAddress?.Split(":")[0]
|
||||||
|
};
|
||||||
|
|
||||||
|
PlayerInfo adminInfo = new PlayerInfo
|
||||||
|
{
|
||||||
|
SteamId = caller?.SteamID.ToString(),
|
||||||
|
Name = caller?.PlayerName,
|
||||||
|
IpAddress = caller?.IpAddress?.Split(":")[0]
|
||||||
|
};
|
||||||
|
|
||||||
|
player!.VoiceFlags = VoiceFlags.Muted;
|
||||||
|
|
||||||
|
Task.Run(async () =>
|
||||||
|
{
|
||||||
|
await muteManager.MutePlayer(playerInfo, adminInfo, reason, time, 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
playerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Mute, DateTime.Now.AddMinutes(time), time);
|
||||||
|
|
||||||
|
if (time == 0)
|
||||||
|
{
|
||||||
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
{
|
{
|
||||||
SteamId = player?.SteamID.ToString(),
|
player!.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
||||||
Name = player?.PlayerName,
|
|
||||||
IpAddress = player?.IpAddress?.Split(":")[0]
|
|
||||||
};
|
|
||||||
|
|
||||||
PlayerInfo adminInfo = new PlayerInfo
|
|
||||||
{
|
|
||||||
SteamId = caller?.SteamID.ToString(),
|
|
||||||
Name = caller?.PlayerName,
|
|
||||||
IpAddress = caller?.IpAddress?.Split(":")[0]
|
|
||||||
};
|
|
||||||
|
|
||||||
player!.VoiceFlags = VoiceFlags.Muted;
|
|
||||||
|
|
||||||
Task.Run(async () =>
|
|
||||||
{
|
|
||||||
await _muteManager.MutePlayer(playerInfo, adminInfo, reason, time, 1);
|
|
||||||
});
|
|
||||||
|
|
||||||
playerPenaltyManager.AddPenalty(player!.Slot, PenaltyType.Mute, DateTime.Now.AddMinutes(time), time);
|
|
||||||
|
|
||||||
if (time == 0)
|
|
||||||
{
|
|
||||||
if (!player.IsBot && !player.IsHLTV)
|
|
||||||
using (new WithTemporaryCulture(player.GetLanguage()))
|
|
||||||
{
|
|
||||||
player!.PrintToCenter(_localizer!["sa_player_mute_message_perm", reason, caller == null ? "Console" : caller.PlayerName]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
|
||||||
{
|
|
||||||
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
|
||||||
{
|
|
||||||
using (new WithTemporaryCulture(_player.GetLanguage()))
|
|
||||||
{
|
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
|
||||||
sb.Append(_localizer["sa_admin_mute_message_perm", callerName, player.PlayerName, reason]);
|
|
||||||
_player.PrintToChat(sb.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
||||||
|
{
|
||||||
|
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
||||||
{
|
{
|
||||||
if (!player.IsBot && !player.IsHLTV)
|
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]);
|
|
||||||
}
|
|
||||||
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
|
||||||
{
|
{
|
||||||
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
||||||
{
|
sb.Append(_localizer["sa_admin_mute_message_perm", callerName, player.PlayerName, reason]);
|
||||||
using (new WithTemporaryCulture(_player.GetLanguage()))
|
_player.PrintToChat(sb.ToString());
|
||||||
{
|
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
|
||||||
sb.Append(_localizer["sa_admin_mute_message_time", callerName, player.PlayerName, reason, time]);
|
|
||||||
_player.PrintToChat(sb.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!player.IsBot && !player.IsHLTV)
|
||||||
|
using (new WithTemporaryCulture(player.GetLanguage()))
|
||||||
|
{
|
||||||
|
player!.PrintToCenter(_localizer!["sa_player_mute_message_time", reason, time, caller == null ? "Console" : caller.PlayerName]);
|
||||||
|
}
|
||||||
|
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
||||||
|
{
|
||||||
|
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
||||||
|
{
|
||||||
|
using (new WithTemporaryCulture(_player.GetLanguage()))
|
||||||
|
{
|
||||||
|
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
||||||
|
sb.Append(_localizer["sa_admin_mute_message_time", callerName, player.PlayerName, reason, time]);
|
||||||
|
_player.PrintToChat(sb.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[ConsoleCommand("css_addmute")]
|
[ConsoleCommand("css_addmute")]
|
||||||
|
|||||||
@@ -33,25 +33,32 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
playersToTarget.ForEach(player =>
|
playersToTarget.ForEach(player =>
|
||||||
{
|
{
|
||||||
if (!player.IsBot && player.SteamID.ToString().Length != 17)
|
Slay(caller, player, callerName);
|
||||||
return;
|
});
|
||||||
|
}
|
||||||
|
|
||||||
player.CommitSuicide(false, true);
|
public void Slay(CCSPlayerController? caller, CCSPlayerController player, string callerName = null)
|
||||||
|
{
|
||||||
|
if (!player.IsBot && player.SteamID.ToString().Length != 17)
|
||||||
|
return;
|
||||||
|
|
||||||
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
||||||
|
|
||||||
|
player.CommitSuicide(false, true);
|
||||||
|
|
||||||
|
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
||||||
|
{
|
||||||
|
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
||||||
{
|
{
|
||||||
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
using (new WithTemporaryCulture(_player.GetLanguage()))
|
||||||
{
|
{
|
||||||
using (new WithTemporaryCulture(_player.GetLanguage()))
|
|
||||||
{
|
|
||||||
|
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
||||||
sb.Append(_localizer["sa_admin_slay_message", callerName, player.PlayerName]);
|
sb.Append(_localizer["sa_admin_slay_message", callerName, player.PlayerName]);
|
||||||
_player.PrintToChat(sb.ToString());
|
_player.PrintToChat(sb.ToString());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[ConsoleCommand("css_give")]
|
[ConsoleCommand("css_give")]
|
||||||
@@ -339,24 +346,30 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
if (caller!.CanTarget(player))
|
if (caller!.CanTarget(player))
|
||||||
{
|
{
|
||||||
player!.Pawn.Value!.Slap(damage);
|
Slap(caller, player, damage);
|
||||||
|
|
||||||
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
|
||||||
{
|
|
||||||
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
|
||||||
{
|
|
||||||
using (new WithTemporaryCulture(_player.GetLanguage()))
|
|
||||||
{
|
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
|
||||||
sb.Append(_localizer["sa_admin_slap_message", callerName, player.PlayerName]);
|
|
||||||
_player.PrintToChat(sb.ToString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Slap(CCSPlayerController? caller, CCSPlayerController player, int damage, string callerName = null)
|
||||||
|
{
|
||||||
|
callerName ??= caller == null ? "Console" : caller.PlayerName;
|
||||||
|
player!.Pawn.Value!.Slap(damage);
|
||||||
|
|
||||||
|
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
|
||||||
|
{
|
||||||
|
foreach (CCSPlayerController _player in Helper.GetValidPlayers())
|
||||||
|
{
|
||||||
|
using (new WithTemporaryCulture(_player.GetLanguage()))
|
||||||
|
{
|
||||||
|
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
||||||
|
sb.Append(_localizer["sa_admin_slap_message", callerName, player.PlayerName]);
|
||||||
|
_player.PrintToChat(sb.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[ConsoleCommand("css_team")]
|
[ConsoleCommand("css_team")]
|
||||||
[RequiresPermissions("@css/kick")]
|
[RequiresPermissions("@css/kick")]
|
||||||
[CommandHelper(minArgs: 2, usage: "<#userid or name> [<ct/tt/spec>] [-k]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 2, usage: "<#userid or name> [<ct/tt/spec>] [-k]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
|
|||||||
@@ -67,11 +67,6 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu);
|
MenuManager.OpenCenterHtmlMenu(CS2_SimpleAdmin.Instance, admin, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void WhoIs(CCSPlayerController admin, CCSPlayerController player)
|
|
||||||
{
|
|
||||||
CS2_SimpleAdmin.Instance.Who(admin, player);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void SlapMenu(CCSPlayerController admin, CCSPlayerController player)
|
private static void SlapMenu(CCSPlayerController admin, CCSPlayerController player)
|
||||||
{
|
{
|
||||||
CenterHtmlMenu menu = new CenterHtmlMenu($"Slap {player.PlayerName}");
|
CenterHtmlMenu menu = new CenterHtmlMenu($"Slap {player.PlayerName}");
|
||||||
|
|||||||
@@ -73,7 +73,9 @@ namespace CS2_SimpleAdmin.Menus
|
|||||||
private static void ExecuteChangeMap(CCSPlayerController admin, string mapName, bool workshop)
|
private static void ExecuteChangeMap(CCSPlayerController admin, string mapName, bool workshop)
|
||||||
{
|
{
|
||||||
if (workshop)
|
if (workshop)
|
||||||
CS2_SimpleAdmin.Instance.ChangeWSMap(admin, mapName);
|
CS2_SimpleAdmin.Instance.ChangeWorkshopMap(admin, mapName);
|
||||||
|
else
|
||||||
|
CS2_SimpleAdmin.Instance.ChangeMap(admin, mapName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user