using Content.Server.Antag.Mimic; using Content.Server.GameTicking.Rules; using Content.Server.GameTicking.Rules.Components; using Content.Shared.GameTicking.Components; using Content.Shared.VendingMachines; using Robust.Shared.Map; using Robust.Shared.Random; namespace Content.Server.Antag; public sealed class MobReplacementRuleSystem : GameRuleSystem { [Dependency] private readonly IRobustRandom _random = default!; protected override void Started(EntityUid uid, MobReplacementRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) { base.Started(uid, component, gameRule, args); var query = AllEntityQuery(); var spawns = new List<(EntityUid Entity, EntityCoordinates Coordinates)>(); while (query.MoveNext(out var vendingUid, out _, out var xform)) { if (!_random.Prob(component.Chance)) continue; spawns.Add((vendingUid, xform.Coordinates)); } foreach (var entity in spawns) { var coordinates = entity.Coordinates; Del(entity.Entity); Spawn(component.Proto, coordinates); } } }