using Content.Server.GameTicking.Rules.VariationPass.Components; using Content.Server.Wires; using Content.Shared.Whitelist; using Robust.Shared.Random; namespace Content.Server.GameTicking.Rules.VariationPass; /// /// Handles cutting a random wire on random devices around the station. /// This system identifies target devices and adds to them. /// The actual wire cutting is handled by . /// public sealed class CutWireVariationPassSystem : VariationPassSystem { [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; protected override void ApplyVariation(Entity ent, ref StationVariationPassEvent args) { var wiresCut = 0; var query = AllEntityQuery(); while (query.MoveNext(out var uid, out _, out var transform)) { // Ignore if not part of the station if (!IsMemberOfStation((uid, transform), ref args)) continue; // Check against blacklist if (_whitelistSystem.IsBlacklistPass(ent.Comp.Blacklist, uid)) continue; if (Random.Prob(ent.Comp.WireCutChance)) { EnsureComp(uid); wiresCut++; // Limit max wires cut if (wiresCut >= ent.Comp.MaxWiresCut) break; } } } }