From: themias <89101928+themias@users.noreply.github.com> Date: Sun, 4 Feb 2024 00:50:23 +0000 (-0500) Subject: EMP disables suit sensors (#24869) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=09dd92ce61b90f0ec64de77e0d5ae35090b931c8;p=space-station-14.git EMP disables suit sensors (#24869) * EMP disables suit sensors * update to supersede and not disable * Revert "update to supersede and not disable" This reverts commit 337028c31af1c0fa2b1838bcf5d6759bfd7ed97c. * separate logic out into just emp events --- diff --git a/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs b/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs index 32b81e2921..5de11f848c 100644 --- a/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs +++ b/Content.Server/Medical/SuitSensors/SuitSensorComponent.cs @@ -72,4 +72,17 @@ public sealed partial class SuitSensorComponent : Component /// [DataField("server")] public string? ConnectedServer = null; + + /// + /// The previous mode of the suit. This is used to restore the state when an EMP effect ends. + /// + [DataField, ViewVariables] + public SuitSensorMode PreviousMode = SuitSensorMode.SensorOff; + + /// + /// The previous locked status of the controls. This is used to restore the state when an EMP effect ends. + /// This keeps prisoner jumpsuits/internal implants from becoming unlocked after an EMP. + /// + [DataField, ViewVariables] + public bool PreviousControlsLocked = false; } diff --git a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs index bb662a15ea..aa6dca718d 100644 --- a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs +++ b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs @@ -2,11 +2,13 @@ using Content.Server.Access.Systems; using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork.Components; using Content.Server.DeviceNetwork.Systems; +using Content.Server.Emp; using Content.Server.GameTicking; using Content.Server.Medical.CrewMonitoring; using Content.Server.Popups; using Content.Server.Station.Systems; using Content.Shared.Damage; +using Content.Shared.Emp; using Content.Shared.Examine; using Content.Shared.Inventory.Events; using Content.Shared.Medical.SuitSensor; @@ -44,6 +46,8 @@ public sealed class SuitSensorSystem : EntitySystem SubscribeLocalEvent>(OnVerb); SubscribeLocalEvent(OnInsert); SubscribeLocalEvent(OnRemove); + SubscribeLocalEvent(OnEmpPulse); + SubscribeLocalEvent(OnEmpFinished); } private void OnUnpaused(EntityUid uid, SuitSensorComponent component, ref EntityUnpausedEvent args) @@ -239,6 +243,24 @@ public sealed class SuitSensorSystem : EntitySystem component.User = null; } + private void OnEmpPulse(EntityUid uid, SuitSensorComponent component, ref EmpPulseEvent args) + { + args.Affected = true; + args.Disabled = true; + + component.PreviousMode = component.Mode; + SetSensor(uid, SuitSensorMode.SensorOff, null, component); + + component.PreviousControlsLocked = component.ControlsLocked; + component.ControlsLocked = true; + } + + private void OnEmpFinished(EntityUid uid, SuitSensorComponent component, ref EmpDisabledRemoved args) + { + SetSensor(uid, component.PreviousMode, null, component); + component.ControlsLocked = component.PreviousControlsLocked; + } + private Verb CreateVerb(EntityUid uid, SuitSensorComponent component, EntityUid userUid, SuitSensorMode mode) { return new Verb()