mirror of
https://github.com/daffyyyy/CS2-SimpleAdmin.git
synced 2026-02-19 19:00:03 +00:00
1.4.3c
- Fixed rare problems with expiring bans - More checks for `BanType` - Minor changes about validating players - Added `css_players -duplicate` to list players with same ip address
This commit is contained in:
@@ -37,7 +37,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.4.3b";
|
public override string ModuleVersion => "1.4.3c";
|
||||||
|
|
||||||
public CS2_SimpleAdminConfig Config { get; set; } = new();
|
public CS2_SimpleAdminConfig Config { get; set; } = new();
|
||||||
|
|
||||||
@@ -55,16 +55,25 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
_cBasePlayerControllerSetPawnFunc = new MemoryFunctionVoid<CBasePlayerController, CCSPlayerPawn, bool, bool>(GameData.GetSignature("CBasePlayerController_SetPawn"));
|
_cBasePlayerControllerSetPawnFunc = new MemoryFunctionVoid<CBasePlayerController, CCSPlayerPawn, bool, bool>(GameData.GetSignature("CBasePlayerController_SetPawn"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Unload(bool hotReload)
|
||||||
|
{
|
||||||
|
if (hotReload) return;
|
||||||
|
|
||||||
|
RemoveListener(OnMapStart);
|
||||||
|
RemoveCommandListener("say", OnCommandSay, HookMode.Post);
|
||||||
|
RemoveCommandListener("say_team", OnCommandTeamSay, HookMode.Post);
|
||||||
|
}
|
||||||
|
|
||||||
public void OnConfigParsed(CS2_SimpleAdminConfig config)
|
public void OnConfigParsed(CS2_SimpleAdminConfig config)
|
||||||
{
|
{
|
||||||
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;
|
Instance = this;
|
||||||
_logger = Logger;
|
_logger = Logger;
|
||||||
|
|
||||||
MySqlConnectionStringBuilder builder = new()
|
MySqlConnectionStringBuilder builder = new()
|
||||||
{
|
{
|
||||||
Server = config.DatabaseHost,
|
Server = config.DatabaseHost,
|
||||||
@@ -103,7 +112,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
|
|||||||
DiscordWebhookClientLog = new DiscordWebhookClient(Config.Discord.DiscordLogWebhook);
|
DiscordWebhookClientLog = new DiscordWebhookClient(Config.Discord.DiscordLogWebhook);
|
||||||
if (!string.IsNullOrEmpty(Config.Discord.DiscordPenaltyWebhook))
|
if (!string.IsNullOrEmpty(Config.Discord.DiscordPenaltyWebhook))
|
||||||
DiscordWebhookClientPenalty = new DiscordWebhookClient(Config.Discord.DiscordPenaltyWebhook);
|
DiscordWebhookClientPenalty = new DiscordWebhookClient(Config.Discord.DiscordPenaltyWebhook);
|
||||||
|
|
||||||
PluginInfo.ShowAd(ModuleVersion);
|
PluginInfo.ShowAd(ModuleVersion);
|
||||||
_ = PluginInfo.CheckVersion(ModuleVersion, _logger);
|
_ = PluginInfo.CheckVersion(ModuleVersion, _logger);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ using CounterStrikeSharp.API.Modules.Entities;
|
|||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using CS2_SimpleAdmin.Menus;
|
using CS2_SimpleAdmin.Menus;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System.Text;
|
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin
|
namespace CS2_SimpleAdmin
|
||||||
{
|
{
|
||||||
@@ -118,7 +118,7 @@ namespace CS2_SimpleAdmin
|
|||||||
var name = command.GetArg(2);
|
var name = command.GetArg(2);
|
||||||
var flags = command.GetArg(3);
|
var flags = command.GetArg(3);
|
||||||
var globalAdmin = command.GetArg(4).ToLower().Equals("-g") || command.GetArg(5).ToLower().Equals("-g") ||
|
var globalAdmin = command.GetArg(4).ToLower().Equals("-g") || command.GetArg(5).ToLower().Equals("-g") ||
|
||||||
command.GetArg(6).ToLower().Equals("-g");
|
command.GetArg(6).ToLower().Equals("-g");
|
||||||
int.TryParse(command.GetArg(4), out var immunity);
|
int.TryParse(command.GetArg(4), out var immunity);
|
||||||
int.TryParse(command.GetArg(5), out var time);
|
int.TryParse(command.GetArg(5), out var time);
|
||||||
|
|
||||||
@@ -174,7 +174,7 @@ namespace CS2_SimpleAdmin
|
|||||||
AddTimer(2, () =>
|
AddTimer(2, () =>
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(steamid) || !SteamID.TryParse(steamid, out var steamId) ||
|
if (string.IsNullOrEmpty(steamid) || !SteamID.TryParse(steamid, out var steamId) ||
|
||||||
steamId == null) return;
|
steamId == null) return;
|
||||||
if (PermissionManager.AdminCache.ContainsKey(steamId))
|
if (PermissionManager.AdminCache.ContainsKey(steamId))
|
||||||
{
|
{
|
||||||
PermissionManager.AdminCache.TryRemove(steamId, out _);
|
PermissionManager.AdminCache.TryRemove(steamId, out _);
|
||||||
@@ -307,7 +307,7 @@ namespace CS2_SimpleAdmin
|
|||||||
{
|
{
|
||||||
var steamId = PermissionManager.AdminCache.Keys.ToList()[index];
|
var steamId = PermissionManager.AdminCache.Keys.ToList()[index];
|
||||||
if (!PermissionManager.AdminCache.TryRemove(steamId, out _)) continue;
|
if (!PermissionManager.AdminCache.TryRemove(steamId, out _)) continue;
|
||||||
|
|
||||||
AdminManager.ClearPlayerPermissions(steamId);
|
AdminManager.ClearPlayerPermissions(steamId);
|
||||||
AdminManager.RemovePlayerAdminData(steamId);
|
AdminManager.RemovePlayerAdminData(steamId);
|
||||||
}
|
}
|
||||||
@@ -429,8 +429,15 @@ namespace CS2_SimpleAdmin
|
|||||||
[RequiresPermissions("@css/generic")]
|
[RequiresPermissions("@css/generic")]
|
||||||
public void OnPlayersCommand(CCSPlayerController? caller, CommandInfo command)
|
public void OnPlayersCommand(CCSPlayerController? caller, CommandInfo command)
|
||||||
{
|
{
|
||||||
var playersToTarget = Helper.GetValidPlayers();
|
|
||||||
var isJson = command.GetArg(1).ToLower().Equals("-json");
|
var isJson = command.GetArg(1).ToLower().Equals("-json");
|
||||||
|
var isDuplicate = command.GetArg(1).ToLower().Equals("-duplicate");
|
||||||
|
|
||||||
|
var playersToTarget = isDuplicate
|
||||||
|
? Helper.GetValidPlayers().GroupBy(player => player.IpAddress?.Split(":")[0] ?? "Unknown")
|
||||||
|
.Where(group => group.Count() > 1)
|
||||||
|
.SelectMany(group => group)
|
||||||
|
.ToList()
|
||||||
|
: Helper.GetValidPlayers();
|
||||||
|
|
||||||
if (!isJson)
|
if (!isJson)
|
||||||
{
|
{
|
||||||
@@ -456,32 +463,31 @@ namespace CS2_SimpleAdmin
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var playersJson = JsonConvert.SerializeObject(playersToTarget.Select((CCSPlayerController player) =>
|
var playersJson = JsonConvert.SerializeObject(playersToTarget.Select((CCSPlayerController player) =>
|
||||||
{
|
{
|
||||||
var matchStats = player.ActionTrackingServices?.MatchStats;
|
var matchStats = player.ActionTrackingServices?.MatchStats;
|
||||||
|
|
||||||
return new
|
return new
|
||||||
{
|
{
|
||||||
UserId = player.UserId,
|
UserId = player.UserId,
|
||||||
Name = player.PlayerName,
|
Name = player.PlayerName,
|
||||||
SteamId = player.SteamID.ToString(),
|
SteamId = player.SteamID.ToString(),
|
||||||
IpAddress = player.IpAddress?.Split(":")[0] ?? "Unknown",
|
IpAddress = player.IpAddress?.Split(":")[0] ?? "Unknown",
|
||||||
Ping = player.Ping,
|
Ping = player.Ping,
|
||||||
AdminData = AdminManager.GetPlayerAdminData(player),
|
IsAdmin = AdminManager.PlayerHasPermissions(player, "@css/ban") || AdminManager.PlayerHasPermissions(player, "@css/generic"),
|
||||||
Stats = new
|
Stats = new
|
||||||
{
|
{
|
||||||
Score = player.Score,
|
Score = player.Score,
|
||||||
Kills = matchStats?.Kills ?? 0,
|
Kills = matchStats?.Kills ?? 0,
|
||||||
Deaths = matchStats?.Deaths ?? 0,
|
Deaths = matchStats?.Deaths ?? 0,
|
||||||
Assists = matchStats?.Assists,
|
|
||||||
MVPs = player.MVPs
|
MVPs = player.MVPs
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if (caller != null)
|
if (caller != null)
|
||||||
caller.PrintToConsole(playersJson);
|
caller.PrintToConsole(playersJson);
|
||||||
else
|
else
|
||||||
Server.PrintToConsole(playersJson);
|
Server.PrintToConsole(playersJson);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -557,7 +563,7 @@ namespace CS2_SimpleAdmin
|
|||||||
if (caller != null && (caller.UserId == null || SilentPlayers.Contains(caller.Slot))) return;
|
if (caller != null && (caller.UserId == null || SilentPlayers.Contains(caller.Slot))) return;
|
||||||
foreach (var controller in Helper.GetValidPlayers())
|
foreach (var controller in Helper.GetValidPlayers())
|
||||||
{
|
{
|
||||||
|
|
||||||
using (new WithTemporaryCulture(controller.GetLanguage()))
|
using (new WithTemporaryCulture(controller.GetLanguage()))
|
||||||
{
|
{
|
||||||
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
StringBuilder sb = new(_localizer!["sa_prefix"]);
|
||||||
|
|||||||
161
Events.cs
161
Events.cs
@@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Core.Attributes.Registration;
|
|||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Cvars;
|
using CounterStrikeSharp.API.Modules.Cvars;
|
||||||
using CounterStrikeSharp.API.Modules.Entities;
|
|
||||||
using Dapper;
|
using Dapper;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@@ -31,7 +30,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
Logger.LogCritical("[OnClientDisconnect] Before");
|
Logger.LogCritical("[OnClientDisconnect] Before");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (player == null || !player.IsValid || string.IsNullOrEmpty(player.IpAddress) || player.IsBot || player.IsHLTV)
|
if (player == null || !player.IsValid || string.IsNullOrEmpty(player.IpAddress) || player.IsBot)
|
||||||
{
|
{
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
@@ -60,9 +59,9 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
var authorizedSteamId = player.AuthorizedSteamID;
|
var authorizedSteamId = player.AuthorizedSteamID;
|
||||||
if (authorizedSteamId == null || !PermissionManager.AdminCache.TryGetValue(authorizedSteamId,
|
if (authorizedSteamId == null || !PermissionManager.AdminCache.TryGetValue(authorizedSteamId,
|
||||||
out var expirationTime)
|
out var expirationTime)
|
||||||
|| !(expirationTime <= DateTime.Now)) return HookResult.Continue;
|
|| !(expirationTime <= DateTime.UtcNow.ToLocalTime())) return HookResult.Continue;
|
||||||
|
|
||||||
AdminManager.ClearPlayerPermissions(authorizedSteamId);
|
AdminManager.ClearPlayerPermissions(authorizedSteamId);
|
||||||
AdminManager.RemovePlayerAdminData(authorizedSteamId);
|
AdminManager.RemovePlayerAdminData(authorizedSteamId);
|
||||||
|
|
||||||
@@ -81,13 +80,13 @@ public partial class CS2_SimpleAdmin
|
|||||||
CCSPlayerController? player = @event.Userid;
|
CCSPlayerController? player = @event.Userid;
|
||||||
|
|
||||||
if (player == null || string.IsNullOrEmpty(player.IpAddress) || player.IpAddress.Contains("127.0.0.1")
|
if (player == null || string.IsNullOrEmpty(player.IpAddress) || player.IpAddress.Contains("127.0.0.1")
|
||||||
|| player.IsBot || player.IsHLTV || !player.UserId.HasValue)
|
|| player.IsBot || !player.UserId.HasValue)
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
|
|
||||||
var ipAddress = player.IpAddress.Split(":")[0];
|
var ipAddress = player.IpAddress.Split(":")[0];
|
||||||
|
|
||||||
// Check if the player's IP or SteamID is in the bannedPlayers list
|
// Check if the player's IP or SteamID is in the bannedPlayers list
|
||||||
if (BannedPlayers.Contains(ipAddress) || BannedPlayers.Contains(player.SteamID.ToString()))
|
if (Config.BanType > 0 && BannedPlayers.Contains(ipAddress) || BannedPlayers.Contains(player.SteamID.ToString()))
|
||||||
{
|
{
|
||||||
// Kick the player if banned
|
// Kick the player if banned
|
||||||
if (player.UserId.HasValue)
|
if (player.UserId.HasValue)
|
||||||
@@ -121,7 +120,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
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
|
||||||
if (playerInfo.IpAddress != null && !BannedPlayers.Contains(playerInfo.IpAddress))
|
if (Config.BanType > 0 && playerInfo.IpAddress != null && !BannedPlayers.Contains(playerInfo.IpAddress))
|
||||||
BannedPlayers.Add(playerInfo.IpAddress);
|
BannedPlayers.Add(playerInfo.IpAddress);
|
||||||
|
|
||||||
if (playerInfo.SteamId != null && !BannedPlayers.Contains(playerInfo.SteamId))
|
if (playerInfo.SteamId != null && !BannedPlayers.Contains(playerInfo.SteamId))
|
||||||
@@ -233,7 +232,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
return HookResult.Handled;
|
return HookResult.Handled;
|
||||||
|
|
||||||
if (!info.GetArg(1).StartsWith($"@")) return HookResult.Continue;
|
if (!info.GetArg(1).StartsWith($"@")) return HookResult.Continue;
|
||||||
|
|
||||||
StringBuilder sb = new();
|
StringBuilder sb = new();
|
||||||
|
|
||||||
if (AdminManager.PlayerHasPermissions(player, "@css/chat"))
|
if (AdminManager.PlayerHasPermissions(player, "@css/chat"))
|
||||||
@@ -257,14 +256,14 @@ public partial class CS2_SimpleAdmin
|
|||||||
return HookResult.Handled;
|
return HookResult.Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnMapStart(string mapName)
|
public void OnMapStart(string mapName)
|
||||||
{
|
{
|
||||||
var path = Path.GetDirectoryName(ModuleDirectory);
|
var path = Path.GetDirectoryName(ModuleDirectory);
|
||||||
if (Directory.Exists(path + "/CS2-Tags"))
|
if (Directory.Exists(path + "/CS2-Tags"))
|
||||||
{
|
{
|
||||||
_tagsDetected = true;
|
_tagsDetected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
GodPlayers.Clear();
|
GodPlayers.Clear();
|
||||||
SilentPlayers.Clear();
|
SilentPlayers.Clear();
|
||||||
|
|
||||||
@@ -272,75 +271,22 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
_database = new Database.Database(_dbConnectionString);
|
_database = new Database.Database(_dbConnectionString);
|
||||||
|
|
||||||
AddTimer(61.0f, () =>
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
Logger.LogCritical("[OnMapStart] Expired check");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
var players = Helper.GetValidPlayers();
|
|
||||||
var onlinePlayers = players
|
|
||||||
.Where(player => player.IpAddress != null && player.SteamID.ToString().Length == 17)
|
|
||||||
.Select(player => (player.IpAddress, player.SteamID, player.UserId))
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
Task.Run(async () =>
|
|
||||||
{
|
|
||||||
PermissionManager adminManager = new(_database);
|
|
||||||
BanManager banManager = new(_database, Config);
|
|
||||||
MuteManager muteManager = new(_database);
|
|
||||||
|
|
||||||
await banManager.ExpireOldBans();
|
|
||||||
await muteManager.ExpireOldMutes();
|
|
||||||
await adminManager.DeleteOldAdmins();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await banManager.CheckOnlinePlayers(onlinePlayers);
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
|
|
||||||
BannedPlayers.Clear();
|
|
||||||
|
|
||||||
await Server.NextFrameAsync(() =>
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (var player in players.Where(player => PlayerPenaltyManager.IsSlotInPenalties(player.Slot)))
|
|
||||||
{
|
|
||||||
if (!PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Mute) && !PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
|
|
||||||
player.VoiceFlags = VoiceFlags.Normal;
|
|
||||||
|
|
||||||
if (!PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) && !PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
|
|
||||||
{
|
|
||||||
if (_tagsDetected)
|
|
||||||
Server.ExecuteCommand($"css_tag_unmute {player.SteamID}");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence) ||
|
|
||||||
PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Mute) ||
|
|
||||||
PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag)) continue;
|
|
||||||
player.VoiceFlags = VoiceFlags.Normal;
|
|
||||||
|
|
||||||
if (_tagsDetected)
|
|
||||||
Server.ExecuteCommand($"css_tag_unmute {player.SteamID}");
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayerPenaltyManager.RemoveExpiredPenalties();
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
|
||||||
|
|
||||||
AddTimer(2.0f, () =>
|
AddTimer(2.0f, () =>
|
||||||
{
|
{
|
||||||
var address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue<int>()}";
|
var ipAddress = ConVar.Find("ip")?.StringValue;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(ipAddress))
|
||||||
|
{
|
||||||
|
Logger.LogError("Unable to get server ip, Check that you have added the correct start parameter \"-ip <ip>\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
var address = $"{ipAddress}:{ConVar.Find("hostport")?.GetPrimitiveValue<int>()}";
|
||||||
var hostname = ConVar.Find("hostname")!.StringValue;
|
var hostname = ConVar.Find("hostname")!.StringValue;
|
||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
PermissionManager adminManager = new(_database);
|
PermissionManager adminManager = new(_database);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await _database.GetConnectionAsync();
|
await using var connection = await _database.GetConnectionAsync();
|
||||||
@@ -389,13 +335,76 @@ public partial class CS2_SimpleAdmin
|
|||||||
|
|
||||||
//await _adminManager.GiveAllGroupsFlags();
|
//await _adminManager.GiveAllGroupsFlags();
|
||||||
//await _adminManager.GiveAllFlags();
|
//await _adminManager.GiveAllFlags();
|
||||||
|
|
||||||
|
|
||||||
await Server.NextFrameAsync(() => {
|
await Server.NextFrameAsync(() =>
|
||||||
|
{
|
||||||
ReloadAdmins(null);
|
ReloadAdmins(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
|
|
||||||
|
AddTimer(61.0f, () =>
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
Logger.LogCritical("[OnMapStart] Expired check");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
var players = Helper.GetValidPlayers();
|
||||||
|
var onlinePlayers = players
|
||||||
|
.Where(player => player.IpAddress != null && player.SteamID.ToString().Length == 17)
|
||||||
|
.Select(player => (player.IpAddress, player.SteamID, player.UserId))
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
Task.Run(async () =>
|
||||||
|
{
|
||||||
|
PermissionManager adminManager = new(_database);
|
||||||
|
BanManager banManager = new(_database, Config);
|
||||||
|
MuteManager muteManager = new(_database);
|
||||||
|
|
||||||
|
await banManager.ExpireOldBans();
|
||||||
|
await muteManager.ExpireOldMutes();
|
||||||
|
await adminManager.DeleteOldAdmins();
|
||||||
|
BannedPlayers.Clear();
|
||||||
|
if (onlinePlayers.Count > 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await banManager.CheckOnlinePlayers(onlinePlayers);
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
|
|
||||||
|
await Server.NextFrameAsync(() =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (var player in players.Where(player => PlayerPenaltyManager.IsSlotInPenalties(player.Slot)))
|
||||||
|
{
|
||||||
|
if (!PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Mute) && !PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
|
||||||
|
player.VoiceFlags = VoiceFlags.Normal;
|
||||||
|
|
||||||
|
if (!PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag) && !PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence))
|
||||||
|
{
|
||||||
|
if (_tagsDetected)
|
||||||
|
Server.ExecuteCommand($"css_tag_unmute {player.SteamID}");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Silence) ||
|
||||||
|
PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Mute) ||
|
||||||
|
PlayerPenaltyManager.IsPenalized(player.Slot, PenaltyType.Gag)) continue;
|
||||||
|
player.VoiceFlags = VoiceFlags.Normal;
|
||||||
|
|
||||||
|
if (_tagsDetected)
|
||||||
|
Server.ExecuteCommand($"css_tag_unmute {player.SteamID}");
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerPenaltyManager.RemoveExpiredPenalties();
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
[GameEventHandler]
|
[GameEventHandler]
|
||||||
@@ -407,7 +416,7 @@ public partial class CS2_SimpleAdmin
|
|||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
|
|
||||||
if (!GodPlayers.Contains(player.Slot)) return HookResult.Continue;
|
if (!GodPlayers.Contains(player.Slot)) return HookResult.Continue;
|
||||||
|
|
||||||
player.PlayerPawn.Value.Health = player.PlayerPawn.Value.MaxHealth;
|
player.PlayerPawn.Value.Health = player.PlayerPawn.Value.MaxHealth;
|
||||||
player.PlayerPawn.Value.ArmorValue = 100;
|
player.PlayerPawn.Value.ArmorValue = 100;
|
||||||
|
|
||||||
|
|||||||
@@ -59,16 +59,14 @@ namespace CS2_SimpleAdmin
|
|||||||
|
|
||||||
public static List<CCSPlayerController> GetValidPlayers()
|
public static List<CCSPlayerController> GetValidPlayers()
|
||||||
{
|
{
|
||||||
return Utilities.GetPlayers().FindAll(p =>
|
return Utilities.GetPlayers().FindAll(p => p is
|
||||||
p.IsValid && p.SteamID.ToString().Length == 17 && !string.IsNullOrEmpty(p.IpAddress) && p is
|
{ IsBot: false, IsHLTV: false });
|
||||||
{ Connected: PlayerConnectedState.PlayerConnected, IsBot: false, IsHLTV: false });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<CCSPlayerController?> GetValidPlayersWithBots()
|
public static IEnumerable<CCSPlayerController?> GetValidPlayersWithBots()
|
||||||
{
|
{
|
||||||
return Utilities.GetPlayers().FindAll(p =>
|
return Utilities.GetPlayers().FindAll(p =>
|
||||||
p.IsValid && p.SteamID.ToString().Length == 17 && !string.IsNullOrEmpty(p.IpAddress) && p is { Connected: PlayerConnectedState.PlayerConnected, IsBot: false, IsHLTV: false } ||
|
p is { IsBot: false, IsHLTV: false } or { IsBot: true, IsHLTV: false }
|
||||||
p is { IsValid: true, Connected: PlayerConnectedState.PlayerConnected, IsBot: true, IsHLTV: false }
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
public async Task BanPlayer(PlayerInfo player, PlayerInfo issuer, string reason, int time = 0)
|
public async Task BanPlayer(PlayerInfo player, PlayerInfo issuer, string reason, int time = 0)
|
||||||
{
|
{
|
||||||
DateTime now = DateTime.UtcNow.ToLocalTime();
|
DateTime now = DateTime.UtcNow.ToLocalTime();
|
||||||
DateTime futureTime = now.AddMinutes(time).ToLocalTime();
|
DateTime futureTime = now.AddMinutes(time);
|
||||||
|
|
||||||
await using MySqlConnection connection = await database.GetConnectionAsync();
|
await using MySqlConnection connection = await database.GetConnectionAsync();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
const string sql =
|
const string sql =
|
||||||
"INSERT INTO `sa_bans` (`player_steamid`, `player_name`, `player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
"INSERT INTO `sa_bans` (`player_steamid`, `player_name`, `player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " +
|
||||||
"VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
"VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)";
|
||||||
|
|
||||||
await connection.ExecuteAsync(sql, new
|
await connection.ExecuteAsync(sql, new
|
||||||
{
|
{
|
||||||
@@ -41,7 +41,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
if (string.IsNullOrEmpty(playerSteamId)) return;
|
if (string.IsNullOrEmpty(playerSteamId)) return;
|
||||||
|
|
||||||
DateTime now = DateTime.UtcNow.ToLocalTime();
|
DateTime now = DateTime.UtcNow.ToLocalTime();
|
||||||
DateTime futureTime = now.AddMinutes(time).ToLocalTime();
|
DateTime futureTime = now.AddMinutes(time);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -70,7 +70,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
if (string.IsNullOrEmpty(playerIp)) return;
|
if (string.IsNullOrEmpty(playerIp)) return;
|
||||||
|
|
||||||
DateTime now = DateTime.UtcNow.ToLocalTime();
|
DateTime now = DateTime.UtcNow.ToLocalTime();
|
||||||
DateTime futureTime = now.AddMinutes(time).ToLocalTime();
|
DateTime futureTime = now.AddMinutes(time);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -108,7 +108,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
|
|
||||||
int banCount;
|
int banCount;
|
||||||
|
|
||||||
DateTime currentTime = DateTime.Now.ToLocalTime();
|
DateTime currentTime = DateTime.UtcNow.ToLocalTime();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -172,12 +172,14 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
|
|
||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(player.IpAddress))
|
if (config.BanType > 0 && !string.IsNullOrEmpty(player.IpAddress))
|
||||||
{
|
{
|
||||||
banCount = await connection.ExecuteScalarAsync<int>(sql,
|
banCount = await connection.ExecuteScalarAsync<int>(sql,
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
PlayerSteamID = player.SteamId, PlayerIP = player.IpAddress, serverid = CS2_SimpleAdmin.ServerId
|
PlayerSteamID = player.SteamId,
|
||||||
|
PlayerIP = player.IpAddress,
|
||||||
|
serverid = CS2_SimpleAdmin.ServerId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -185,7 +187,9 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
banCount = await connection.ExecuteScalarAsync<int>(sql,
|
banCount = await connection.ExecuteScalarAsync<int>(sql,
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
PlayerSteamID = player.SteamId, PlayerIP = DBNull.Value, serverid = CS2_SimpleAdmin.ServerId
|
PlayerSteamID = player.SteamId,
|
||||||
|
PlayerIP = DBNull.Value,
|
||||||
|
serverid = CS2_SimpleAdmin.ServerId
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,6 +268,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
{
|
{
|
||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
string sql;
|
string sql;
|
||||||
|
bool checkIpBans = config.BanType > 0;
|
||||||
|
|
||||||
if (config.MultiServerMode)
|
if (config.MultiServerMode)
|
||||||
{
|
{
|
||||||
@@ -280,7 +285,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
if (!UserId.HasValue) continue;
|
if (!UserId.HasValue) continue;
|
||||||
|
|
||||||
var banCount = 0;
|
var banCount = 0;
|
||||||
if (!string.IsNullOrEmpty(IpAddress))
|
if (checkIpBans && !string.IsNullOrEmpty(IpAddress))
|
||||||
{
|
{
|
||||||
banCount = await connection.ExecuteScalarAsync<int>(sql,
|
banCount = await connection.ExecuteScalarAsync<int>(sql,
|
||||||
new { PlayerSteamID = SteamID, PlayerIP = IpAddress, serverid = CS2_SimpleAdmin.ServerId });
|
new { PlayerSteamID = SteamID, PlayerIP = IpAddress, serverid = CS2_SimpleAdmin.ServerId });
|
||||||
@@ -306,7 +311,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
public async Task ExpireOldBans()
|
public async Task ExpireOldBans()
|
||||||
{
|
{
|
||||||
var currentTime = DateTime.UtcNow.ToLocalTime();
|
var currentTime = DateTime.UtcNow.ToLocalTime();
|
||||||
|
|
||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -349,7 +354,7 @@ internal class BanManager(Database.Database database, CS2_SimpleAdminConfig conf
|
|||||||
|
|
||||||
if (config.ExpireOldIpBans > 0)
|
if (config.ExpireOldIpBans > 0)
|
||||||
{
|
{
|
||||||
var ipBansTime = currentTime.AddDays(-config.ExpireOldIpBans).ToLocalTime();
|
var ipBansTime = currentTime.AddDays(-config.ExpireOldIpBans);
|
||||||
sql = config.MultiServerMode ? """
|
sql = config.MultiServerMode ? """
|
||||||
|
|
||||||
UPDATE sa_bans
|
UPDATE sa_bans
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
if (player.SteamId == null) return;
|
if (player.SteamId == null) return;
|
||||||
|
|
||||||
var now = DateTime.UtcNow.ToLocalTime();
|
var now = DateTime.UtcNow.ToLocalTime();
|
||||||
var futureTime = now.AddMinutes(time).ToLocalTime();
|
var futureTime = now.AddMinutes(time);
|
||||||
|
|
||||||
var muteType = type switch
|
var muteType = type switch
|
||||||
{
|
{
|
||||||
@@ -24,7 +24,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
const string sql =
|
const string sql =
|
||||||
"INSERT INTO `sa_mutes` (`player_steamid`, `player_name`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
|
"INSERT INTO `sa_mutes` (`player_steamid`, `player_name`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
|
||||||
"VALUES (@playerSteamid, @playerName, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
"VALUES (@playerSteamid, @playerName, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
||||||
|
|
||||||
await connection.ExecuteAsync(sql, new
|
await connection.ExecuteAsync(sql, new
|
||||||
{
|
{
|
||||||
@@ -49,7 +49,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
|
|
||||||
|
|
||||||
var now = DateTime.UtcNow.ToLocalTime();
|
var now = DateTime.UtcNow.ToLocalTime();
|
||||||
var futureTime = now.AddMinutes(time).ToLocalTime();
|
var futureTime = now.AddMinutes(time);
|
||||||
|
|
||||||
var muteType = type switch
|
var muteType = type switch
|
||||||
{
|
{
|
||||||
@@ -62,7 +62,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
{
|
{
|
||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
const string sql = "INSERT INTO `sa_mutes` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
|
const string sql = "INSERT INTO `sa_mutes` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " +
|
||||||
"VALUES (@playerSteamid, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
"VALUES (@playerSteamid, @adminSteamid, @adminName, @muteReason, @duration, @ends, @created, @type, @serverid)";
|
||||||
|
|
||||||
await connection.ExecuteAsync(sql, new
|
await connection.ExecuteAsync(sql, new
|
||||||
{
|
{
|
||||||
@@ -95,7 +95,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
var currentTime = DateTime.Now.ToLocalTime();
|
var currentTime = DateTime.UtcNow.ToLocalTime();
|
||||||
string sql;
|
string sql;
|
||||||
|
|
||||||
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
if (CS2_SimpleAdmin.Instance.Config.MultiServerMode)
|
||||||
@@ -177,7 +177,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
const string sqlAdmin = "SELECT id FROM sa_admins WHERE player_steamid = @adminSteamId";
|
const string sqlAdmin = "SELECT id FROM sa_admins WHERE player_steamid = @adminSteamId";
|
||||||
var sqlInsertUnmute = "INSERT INTO sa_unmutes (mute_id, admin_id, reason) VALUES (@muteId, @adminId, @reason); SELECT LAST_INSERT_ID();";
|
var sqlInsertUnmute = "INSERT INTO sa_unmutes (mute_id, admin_id, reason) VALUES (@muteId, @adminId, @reason); SELECT LAST_INSERT_ID();";
|
||||||
|
|
||||||
var sqlAdminId = await connection.ExecuteScalarAsync<int?>(sqlAdmin, new { adminSteamId });
|
var sqlAdminId = await connection.ExecuteScalarAsync<int?>(sqlAdmin, new { adminSteamId });
|
||||||
var adminId = sqlAdminId ?? 0;
|
var adminId = sqlAdminId ?? 0;
|
||||||
|
|
||||||
foreach (var mute in mutesList)
|
foreach (var mute in mutesList)
|
||||||
@@ -217,7 +217,7 @@ internal class MuteManager(Database.Database database)
|
|||||||
? "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime AND server_id = @serverid"
|
? "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime AND server_id = @serverid"
|
||||||
: "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime";
|
: "UPDATE sa_mutes SET status = 'EXPIRED' WHERE status = 'ACTIVE' AND `duration` > 0 AND ends <= @CurrentTime";
|
||||||
|
|
||||||
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now.ToLocalTime(), serverid = CS2_SimpleAdmin.ServerId });
|
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.UtcNow.ToLocalTime(), serverid = CS2_SimpleAdmin.ServerId });
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
using CounterStrikeSharp.API.Modules.Entities;
|
using CounterStrikeSharp.API;
|
||||||
|
using CounterStrikeSharp.API.Modules.Entities;
|
||||||
using Dapper;
|
using Dapper;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using MySqlConnector;
|
using MySqlConnector;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using CounterStrikeSharp.API;
|
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
|
||||||
|
|
||||||
namespace CS2_SimpleAdmin;
|
namespace CS2_SimpleAdmin;
|
||||||
|
|
||||||
@@ -90,7 +89,7 @@ public class PermissionManager(Database.Database database)
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!flagInfoDict.TryGetValue("player_steamid", out var steamIdObj) ||
|
if (!flagInfoDict.TryGetValue("player_steamid", out var steamIdObj) ||
|
||||||
!flagInfoDict.TryGetValue("player_name", out var playerNameObj) ||
|
!flagInfoDict.TryGetValue("player_name", out var playerNameObj) ||
|
||||||
!flagInfoDict.TryGetValue("flag", out var flagObj) ||
|
!flagInfoDict.TryGetValue("flag", out var flagObj) ||
|
||||||
@@ -115,7 +114,7 @@ public class PermissionManager(Database.Database database)
|
|||||||
ends = parsedEnds;
|
ends = parsedEnds;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentSteamId != steamId && !string.IsNullOrEmpty(currentSteamId))
|
if (currentSteamId != steamId && !string.IsNullOrEmpty(currentSteamId))
|
||||||
{
|
{
|
||||||
filteredFlagsWithImmunity.Add((currentSteamId, currentPlayerName, currentFlags, immunityValue, ends));
|
filteredFlagsWithImmunity.Add((currentSteamId, currentPlayerName, currentFlags, immunityValue, ends));
|
||||||
@@ -125,7 +124,7 @@ public class PermissionManager(Database.Database database)
|
|||||||
currentSteamId = steamId;
|
currentSteamId = steamId;
|
||||||
currentPlayerName = playerName;
|
currentPlayerName = playerName;
|
||||||
currentFlags.Add(flag);
|
currentFlags.Add(flag);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(currentSteamId))
|
if (!string.IsNullOrEmpty(currentSteamId))
|
||||||
@@ -400,7 +399,7 @@ public class PermissionManager(Database.Database database)
|
|||||||
DateTime? futureTime;
|
DateTime? futureTime;
|
||||||
|
|
||||||
if (time != 0)
|
if (time != 0)
|
||||||
futureTime = now.ToLocalTime().AddMinutes(time);
|
futureTime = now.AddMinutes(time);
|
||||||
else
|
else
|
||||||
futureTime = null;
|
futureTime = null;
|
||||||
|
|
||||||
@@ -410,7 +409,7 @@ public class PermissionManager(Database.Database database)
|
|||||||
|
|
||||||
// Insert admin into sa_admins table
|
// Insert admin into sa_admins table
|
||||||
const string insertAdminSql = "INSERT INTO `sa_admins` (`player_steamid`, `player_name`, `immunity`, `ends`, `created`, `server_id`) " +
|
const string insertAdminSql = "INSERT INTO `sa_admins` (`player_steamid`, `player_name`, `immunity`, `ends`, `created`, `server_id`) " +
|
||||||
"VALUES (@playerSteamid, @playerName, @immunity, @ends, @created, @serverid); SELECT LAST_INSERT_ID();";
|
"VALUES (@playerSteamid, @playerName, @immunity, @ends, @created, @serverid); SELECT LAST_INSERT_ID();";
|
||||||
|
|
||||||
var adminId = await connection.ExecuteScalarAsync<int>(insertAdminSql, new
|
var adminId = await connection.ExecuteScalarAsync<int>(insertAdminSql, new
|
||||||
{
|
{
|
||||||
@@ -442,7 +441,7 @@ public class PermissionManager(Database.Database database)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const string insertFlagsSql = "INSERT INTO `sa_admins_flags` (`admin_id`, `flag`) " +
|
const string insertFlagsSql = "INSERT INTO `sa_admins_flags` (`admin_id`, `flag`) " +
|
||||||
"VALUES (@adminId, @flag)";
|
"VALUES (@adminId, @flag)";
|
||||||
|
|
||||||
await connection.ExecuteAsync(insertFlagsSql, new
|
await connection.ExecuteAsync(insertFlagsSql, new
|
||||||
{
|
{
|
||||||
@@ -464,14 +463,14 @@ public class PermissionManager(Database.Database database)
|
|||||||
|
|
||||||
public async Task AddGroup(string groupName, List<string> flagsList, int immunity = 0, bool globalGroup = false)
|
public async Task AddGroup(string groupName, List<string> flagsList, int immunity = 0, bool globalGroup = false)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(groupName) || flagsList.Count == 0) return;
|
if (string.IsNullOrEmpty(groupName) || flagsList.Count == 0) return;
|
||||||
|
|
||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Insert group into sa_groups table
|
// Insert group into sa_groups table
|
||||||
const string insertGroup = "INSERT INTO `sa_groups` (`name`, `immunity`) " +
|
const string insertGroup = "INSERT INTO `sa_groups` (`name`, `immunity`) " +
|
||||||
"VALUES (@groupName, @immunity); SELECT LAST_INSERT_ID();";
|
"VALUES (@groupName, @immunity); SELECT LAST_INSERT_ID();";
|
||||||
var groupId = await connection.ExecuteScalarAsync<int>(insertGroup, new
|
var groupId = await connection.ExecuteScalarAsync<int>(insertGroup, new
|
||||||
{
|
{
|
||||||
groupName,
|
groupName,
|
||||||
@@ -482,7 +481,7 @@ public class PermissionManager(Database.Database database)
|
|||||||
foreach (var flag in flagsList)
|
foreach (var flag in flagsList)
|
||||||
{
|
{
|
||||||
const string insertFlagsSql = "INSERT INTO `sa_groups_flags` (`group_id`, `flag`) " +
|
const string insertFlagsSql = "INSERT INTO `sa_groups_flags` (`group_id`, `flag`) " +
|
||||||
"VALUES (@groupId, @flag)";
|
"VALUES (@groupId, @flag)";
|
||||||
|
|
||||||
await connection.ExecuteAsync(insertFlagsSql, new
|
await connection.ExecuteAsync(insertFlagsSql, new
|
||||||
{
|
{
|
||||||
@@ -492,10 +491,10 @@ public class PermissionManager(Database.Database database)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const string insertGroupServer = "INSERT INTO `sa_groups_servers` (`group_id`, `server_id`) " +
|
const string insertGroupServer = "INSERT INTO `sa_groups_servers` (`group_id`, `server_id`) " +
|
||||||
"VALUES (@groupId, @server_id)";
|
"VALUES (@groupId, @server_id)";
|
||||||
|
|
||||||
await connection.ExecuteAsync(insertGroupServer, new { groupId, server_id = globalGroup ? null : CS2_SimpleAdmin.ServerId });
|
await connection.ExecuteAsync(insertGroupServer, new { groupId, server_id = globalGroup ? null : CS2_SimpleAdmin.ServerId });
|
||||||
|
|
||||||
await Server.NextFrameAsync(() =>
|
await Server.NextFrameAsync(() =>
|
||||||
{
|
{
|
||||||
CS2_SimpleAdmin.Instance.ReloadAdmins(null);
|
CS2_SimpleAdmin.Instance.ReloadAdmins(null);
|
||||||
@@ -531,7 +530,7 @@ public class PermissionManager(Database.Database database)
|
|||||||
await using var connection = await database.GetConnectionAsync();
|
await using var connection = await database.GetConnectionAsync();
|
||||||
|
|
||||||
const string sql = "DELETE FROM sa_admins WHERE ends IS NOT NULL AND ends <= @CurrentTime";
|
const string sql = "DELETE FROM sa_admins WHERE ends IS NOT NULL AND ends <= @CurrentTime";
|
||||||
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.Now.ToLocalTime() });
|
await connection.ExecuteAsync(sql, new { CurrentTime = DateTime.UtcNow.ToLocalTime() });
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ public class PlayerPenaltyManager
|
|||||||
{
|
{
|
||||||
if (!existingDict.TryGetValue(penaltyType, out var value))
|
if (!existingDict.TryGetValue(penaltyType, out var value))
|
||||||
{
|
{
|
||||||
value = new List<(DateTime, int)>();
|
value = new List<(DateTime, int)>();
|
||||||
existingDict[penaltyType] = value;
|
existingDict[penaltyType] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
value.Add((endDateTime, durationSeconds));
|
value.Add((endDateTime, durationSeconds));
|
||||||
return existingDict;
|
return existingDict;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@ public class PlayerPenaltyManager
|
|||||||
//Console.WriteLine($"Checking penalties for player with slot {slot} and penalty type {penaltyType}");
|
//Console.WriteLine($"Checking penalties for player with slot {slot} and penalty type {penaltyType}");
|
||||||
|
|
||||||
if (!Penalties.TryGetValue(slot, out var penaltyDict) ||
|
if (!Penalties.TryGetValue(slot, out var penaltyDict) ||
|
||||||
!penaltyDict.TryGetValue(penaltyType, out var penaltiesList)) return false;
|
!penaltyDict.TryGetValue(penaltyType, out var penaltiesList)) return false;
|
||||||
//Console.WriteLine($"Found penalties for player with slot {slot} and penalty type {penaltyType}");
|
//Console.WriteLine($"Found penalties for player with slot {slot} and penalty type {penaltyType}");
|
||||||
|
|
||||||
var now = DateTime.UtcNow.ToLocalTime();
|
var now = DateTime.UtcNow.ToLocalTime();
|
||||||
@@ -83,7 +83,7 @@ public class PlayerPenaltyManager
|
|||||||
public static List<(DateTime EndDateTime, int Duration)> GetPlayerPenalties(int slot, PenaltyType penaltyType)
|
public static List<(DateTime EndDateTime, int Duration)> GetPlayerPenalties(int slot, PenaltyType penaltyType)
|
||||||
{
|
{
|
||||||
if (Penalties.TryGetValue(slot, out var penaltyDict) &&
|
if (Penalties.TryGetValue(slot, out var penaltyDict) &&
|
||||||
penaltyDict.TryGetValue(penaltyType, out var penaltiesList))
|
penaltyDict.TryGetValue(penaltyType, out var penaltiesList))
|
||||||
{
|
{
|
||||||
return penaltiesList;
|
return penaltiesList;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user