diff --git a/AdminSQLManager.cs b/AdminSQLManager.cs index 8b46e32..092e771 100644 --- a/AdminSQLManager.cs +++ b/AdminSQLManager.cs @@ -43,7 +43,7 @@ namespace CS2_SimpleAdmin } */ - public async Task> GetAdminFlags(string steamId) + public async Task, int)>> GetAdminFlags(string steamId) { /* Unused for now if (_adminCache.TryGetValue(steamId, out ConcurrentBag? cachedFlags)) @@ -56,14 +56,17 @@ namespace CS2_SimpleAdmin await using var connection = _dbConnection; await connection.OpenAsync(); - string sql = "SELECT flags, ends FROM sa_admins WHERE player_steamid = @PlayerSteamID AND (ends IS NULL OR ends > @CurrentTime)"; - List? activeFlags = (await connection.QueryAsync(sql, new { PlayerSteamID = steamId, CurrentTime = now }))?.ToList(); + string sql = "SELECT flags, immunity, ends FROM sa_admins WHERE player_steamid = @PlayerSteamID AND (ends IS NULL OR ends > @CurrentTime) AND (server_id IS NULL OR server_id = @serverid)"; + List? activeFlags = (await connection.QueryAsync(sql, new { PlayerSteamID = steamId, CurrentTime = now, serverid = CS2_SimpleAdmin.ServerId }))?.ToList(); if (activeFlags == null) { - return new List(); + return new List<(List, int)>(); } + List<(List, int)> filteredFlagsWithImmunity = new List<(List, int)>(); + + /* List filteredFlags = new List(); foreach (var flags in activeFlags) @@ -76,6 +79,30 @@ namespace CS2_SimpleAdmin filteredFlags.Add(flag); } } + */ + + foreach (dynamic flags in activeFlags) + { + if (flags is not IDictionary flagsDict) + { + continue; + } + + if (!flagsDict.TryGetValue("flags", out var flagsValueObj) || !flagsDict.TryGetValue("immunity", out var immunityValueObj)) + { + continue; + } + + if (!(flagsValueObj is string flagsValue) || !int.TryParse(immunityValueObj.ToString(), out var immunityValue)) + { + continue; + } + + //Console.WriteLine($"Flags: {flagsValue}, Immunity: {immunityValue}"); + + filteredFlagsWithImmunity.Add((flagsValue.Split(',').ToList(), immunityValue)); + } + /* Unused for now bool shouldCache = activeFlags.Any(flags => @@ -117,8 +144,8 @@ namespace CS2_SimpleAdmin return flagsToCache.Cast().ToList(); } */ - - return filteredFlags.Cast().ToList(); + return filteredFlagsWithImmunity; + //return filteredFlags.Cast().ToList(); } public async Task DeleteAdminBySteamId(string playerSteamId) diff --git a/BanManager.cs b/BanManager.cs index e327cb2..4d9b87b 100644 --- a/BanManager.cs +++ b/BanManager.cs @@ -20,8 +20,8 @@ namespace CS2_SimpleAdmin await using var connection = _dbConnection; await connection.OpenAsync(); - var sql = "INSERT INTO `sa_bans` (`player_steamid`, `player_name`, `player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`) " + - "VALUES (@playerSteamid, @playerName, @playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created)"; + var sql = "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)"; await connection.ExecuteAsync(sql, new { @@ -33,7 +33,8 @@ namespace CS2_SimpleAdmin banReason = reason, duration = time, ends = futureTime, - created = now + created = now, + serverid = CS2_SimpleAdmin.ServerId }); } @@ -47,8 +48,8 @@ namespace CS2_SimpleAdmin await using var connection = _dbConnection; await connection.OpenAsync(); - var sql = "INSERT INTO `sa_bans` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`) " + - "VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created)"; + var sql = "INSERT INTO `sa_bans` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " + + "VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)"; await connection.ExecuteAsync(sql, new { @@ -58,7 +59,8 @@ namespace CS2_SimpleAdmin banReason = reason, duration = time, ends = futureTime, - created = now + created = now, + serverid = CS2_SimpleAdmin.ServerId }); } @@ -72,8 +74,8 @@ namespace CS2_SimpleAdmin await using var connection = _dbConnection; await connection.OpenAsync(); - var sql = "INSERT INTO `sa_bans` (`player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`) " + - "VALUES (@playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created)"; + var sql = "INSERT INTO `sa_bans` (`player_ip`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `server_id`) " + + "VALUES (@playerIp, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @serverid)"; await connection.ExecuteAsync(sql, new { @@ -83,7 +85,8 @@ namespace CS2_SimpleAdmin banReason = reason, duration = time, ends = futureTime, - created = now + created = now, + serverid = CS2_SimpleAdmin.ServerId }); } diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index 54429af..96fa85c 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -27,12 +27,13 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig GodPlayers = new List(); public static bool TagsDetected = false; public static bool voteInProgress = false; + public static int? ServerId = null; internal string dbConnectionString = string.Empty; public override string ModuleName => "CS2-SimpleAdmin"; public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; public override string ModuleAuthor => "daffyy"; - public override string ModuleVersion => "1.2.5a"; + public override string ModuleVersion => "1.2.6a"; public CS2_SimpleAdminConfig Config { get; set; } = new(); @@ -81,6 +82,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig { + BanManager _banManager = new(dbConnectionString); bool isBanned = await _banManager.IsPlayerBanned(playerInfo); @@ -146,7 +150,7 @@ public partial class CS2_SimpleAdmin List activeMutes = await _muteManager.IsPlayerMuted(playerInfo.SteamId!); AdminSQLManager _adminManager = new(dbConnectionString); - List activeFlags = await _adminManager.GetAdminFlags(playerInfo.SteamId!); + List<(List, int)> activeFlags = await _adminManager.GetAdminFlags(playerInfo.SteamId!); Server.NextFrame(() => { @@ -239,7 +243,7 @@ public partial class CS2_SimpleAdmin } } - AddTimer(14, () => Helper.GivePlayerFlags(player, activeFlags)); + AddTimer(6, () => Helper.GivePlayerFlags(player, activeFlags)); /* @@ -333,6 +337,24 @@ public partial class CS2_SimpleAdmin { TagsDetected = true; } + + using (var connection = new MySqlConnection(dbConnectionString)) + { + connection.Open(); + + connection.Execute( + "INSERT INTO `sa_servers` (address, hostname) VALUES (@address, @hostname) " + + "ON DUPLICATE KEY UPDATE hostname = @hostname", + new { address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue()}", hostname = ConVar.Find("hostname")!.StringValue }); + + int? serverId = connection.ExecuteScalar( + "SELECT `id` FROM `sa_servers` WHERE `address` = @address", + new { address = $"{ConVar.Find("ip")!.StringValue}:{ConVar.Find("hostport")!.GetPrimitiveValue()}" }); + + ServerId = serverId; + + connection.Close(); + } } private HookResult OnPlayerHurt(EventPlayerHurt @event, GameEventInfo info) diff --git a/Helper.cs b/Helper.cs index 885d9db..3e4876e 100644 --- a/Helper.cs +++ b/Helper.cs @@ -47,33 +47,30 @@ namespace CS2_SimpleAdmin return Regex.IsMatch(input, pattern); } - public static void GivePlayerFlags(CCSPlayerController player, dynamic flags) + public static void GivePlayerFlags(CCSPlayerController player, List<(List, int)> flagsWithImmunity) { if (player == null) return; - foreach (var flagsValue in flags) + foreach (var (flags, immunity) in flagsWithImmunity) { - if (!string.IsNullOrEmpty(flagsValue)) - { - string[] _flags = flagsValue.Split(','); - Console.WriteLine(flagsValue); + AdminManager.SetPlayerImmunity(player, (uint)immunity); - foreach (var _flag in _flags) + foreach (var flag in flags) + { + if (!string.IsNullOrEmpty(flag)) { - Server.NextFrame(() => + if (flag.StartsWith("@")) { - if (_flag.StartsWith("@")) - { - AdminManager.AddPlayerPermissions(player, _flag); - } - if (_flag.StartsWith("#")) - { - AdminManager.AddPlayerToGroup(player, _flag); - } - }); + AdminManager.AddPlayerPermissions(player, flag); + } + else if (flag.StartsWith("#")) + { + AdminManager.AddPlayerToGroup(player, flag); + } } } } + } /* diff --git a/MuteManager.cs b/MuteManager.cs index e32f972..c3c323b 100644 --- a/MuteManager.cs +++ b/MuteManager.cs @@ -28,8 +28,8 @@ namespace CS2_SimpleAdmin if (type == 1) muteType = "MUTE"; - var sql = "INSERT INTO `sa_mutes` (`player_steamid`, `player_name`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`) " + - "VALUES (@playerSteamid, @playerName, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @type)"; + var sql = "INSERT INTO `sa_mutes` (`player_steamid`, `player_name`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " + + "VALUES (@playerSteamid, @playerName, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @type, @serverid)"; await connection.ExecuteAsync(sql, new { @@ -42,6 +42,7 @@ namespace CS2_SimpleAdmin ends = futureTime, created = now, type = muteType, + serverid = CS2_SimpleAdmin.ServerId }); } @@ -59,8 +60,8 @@ namespace CS2_SimpleAdmin if (type == 1) muteType = "MUTE"; - var sql = "INSERT INTO `sa_mutes` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`) " + - "VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @type)"; + var sql = "INSERT INTO `sa_mutes` (`player_steamid`, `admin_steamid`, `admin_name`, `reason`, `duration`, `ends`, `created`, `type`, `server_id`) " + + "VALUES (@playerSteamid, @adminSteamid, @adminName, @banReason, @duration, @ends, @created, @type, @serverid)"; await connection.ExecuteAsync(sql, new { @@ -71,7 +72,8 @@ namespace CS2_SimpleAdmin duration = time, ends = futureTime, created = now, - type = muteType + type = muteType, + serverid = CS2_SimpleAdmin.ServerId }); }