diff --git a/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs b/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs index b096b4215d..ae04a88aec 100644 --- a/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AtmosAlarmableSystem.cs @@ -241,34 +241,36 @@ public sealed class AtmosAlarmableSystem : EntitySystem /// /// /// - public void Reset(EntityUid uid, AtmosAlarmableComponent? alarmable = null) + public void Reset(EntityUid uid, AtmosAlarmableComponent? alarmable = null, TagComponent? tags = null) { - if (!Resolve(uid, ref alarmable)) + if (!Resolve(uid, ref alarmable, ref tags) || alarmable.LastAlarmState == AtmosAlarmType.Normal) { return; } - TryUpdateAlert(uid, AtmosAlarmType.Normal, alarmable, false); - alarmable.NetworkAlarmStates.Clear(); + TryUpdateAlert(uid, AtmosAlarmType.Normal, alarmable); + + if (!alarmable.ReceiveOnly) + { + var payload = new NetworkPayload + { + [DeviceNetworkConstants.Command] = ResetAll, + [AlertSource] = tags.Tags + }; + + _deviceNet.QueuePacket(uid, null, payload); + } } - public void ResetAllOnNetwork(EntityUid uid, AtmosAlarmableComponent? alarmable = null, TagComponent? tags = null) + public void ResetAllOnNetwork(EntityUid uid, AtmosAlarmableComponent? alarmable = null) { - if (!Resolve(uid, ref alarmable, ref tags) || alarmable.ReceiveOnly) + if (!Resolve(uid, ref alarmable) || alarmable.ReceiveOnly) { return; } Reset(uid, alarmable); - - var payload = new NetworkPayload - { - [DeviceNetworkConstants.Command] = ResetAll, - [AlertSource] = tags.Tags - }; - - _deviceNet.QueuePacket(uid, null, payload); } /// diff --git a/Content.Server/Atmos/Monitor/Systems/FireAlarmSystem.cs b/Content.Server/Atmos/Monitor/Systems/FireAlarmSystem.cs index 7a274e81ab..fc0934aaa7 100644 --- a/Content.Server/Atmos/Monitor/Systems/FireAlarmSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/FireAlarmSystem.cs @@ -3,12 +3,15 @@ using Content.Server.Atmos.Monitor.Components; using Content.Server.DeviceNetwork.Systems; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; +using Content.Shared.Access.Systems; using Content.Shared.AlertLevel; using Content.Shared.Atmos.Monitor; +using Content.Shared.CCVar; using Content.Shared.DeviceNetwork; using Content.Shared.Interaction; using Content.Shared.Emag.Systems; using Robust.Server.GameObjects; +using Robust.Shared.Configuration; namespace Content.Server.Atmos.Monitor.Systems; @@ -17,6 +20,8 @@ public sealed class FireAlarmSystem : EntitySystem [Dependency] private readonly AtmosDeviceNetworkSystem _atmosDevNet = default!; [Dependency] private readonly AtmosAlarmableSystem _atmosAlarmable = default!; [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; + [Dependency] private readonly AccessReaderSystem _access = default!; + [Dependency] private readonly IConfigurationManager _configManager = default!; public override void Initialize() { @@ -36,6 +41,9 @@ public sealed class FireAlarmSystem : EntitySystem if (!_interactionSystem.InRangeUnobstructed(args.User, args.Target)) return; + if (!_configManager.GetCVar(CCVars.FireAlarmAllAccess) && !_access.IsAllowed(args.User, args.Target)) + return; + if (this.IsPowered(uid, EntityManager)) { if (!_atmosAlarmable.TryGetHighestAlert(uid, out var alarm)) diff --git a/Content.Server/Doors/Systems/FirelockSystem.cs b/Content.Server/Doors/Systems/FirelockSystem.cs index 085ec19a2a..c066a06c61 100644 --- a/Content.Server/Doors/Systems/FirelockSystem.cs +++ b/Content.Server/Doors/Systems/FirelockSystem.cs @@ -31,7 +31,7 @@ namespace Content.Server.Doors.Systems private void OnBeforeDoorOpened(EntityUid uid, FirelockComponent component, BeforeDoorOpenedEvent args) { - if (component.IsHoldingFire() || component.IsHoldingPressure()) + if (!this.IsPowered(uid, EntityManager) || component.IsHoldingFire() || component.IsHoldingPressure()) args.Cancel(); } diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 1a4381b144..f36f017566 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1185,6 +1185,18 @@ namespace Content.Shared.CCVar public static readonly CVarDef GhostRoleTime = CVarDef.Create("ghost.role_time", 3f, CVar.REPLICATED); + /* + * Fire alarm + */ + + /// + /// If fire alarms should have all access, or if activating/resetting these + /// should be restricted to what is dictated on a player's access card. + /// Defaults to true. + /// + public static readonly CVarDef FireAlarmAllAccess = + CVarDef.Create("firealarm.allaccess", true, CVar.SERVERONLY); + /* * PLAYTIME */