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
This commit is contained in:
themias
2024-02-03 19:50:23 -05:00
committed by GitHub
parent 257909fd97
commit 09dd92ce61
2 changed files with 35 additions and 0 deletions

View File

@@ -72,4 +72,17 @@ public sealed partial class SuitSensorComponent : Component
/// </summary> /// </summary>
[DataField("server")] [DataField("server")]
public string? ConnectedServer = null; public string? ConnectedServer = null;
/// <summary>
/// The previous mode of the suit. This is used to restore the state when an EMP effect ends.
/// </summary>
[DataField, ViewVariables]
public SuitSensorMode PreviousMode = SuitSensorMode.SensorOff;
/// <summary>
/// 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.
/// </summary>
[DataField, ViewVariables]
public bool PreviousControlsLocked = false;
} }

View File

@@ -2,11 +2,13 @@ using Content.Server.Access.Systems;
using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork;
using Content.Server.DeviceNetwork.Components; using Content.Server.DeviceNetwork.Components;
using Content.Server.DeviceNetwork.Systems; using Content.Server.DeviceNetwork.Systems;
using Content.Server.Emp;
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Medical.CrewMonitoring; using Content.Server.Medical.CrewMonitoring;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Server.Station.Systems; using Content.Server.Station.Systems;
using Content.Shared.Damage; using Content.Shared.Damage;
using Content.Shared.Emp;
using Content.Shared.Examine; using Content.Shared.Examine;
using Content.Shared.Inventory.Events; using Content.Shared.Inventory.Events;
using Content.Shared.Medical.SuitSensor; using Content.Shared.Medical.SuitSensor;
@@ -44,6 +46,8 @@ public sealed class SuitSensorSystem : EntitySystem
SubscribeLocalEvent<SuitSensorComponent, GetVerbsEvent<Verb>>(OnVerb); SubscribeLocalEvent<SuitSensorComponent, GetVerbsEvent<Verb>>(OnVerb);
SubscribeLocalEvent<SuitSensorComponent, EntGotInsertedIntoContainerMessage>(OnInsert); SubscribeLocalEvent<SuitSensorComponent, EntGotInsertedIntoContainerMessage>(OnInsert);
SubscribeLocalEvent<SuitSensorComponent, EntGotRemovedFromContainerMessage>(OnRemove); SubscribeLocalEvent<SuitSensorComponent, EntGotRemovedFromContainerMessage>(OnRemove);
SubscribeLocalEvent<SuitSensorComponent, EmpPulseEvent>(OnEmpPulse);
SubscribeLocalEvent<SuitSensorComponent, EmpDisabledRemoved>(OnEmpFinished);
} }
private void OnUnpaused(EntityUid uid, SuitSensorComponent component, ref EntityUnpausedEvent args) private void OnUnpaused(EntityUid uid, SuitSensorComponent component, ref EntityUnpausedEvent args)
@@ -239,6 +243,24 @@ public sealed class SuitSensorSystem : EntitySystem
component.User = null; 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) private Verb CreateVerb(EntityUid uid, SuitSensorComponent component, EntityUid userUid, SuitSensorMode mode)
{ {
return new Verb() return new Verb()