--- /dev/null
+using Content.Server.AlertLevel.Systems;
+
+namespace Content.Server.AlertLevel;
+/// <summary>
+/// This component is for changing the alert level of the station when triggered.
+/// </summary>
+[RegisterComponent, Access(typeof(AlertLevelChangeOnTriggerSystem))]
+public sealed partial class AlertLevelChangeOnTriggerComponent : Component
+{
+ ///<summary>
+ ///The alert level to change to when triggered.
+ ///</summary>
+ [DataField]
+ public string Level = "blue";
+
+ /// <summary>
+ ///Whether to play the sound when the alert level changes.
+ /// </summary>
+ [DataField]
+ public bool PlaySound = true;
+
+ /// <summary>
+ ///Whether to say the announcement when the alert level changes.
+ /// </summary>
+ [DataField]
+ public bool Announce = true;
+
+ /// <summary>
+ ///Force the alert change. This applies if the alert level is not selectable or not.
+ /// </summary>
+ [DataField]
+ public bool Force = false;
+}
return alert.CurrentDelay;
}
+ /// <summary>
+ /// Get the default alert level for a station entity.
+ /// Returns an empty string if the station has no alert levels defined.
+ /// </summary>
+ /// <param name="station">The station entity.</param>
+ public string GetDefaultLevel(Entity<AlertLevelComponent?> station)
+ {
+ if (!Resolve(station.Owner, ref station.Comp) || station.Comp.AlertLevels == null)
+ {
+ return string.Empty;
+ }
+ return station.Comp.AlertLevels.DefaultLevel;
+ }
+
/// <summary>
/// Set the alert level based on the station's entity ID.
/// </summary>
--- /dev/null
+using Content.Server.AlertLevel;
+using Content.Server.Explosion.EntitySystems;
+using Content.Server.Station.Systems;
+
+namespace Content.Server.AlertLevel.Systems;
+
+public sealed class AlertLevelChangeOnTriggerSystem : EntitySystem
+{
+ [Dependency] private readonly AlertLevelSystem _alertLevelSystem = default!;
+ [Dependency] private readonly StationSystem _station = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent<AlertLevelChangeOnTriggerComponent, TriggerEvent>(OnTrigger);
+ }
+
+ private void OnTrigger(Entity<AlertLevelChangeOnTriggerComponent> ent, ref TriggerEvent args)
+ {
+ var stationUid = _station.GetOwningStation(ent.Owner);
+ if (!stationUid.HasValue)
+ return;
+
+ _alertLevelSystem.SetLevel(stationUid.Value, ent.Comp.Level, ent.Comp.PlaySound, ent.Comp.Announce, ent.Comp.Force);
+ }
+}