diff --git a/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs b/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs index 9079655c80..8d75d3840a 100644 --- a/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs +++ b/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs @@ -87,3 +87,9 @@ public sealed partial class SuitSensorComponent : Component [DataField, ViewVariables] public bool PreviousControlsLocked = false; } + +[ByRefEvent] +public record struct SuitSensorsSendAttemptEvent +{ + public bool Cancelled; +}; diff --git a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs index b807b63e21..f19b3d5b81 100644 --- a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs +++ b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs @@ -73,6 +73,11 @@ public sealed class SuitSensorSystem : EntitySystem // TODO: This would cause imprecision at different tick rates. sensor.NextUpdate = curTime + sensor.UpdateRate; + var canEv = new SuitSensorsSendAttemptEvent(); + RaiseLocalEvent(uid, ref canEv); + if (canEv.Cancelled) + continue; + // get sensor status var status = GetSensorState(uid, sensor); if (status == null) diff --git a/Content.Server/Radio/EntitySystems/JammerSystem.cs b/Content.Server/Radio/EntitySystems/JammerSystem.cs index dc6f476416..fdf02f94df 100644 --- a/Content.Server/Radio/EntitySystems/JammerSystem.cs +++ b/Content.Server/Radio/EntitySystems/JammerSystem.cs @@ -1,3 +1,4 @@ +using Content.Server.Medical.SuitSensors; using Content.Server.Popups; using Content.Server.Power.EntitySystems; using Content.Server.PowerCell; @@ -23,6 +24,7 @@ public sealed class JammerSystem : EntitySystem SubscribeLocalEvent(OnPowerCellChanged); SubscribeLocalEvent(OnExamine); SubscribeLocalEvent(OnRadioSendAttempt); + SubscribeLocalEvent(OnSensorSendAttempt); } public override void Update(float frameTime) @@ -76,15 +78,33 @@ public sealed class JammerSystem : EntitySystem private void OnRadioSendAttempt(ref RadioSendAttemptEvent args) { - var source = Transform(args.RadioSource).Coordinates; + if (ShouldCancelSend(args.RadioSource)) + { + args.Cancelled = true; + } + } + + private void OnSensorSendAttempt(EntityUid uid, SuitSensorComponent comp, ref SuitSensorsSendAttemptEvent args) + { + if (ShouldCancelSend(uid)) + { + args.Cancelled = true; + } + } + + private bool ShouldCancelSend(EntityUid sourceUid) + { + var source = Transform(sourceUid).Coordinates; var query = EntityQueryEnumerator(); + while (query.MoveNext(out _, out _, out var jam, out var transform)) { if (source.InRange(EntityManager, _transform, transform.Coordinates, jam.Range)) { - args.Cancelled = true; - return; + return true; } } + + return false; } } diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 347d1a87e3..15a1c78641 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -146,7 +146,7 @@ uplink-clothing-eyes-hud-syndicate-name = Syndicate Visor uplink-clothing-eyes-hud-syndicate-desc = The syndicate's professional head-up display, designed for better detection of humanoids and their subsequent elimination. uplink-radio-jammer-name = Radio Jammer -uplink-radio-jammer-desc = This device will disrupt any nearby outgoing radio communication when activated. +uplink-radio-jammer-desc = This device will disrupt any nearby outgoing radio communication as well as suit sensors when activated. uplink-syndicate-weapon-module-name = Weapon Cyborg Module uplink-syndicate-weapon-module-desc = This module will give a cyborg advanced laser and machete diff --git a/Resources/Prototypes/Entities/Objects/Tools/jammer.yml b/Resources/Prototypes/Entities/Objects/Tools/jammer.yml index e0a68156e0..beb3695627 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jammer.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jammer.yml @@ -2,7 +2,7 @@ name: radio jammer parent: BaseItem id: RadioJammer - description: This device will disrupt any nearby outgoing radio communication when activated. + description: This device will disrupt any nearby outgoing radio communication as well as suit sensors when activated. components: - type: Sprite sprite: Objects/Devices/jammer.rsi