DamageNearbyArtifactSystem.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Components;
  2. using Content.Server.Xenoarchaeology.XenoArtifacts.Events;
  3. using Content.Shared.Damage;
  4. using Content.Shared.Whitelist;
  5. using Robust.Shared.Random;
  6. namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems;
  7. public sealed class BreakWindowArtifactSystem : EntitySystem
  8. {
  9. [Dependency] private readonly IRobustRandom _random = default!;
  10. [Dependency] private readonly EntityLookupSystem _lookup = default!;
  11. [Dependency] private readonly DamageableSystem _damageable = default!;
  12. [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!;
  13. /// <inheritdoc/>
  14. public override void Initialize()
  15. {
  16. SubscribeLocalEvent<DamageNearbyArtifactComponent, ArtifactActivatedEvent>(OnActivated);
  17. }
  18. private void OnActivated(EntityUid uid, DamageNearbyArtifactComponent component, ArtifactActivatedEvent args)
  19. {
  20. var ents = _lookup.GetEntitiesInRange(uid, component.Radius);
  21. if (args.Activator != null)
  22. ents.Add(args.Activator.Value);
  23. foreach (var ent in ents)
  24. {
  25. if (_whitelistSystem.IsWhitelistFail(component.Whitelist, ent))
  26. continue;
  27. if (!_random.Prob(component.DamageChance))
  28. return;
  29. _damageable.TryChangeDamage(ent, component.Damage, component.IgnoreResistances);
  30. }
  31. }
  32. }