MobReplacementRuleSystem.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Content.Server.Antag.Mimic;
  2. using Content.Server.GameTicking.Rules;
  3. using Content.Server.GameTicking.Rules.Components;
  4. using Content.Shared.GameTicking.Components;
  5. using Content.Shared.VendingMachines;
  6. using Robust.Shared.Map;
  7. using Robust.Shared.Random;
  8. namespace Content.Server.Antag;
  9. public sealed class MobReplacementRuleSystem : GameRuleSystem<MobReplacementRuleComponent>
  10. {
  11. [Dependency] private readonly IRobustRandom _random = default!;
  12. protected override void Started(EntityUid uid, MobReplacementRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args)
  13. {
  14. base.Started(uid, component, gameRule, args);
  15. var query = AllEntityQuery<VendingMachineComponent, TransformComponent>();
  16. var spawns = new List<(EntityUid Entity, EntityCoordinates Coordinates)>();
  17. while (query.MoveNext(out var vendingUid, out _, out var xform))
  18. {
  19. if (!_random.Prob(component.Chance))
  20. continue;
  21. spawns.Add((vendingUid, xform.Coordinates));
  22. }
  23. foreach (var entity in spawns)
  24. {
  25. var coordinates = entity.Coordinates;
  26. Del(entity.Entity);
  27. Spawn(component.Proto, coordinates);
  28. }
  29. }
  30. }