diff --git a/Content.Server/Doors/Systems/FirelockSystem.cs b/Content.Server/Doors/Systems/FirelockSystem.cs index 5fd0bf7e97..be0c025069 100644 --- a/Content.Server/Doors/Systems/FirelockSystem.cs +++ b/Content.Server/Doors/Systems/FirelockSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Atmos.Components; using Content.Server.Atmos.EntitySystems; +using Content.Server.Atmos.Monitor.Components; using Content.Server.Atmos.Monitor.Systems; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; @@ -22,6 +23,8 @@ namespace Content.Server.Doors.Systems [Dependency] private readonly SharedMapSystem _mapping = default!; [Dependency] private readonly PointLightSystem _pointLight = default!; + private EntityQuery _atmosAlarmQuery; + private const int UpdateInterval = 30; private int _accumulatedTicks; @@ -30,9 +33,9 @@ namespace Content.Server.Doors.Systems base.Initialize(); SubscribeLocalEvent(OnAtmosAlarm); - SubscribeLocalEvent(PowerChanged); + _atmosAlarmQuery = GetEntityQuery(); } private void PowerChanged(EntityUid uid, FirelockComponent component, ref PowerChangedEvent args) @@ -57,6 +60,14 @@ namespace Content.Server.Doors.Systems var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var firelock, out var door)) { + if (_atmosAlarmQuery.TryComp(uid, out var alarmable) + && alarmable.LastAlarmState == AtmosAlarmType.Danger + && this.IsPowered(uid, EntityManager) + && door.State == DoorState.Open) + { + EmergencyPressureStop(uid, firelock, door); + } + // only bother to check pressure on doors that are some variation of closed. if (door.State != DoorState.Closed && door.State != DoorState.Welded