diff --git a/AdminSQLManager.cs b/AdminSQLManager.cs index 5ebe320..57c77a0 100644 --- a/AdminSQLManager.cs +++ b/AdminSQLManager.cs @@ -1,12 +1,12 @@ using Dapper; using MySqlConnector; -using System.Collections.Generic; namespace CS2_SimpleAdmin { internal class AdminSQLManager { private readonly MySqlConnection _dbConnection; + public static readonly Dictionary> _adminCache = new Dictionary>(); public AdminSQLManager(string connectionString) { @@ -15,21 +15,39 @@ namespace CS2_SimpleAdmin public async Task> GetAdminFlags(string steamId) { - await using var connection = _dbConnection; - await connection.OpenAsync(); + if (_adminCache.ContainsKey(steamId)) + { + Console.WriteLine("From cache"); + return _adminCache[steamId].Select(flag => (dynamic)flag).ToList(); + } + else + { + await using var connection = _dbConnection; + await connection.OpenAsync(); - DateTime now = DateTime.Now; + DateTime now = DateTime.Now; - string sql = "SELECT flags 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 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(); - return activeFlags; + _adminCache[steamId] = new List(); + foreach (var flags in activeFlags) + { + if (flags == null) continue; + string flagsValue = flags.flags.ToString(); + _adminCache[steamId].Add(flagsValue); + } + } + return _adminCache[steamId].Select(flag => (dynamic)flag).ToList(); } public async Task DeleteAdminBySteamId(string playerSteamId) { if (string.IsNullOrEmpty(playerSteamId)) return; + if (_adminCache.ContainsKey(playerSteamId)) + _adminCache.Remove(playerSteamId); + await using var connection = _dbConnection; await connection.OpenAsync(); diff --git a/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin.cs index 6c9ab63..9dc75f4 100644 --- a/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin.cs @@ -31,7 +31,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig "CS2-SimpleAdmin"; public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; public override string ModuleAuthor => "daffyy"; - public override string ModuleVersion => "1.2.4a"; + public override string ModuleVersion => "1.2.4b"; public CS2_SimpleAdminConfig Config { get; set; } = new(); diff --git a/Events.cs b/Events.cs index 4d98187..f1aea34 100644 --- a/Events.cs +++ b/Events.cs @@ -222,7 +222,37 @@ public partial class CS2_SimpleAdmin } } - if (activeFlags != null && activeFlags.Count > 0) + if (AdminSQLManager._adminCache.ContainsKey(playerInfo.SteamId!)) + { + AddTimer(10, () => + { + foreach (var flagsValue in AdminSQLManager._adminCache[playerInfo.SteamId!]) + { + if (!string.IsNullOrEmpty(flagsValue)) + { + string[] _flags = flagsValue.Split(','); + + if (player == null) return; + foreach (var _flag in _flags) + { + if (_flag.StartsWith("@")) + { + AdminManager.AddPlayerPermissions(player, _flag); + } + if (_flag.StartsWith("#")) + { + AdminManager.AddPlayerToGroup(player, _flag); + } + } + } + } + }); + } + + + /* + + if (_adminManager._adminCache != null && _adminManager._adminCache.Count > 0) { foreach (var flags in activeFlags) { @@ -250,7 +280,8 @@ public partial class CS2_SimpleAdmin }); } } - } + } + */ }); }); } @@ -282,6 +313,14 @@ public partial class CS2_SimpleAdmin GodPlayers.Remove((int)player.Index); } + if (player.AuthorizedSteamID != null) + { + if (AdminSQLManager._adminCache.ContainsKey(player.AuthorizedSteamID.SteamId64.ToString())) + { + AdminSQLManager._adminCache.Remove(player.AuthorizedSteamID.SteamId64.ToString()); + } + } + if (TagsDetected) NativeAPI.IssueServerCommand($"css_tag_unmute {player!.Index.ToString()}"); }