1
0

DeviceNetworkJammerSystem.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Content.Shared.DeviceNetwork.Components;
  2. using Content.Shared.DeviceNetwork.Systems;
  3. using Robust.Server.GameObjects;
  4. namespace Content.Server.DeviceNetwork.Systems;
  5. /// <inheritdoc/>
  6. public sealed class DeviceNetworkJammerSystem : SharedDeviceNetworkJammerSystem
  7. {
  8. [Dependency] private readonly TransformSystem _transform = default!;
  9. [Dependency] private readonly SharedDeviceNetworkJammerSystem _jammer = default!;
  10. public override void Initialize()
  11. {
  12. base.Initialize();
  13. SubscribeLocalEvent<TransformComponent, BeforePacketSentEvent>(BeforePacketSent);
  14. }
  15. private void BeforePacketSent(Entity<TransformComponent> xform, ref BeforePacketSentEvent ev)
  16. {
  17. if (ev.Cancelled)
  18. return;
  19. var query = EntityQueryEnumerator<DeviceNetworkJammerComponent, TransformComponent>();
  20. while (query.MoveNext(out var uid, out var jammerComp, out var jammerXform))
  21. {
  22. if (!_jammer.GetJammableNetworks((uid, jammerComp)).Contains(ev.NetworkId))
  23. continue;
  24. if (_transform.InRange(jammerXform.Coordinates, ev.SenderTransform.Coordinates, jammerComp.Range)
  25. || _transform.InRange(jammerXform.Coordinates, xform.Comp.Coordinates, jammerComp.Range))
  26. {
  27. ev.Cancel();
  28. return;
  29. }
  30. }
  31. }
  32. }