diff --git a/CS2-SimpleAdmin/CS2-SimpleAdmin.cs b/CS2-SimpleAdmin/CS2-SimpleAdmin.cs index 0b0c38d..6cb7bf7 100644 --- a/CS2-SimpleAdmin/CS2-SimpleAdmin.cs +++ b/CS2-SimpleAdmin/CS2-SimpleAdmin.cs @@ -19,7 +19,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 & Dliix66"; - public override string ModuleVersion => "1.7.5a"; + public override string ModuleVersion => "1.7.6a"; public override void Load(bool hotReload) { @@ -56,7 +56,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig ReloadAdmins(null)); + AddTimer(5.0f, () => ReloadAdmins(null)); try { diff --git a/CS2-SimpleAdmin/Commands/basebans.cs b/CS2-SimpleAdmin/Commands/basebans.cs index 393feae..ac6b064 100644 --- a/CS2-SimpleAdmin/Commands/basebans.cs +++ b/CS2-SimpleAdmin/Commands/basebans.cs @@ -366,10 +366,10 @@ public partial class CS2_SimpleAdmin : (_localizer?["sa_console"] ?? "Console"); // Freeze player pawn if alive - if (player.PawnIsAlive) + if (player.PlayerPawn?.Value?.LifeState == (int)LifeState_t.LIFE_ALIVE) { - player.Pawn.Value?.Freeze(); - AddTimer(5.0f, () => player.Pawn.Value?.Unfreeze(), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); + player.PlayerPawn?.Value?.Freeze(); + AddTimer(5.0f, () => player.PlayerPawn?.Value?.Unfreeze(), CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); } // Get player and admin information diff --git a/CS2-SimpleAdmin/Commands/basecommands.cs b/CS2-SimpleAdmin/Commands/basecommands.cs index bc34802..98a9e52 100644 --- a/CS2-SimpleAdmin/Commands/basecommands.cs +++ b/CS2-SimpleAdmin/Commands/basecommands.cs @@ -390,16 +390,7 @@ public partial class CS2_SimpleAdmin public void ReloadAdmins(CCSPlayerController? caller) { if (Database == null) return; - - for (var index = 0; index < PermissionManager.AdminCache.Keys.ToList().Count; index++) - { - var steamId = PermissionManager.AdminCache.Keys.ToList()[index]; - if (!PermissionManager.AdminCache.TryRemove(steamId, out _)) continue; - - AdminManager.ClearPlayerPermissions(steamId); - AdminManager.RemovePlayerAdminData(steamId); - } - + Task.Run(async () => { await PermissionManager.CrateGroupsJsonFile(); @@ -411,11 +402,11 @@ public partial class CS2_SimpleAdmin await Server.NextWorldUpdateAsync(() => { if (!string.IsNullOrEmpty(adminsFile)) - AddTimer(1.8f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json")); + AddTimer(1.3f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json")); if (!string.IsNullOrEmpty(groupsFile)) AddTimer(2.5f, () => AdminManager.LoadAdminGroups(ModuleDirectory + "/data/groups.json")); if (!string.IsNullOrEmpty(adminsFile)) - AddTimer(3.0f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json")); + AddTimer(3.5f, () => AdminManager.LoadAdminData(ModuleDirectory + "/data/admins.json")); _logger?.LogInformation("Loaded admins!"); }); @@ -443,8 +434,8 @@ public partial class CS2_SimpleAdmin { Server.ExecuteCommand("sv_disable_teamselect_menu 1"); - if (caller.PlayerPawn.Value != null && caller.PawnIsAlive) - caller.PlayerPawn.Value.CommitSuicide(true, false); + if (caller.PlayerPawn?.Value?.LifeState == (int)LifeState_t.LIFE_ALIVE) + caller.PlayerPawn.Value?.CommitSuicide(true, false); AddTimer(1.0f, () => { Server.NextFrame(() => caller.ChangeTeam(CsTeam.Spectator)); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); AddTimer(1.4f, () => { Server.NextFrame(() => caller.ChangeTeam(CsTeam.None)); }, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE); diff --git a/CS2-SimpleAdmin/Commands/funcommands.cs b/CS2-SimpleAdmin/Commands/funcommands.cs index 05a2378..c336c81 100644 --- a/CS2-SimpleAdmin/Commands/funcommands.cs +++ b/CS2-SimpleAdmin/Commands/funcommands.cs @@ -18,7 +18,7 @@ public partial class CS2_SimpleAdmin if (targets == null) return; var playersToTarget = targets.Players.Where(player => player.IsValid && - player is { PawnIsAlive: true, IsHLTV: false, Connected: PlayerConnectedState.PlayerConnected }).ToList(); + player is { IsHLTV: false, Connected: PlayerConnectedState.PlayerConnected, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); playersToTarget.ForEach(player => { @@ -70,7 +70,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is {IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); playersToTarget.ForEach(player => { @@ -124,7 +124,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player is { IsValid: true, PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); playersToTarget.ForEach(player => { @@ -144,7 +144,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player is { IsValid: true, PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); playersToTarget.ForEach(player => { @@ -218,7 +218,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player is { IsValid: true, PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player is { IsValid: true, IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); playersToTarget.ForEach(player => { diff --git a/CS2-SimpleAdmin/Commands/playercommands.cs b/CS2-SimpleAdmin/Commands/playercommands.cs index 67c5b0e..08102fa 100644 --- a/CS2-SimpleAdmin/Commands/playercommands.cs +++ b/CS2-SimpleAdmin/Commands/playercommands.cs @@ -22,7 +22,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is {IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); playersToTarget.ForEach(player => { @@ -67,7 +67,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); var weaponName = command.GetArg(2); // check if item is typed @@ -173,7 +173,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); playersToTarget.ForEach(player => { @@ -192,7 +192,7 @@ public partial class CS2_SimpleAdmin callerName ??= caller != null ? caller.PlayerName : _localizer?["sa_console"] ?? "Console"; // Check if player is valid, alive, and connected - if (!player.IsValid || !player.PawnIsAlive || player.Connected != PlayerConnectedState.PlayerConnected) + if (!player.IsValid || player.PlayerPawn?.Value?.LifeState != (int)LifeState_t.LIFE_ALIVE || player.Connected != PlayerConnectedState.PlayerConnected) return; // Strip weapons from the player @@ -225,7 +225,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); playersToTarget.ForEach(player => { @@ -274,7 +274,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); playersToTarget.ForEach(player => { @@ -330,7 +330,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); playersToTarget.ForEach(player => { @@ -387,7 +387,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); playersToTarget.ForEach(player => { @@ -438,7 +438,7 @@ public partial class CS2_SimpleAdmin var targets = GetTarget(command); if (targets == null) return; - var playersToTarget = targets.Players.Where(player => player.IsValid && player is { PawnIsAlive: true, IsHLTV: false }).ToList(); + var playersToTarget = targets.Players.Where(player => player.IsValid && player is { IsHLTV: false, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).ToList(); if (command.ArgCount >= 2) { @@ -549,7 +549,7 @@ public partial class CS2_SimpleAdmin // Change team based on the provided teamName and conditions if (!teamName.Equals("swap", StringComparison.OrdinalIgnoreCase)) { - if (player.PawnIsAlive && teamNum != CsTeam.Spectator && !kill && Instance.Config.OtherSettings.TeamSwitchType == 1) + if (player.PlayerPawn?.Value?.LifeState == (int)LifeState_t.LIFE_ALIVE && teamNum != CsTeam.Spectator && !kill && Instance.Config.OtherSettings.TeamSwitchType == 1) player.SwitchTeam(teamNum); else player.ChangeTeam(teamNum); @@ -560,7 +560,7 @@ public partial class CS2_SimpleAdmin { var _teamNum = (CsTeam)player.TeamNum == CsTeam.Terrorist ? CsTeam.CounterTerrorist : CsTeam.Terrorist; teamName = _teamNum == CsTeam.Terrorist ? "TT" : "CT"; - if (player.PawnIsAlive && !kill && Instance.Config.OtherSettings.TeamSwitchType == 1) + if (player.PlayerPawn?.Value?.LifeState == (int)LifeState_t.LIFE_ALIVE && !kill && Instance.Config.OtherSettings.TeamSwitchType == 1) player.SwitchTeam(_teamNum); else player.ChangeTeam(_teamNum); @@ -740,7 +740,7 @@ public partial class CS2_SimpleAdmin public void OnGotoCommand(CCSPlayerController? caller, CommandInfo command) { // Check if the caller is valid and has a live pawn - if (caller == null || !caller.PawnIsAlive) return; + if (caller == null || caller.PlayerPawn?.Value?.LifeState != (int)LifeState_t.LIFE_ALIVE) return; // Get the target players var targets = GetTarget(command); @@ -754,7 +754,7 @@ public partial class CS2_SimpleAdmin Helper.LogCommand(caller, command); // Process each player to teleport - foreach (var player in playersToTarget.Where(player => player is { Connected: PlayerConnectedState.PlayerConnected, PawnIsAlive: true }).Where(caller.CanTarget)) + foreach (var player in playersToTarget.Where(player => player is { Connected: PlayerConnectedState.PlayerConnected, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).Where(caller.CanTarget)) { if (caller.PlayerPawn.Value == null || player.PlayerPawn.Value == null) continue; @@ -778,7 +778,7 @@ public partial class CS2_SimpleAdmin // Set a timer to toggle collision back after 4 seconds AddTimer(4, () => { - if (!caller.IsValid || !caller.PawnIsAlive) + if (!caller.IsValid || caller.PlayerPawn?.Value?.LifeState != (int)LifeState_t.LIFE_ALIVE) return; caller.PlayerPawn.Value.Collision.CollisionGroup = (byte)CollisionGroup.COLLISION_GROUP_PLAYER; @@ -811,7 +811,8 @@ public partial class CS2_SimpleAdmin public void OnBringCommand(CCSPlayerController? caller, CommandInfo command) { // Check if the caller is valid and has a live pawn - if (caller == null || !caller.PawnIsAlive) return; + if (caller == null || caller.PlayerPawn?.Value?.LifeState != (int)LifeState_t.LIFE_ALIVE) + return; // Get the target players var targets = GetTarget(command); @@ -825,7 +826,7 @@ public partial class CS2_SimpleAdmin Helper.LogCommand(caller, command); // Process each player to teleport - foreach (var player in playersToTarget.Where(player => player is { Connected: PlayerConnectedState.PlayerConnected, PawnIsAlive: true }).Where(caller.CanTarget)) + foreach (var player in playersToTarget.Where(player => player is { Connected: PlayerConnectedState.PlayerConnected, PlayerPawn.Value.LifeState: (int)LifeState_t.LIFE_ALIVE }).Where(caller.CanTarget)) { if (caller.PlayerPawn.Value == null || player.PlayerPawn.Value == null) continue; @@ -849,7 +850,7 @@ public partial class CS2_SimpleAdmin // Set a timer to toggle collision back after 4 seconds AddTimer(4, () => { - if (!player.IsValid || !player.PawnIsAlive) + if (!player.IsValid || player.PlayerPawn?.Value?.LifeState != (int)LifeState_t.LIFE_ALIVE) return; caller.PlayerPawn.Value.Collision.CollisionGroup = (byte)CollisionGroup.COLLISION_GROUP_PLAYER; diff --git a/CS2-SimpleAdmin/Config.cs b/CS2-SimpleAdmin/Config.cs index d61e678..76b8f30 100644 --- a/CS2-SimpleAdmin/Config.cs +++ b/CS2-SimpleAdmin/Config.cs @@ -230,6 +230,8 @@ public class OtherSettings [JsonPropertyName("AdditionalCommandsToLog")] public List AdditionalCommandsToLog { get; set; } = new(); + [JsonPropertyName("IgnoredIps")] + public List IgnoredIps { get; set; } = new(); } public class CS2_SimpleAdminConfig : BasePluginConfig diff --git a/CS2-SimpleAdmin/Events.cs b/CS2-SimpleAdmin/Events.cs index 457e1ce..e8ef371 100644 --- a/CS2-SimpleAdmin/Events.cs +++ b/CS2-SimpleAdmin/Events.cs @@ -106,14 +106,22 @@ public partial class CS2_SimpleAdmin if (player.UserId.HasValue) PlayersInfo.TryRemove(player.UserId.Value, out _); - - var authorizedSteamId = player.AuthorizedSteamID; - if (authorizedSteamId == null || !PermissionManager.AdminCache.TryGetValue(authorizedSteamId, - out var expirationTime) - || !(expirationTime <= Time.ActualDateTime())) return HookResult.Continue; - - AdminManager.ClearPlayerPermissions(authorizedSteamId); - AdminManager.RemovePlayerAdminData(authorizedSteamId); + + if (!PermissionManager.AdminCache.TryGetValue(steamId, out var data) + || !(data.ExpirationTime <= Time.ActualDateTime())) + { + return HookResult.Continue; + } + + AdminManager.RemovePlayerPermissions(steamId, PermissionManager.AdminCache[steamId].Flags.ToArray()); + AdminManager.RemovePlayerFromGroup(steamId, true, PermissionManager.AdminCache[steamId].Flags.ToArray()); + var adminData = AdminManager.GetPlayerAdminData(steamId); + + if (adminData == null || data.Flags.ToList().Count != 0 && adminData.Groups.ToList().Count != 0) + return HookResult.Continue; + + AdminManager.ClearPlayerPermissions(steamId); + AdminManager.RemovePlayerAdminData(steamId); return HookResult.Continue; } @@ -372,7 +380,7 @@ public partial class CS2_SimpleAdmin private void OnMapStart(string mapName) { if (Config.OtherSettings.ReloadAdminsEveryMapChange && ServerLoaded && ServerId != null) - AddTimer(3.0f, () => ReloadAdmins(null)); + AddTimer(5.0f, () => ReloadAdmins(null)); AddTimer(1.0f, () => new ServerManager().CheckHibernationStatus()); @@ -395,9 +403,8 @@ public partial class CS2_SimpleAdmin { var player = @event.Userid; - if (player is null || @event.Attacker is null || !player.PawnIsAlive || player.PlayerPawn.Value == null) + if (player is null || @event.Attacker is null || player.PlayerPawn?.Value?.LifeState != (int)LifeState_t.LIFE_ALIVE || player.PlayerPawn.Value == null) return HookResult.Continue; - if (SpeedPlayers.TryGetValue(player.Slot, out var speedPlayer)) AddTimer(0.15f, () => player.SetSpeed(speedPlayer)); diff --git a/CS2-SimpleAdmin/Extensions/PlayerExtensions.cs b/CS2-SimpleAdmin/Extensions/PlayerExtensions.cs index c4ac802..93088af 100644 --- a/CS2-SimpleAdmin/Extensions/PlayerExtensions.cs +++ b/CS2-SimpleAdmin/Extensions/PlayerExtensions.cs @@ -73,7 +73,7 @@ public static class PlayerExtensions public static void SetHp(this CCSPlayerController? controller, int health = 100) { if (controller == null) return; - if ((health <= 0 || !controller.PawnIsAlive || controller.PlayerPawn.Value == null)) return; + if (health <= 0 || controller.PlayerPawn.Value == null || controller.PlayerPawn?.Value?.LifeState != (int)LifeState_t.LIFE_ALIVE) return; controller.PlayerPawn.Value.Health = health; diff --git a/CS2-SimpleAdmin/Managers/BanManager.cs b/CS2-SimpleAdmin/Managers/BanManager.cs index 1f01c5f..4012059 100644 --- a/CS2-SimpleAdmin/Managers/BanManager.cs +++ b/CS2-SimpleAdmin/Managers/BanManager.cs @@ -145,7 +145,7 @@ internal class BanManager(Database.Database? database) { string sql; - if (CS2_SimpleAdmin.Instance.Config.OtherSettings.CheckMultiAccountsByIp) + if (CS2_SimpleAdmin.Instance.Config.OtherSettings.CheckMultiAccountsByIp && !CS2_SimpleAdmin.Instance.Config.OtherSettings.IgnoredIps.Contains(player.IpAddress)) { sql = CS2_SimpleAdmin.Instance.Config.MultiServerMode ? """ SELECT COALESCE(( @@ -232,7 +232,8 @@ internal class BanManager(Database.Database? database) { PlayerSteamID = player.SteamId.SteamId64.ToString(), PlayerIP = CS2_SimpleAdmin.Instance.Config.OtherSettings.BanType == 0 || - string.IsNullOrEmpty(player.IpAddress) + string.IsNullOrEmpty(player.IpAddress) || + CS2_SimpleAdmin.Instance.Config.OtherSettings.IgnoredIps.Contains(player.IpAddress) ? null : player.IpAddress, PlayerName = !string.IsNullOrEmpty(player.Name) ? player.Name : string.Empty, diff --git a/CS2-SimpleAdmin/Managers/PermissionManager.cs b/CS2-SimpleAdmin/Managers/PermissionManager.cs index 65bfaea..bd8fb46 100644 --- a/CS2-SimpleAdmin/Managers/PermissionManager.cs +++ b/CS2-SimpleAdmin/Managers/PermissionManager.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.Logging; using MySqlConnector; using Newtonsoft.Json; using System.Collections.Concurrent; +using CounterStrikeSharp.API.Modules.Admin; namespace CS2_SimpleAdmin.Managers; @@ -12,7 +13,8 @@ public class PermissionManager(Database.Database? database) { // Unused for now //public static readonly ConcurrentDictionary> _adminCache = new ConcurrentDictionary>(); - public static readonly ConcurrentDictionary AdminCache = new(); + // public static readonly ConcurrentDictionary AdminCache = new(); + public static readonly ConcurrentDictionary Flags)> AdminCache = new(); /* public async Task, int)>> GetAdminFlags(string steamId) @@ -334,7 +336,7 @@ public class PermissionManager(Database.Database? database) .GroupBy(player => player.name) // Group by player name .ToDictionary( group => group.Key, // Use the player name as the key - group => + object (group) => { // Consolidate data for players with the same name var consolidatedData = group.Aggregate( @@ -365,17 +367,77 @@ public class PermissionManager(Database.Database? database) return acc; }); - - foreach (var player in group) + + Server.NextFrameAsync(() => { - SteamID.TryParse(player.identity, out var steamId); - if (steamId != null && !AdminCache.ContainsKey(steamId)) - { - AdminCache.TryAdd(steamId, player.ends); - } - } + var keysToRemove = new List(); - return (object)consolidatedData; + foreach (var steamId in AdminCache.Keys.ToList()) + { + var data = AdminManager.GetPlayerAdminData(steamId); + if (data != null) + { + var flagsArray = AdminCache[steamId].Flags.ToArray(); + AdminManager.RemovePlayerPermissions(steamId, flagsArray); + AdminManager.RemovePlayerFromGroup(steamId, true, flagsArray); + } + + keysToRemove.Add(steamId); + } + + foreach (var steamId in keysToRemove) + { + if (!AdminCache.TryRemove(steamId, out _)) continue; + + var data = AdminManager.GetPlayerAdminData(steamId); + if (data == null) continue; + if (data.Flags.Count != 0 && data.Groups.Count != 0) continue; + + AdminManager.ClearPlayerPermissions(steamId); + AdminManager.RemovePlayerAdminData(steamId); + } + + foreach (var player in group) + { + if (SteamID.TryParse(player.identity, out var steamId) && steamId != null) + { + AdminCache.TryAdd(steamId, (player.ends, player.flags)); + } + } + }); + + // Server.NextFrameAsync(() => + // { + // for (var index = 0; index < AdminCache.Keys.ToList().Count; index++) + // { + // var steamId = AdminCache.Keys.ToList()[index]; + // + // var data = AdminManager.GetPlayerAdminData(steamId); + // if (data != null) + // { + // AdminManager.RemovePlayerPermissions(steamId, AdminCache[steamId].Flags.ToArray()); + // AdminManager.RemovePlayerFromGroup(steamId, true, AdminCache[steamId].Flags.ToArray()); + // } + // + // if (!AdminCache.TryRemove(steamId, out _)) continue; + // + // if (data == null) continue; + // if (data.Flags.ToList().Count != 0 && data.Groups.ToList().Count != 0) + // continue; + // + // AdminManager.ClearPlayerPermissions(steamId); + // AdminManager.RemovePlayerAdminData(steamId); + // } + // + // foreach (var player in group) + // { + // SteamID.TryParse(player.identity, out var steamId); + // if (steamId == null) continue; + // AdminCache.TryAdd(steamId, (player.ends, player.flags)); + // } + // }); + + return consolidatedData; }); var json = JsonConvert.SerializeObject(jsonData, Formatting.Indented); diff --git a/CS2-SimpleAdmin/Managers/PlayerManager.cs b/CS2-SimpleAdmin/Managers/PlayerManager.cs index c51ec28..487e9dd 100644 --- a/CS2-SimpleAdmin/Managers/PlayerManager.cs +++ b/CS2-SimpleAdmin/Managers/PlayerManager.cs @@ -229,7 +229,7 @@ public class PlayerManager foreach (var value in CS2_SimpleAdmin.GravityPlayers) { if (value.Key is not - { IsValid: true, Connected: PlayerConnectedState.PlayerConnected, PawnIsAlive: true }) + { IsValid: true, Connected: PlayerConnectedState.PlayerConnected } && value.Key.PlayerPawn?.Value?.LifeState == (int)LifeState_t.LIFE_ALIVE) continue; value.Key.SetGravity(value.Value); diff --git a/CS2-SimpleAdmin/Menus/PlayersMenu.cs b/CS2-SimpleAdmin/Menus/PlayersMenu.cs index 092787f..19b76c2 100644 --- a/CS2-SimpleAdmin/Menus/PlayersMenu.cs +++ b/CS2-SimpleAdmin/Menus/PlayersMenu.cs @@ -18,12 +18,12 @@ public static class PlayersMenu public static void OpenAliveMenu(CCSPlayerController admin, string menuName, Action onSelectAction, Func? enableFilter = null) { - OpenMenu(admin, menuName, onSelectAction, p => p.PawnIsAlive); + OpenMenu(admin, menuName, onSelectAction, p => p.PlayerPawn?.Value?.LifeState == (int)LifeState_t.LIFE_ALIVE); } public static void OpenDeadMenu(CCSPlayerController admin, string menuName, Action onSelectAction, Func? enableFilter = null) { - OpenMenu(admin, menuName, onSelectAction, p => p.PawnIsAlive == false); + OpenMenu(admin, menuName, onSelectAction, p => p.PlayerPawn?.Value?.LifeState != (int)LifeState_t.LIFE_ALIVE); } public static void OpenMenu(CCSPlayerController admin, string menuName, Action onSelectAction, Func? enableFilter = null) diff --git a/CS2-SimpleAdmin/VERSION b/CS2-SimpleAdmin/VERSION index 1b574bd..4e7dcbe 100644 --- a/CS2-SimpleAdmin/VERSION +++ b/CS2-SimpleAdmin/VERSION @@ -1 +1 @@ -1.7.5a \ No newline at end of file +1.7.6a \ No newline at end of file