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
This commit is contained in:
Vasilis
2023-11-18 04:18:37 +01:00
committed by GitHub
parent b690f10cdd
commit f7f80b6c28
6 changed files with 60 additions and 5 deletions

View File

@@ -2,6 +2,7 @@ using Content.Server.Ame.EntitySystems;
using Content.Shared.Ame; using Content.Shared.Ame;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.Containers; using Robust.Shared.Containers;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Server.Ame.Components; namespace Content.Server.Ame.Components;
@@ -89,4 +90,16 @@ public sealed partial class AmeControllerComponent : SharedAmeControllerComponen
/// </summary> /// </summary>
[ViewVariables] [ViewVariables]
public TimeSpan UpdateUIPeriod = TimeSpan.FromSeconds(3.0); public TimeSpan UpdateUIPeriod = TimeSpan.FromSeconds(3.0);
/// <summary>
/// Time at which the admin alarm sound effect can next be played.
/// </summary>
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
public TimeSpan EffectCooldown;
/// <summary>
/// Time between admin alarm sound effects. Prevents spam
/// </summary>
[DataField]
public TimeSpan CooldownDuration = TimeSpan.FromSeconds(10f);
} }

View File

@@ -1,6 +1,7 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Linq; using System.Linq;
using Content.Server.Administration.Logs; using Content.Server.Administration.Logs;
using Content.Server.Administration.Managers;
using Content.Server.Ame.Components; using Content.Server.Ame.Components;
using Content.Server.Chat.Managers; using Content.Server.Chat.Managers;
using Content.Server.NodeContainer; using Content.Server.NodeContainer;
@@ -16,6 +17,7 @@ using Robust.Server.Containers;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.Containers; using Robust.Shared.Containers;
using Robust.Shared.Player;
using Robust.Shared.Timing; using Robust.Shared.Timing;
namespace Content.Server.Ame.EntitySystems; namespace Content.Server.Ame.EntitySystems;
@@ -23,6 +25,7 @@ namespace Content.Server.Ame.EntitySystems;
public sealed class AmeControllerSystem : EntitySystem public sealed class AmeControllerSystem : EntitySystem
{ {
[Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!;
[Dependency] private readonly IAdminManager _adminManager = default!;
[Dependency] private readonly IChatManager _chatManager = default!; [Dependency] private readonly IChatManager _chatManager = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly AppearanceSystem _appearanceSystem = default!; [Dependency] private readonly AppearanceSystem _appearanceSystem = default!;
@@ -233,7 +236,15 @@ public sealed class AmeControllerSystem : EntitySystem
safeLimit = group.CoreCount * 2; safeLimit = group.CoreCount * 2;
if (oldValue <= safeLimit && value > safeLimit) if (oldValue <= safeLimit && value > safeLimit)
{
if (_gameTiming.CurTime > controller.EffectCooldown)
{
_chatManager.SendAdminAlert(user.Value, $"increased AME over safe limit to {controller.InjectionAmount}"); _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) public void AdjustInjectionAmount(EntityUid uid, int delta, int min = 0, int max = int.MaxValue, EntityUid? user = null, AmeControllerComponent? controller = null)

View File

@@ -1,5 +1,6 @@
using Content.Server.ParticleAccelerator.Wires; using Content.Server.ParticleAccelerator.Wires;
using Content.Shared.Singularity.Components; using Content.Shared.Singularity.Components;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
namespace Content.Server.ParticleAccelerator.Components; namespace Content.Server.ParticleAccelerator.Components;
@@ -167,6 +168,18 @@ public sealed partial class ParticleAcceleratorControlBoxComponent : Component
[ViewVariables] [ViewVariables]
public bool StrengthLocked = false; public bool StrengthLocked = false;
/// <summary>
/// Time at which the admin alarm sound effect can next be played.
/// </summary>
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
public TimeSpan EffectCooldown;
/// <summary>
/// Time between admin alarm sound effects. Prevents spam
/// </summary>
[DataField]
public TimeSpan CooldownDuration = TimeSpan.FromSeconds(10f);
/// <summary> /// <summary>
/// Whether the PA can be turned on. /// Whether the PA can be turned on.
/// Modified by <see cref="ParticleAcceleratorPowerWireAction"/>. /// Modified by <see cref="ParticleAcceleratorPowerWireAction"/>.

View File

@@ -4,13 +4,19 @@ using Content.Shared.Database;
using Content.Shared.Singularity.Components; using Content.Shared.Singularity.Components;
using Robust.Shared.Utility; using Robust.Shared.Utility;
using System.Diagnostics; using System.Diagnostics;
using Content.Server.Administration.Managers;
using Content.Shared.CCVar; using Content.Shared.CCVar;
using Robust.Shared.Audio;
using Robust.Shared.Timing;
using Robust.Shared.Player; using Robust.Shared.Player;
namespace Content.Server.ParticleAccelerator.EntitySystems; namespace Content.Server.ParticleAccelerator.EntitySystems;
public sealed partial class ParticleAcceleratorSystem 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() private void InitializeControlBoxSystem()
{ {
SubscribeLocalEvent<ParticleAcceleratorControlBoxComponent, ComponentStartup>(OnComponentStartup); SubscribeLocalEvent<ParticleAcceleratorControlBoxComponent, ComponentStartup>(OnComponentStartup);
@@ -165,10 +171,17 @@ public sealed partial class ParticleAcceleratorSystem
if (strength >= alertMinPowerState) if (strength >= alertMinPowerState)
{ {
var pos = Transform(uid); var pos = Transform(uid);
if (_timing.CurTime > comp.EffectCooldown)
{
_chat.SendAdminAlert(player, Loc.GetString("particle-accelerator-admin-power-strength-warning", _chat.SendAdminAlert(player, Loc.GetString("particle-accelerator-admin-power-strength-warning",
("machine", ToPrettyString(uid)), ("machine", ToPrettyString(uid)),
("powerState", strength), ("powerState", strength),
("coordinates", pos.Coordinates))); ("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;
}
} }
} }

Binary file not shown.

View File

@@ -61,3 +61,8 @@ Entries:
in some cases.', type: Fix} in some cases.', type: Fix}
id: 9 id: 9
time: '2023-10-30T01:28:00.0000000+00:00' time: '2023-10-30T01:28:00.0000000+00:00'
- author: Vasilis
changes:
- {message: 'AME and PA make a sound effect when they are being overloaded. Similar to being sent a fax.', type: Add}
id: 10
time: '2023-11-07T15:03:00.0000000+00:00'