Fix air alarm not checking if device is in device list before sending atmos device settings (#18436)

This commit is contained in:
Julian Giebel
2023-08-01 20:27:59 +02:00
committed by GitHub
parent 822afd4236
commit 78c66cca75
2 changed files with 20 additions and 1 deletions

View File

@@ -33,6 +33,7 @@ namespace Content.Server.Atmos.Monitor.Systems;
public sealed class AirAlarmSystem : EntitySystem public sealed class AirAlarmSystem : EntitySystem
{ {
[Dependency] private readonly DeviceNetworkSystem _deviceNet = default!; [Dependency] private readonly DeviceNetworkSystem _deviceNet = default!;
[Dependency] private readonly DeviceListSystem _deviceListSystem = default!;
[Dependency] private readonly AtmosDeviceNetworkSystem _atmosDevNetSystem = default!; [Dependency] private readonly AtmosDeviceNetworkSystem _atmosDevNetSystem = default!;
[Dependency] private readonly AtmosAlarmableSystem _atmosAlarmable = default!; [Dependency] private readonly AtmosAlarmableSystem _atmosAlarmable = default!;
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
@@ -290,10 +291,15 @@ public sealed class AirAlarmSystem : EntitySystem
private void OnUpdateDeviceData(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateDeviceDataMessage args) private void OnUpdateDeviceData(EntityUid uid, AirAlarmComponent component, AirAlarmUpdateDeviceDataMessage args)
{ {
if (AccessCheck(uid, args.Session.AttachedEntity, component)) if (AccessCheck(uid, args.Session.AttachedEntity, component)
&& _deviceListSystem.ExistsInDeviceList(uid, args.Address))
{
SetDeviceData(uid, args.Address, args.Data); SetDeviceData(uid, args.Address, args.Data);
}
else else
{
UpdateUI(uid, component); UpdateUI(uid, component);
}
} }
private bool AccessCheck(EntityUid uid, EntityUid? user, AirAlarmComponent? component = null) private bool AccessCheck(EntityUid uid, EntityUid? user, AirAlarmComponent? component = null)

View File

@@ -61,6 +61,19 @@ public sealed class DeviceListSystem : SharedDeviceListSystem
return devices; return devices;
} }
/// <summary>
/// Checks if the given address is present in a device list
/// </summary>
/// <param name="uid">The entity uid that has the device list that should be checked for the address</param>
/// <param name="address">The address to check for</param>
/// <param name="deviceList">The device list component</param>
/// <returns>True if the address is present. False if not</returns>
public bool ExistsInDeviceList(EntityUid uid, string address, DeviceListComponent? deviceList = null)
{
var addresses = GetDeviceList(uid).Keys;
return addresses.Contains(address);
}
protected override void UpdateShutdownSubscription(EntityUid uid, List<EntityUid> newDevices, List<EntityUid> oldDevices) protected override void UpdateShutdownSubscription(EntityUid uid, List<EntityUid> newDevices, List<EntityUid> oldDevices)
{ {
foreach (var device in newDevices) foreach (var device in newDevices)