diff --git a/CS2-SimpleAdmin/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin/CS2-SimpleAdmin.cs index 24d4a8a..c33a30f 100644 --- a/CS2-SimpleAdmin/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin/CS2-SimpleAdmin.cs @@ -22,7 +22,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)"); public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)"; public override string ModuleAuthor => "daffyy"; - public override string ModuleVersion => "1.7.8-beta-7"; + public override string ModuleVersion => "1.7.8-beta-8"; public override void Load(bool hotReload) { diff --git a/CS2-SimpleAdmin/Managers/CacheManager.cs b/CS2-SimpleAdmin/Managers/CacheManager.cs index 8e8867f..9462f1e 100644 --- a/CS2-SimpleAdmin/Managers/CacheManager.cs +++ b/CS2-SimpleAdmin/Managers/CacheManager.cs @@ -620,47 +620,40 @@ internal class CacheManager: IDisposable if (CS2_SimpleAdmin.Instance.Config.OtherSettings.BanType == 0 || string.IsNullOrEmpty(ipAddress)) return false; - if (!_playerIpsCache.TryGetValue(steamId, out var ipData)) + if (!IpHelper.TryConvertIpToUint(ipAddress, out var ipUInt)) return false; - var cutoff = Time.ActualDateTime().AddDays(-CS2_SimpleAdmin.Instance.Config.OtherSettings.ExpireOldIpBans); + if (_cachedIgnoredIps.Contains(ipUInt)) + return false; + + if (!_ipIndex.TryGetValue(ipUInt, out var ipBanRecords)) + return false; + + var ipBan = ipBanRecords.FirstOrDefault(r => r.StatusEnum == BanStatus.ACTIVE); + if (ipBan == null) + return false; + + if (!_banCache.TryGetValue(ipBan.Id, out var cachedIpBan) || cachedIpBan.StatusEnum != BanStatus.ACTIVE) + return false; + + var expireOldIpBans = CS2_SimpleAdmin.Instance.Config.OtherSettings.ExpireOldIpBans; + if (expireOldIpBans > 0) + { + var cutoff = Time.ActualDateTime().AddDays(-expireOldIpBans); + if (ipBan.Created < cutoff) + return false; + } + var unknownName = CS2_SimpleAdmin._localizer?["sa_unknown"] ?? "Unknown"; - if (ipAddress != null && IpHelper.TryConvertIpToUint(ipAddress, out var ipAsUint)) - { - if (!_cachedIgnoredIps.Contains(ipAsUint)) - { - ipData.Add(new IpRecord(ipAsUint, Time.ActualDateTime().AddSeconds(-2), unknownName)); - } - } + if (string.IsNullOrEmpty(ipBan.PlayerName)) + ipBan.PlayerName = playerName; - foreach (var ipRecord in ipData) - { - if (ipRecord.UsedAt < cutoff || _cachedIgnoredIps.Contains(ipRecord.Ip)) - continue; + ipBan.PlayerSteamId ??= steamId; - if (!_ipIndex.TryGetValue(ipRecord.Ip, out var banRecords)) - continue; + _ = Task.Run(() => UpdatePlayerData(playerName, steamId, ipAddress)); - var activeBan = banRecords.FirstOrDefault(r => r.StatusEnum == BanStatus.ACTIVE); - if (activeBan == null) - continue; - - // Double-check the ban is still active in cache (handle race conditions) - if (!_banCache.TryGetValue(activeBan.Id, out var cachedBan) || cachedBan.StatusEnum != BanStatus.ACTIVE) - continue; - - if (string.IsNullOrEmpty(activeBan.PlayerName)) - activeBan.PlayerName = unknownName; - - activeBan.PlayerSteamId ??= steamId; - - _ = Task.Run(() => UpdatePlayerData(playerName, steamId, ipAddress)); - - return true; - } - - return false; + return true; } /// diff --git a/CS2-SimpleAdmin/Models/BanRecord.cs b/CS2-SimpleAdmin/Models/BanRecord.cs index 026ffd6..996e423 100644 --- a/CS2-SimpleAdmin/Models/BanRecord.cs +++ b/CS2-SimpleAdmin/Models/BanRecord.cs @@ -24,7 +24,10 @@ public record BanRecord [Column("player_ip")] public string? PlayerIp { get; set; } - + + [Column("created")] + public DateTime Created { get; init; } + [Column("status")] public required string Status { get; init; } diff --git a/CS2-SimpleAdmin/VERSION b/CS2-SimpleAdmin/VERSION index 49c5f9b..7c3c90c 100644 --- a/CS2-SimpleAdmin/VERSION +++ b/CS2-SimpleAdmin/VERSION @@ -1 +1 @@ -1.7.8-beta-7 \ No newline at end of file +1.7.8-beta-8 \ No newline at end of file diff --git a/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.0-linux.tar.gz b/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.0-linux.tar.gz deleted file mode 100644 index ae1a40d..0000000 Binary files a/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.0-linux.tar.gz and /dev/null differ diff --git a/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.0-windows.tar.gz b/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.0-windows.tar.gz deleted file mode 100644 index 1ec754a..0000000 Binary files a/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.0-windows.tar.gz and /dev/null differ diff --git a/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.3-linux.tar.gz b/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.3-linux.tar.gz new file mode 100644 index 0000000..5c993de Binary files /dev/null and b/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.3-linux.tar.gz differ diff --git a/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.3-windows.tar.gz b/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.3-windows.tar.gz new file mode 100644 index 0000000..c3a4795 Binary files /dev/null and b/Modules/CS2-SimpleAdmin_StealthModule/METAMOD PLUGIN/StatusBlocker-v1.1.3-windows.tar.gz differ