using Content.Shared.Containers.ItemSlots; using Content.Shared.Nuke; using Content.Shared.Sound; using Robust.Shared.Analyzers; using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; namespace Content.Server.Nuke { /// /// Nuclear device that can devistate an entire station. /// Basicaly a station self-destruction mechanism. /// To activate it, user needs to insert an authorization disk and enter a secret code. /// [RegisterComponent] [Friend(typeof(NukeSystem))] public class NukeComponent : Component { /// /// Default bomb timer value in seconds. /// [DataField("timer")] [ViewVariables(VVAccess.ReadWrite)] public int Timer = 180; /// /// The that stores the nuclear disk. The entity whitelist, sounds, and some other /// behaviours are specified by this definition. Make sure the whitelist, is correct /// otherwise a blank bit of paper will work as a "disk". /// [DataField("diskSlot")] public ItemSlot DiskSlot = new(); /// /// Annihilation radius in which all human players will be gibed /// [DataField("blastRadius")] [ViewVariables(VVAccess.ReadWrite)] public int BlastRadius = 200; /// /// After this time nuke will play last alert sound /// [DataField("alertTime")] public float AlertSoundTime = 10.0f; [DataField("keypadPressSound")] public SoundSpecifier KeypadPressSound = new SoundPathSpecifier("/Audio/Machines/Nuke/general_beep.ogg"); [DataField("accessGrantedSound")] public SoundSpecifier AccessGrantedSound = new SoundPathSpecifier("/Audio/Machines/Nuke/general_beep.ogg"); [DataField("accessDeniedSound")] public SoundSpecifier AccessDeniedSound = new SoundPathSpecifier("/Audio/Machines/Nuke/angry_beep.ogg"); [DataField("alertSound")] public SoundSpecifier AlertSound = new SoundPathSpecifier("/Audio/Machines/alarm.ogg"); [DataField("armSound")] public SoundSpecifier ArmSound = new SoundPathSpecifier("/Audio/Misc/notice1.ogg"); [DataField("disarmSound")] public SoundSpecifier DisarmSound = new SoundPathSpecifier("/Audio/Misc/notice2.ogg"); /// /// Time until explosion in seconds. /// [ViewVariables] public float RemainingTime; /// /// Curent nuclear code buffer. Entered manually by players. /// If valid it will allow arm/disarm bomb. /// [ViewVariables] public string EnteredCode = ""; /// /// Current status of a nuclear bomb. /// [ViewVariables] public NukeStatus Status = NukeStatus.AWAIT_DISK; /// /// Check if nuke has already played last alert sound /// public bool PlayedAlertSound = false; public IPlayingAudioStream? AlertAudioStream = default; } }