@@ -620,47 +620,40 @@ public bool IsPlayerOrAnyIpBanned(string playerName, ulong steamId, string? ipAd
620620 if ( CS2_SimpleAdmin . Instance . Config . OtherSettings . BanType == 0 || string . IsNullOrEmpty ( ipAddress ) )
621621 return false ;
622622
623- if ( ! _playerIpsCache . TryGetValue ( steamId , out var ipData ) )
623+ if ( ! IpHelper . TryConvertIpToUint ( ipAddress , out var ipUInt ) )
624624 return false ;
625625
626- var cutoff = Time . ActualDateTime ( ) . AddDays ( - CS2_SimpleAdmin . Instance . Config . OtherSettings . ExpireOldIpBans ) ;
627- var unknownName = CS2_SimpleAdmin . _localizer ? [ "sa_unknown" ] ?? "Unknown" ;
628-
629- if ( ipAddress != null && IpHelper . TryConvertIpToUint ( ipAddress , out var ipAsUint ) )
630- {
631- if ( ! _cachedIgnoredIps . Contains ( ipAsUint ) )
632- {
633- ipData . Add ( new IpRecord ( ipAsUint , Time . ActualDateTime ( ) . AddSeconds ( - 2 ) , unknownName ) ) ;
634- }
635- }
626+ if ( _cachedIgnoredIps . Contains ( ipUInt ) )
627+ return false ;
636628
637- foreach ( var ipRecord in ipData )
638- {
639- if ( ipRecord . UsedAt < cutoff || _cachedIgnoredIps . Contains ( ipRecord . Ip ) )
640- continue ;
629+ if ( ! _ipIndex . TryGetValue ( ipUInt , out var ipBanRecords ) )
630+ return false ;
641631
642- if ( ! _ipIndex . TryGetValue ( ipRecord . Ip , out var banRecords ) )
643- continue ;
632+ var ipBan = ipBanRecords . FirstOrDefault ( r => r . StatusEnum == BanStatus . ACTIVE ) ;
633+ if ( ipBan == null )
634+ return false ;
644635
645- var activeBan = banRecords . FirstOrDefault ( r => r . StatusEnum == BanStatus . ACTIVE ) ;
646- if ( activeBan == null )
647- continue ;
636+ if ( ! _banCache . TryGetValue ( ipBan . Id , out var cachedIpBan ) || cachedIpBan . StatusEnum != BanStatus . ACTIVE )
637+ return false ;
648638
649- // Double-check the ban is still active in cache (handle race conditions)
650- if ( ! _banCache . TryGetValue ( activeBan . Id , out var cachedBan ) || cachedBan . StatusEnum != BanStatus . ACTIVE )
651- continue ;
639+ var expireOldIpBans = CS2_SimpleAdmin . Instance . Config . OtherSettings . ExpireOldIpBans ;
640+ if ( expireOldIpBans > 0 )
641+ {
642+ var cutoff = Time . ActualDateTime ( ) . AddDays ( - expireOldIpBans ) ;
643+ if ( ipBan . Created < cutoff )
644+ return false ;
645+ }
652646
653- if ( string . IsNullOrEmpty ( activeBan . PlayerName ) )
654- activeBan . PlayerName = unknownName ;
647+ var unknownName = CS2_SimpleAdmin . _localizer ? [ "sa_unknown" ] ?? "Unknown" ;
655648
656- activeBan . PlayerSteamId ??= steamId ;
649+ if ( string . IsNullOrEmpty ( ipBan . PlayerName ) )
650+ ipBan . PlayerName = playerName ;
657651
658- _ = Task . Run ( ( ) => UpdatePlayerData ( playerName , steamId , ipAddress ) ) ;
652+ ipBan . PlayerSteamId ??= steamId ;
659653
660- return true ;
661- }
654+ _ = Task . Run ( ( ) => UpdatePlayerData ( playerName , steamId , ipAddress ) ) ;
662655
663- return false ;
656+ return true ;
664657 }
665658
666659 /// <summary>
0 commit comments