mirror of
https://github.com/daffyyyy/CS2-SimpleAdmin.git
synced 2026-03-07 23:37:56 +00:00
1.6.3b
```diff + Small code cleanup + FIXED ban check on connect ```
This commit is contained in:
@@ -3,6 +3,7 @@ using CounterStrikeSharp.API.Core.Attributes;
|
|||||||
using CounterStrikeSharp.API.Core.Capabilities;
|
using CounterStrikeSharp.API.Core.Capabilities;
|
||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
||||||
|
using CounterStrikeSharp.API.Modules.Entities;
|
||||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
using CS2_SimpleAdmin.Managers;
|
using CS2_SimpleAdmin.Managers;
|
||||||
using CS2_SimpleAdminApi;
|
using CS2_SimpleAdminApi;
|
||||||
@@ -19,7 +20,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)");
|
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.6.3a";
|
public override string ModuleVersion => "1.6.3b";
|
||||||
|
|
||||||
public override void Load(bool hotReload)
|
public override void Load(bool hotReload)
|
||||||
{
|
{
|
||||||
@@ -48,6 +49,8 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
|
|
||||||
SimpleAdminApi = new Api.CS2_SimpleAdminApi();
|
SimpleAdminApi = new Api.CS2_SimpleAdminApi();
|
||||||
Capabilities.RegisterPluginCapability(ICS2_SimpleAdminApi.PluginCapability, () => SimpleAdminApi);
|
Capabilities.RegisterPluginCapability(ICS2_SimpleAdminApi.PluginCapability, () => SimpleAdminApi);
|
||||||
|
|
||||||
|
new PlayerManager().CheckPlayersTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnAllPluginsLoaded(bool hotReload)
|
public override void OnAllPluginsLoaded(bool hotReload)
|
||||||
@@ -63,13 +66,13 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
|
|
||||||
public void OnConfigParsed(CS2_SimpleAdminConfig config)
|
public void OnConfigParsed(CS2_SimpleAdminConfig config)
|
||||||
{
|
{
|
||||||
|
Instance = this;
|
||||||
|
_logger = Logger;
|
||||||
|
|
||||||
if (config.DatabaseHost.Length < 1 || config.DatabaseName.Length < 1 || config.DatabaseUser.Length < 1)
|
if (config.DatabaseHost.Length < 1 || config.DatabaseName.Length < 1 || config.DatabaseUser.Length < 1)
|
||||||
{
|
{
|
||||||
throw new Exception("[CS2-SimpleAdmin] You need to setup Database credentials in config!");
|
throw new Exception("[CS2-SimpleAdmin] You need to setup Database credentials in config!");
|
||||||
}
|
}
|
||||||
|
|
||||||
Instance = this;
|
|
||||||
_logger = Logger;
|
|
||||||
|
|
||||||
MySqlConnectionStringBuilder builder = new()
|
MySqlConnectionStringBuilder builder = new()
|
||||||
{
|
{
|
||||||
@@ -95,11 +98,6 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(() => Database.DatabaseMigration());
|
Task.Run(() => Database.DatabaseMigration());
|
||||||
|
|
||||||
PermissionManager = new PermissionManager(Database);
|
|
||||||
BanManager = new BanManager(Database);
|
|
||||||
MuteManager = new MuteManager(Database);
|
|
||||||
WarnManager = new WarnManager(Database);
|
|
||||||
|
|
||||||
Config = config;
|
Config = config;
|
||||||
Helper.UpdateConfig(config);
|
Helper.UpdateConfig(config);
|
||||||
|
|
||||||
@@ -116,6 +114,11 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
PluginInfo.ShowAd(ModuleVersion);
|
PluginInfo.ShowAd(ModuleVersion);
|
||||||
if (Config.EnableUpdateCheck)
|
if (Config.EnableUpdateCheck)
|
||||||
Task.Run(async () => await PluginInfo.CheckVersion(ModuleVersion, _logger));
|
Task.Run(async () => await PluginInfo.CheckVersion(ModuleVersion, _logger));
|
||||||
|
|
||||||
|
PermissionManager = new PermissionManager(Database);
|
||||||
|
BanManager = new BanManager(Database);
|
||||||
|
MuteManager = new MuteManager(Database);
|
||||||
|
WarnManager = new WarnManager(Database);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TargetResult? GetTarget(CommandInfo command)
|
private static TargetResult? GetTarget(CommandInfo command)
|
||||||
|
|||||||
@@ -394,8 +394,6 @@ public partial class CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
if (Database == null) return;
|
if (Database == null) return;
|
||||||
|
|
||||||
var callerSteamId = caller?.SteamID.ToString() ?? _localizer?["sa_console"] ?? "Console";
|
|
||||||
|
|
||||||
if (command.GetArg(1).Length <= 1)
|
if (command.GetArg(1).Length <= 1)
|
||||||
{
|
{
|
||||||
command.ReplyToCommand($"Too short pattern to search.");
|
command.ReplyToCommand($"Too short pattern to search.");
|
||||||
|
|||||||
@@ -198,10 +198,9 @@ public partial class 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;
|
||||||
PermissionManager 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);
|
_ = Instance.PermissionManager.AddAdminBySteamId(steamid, name, flagsList, immunity, time, globalAdmin);
|
||||||
|
|
||||||
Helper.LogCommand(caller, $"css_addadmin {steamid} {name} {flags} {immunity} {time}");
|
Helper.LogCommand(caller, $"css_addadmin {steamid} {name} {flags} {immunity} {time}");
|
||||||
|
|
||||||
@@ -289,10 +288,9 @@ public partial class CS2_SimpleAdmin
|
|||||||
private static void AddGroup(CCSPlayerController? caller, string name, string flags, int immunity, bool globalGroup, CommandInfo? command = null)
|
private static void AddGroup(CCSPlayerController? caller, string name, string flags, int immunity, bool globalGroup, CommandInfo? command = null)
|
||||||
{
|
{
|
||||||
if (Database == null) return;
|
if (Database == null) return;
|
||||||
PermissionManager 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, globalGroup);
|
_ = Instance.PermissionManager.AddGroup(name, flagsList, immunity, globalGroup);
|
||||||
|
|
||||||
Helper.LogCommand(caller, $"css_addgroup {name} {flags} {immunity}");
|
Helper.LogCommand(caller, $"css_addgroup {name} {flags} {immunity}");
|
||||||
|
|
||||||
@@ -367,12 +365,10 @@ public partial class CS2_SimpleAdmin
|
|||||||
AdminManager.RemovePlayerAdminData(steamId);
|
AdminManager.RemovePlayerAdminData(steamId);
|
||||||
}
|
}
|
||||||
|
|
||||||
PermissionManager adminManager = new(Database);
|
|
||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await adminManager.CrateGroupsJsonFile();
|
await PermissionManager.CrateGroupsJsonFile();
|
||||||
await adminManager.CreateAdminsJsonFile();
|
await PermissionManager.CreateAdminsJsonFile();
|
||||||
|
|
||||||
var adminsFile = await File.ReadAllTextAsync(Instance.ModuleDirectory + "/data/admins.json");
|
var adminsFile = await File.ReadAllTextAsync(Instance.ModuleDirectory + "/data/admins.json");
|
||||||
var groupsFile = await File.ReadAllTextAsync(Instance.ModuleDirectory + "/data/groups.json");
|
var groupsFile = await File.ReadAllTextAsync(Instance.ModuleDirectory + "/data/groups.json");
|
||||||
|
|||||||
@@ -42,18 +42,17 @@ public partial class CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Gag(caller, player, time, reason, callerName, MuteManager, command);
|
Gag(caller, player, time, reason, callerName, command);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Gag(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, CommandInfo? command = null, bool silent = false)
|
internal void Gag(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, CommandInfo? command = null, bool silent = false)
|
||||||
{
|
{
|
||||||
if (Database == null || !player.IsValid || !player.UserId.HasValue) return;
|
if (Database == null || !player.IsValid || !player.UserId.HasValue) return;
|
||||||
if (!caller.CanTarget(player)) return;
|
if (!caller.CanTarget(player)) return;
|
||||||
|
|
||||||
// Set default caller name if not provided
|
// Set default caller name if not provided
|
||||||
callerName ??= caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName;
|
callerName ??= caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName;
|
||||||
muteManager ??= new MuteManager(Database);
|
|
||||||
|
|
||||||
// Get player and admin information
|
// Get player and admin information
|
||||||
var playerInfo = PlayersInfo[player.UserId.Value];
|
var playerInfo = PlayersInfo[player.UserId.Value];
|
||||||
@@ -62,7 +61,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
// Asynchronously handle gag logic
|
// Asynchronously handle gag logic
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.MutePlayer(playerInfo, adminInfo, reason, time);
|
await MuteManager.MutePlayer(playerInfo, adminInfo, reason, time);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Add penalty to the player's penalty manager
|
// Add penalty to the player's penalty manager
|
||||||
@@ -141,7 +140,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
if (!caller.CanTarget(player)) return;
|
if (!caller.CanTarget(player)) return;
|
||||||
|
|
||||||
// Perform the gag for an online player
|
// Perform the gag for an online player
|
||||||
Gag(caller, player, time, reason, callerName, MuteManager, silent: true);
|
Gag(caller, player, time, reason, callerName, silent: true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -176,7 +175,6 @@ public partial class CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
var muteManager = new MuteManager(Database);
|
|
||||||
|
|
||||||
// Check if pattern is a valid SteamID64
|
// Check if pattern is a valid SteamID64
|
||||||
if (Helper.ValidateSteamId(pattern, out var steamId) && steamId != null)
|
if (Helper.ValidateSteamId(pattern, out var steamId) && steamId != null)
|
||||||
@@ -190,7 +188,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.UnmutePlayer(player.SteamID.ToString(), callerSteamId, reason);
|
await MuteManager.UnmutePlayer(player.SteamID.ToString(), callerSteamId, reason);
|
||||||
});
|
});
|
||||||
|
|
||||||
command.ReplyToCommand($"Ungaged player {player.PlayerName}.");
|
command.ReplyToCommand($"Ungaged player {player.PlayerName}.");
|
||||||
@@ -211,7 +209,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.UnmutePlayer(namePlayer.SteamID.ToString(), callerSteamId, reason);
|
await MuteManager.UnmutePlayer(namePlayer.SteamID.ToString(), callerSteamId, reason);
|
||||||
});
|
});
|
||||||
|
|
||||||
command.ReplyToCommand($"Ungaged player {namePlayer.PlayerName}.");
|
command.ReplyToCommand($"Ungaged player {namePlayer.PlayerName}.");
|
||||||
@@ -220,7 +218,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.UnmutePlayer(pattern, callerSteamId, reason);
|
await MuteManager.UnmutePlayer(pattern, callerSteamId, reason);
|
||||||
});
|
});
|
||||||
|
|
||||||
command.ReplyToCommand($"Ungaged offline player with pattern {pattern}.");
|
command.ReplyToCommand($"Ungaged offline player with pattern {pattern}.");
|
||||||
@@ -258,18 +256,17 @@ public partial class CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Mute(caller, player, time, reason, callerName, MuteManager, command);
|
Mute(caller, player, time, reason, callerName, command);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Mute(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, CommandInfo? command = null, bool silent = false)
|
internal void Mute(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, CommandInfo? command = null, bool silent = false)
|
||||||
{
|
{
|
||||||
if (Database == null || !player.IsValid || !player.UserId.HasValue) return;
|
if (Database == null || !player.IsValid || !player.UserId.HasValue) return;
|
||||||
if (!caller.CanTarget(player)) return;
|
if (!caller.CanTarget(player)) return;
|
||||||
|
|
||||||
// Set default caller name if not provided
|
// Set default caller name if not provided
|
||||||
callerName ??= caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName;
|
callerName ??= caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName;
|
||||||
muteManager ??= new MuteManager(Database);
|
|
||||||
|
|
||||||
// Get player and admin information
|
// Get player and admin information
|
||||||
var playerInfo = PlayersInfo[player.UserId.Value];
|
var playerInfo = PlayersInfo[player.UserId.Value];
|
||||||
@@ -281,7 +278,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
// Asynchronously handle mute logic
|
// Asynchronously handle mute logic
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.MutePlayer(playerInfo, adminInfo, reason, time, 1);
|
await MuteManager.MutePlayer(playerInfo, adminInfo, reason, time, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Add penalty to the player's penalty manager
|
// Add penalty to the player's penalty manager
|
||||||
@@ -360,7 +357,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
if (!caller.CanTarget(player)) return;
|
if (!caller.CanTarget(player)) return;
|
||||||
|
|
||||||
// Perform the mute for an online player
|
// Perform the mute for an online player
|
||||||
Mute(caller, player, time, reason, callerName, MuteManager, silent: true);
|
Mute(caller, player, time, reason, callerName, silent: true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -395,7 +392,6 @@ public partial class CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
var muteManager = new MuteManager(Database);
|
|
||||||
|
|
||||||
// Check if pattern is a valid SteamID64
|
// Check if pattern is a valid SteamID64
|
||||||
if (Helper.ValidateSteamId(pattern, out var steamId) && steamId != null)
|
if (Helper.ValidateSteamId(pattern, out var steamId) && steamId != null)
|
||||||
@@ -410,7 +406,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.UnmutePlayer(player.SteamID.ToString(), callerSteamId, reason, 1);
|
await MuteManager.UnmutePlayer(player.SteamID.ToString(), callerSteamId, reason, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
command.ReplyToCommand($"Unmuted player {player.PlayerName}.");
|
command.ReplyToCommand($"Unmuted player {player.PlayerName}.");
|
||||||
@@ -432,7 +428,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.UnmutePlayer(namePlayer.SteamID.ToString(), callerSteamId, reason, 1);
|
await MuteManager.UnmutePlayer(namePlayer.SteamID.ToString(), callerSteamId, reason, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
command.ReplyToCommand($"Unmuted player {namePlayer.PlayerName}.");
|
command.ReplyToCommand($"Unmuted player {namePlayer.PlayerName}.");
|
||||||
@@ -441,7 +437,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.UnmutePlayer(pattern, callerSteamId, reason, 1);
|
await MuteManager.UnmutePlayer(pattern, callerSteamId, reason, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
command.ReplyToCommand($"Unmuted offline player with pattern {pattern}.");
|
command.ReplyToCommand($"Unmuted offline player with pattern {pattern}.");
|
||||||
@@ -479,18 +475,17 @@ public partial class CS2_SimpleAdmin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Silence(caller, player, time, reason, callerName, MuteManager, command);
|
Silence(caller, player, time, reason, callerName, command);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Silence(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, MuteManager? muteManager = null, CommandInfo? command = null, bool silent = false)
|
internal void Silence(CCSPlayerController? caller, CCSPlayerController player, int time, string reason, string? callerName = null, CommandInfo? command = null, bool silent = false)
|
||||||
{
|
{
|
||||||
if (Database == null || !player.IsValid || !player.UserId.HasValue) return;
|
if (Database == null || !player.IsValid || !player.UserId.HasValue) return;
|
||||||
if (!caller.CanTarget(player)) return;
|
if (!caller.CanTarget(player)) return;
|
||||||
|
|
||||||
// Set default caller name if not provided
|
// Set default caller name if not provided
|
||||||
callerName ??= caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName;
|
callerName ??= caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName;
|
||||||
muteManager ??= new MuteManager(Database);
|
|
||||||
|
|
||||||
// Get player and admin information
|
// Get player and admin information
|
||||||
var playerInfo = PlayersInfo[player.UserId.Value];
|
var playerInfo = PlayersInfo[player.UserId.Value];
|
||||||
@@ -499,7 +494,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
// Asynchronously handle silence logic
|
// Asynchronously handle silence logic
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.MutePlayer(playerInfo, adminInfo, reason, time, 2); // Assuming 2 is the type for silence
|
await MuteManager.MutePlayer(playerInfo, adminInfo, reason, time, 2); // Assuming 2 is the type for silence
|
||||||
});
|
});
|
||||||
|
|
||||||
// Add penalty to the player's penalty manager
|
// Add penalty to the player's penalty manager
|
||||||
@@ -578,7 +573,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
if (!caller.CanTarget(player)) return;
|
if (!caller.CanTarget(player)) return;
|
||||||
|
|
||||||
// Perform the silence for an online player
|
// Perform the silence for an online player
|
||||||
Silence(caller, player, time, reason, callerName, MuteManager, silent: true);
|
Silence(caller, player, time, reason, callerName, silent: true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -613,7 +608,6 @@ public partial class CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
|
|
||||||
Helper.LogCommand(caller, command);
|
Helper.LogCommand(caller, command);
|
||||||
var muteManager = new MuteManager(Database);
|
|
||||||
|
|
||||||
// Check if pattern is a valid SteamID64
|
// Check if pattern is a valid SteamID64
|
||||||
if (Helper.ValidateSteamId(pattern, out var steamId) && steamId != null)
|
if (Helper.ValidateSteamId(pattern, out var steamId) && steamId != null)
|
||||||
@@ -630,7 +624,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.UnmutePlayer(player.SteamID.ToString(), callerSteamId, reason, 2); // Unmute by type 2 (silence)
|
await MuteManager.UnmutePlayer(player.SteamID.ToString(), callerSteamId, reason, 2); // Unmute by type 2 (silence)
|
||||||
});
|
});
|
||||||
|
|
||||||
command.ReplyToCommand($"Unsilenced player {player.PlayerName}.");
|
command.ReplyToCommand($"Unsilenced player {player.PlayerName}.");
|
||||||
@@ -654,7 +648,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.UnmutePlayer(namePlayer.SteamID.ToString(), callerSteamId, reason, 2); // Unmute by type 2 (silence)
|
await MuteManager.UnmutePlayer(namePlayer.SteamID.ToString(), callerSteamId, reason, 2); // Unmute by type 2 (silence)
|
||||||
});
|
});
|
||||||
|
|
||||||
command.ReplyToCommand($"Unsilenced player {namePlayer.PlayerName}.");
|
command.ReplyToCommand($"Unsilenced player {namePlayer.PlayerName}.");
|
||||||
@@ -663,7 +657,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await muteManager.UnmutePlayer(pattern, callerSteamId, reason, 2); // Unmute by type 2 (silence)
|
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}.");
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
private HookResult OnCommandCallVote(CCSPlayerController? caller, CommandInfo info)
|
private HookResult OnCommandCallVote(CCSPlayerController? caller, CommandInfo info)
|
||||||
{
|
{
|
||||||
var voteType = info.GetArg(1).ToLower();
|
var voteType = info.GetArg(1).ToLower();
|
||||||
|
|
||||||
if (voteType != "kick")
|
if (voteType != "kick")
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
|
|
||||||
@@ -96,8 +97,8 @@ public partial class CS2_SimpleAdmin
|
|||||||
out var expirationTime)
|
out var expirationTime)
|
||||||
|| !(expirationTime <= Time.ActualDateTime())) return HookResult.Continue;
|
|| !(expirationTime <= Time.ActualDateTime())) return HookResult.Continue;
|
||||||
|
|
||||||
CounterStrikeSharp.API.Modules.Admin.AdminManager.ClearPlayerPermissions(authorizedSteamId);
|
AdminManager.ClearPlayerPermissions(authorizedSteamId);
|
||||||
CounterStrikeSharp.API.Modules.Admin.AdminManager.RemovePlayerAdminData(authorizedSteamId);
|
AdminManager.RemovePlayerAdminData(authorizedSteamId);
|
||||||
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
@@ -186,7 +187,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
if (AdminManager.PlayerHasPermissions(player, "@css/chat"))
|
if (AdminManager.PlayerHasPermissions(player, "@css/chat"))
|
||||||
{
|
{
|
||||||
sb.Append(_localizer!["sa_adminchat_template_admin", player.PlayerName, info.GetArg(1).Remove(0, 1)]);
|
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 is { IsBot: false, IsHLTV: false } && CounterStrikeSharp.API.Modules.Admin.AdminManager.PlayerHasPermissions(p, "@css/chat")))
|
foreach (var p in Utilities.GetPlayers().Where(p => p.IsValid && p is { IsBot: false, IsHLTV: false } && AdminManager.PlayerHasPermissions(p, "@css/chat")))
|
||||||
{
|
{
|
||||||
p.PrintToChat(sb.ToString());
|
p.PrintToChat(sb.ToString());
|
||||||
}
|
}
|
||||||
@@ -195,7 +196,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
sb.Append(_localizer!["sa_adminchat_template_player", player.PlayerName, info.GetArg(1).Remove(0, 1)]);
|
sb.Append(_localizer!["sa_adminchat_template_player", player.PlayerName, info.GetArg(1).Remove(0, 1)]);
|
||||||
player.PrintToChat(sb.ToString());
|
player.PrintToChat(sb.ToString());
|
||||||
foreach (var p in Utilities.GetPlayers().Where(p => p is { IsValid: true, IsBot: false, IsHLTV: false } && CounterStrikeSharp.API.Modules.Admin.AdminManager.PlayerHasPermissions(p, "@css/chat")))
|
foreach (var p in Utilities.GetPlayers().Where(p => p is { IsValid: true, IsBot: false, IsHLTV: false } && AdminManager.PlayerHasPermissions(p, "@css/chat")))
|
||||||
{
|
{
|
||||||
p.PrintToChat(sb.ToString());
|
p.PrintToChat(sb.ToString());
|
||||||
}
|
}
|
||||||
@@ -241,10 +242,10 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
|
||||||
if (CounterStrikeSharp.API.Modules.Admin.AdminManager.PlayerHasPermissions(player, "@css/chat"))
|
if (AdminManager.PlayerHasPermissions(player, "@css/chat"))
|
||||||
{
|
{
|
||||||
sb.Append(_localizer!["sa_adminchat_template_admin", player.PlayerName, info.GetArg(1).Remove(0, 1)]);
|
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 is { IsBot: false, IsHLTV: false } && CounterStrikeSharp.API.Modules.Admin.AdminManager.PlayerHasPermissions(p, "@css/chat")))
|
foreach (var p in Utilities.GetPlayers().Where(p => p.IsValid && p is { IsBot: false, IsHLTV: false } && AdminManager.PlayerHasPermissions(p, "@css/chat")))
|
||||||
{
|
{
|
||||||
p.PrintToChat(sb.ToString());
|
p.PrintToChat(sb.ToString());
|
||||||
}
|
}
|
||||||
@@ -253,7 +254,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
sb.Append(_localizer!["sa_adminchat_template_player", player.PlayerName, info.GetArg(1).Remove(0, 1)]);
|
sb.Append(_localizer!["sa_adminchat_template_player", player.PlayerName, info.GetArg(1).Remove(0, 1)]);
|
||||||
player.PrintToChat(sb.ToString());
|
player.PrintToChat(sb.ToString());
|
||||||
foreach (var p in Utilities.GetPlayers().Where(p => p is { IsValid: true, IsBot: false, IsHLTV: false } && CounterStrikeSharp.API.Modules.Admin.AdminManager.PlayerHasPermissions(p, "@css/chat")))
|
foreach (var p in Utilities.GetPlayers().Where(p => p is { IsValid: true, IsBot: false, IsHLTV: false } && AdminManager.PlayerHasPermissions(p, "@css/chat")))
|
||||||
{
|
{
|
||||||
p.PrintToChat(sb.ToString());
|
p.PrintToChat(sb.ToString());
|
||||||
}
|
}
|
||||||
@@ -277,7 +278,6 @@ public partial class CS2_SimpleAdmin
|
|||||||
SilentPlayers.Clear();
|
SilentPlayers.Clear();
|
||||||
|
|
||||||
PlayerPenaltyManager.RemoveAllPenalties();
|
PlayerPenaltyManager.RemoveAllPenalties();
|
||||||
new PlayerManager().CheckPlayersTimer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[GameEventHandler]
|
[GameEventHandler]
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ internal class BanManager(Database.Database? database)
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (CS2_SimpleAdmin._logger != null)
|
if (CS2_SimpleAdmin._logger != null)
|
||||||
CS2_SimpleAdmin._logger.LogCritical($"IsPlayerBanned for {player.Name}");
|
CS2_SimpleAdmin._logger.LogCritical($"IsPlayerBanned for {player.Name}");
|
||||||
@@ -124,40 +124,53 @@ internal class BanManager(Database.Database? database)
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode ? """
|
var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode ? """
|
||||||
SELECT COALESCE((
|
SELECT COALESCE((
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM sa_bans
|
FROM sa_bans
|
||||||
WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
||||||
AND status = 'ACTIVE'
|
AND status = 'ACTIVE'
|
||||||
AND (duration = 0 OR ends > @CurrentTime)
|
AND (duration = 0 OR ends > @CurrentTime)
|
||||||
), 0) AS BanCount
|
), 0)
|
||||||
+ COALESCE((
|
+
|
||||||
SELECT COUNT(*)
|
COALESCE((
|
||||||
FROM sa_bans
|
SELECT COUNT(*)
|
||||||
JOIN sa_players_ips ON sa_bans.player_steamid = sa_players_ips.steamid
|
FROM sa_bans
|
||||||
WHERE sa_bans.status = 'ACTIVE'
|
JOIN sa_players_ips ON sa_bans.player_steamid = sa_players_ips.steamid
|
||||||
AND sa_players_ips.address = @PlayerIP
|
WHERE sa_bans.status = 'ACTIVE'
|
||||||
AND (SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
AND sa_players_ips.address = @PlayerIP
|
||||||
AND status = 'ACTIVE' AND (duration = 0 OR ends > @CurrentTime)) = 0
|
AND NOT EXISTS (
|
||||||
), 0) AS TotalBanCount;
|
SELECT 1
|
||||||
|
FROM sa_bans
|
||||||
|
WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
||||||
|
AND status = 'ACTIVE'
|
||||||
|
AND (duration = 0 OR ends > @CurrentTime)
|
||||||
|
)
|
||||||
|
), 0) AS TotalBanCount;
|
||||||
""" : """
|
""" : """
|
||||||
SELECT COALESCE((
|
SELECT COALESCE((
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM sa_bans
|
FROM sa_bans
|
||||||
WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
||||||
AND status = 'ACTIVE'
|
AND status = 'ACTIVE'
|
||||||
AND (duration = 0 OR ends > @CurrentTime)
|
AND (duration = 0 OR ends > @CurrentTime)
|
||||||
AND server_id = @ServerId
|
AND server_id = @ServerId
|
||||||
), 0) AS BanCount
|
), 0)
|
||||||
+ COALESCE((
|
+
|
||||||
SELECT COUNT(*)
|
COALESCE((
|
||||||
FROM sa_bans
|
SELECT COUNT(*)
|
||||||
JOIN sa_players_ips ON sa_bans.player_steamid = sa_players_ips.steamid
|
FROM sa_bans
|
||||||
WHERE sa_bans.status = 'ACTIVE'
|
JOIN sa_players_ips ON sa_bans.player_steamid = sa_players_ips.steamid
|
||||||
AND sa_players_ips.address = @PlayerIP
|
WHERE sa_bans.status = 'ACTIVE'
|
||||||
AND (SELECT COUNT(*) FROM sa_bans WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
AND sa_players_ips.address = @PlayerIP
|
||||||
AND status = 'ACTIVE' AND (duration = 0 OR ends > @CurrentTime) AND server_id = @ServerId) = 0
|
AND NOT EXISTS (
|
||||||
), 0) AS TotalBanCount;
|
SELECT 1
|
||||||
|
FROM sa_bans
|
||||||
|
WHERE (player_steamid = @PlayerSteamID OR player_ip = @PlayerIP)
|
||||||
|
AND status = 'ACTIVE'
|
||||||
|
AND (duration = 0 OR ends > @CurrentTime)
|
||||||
|
AND server_id = @ServerId
|
||||||
|
)
|
||||||
|
), 0) AS TotalBanCount;
|
||||||
""";
|
""";
|
||||||
|
|
||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
@@ -176,8 +189,10 @@ internal class BanManager(Database.Database? database)
|
|||||||
|
|
||||||
banCount = await connection.ExecuteScalarAsync<int>(sql, parameters);
|
banCount = await connection.ExecuteScalarAsync<int>(sql, parameters);
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
CS2_SimpleAdmin._logger?.LogError("Unable to check ban status for {PlayerName} ({ExceptionMessage})",
|
||||||
|
player.Name, ex.Message);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ internal class MuteManager(Database.Database? database)
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int batchSize = 10;
|
var batchSize = 10;
|
||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode
|
var sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode
|
||||||
@@ -188,9 +188,9 @@ internal class MuteManager(Database.Database? database)
|
|||||||
var batch = players.Skip(i).Take(batchSize);
|
var batch = players.Skip(i).Take(batchSize);
|
||||||
var parametersList = new List<object>();
|
var parametersList = new List<object>();
|
||||||
|
|
||||||
foreach (var (IpAddress, SteamID, UserId, Slot) in batch)
|
foreach (var (_, steamId, _, _) in batch)
|
||||||
{
|
{
|
||||||
parametersList.Add(new { PlayerSteamID = SteamID, serverid = CS2_SimpleAdmin.ServerId });
|
parametersList.Add(new { PlayerSteamID = steamId, serverid = CS2_SimpleAdmin.ServerId });
|
||||||
}
|
}
|
||||||
|
|
||||||
await connection.ExecuteAsync(sql, parametersList);
|
await connection.ExecuteAsync(sql, parametersList);
|
||||||
@@ -201,14 +201,14 @@ internal class MuteManager(Database.Database? database)
|
|||||||
: "SELECT * FROM `sa_mutes` WHERE player_steamid = @PlayerSteamID AND passed >= duration AND duration > 0 AND status = 'ACTIVE' AND server_id = @serverid";
|
: "SELECT * FROM `sa_mutes` WHERE player_steamid = @PlayerSteamID AND passed >= duration AND duration > 0 AND status = 'ACTIVE' AND server_id = @serverid";
|
||||||
|
|
||||||
|
|
||||||
foreach (var (IpAddress, SteamID, UserId, Slot) in players)
|
foreach (var (_, steamId, _, slot) in players)
|
||||||
{
|
{
|
||||||
var muteRecords = await connection.QueryAsync(sql, new { PlayerSteamID = SteamID, serverid = CS2_SimpleAdmin.ServerId });
|
var muteRecords = await connection.QueryAsync(sql, new { PlayerSteamID = steamId, serverid = CS2_SimpleAdmin.ServerId });
|
||||||
|
|
||||||
foreach (var muteRecord in muteRecords)
|
foreach (var muteRecord in muteRecords)
|
||||||
{
|
{
|
||||||
DateTime endDateTime = muteRecord.ends;
|
DateTime endDateTime = muteRecord.ends;
|
||||||
PlayerPenaltyManager.RemovePenaltiesByDateTime(Slot, endDateTime);
|
PlayerPenaltyManager.RemovePenaltiesByDateTime(slot, endDateTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -295,7 +295,7 @@ internal class MuteManager(Database.Database? database)
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
var sql = "";
|
string sql;
|
||||||
|
|
||||||
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -86,8 +86,8 @@ public class PlayerManager
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Check if the player is banned
|
// Check if the player is banned
|
||||||
bool isBanned = await CS2_SimpleAdmin.Instance.BanManager.IsPlayerBanned(CS2_SimpleAdmin.PlayersInfo[userId]);
|
var isBanned = await CS2_SimpleAdmin.Instance.BanManager.IsPlayerBanned(CS2_SimpleAdmin.PlayersInfo[userId]);
|
||||||
|
|
||||||
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
|
||||||
@@ -205,14 +205,14 @@ public class PlayerManager
|
|||||||
|
|
||||||
public void CheckPlayersTimer()
|
public void CheckPlayersTimer()
|
||||||
{
|
{
|
||||||
CS2_SimpleAdmin.Database = new Database.Database(CS2_SimpleAdmin.Instance.DbConnectionString);
|
|
||||||
|
|
||||||
CS2_SimpleAdmin.Instance.AddTimer(61.0f, () =>
|
CS2_SimpleAdmin.Instance.AddTimer(61.0f, () =>
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
CS2_SimpleAdmin._logger?.LogCritical("[OnMapStart] Expired check");
|
CS2_SimpleAdmin._logger?.LogCritical("[OnMapStart] Expired check");
|
||||||
#endif
|
#endif
|
||||||
|
if (CS2_SimpleAdmin.Database == null)
|
||||||
|
return;
|
||||||
|
|
||||||
var players = Helper.GetValidPlayers();
|
var players = Helper.GetValidPlayers();
|
||||||
var onlinePlayers = players
|
var onlinePlayers = players
|
||||||
.Where(player => player.IpAddress != null)
|
.Where(player => player.IpAddress != null)
|
||||||
@@ -271,6 +271,6 @@ public class PlayerManager
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user