Merge finished

This commit is contained in:
Valentin Barat
2024-02-12 15:11:31 +01:00
parent dd3ccf4069
commit a3ebcccb6f
7 changed files with 349 additions and 268 deletions

View File

@@ -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;
@@ -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);
} }
} }
} }

View File

@@ -50,6 +50,16 @@ namespace CS2_SimpleAdmin
{ {
if (caller!.CanTarget(player)) if (caller!.CanTarget(player))
{ {
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) if (player.PawnIsAlive)
{ {
player.Pawn.Value!.Freeze(); player.Pawn.Value!.Freeze();
@@ -71,7 +81,7 @@ namespace CS2_SimpleAdmin
Task.Run(async () => Task.Run(async () =>
{ {
await _banManager.BanPlayer(playerInfo, adminInfo, reason, time); await banManager.BanPlayer(playerInfo, adminInfo, reason, time);
}); });
AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player!.UserId!), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); AddTimer(Config.KickTime, () => Helper.KickPlayer((ushort)player!.UserId!), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
@@ -123,8 +133,6 @@ namespace CS2_SimpleAdmin
} }
} }
} }
});
}
[ConsoleCommand("css_addban")] [ConsoleCommand("css_addban")]
[RequiresPermissions("@css/ban")] [RequiresPermissions("@css/ban")]

View File

@@ -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,12 +365,20 @@ namespace CS2_SimpleAdmin
if (caller!.CanTarget(player)) if (caller!.CanTarget(player))
{ {
Kick(caller, player, reason, callerName);
}
});
}
public void Kick(CCSPlayerController? caller, CCSPlayerController player, string reason = "Unknown", string callerName = null)
{
callerName ??= caller == null ? "Console" : caller.PlayerName;
if (player.PawnIsAlive) if (player.PawnIsAlive)
{ {
player.Pawn.Value!.Freeze(); player.Pawn.Value!.Freeze();
} }
if (command.ArgCount >= 2) if (string.IsNullOrEmpty(reason) == false)
{ {
if (!player.IsBot && !player.IsHLTV) if (!player.IsBot && !player.IsHLTV)
using (new WithTemporaryCulture(player.GetLanguage())) using (new WithTemporaryCulture(player.GetLanguage()))
@@ -396,18 +405,21 @@ namespace CS2_SimpleAdmin
} }
} }
} }
});
}
[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");
}
} }
} }

View File

@@ -50,6 +50,17 @@ namespace CS2_SimpleAdmin
{ {
if (caller!.CanTarget(player)) if (caller!.CanTarget(player))
{ {
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 PlayerInfo playerInfo = new PlayerInfo
{ {
SteamId = player?.SteamID.ToString(), SteamId = player?.SteamID.ToString(),
@@ -66,7 +77,7 @@ namespace CS2_SimpleAdmin
Task.Run(async () => Task.Run(async () =>
{ {
await _muteManager.MutePlayer(playerInfo, adminInfo, reason, time); await muteManager.MutePlayer(playerInfo, adminInfo, reason, time);
}); });
if (TagsDetected) if (TagsDetected)
@@ -121,8 +132,6 @@ namespace CS2_SimpleAdmin
} }
} }
} }
});
}
[ConsoleCommand("css_addgag")] [ConsoleCommand("css_addgag")]
[RequiresPermissions("@css/chat")] [RequiresPermissions("@css/chat")]
@@ -369,6 +378,17 @@ namespace CS2_SimpleAdmin
{ {
if (caller!.CanTarget(player)) if (caller!.CanTarget(player))
{ {
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 PlayerInfo playerInfo = new PlayerInfo
{ {
SteamId = player?.SteamID.ToString(), SteamId = player?.SteamID.ToString(),
@@ -387,7 +407,7 @@ namespace CS2_SimpleAdmin
Task.Run(async () => Task.Run(async () =>
{ {
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);
@@ -434,8 +454,6 @@ namespace CS2_SimpleAdmin
} }
} }
} }
});
}
[ConsoleCommand("css_addmute")] [ConsoleCommand("css_addmute")]
[RequiresPermissions("@css/chat")] [RequiresPermissions("@css/chat")]

View File

@@ -32,10 +32,18 @@ namespace CS2_SimpleAdmin
List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => player != null && player.IsValid && player.PawnIsAlive && !player.IsHLTV).ToList(); List<CCSPlayerController> playersToTarget = targets!.Players.Where(player => player != null && player.IsValid && player.PawnIsAlive && !player.IsHLTV).ToList();
playersToTarget.ForEach(player => playersToTarget.ForEach(player =>
{
Slay(caller, player, callerName);
});
}
public void Slay(CCSPlayerController? caller, CCSPlayerController player, string callerName = null)
{ {
if (!player.IsBot && player.SteamID.ToString().Length != 17) if (!player.IsBot && player.SteamID.ToString().Length != 17)
return; return;
callerName ??= caller == null ? "Console" : caller.PlayerName;
player.CommitSuicide(false, true); player.CommitSuicide(false, true);
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot)) if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
@@ -51,7 +59,6 @@ namespace CS2_SimpleAdmin
} }
} }
} }
});
} }
[ConsoleCommand("css_give")] [ConsoleCommand("css_give")]
@@ -339,6 +346,14 @@ namespace CS2_SimpleAdmin
if (caller!.CanTarget(player)) if (caller!.CanTarget(player))
{ {
Slap(caller, player, damage);
}
});
}
public void Slap(CCSPlayerController? caller, CCSPlayerController player, int damage, string callerName = null)
{
callerName ??= caller == null ? "Console" : caller.PlayerName;
player!.Pawn.Value!.Slap(damage); player!.Pawn.Value!.Slap(damage);
if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot)) if (caller == null || caller != null && !silentPlayers.Contains(caller.Slot))
@@ -354,8 +369,6 @@ namespace CS2_SimpleAdmin
} }
} }
} }
});
}
[ConsoleCommand("css_team")] [ConsoleCommand("css_team")]
[RequiresPermissions("@css/kick")] [RequiresPermissions("@css/kick")]

View File

@@ -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}");

View File

@@ -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);
} }
} }
} }