Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Улучшение механики автовызова эвакуации для зомби-раундов #126

Merged
merged 1 commit into from
Dec 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Content.Server/GameTicking/GameTicker.Spawning.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public sealed partial class GameTicker
// Mainly to avoid allocations.
private readonly List<EntityCoordinates> _possiblePositions = new();

private List<EntityUid> GetSpawnableStations()
public List<EntityUid> GetSpawnableStations() // Corvax-Next
{
var spawnableStations = new List<EntityUid>();
var query = EntityQueryEnumerator<StationJobsComponent, StationSpawningComponent>();
Expand Down
23 changes: 12 additions & 11 deletions Content.Server/GameTicking/Rules/ZombieRuleSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public sealed class ZombieRuleSystem : GameRuleSystem<ZombieRuleComponent>
[Dependency] private readonly StationSystem _station = default!;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly ZombieSystem _zombie = default!;
[Dependency] private readonly GameTicker _gameTicker = default!; // Corvax-Next

public override void Initialize()
{
Expand Down Expand Up @@ -84,7 +85,7 @@ protected override void AppendRoundEndText(EntityUid uid,
("username", data.UserName)));
}

var healthy = GetHealthyHumans();
var healthy = GetHealthyHumans(true); // Corvax-Next
// 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)
Expand Down Expand Up @@ -159,7 +160,7 @@ private void OnZombifySelf(EntityUid uid, IncurableZombieComponent component, Zo
/// <param name="includeOffStation">Include healthy players that are not on the station grid</param>
/// <param name="includeDead">Should dead zombies be included in the count</param>
/// <returns></returns>
private float GetInfectedFraction(bool includeOffStation = true, bool includeDead = false)
private float GetInfectedFraction(bool includeOffStation = false, bool includeDead = true) // Corvax-Next
{
var players = GetHealthyHumans(includeOffStation);
var zombieCount = 0;
Expand All @@ -179,14 +180,14 @@ private float GetInfectedFraction(bool includeOffStation = true, bool includeDea
/// Flying off via a shuttle disqualifies you.
/// </summary>
/// <returns></returns>
private List<EntityUid> GetHealthyHumans(bool includeOffStation = true)
private List<EntityUid> GetHealthyHumans(bool includeOffStation = false) // Corvax-Next
{
var healthy = new List<EntityUid>();

var stationGrids = new HashSet<EntityUid>();
if (!includeOffStation)
{
foreach (var station in _station.GetStationsSet())
foreach (var station in _gameTicker.GetSpawnableStations()) // Corvax-Next
{
if (TryComp<StationDataComponent>(station, out var data) && _station.GetLargestGrid(data) is { } grid)
stationGrids.Add(grid);
Expand All @@ -197,13 +198,13 @@ private List<EntityUid> GetHealthyHumans(bool includeOffStation = true)
var zombers = GetEntityQuery<ZombieComponent>();
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;

if (!includeOffStation && !stationGrids.Contains(xform.GridUid ?? EntityUid.Invalid))
// Corvax-Next-Start
if (!_mobState.IsAlive(uid, mob)
|| HasComp<PendingZombieComponent>(uid) //Do not include infected players in the "Healthy players" list.
|| HasComp<ZombifyOnDeathComponent>(uid)
|| zombers.HasComponent(uid)
|| !includeOffStation && !stationGrids.Contains(xform.GridUid ?? EntityUid.Invalid))
// Corvax-Next-End
continue;

healthy.Add(uid);
Expand Down
Loading