From f7f80b6c28f53de7ea0bd61dfeff783b08e81757 Mon Sep 17 00:00:00 2001 From: Vasilis Date: Sat, 18 Nov 2023 04:18:37 +0100 Subject: [PATCH] AME and PA make a warning sound to admins when overloaded along with the warning text (#21267) * WOOP WOOP * i forgor to add this * I totally did not steal code * OH FUCK * Ok i'm done using webedit. * Reviews and AME anti spam * make sound shorter --- .../Ame/Components/AmeControllerComponent.cs | 13 +++++++++++ .../Ame/EntitySystems/AmeControllerSystem.cs | 13 ++++++++++- .../ParticleAcceleratorControlBoxComponent.cs | 13 +++++++++++ .../ParticleAcceleratorSystem.ControlBox.cs | 21 ++++++++++++++---- Resources/Audio/Misc/adminlarm.ogg | Bin 0 -> 7439 bytes Resources/Changelog/Admin.yml | 5 +++++ 6 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 Resources/Audio/Misc/adminlarm.ogg diff --git a/Content.Server/Ame/Components/AmeControllerComponent.cs b/Content.Server/Ame/Components/AmeControllerComponent.cs index 1bf1ac2c92..abdb76c9e3 100644 --- a/Content.Server/Ame/Components/AmeControllerComponent.cs +++ b/Content.Server/Ame/Components/AmeControllerComponent.cs @@ -2,6 +2,7 @@ using Content.Server.Ame.EntitySystems; using Content.Shared.Ame; using Robust.Shared.Audio; using Robust.Shared.Containers; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Server.Ame.Components; @@ -89,4 +90,16 @@ public sealed partial class AmeControllerComponent : SharedAmeControllerComponen /// [ViewVariables] public TimeSpan UpdateUIPeriod = TimeSpan.FromSeconds(3.0); + + /// + /// Time at which the admin alarm sound effect can next be played. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + public TimeSpan EffectCooldown; + + /// + /// Time between admin alarm sound effects. Prevents spam + /// + [DataField] + public TimeSpan CooldownDuration = TimeSpan.FromSeconds(10f); } diff --git a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs index 44140193d2..0dddff3637 100644 --- a/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs +++ b/Content.Server/Ame/EntitySystems/AmeControllerSystem.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Server.Administration.Logs; +using Content.Server.Administration.Managers; using Content.Server.Ame.Components; using Content.Server.Chat.Managers; using Content.Server.NodeContainer; @@ -16,6 +17,7 @@ using Robust.Server.Containers; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Containers; +using Robust.Shared.Player; using Robust.Shared.Timing; namespace Content.Server.Ame.EntitySystems; @@ -23,6 +25,7 @@ namespace Content.Server.Ame.EntitySystems; public sealed class AmeControllerSystem : EntitySystem { [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly IChatManager _chatManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; @@ -233,7 +236,15 @@ public sealed class AmeControllerSystem : EntitySystem safeLimit = group.CoreCount * 2; if (oldValue <= safeLimit && value > safeLimit) - _chatManager.SendAdminAlert(user.Value, $"increased AME over safe limit to {controller.InjectionAmount}"); + { + if (_gameTiming.CurTime > controller.EffectCooldown) + { + _chatManager.SendAdminAlert(user.Value, $"increased AME over safe limit to {controller.InjectionAmount}"); + _audioSystem.PlayGlobal("/Audio/Misc/adminlarm.ogg", + Filter.Empty().AddPlayers(_adminManager.ActiveAdmins), false, AudioParams.Default.WithVolume(-8f)); + controller.EffectCooldown = _gameTiming.CurTime + controller.CooldownDuration; + } + } } public void AdjustInjectionAmount(EntityUid uid, int delta, int min = 0, int max = int.MaxValue, EntityUid? user = null, AmeControllerComponent? controller = null) diff --git a/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorControlBoxComponent.cs b/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorControlBoxComponent.cs index 2adbbe05f7..b460e96acc 100644 --- a/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorControlBoxComponent.cs +++ b/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorControlBoxComponent.cs @@ -1,5 +1,6 @@ using Content.Server.ParticleAccelerator.Wires; using Content.Shared.Singularity.Components; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Server.ParticleAccelerator.Components; @@ -167,6 +168,18 @@ public sealed partial class ParticleAcceleratorControlBoxComponent : Component [ViewVariables] public bool StrengthLocked = false; + /// + /// Time at which the admin alarm sound effect can next be played. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + public TimeSpan EffectCooldown; + + /// + /// Time between admin alarm sound effects. Prevents spam + /// + [DataField] + public TimeSpan CooldownDuration = TimeSpan.FromSeconds(10f); + /// /// Whether the PA can be turned on. /// Modified by . diff --git a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs index f200c991d7..5900dc55b3 100644 --- a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs +++ b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs @@ -4,13 +4,19 @@ using Content.Shared.Database; using Content.Shared.Singularity.Components; using Robust.Shared.Utility; using System.Diagnostics; +using Content.Server.Administration.Managers; using Content.Shared.CCVar; +using Robust.Shared.Audio; +using Robust.Shared.Timing; using Robust.Shared.Player; namespace Content.Server.ParticleAccelerator.EntitySystems; public sealed partial class ParticleAcceleratorSystem { + [Dependency] private readonly IAdminManager _adminManager = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly IGameTiming _timing = default!; private void InitializeControlBoxSystem() { SubscribeLocalEvent(OnComponentStartup); @@ -165,10 +171,17 @@ public sealed partial class ParticleAcceleratorSystem if (strength >= alertMinPowerState) { var pos = Transform(uid); - _chat.SendAdminAlert(player, Loc.GetString("particle-accelerator-admin-power-strength-warning", - ("machine", ToPrettyString(uid)), - ("powerState", strength), - ("coordinates", pos.Coordinates))); + if (_timing.CurTime > comp.EffectCooldown) + { + _chat.SendAdminAlert(player, Loc.GetString("particle-accelerator-admin-power-strength-warning", + ("machine", ToPrettyString(uid)), + ("powerState", strength), + ("coordinates", pos.Coordinates))); + _audio.PlayGlobal("/Audio/Misc/adminlarm.ogg", + Filter.Empty().AddPlayers(_adminManager.ActiveAdmins), false, + AudioParams.Default.WithVolume(-8f)); + comp.EffectCooldown = _timing.CurTime + comp.CooldownDuration; + } } } diff --git a/Resources/Audio/Misc/adminlarm.ogg b/Resources/Audio/Misc/adminlarm.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7c75e20bdd9289e9f2875a4af0794a072c442f35 GIT binary patch literal 7439 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