From 09dd92ce61b90f0ec64de77e0d5ae35090b931c8 Mon Sep 17 00:00:00 2001
From: themias <89101928+themias@users.noreply.github.com>
Date: Sat, 3 Feb 2024 19:50:23 -0500
Subject: [PATCH] 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
---
.../SuitSensors/SuitSensorComponent.cs | 13 +++++++++++
.../Medical/SuitSensors/SuitSensorSystem.cs | 22 +++++++++++++++++++
2 files changed, 35 insertions(+)
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()
--
2.51.2