mirror of
https://github.com/daffyyyy/CS2-SimpleAdmin.git
synced 2026-02-17 18:39:07 +00:00
:(
:(
This commit is contained in:
@@ -283,6 +283,15 @@ internal class PlayerManager
|
|||||||
#endif
|
#endif
|
||||||
if (CS2_SimpleAdmin.DatabaseProvider == null)
|
if (CS2_SimpleAdmin.DatabaseProvider == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Optimization: Get players once and avoid allocating anonymous types
|
||||||
|
var validPlayers = Helper.GetValidPlayers();
|
||||||
|
// Use ValueTuple instead of anonymous type - better performance and less allocations
|
||||||
|
var tempPlayers = new List<(string PlayerName, ulong SteamID, string? IpAddress, int? UserId, int Slot)>(validPlayers.Count);
|
||||||
|
foreach (var p in validPlayers)
|
||||||
|
{
|
||||||
|
tempPlayers.Add((p.PlayerName, p.SteamID, p.IpAddress, p.UserId, p.Slot));
|
||||||
|
}
|
||||||
|
|
||||||
var pluginInstance = CS2_SimpleAdmin.Instance;
|
var pluginInstance = CS2_SimpleAdmin.Instance;
|
||||||
var config = _config.OtherSettings; // Cache config access
|
var config = _config.OtherSettings; // Cache config access
|
||||||
@@ -291,8 +300,7 @@ internal class PlayerManager
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Always run cache and permission refresh, regardless of player count
|
// Run all expire tasks in parallel
|
||||||
// This ensures bans/mutes status changes are detected even when server is empty
|
|
||||||
var expireTasks = new[]
|
var expireTasks = new[]
|
||||||
{
|
{
|
||||||
pluginInstance.BanManager.ExpireOldBans(),
|
pluginInstance.BanManager.ExpireOldBans(),
|
||||||
@@ -320,11 +328,6 @@ internal class PlayerManager
|
|||||||
if (pluginInstance.CacheManager == null)
|
if (pluginInstance.CacheManager == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Only check players if there are any online
|
|
||||||
var validPlayers = Helper.GetValidPlayers();
|
|
||||||
if (validPlayers.Count == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Optimization: Cache ban type and multi-account check to avoid repeated config access
|
// Optimization: Cache ban type and multi-account check to avoid repeated config access
|
||||||
var banType = config.BanType;
|
var banType = config.BanType;
|
||||||
var checkMultiAccounts = config.CheckMultiAccountsByIp;
|
var checkMultiAccounts = config.CheckMultiAccountsByIp;
|
||||||
@@ -332,7 +335,7 @@ internal class PlayerManager
|
|||||||
var bannedPlayers = new List<(string PlayerName, ulong SteamID, string? IpAddress, int? UserId, int Slot)>();
|
var bannedPlayers = new List<(string PlayerName, ulong SteamID, string? IpAddress, int? UserId, int Slot)>();
|
||||||
|
|
||||||
// Manual loop instead of LINQ - better performance
|
// Manual loop instead of LINQ - better performance
|
||||||
foreach (var player in validPlayers)
|
foreach (var player in tempPlayers)
|
||||||
{
|
{
|
||||||
var playerName = player.PlayerName;
|
var playerName = player.PlayerName;
|
||||||
var steamId = player.SteamID;
|
var steamId = player.SteamID;
|
||||||
@@ -348,7 +351,7 @@ internal class PlayerManager
|
|||||||
|
|
||||||
if (isBanned)
|
if (isBanned)
|
||||||
{
|
{
|
||||||
bannedPlayers.Add((playerName, steamId, ip, player.UserId, player.Slot));
|
bannedPlayers.Add(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -369,8 +372,8 @@ internal class PlayerManager
|
|||||||
if (config.TimeMode == 0)
|
if (config.TimeMode == 0)
|
||||||
{
|
{
|
||||||
// Optimization: Manual projection instead of LINQ
|
// Optimization: Manual projection instead of LINQ
|
||||||
var onlinePlayers = new List<(ulong, int?, int)>(validPlayers.Count);
|
var onlinePlayers = new List<(ulong, int?, int)>(tempPlayers.Count);
|
||||||
foreach (var player in validPlayers)
|
foreach (var player in tempPlayers)
|
||||||
{
|
{
|
||||||
onlinePlayers.Add((player.SteamID, player.UserId, player.Slot));
|
onlinePlayers.Add((player.SteamID, player.UserId, player.Slot));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user