diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index 6f69c90d9c..d138b7c77f 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -46,7 +46,7 @@ public sealed partial class GameTicker // Mainly to avoid allocations. private readonly List _possiblePositions = new(); - private List GetSpawnableStations() + public List GetSpawnableStations() // Cats edit { var spawnableStations = new List(); var query = EntityQueryEnumerator(); diff --git a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs index ea5cad3973..55094d1b87 100644 --- a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs @@ -33,6 +33,7 @@ public sealed class ZombieRuleSystem : GameRuleSystem [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly ZombieSystem _zombie = default!; + [Dependency] private readonly GameTicker _gameTicker = default!; // Cats edit public override void Initialize() { @@ -84,7 +85,7 @@ protected override void AppendRoundEndText(EntityUid uid, ("username", data.UserName))); } - var healthy = GetHealthyHumans(); + var healthy = GetHealthyHumans(true); // Cats edit // Gets a bunch of the living players and displays them if they're under a threshold. // InitialInfected is used for the threshold because it scales with the player count well. if (healthy.Count <= 0 || healthy.Count > 2 * antags.Count) @@ -159,7 +160,7 @@ private void OnZombifySelf(EntityUid uid, IncurableZombieComponent component, Zo /// Include healthy players that are not on the station grid /// Should dead zombies be included in the count /// - private float GetInfectedFraction(bool includeOffStation = true, bool includeDead = false) + private float GetInfectedFraction(bool includeOffStation = false, bool includeDead = true) // Cats edit { var players = GetHealthyHumans(includeOffStation); var zombieCount = 0; @@ -179,14 +180,14 @@ private float GetInfectedFraction(bool includeOffStation = true, bool includeDea /// Flying off via a shuttle disqualifies you. /// /// - private List GetHealthyHumans(bool includeOffStation = true) + private List GetHealthyHumans(bool includeOffStation = false) // Cats edit { var healthy = new List(); var stationGrids = new HashSet(); if (!includeOffStation) { - foreach (var station in _station.GetStationsSet()) + foreach (var station in _gameTicker.GetSpawnableStations()) // Cats edit { if (TryComp(station, out var data) && _station.GetLargestGrid(data) is { } grid) stationGrids.Add(grid); @@ -195,25 +196,19 @@ private List GetHealthyHumans(bool includeOffStation = true) var players = AllEntityQuery(); var zombers = GetEntityQuery(); - var centcom = GetEntityQuery(); // backmen: centcom while (players.MoveNext(out var uid, out _, out _, out var mob, out var xform)) { - if (!_mobState.IsAlive(uid, mob)) - continue; - - if (zombers.HasComponent(uid)) - continue; - - // start-backmen: centcom - if (centcom.HasComponent(uid)) - continue; - // end-backmen: centcom - - if (!includeOffStation && !stationGrids.Contains(xform.GridUid ?? EntityUid.Invalid)) + // Cats edit-Start + if (!_mobState.IsAlive(uid, mob) + || HasComp(uid) //Do not include infected players in the "Healthy players" list. + || HasComp(uid) + || zombers.HasComponent(uid) + || !includeOffStation && !stationGrids.Contains(xform.GridUid ?? EntityUid.Invalid)) + // Cats edit-End continue; healthy.Add(uid); } return healthy; } -} +} \ No newline at end of file