using Content.Server._DV.Station.Systems; using Content.Shared.Access; using Content.Shared.Roles; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Server._DV.Station.Components; public enum AutomaticSpareIdState { RoundStart, Alerted, AwaitingUnlock, Unlocked, CaptainPresent, } [RegisterComponent, Access(typeof(AutomaticSpareIdSystem)), AutoGenerateComponentPause] public sealed partial class AutomaticSpareIdComponent : Component { /// /// The current state of the automatic spare ID system /// [DataField] public AutomaticSpareIdState State = AutomaticSpareIdState.RoundStart; /// /// Timeout before an action is taken if the state doesn't change /// [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] public TimeSpan? Timeout; /// /// The job considered as Captain for the automatic spare ID system /// [DataField] public ProtoId CaptainJob = "Captain"; /// /// The access that the spare ID safe will be extended to have if it is automatically unlocked /// [DataField] public ProtoId GrantAccessTo = "Command"; /// /// Message for when a Captain joins after the system has alerted about their absence /// [DataField] public LocId CaptainPresentAfterAlertsMessage = "captain-arrived-revoke-aco-announcement"; /// /// Message for when the system alerts but isn't going to automatically unlock /// [DataField] public LocId AlertedMessage = "no-captain-request-aco-vote-announcement"; /// /// Message for when the system alerts and will automatically unlock /// [DataField] public LocId AwaitingUnlockMessage = "no-captain-request-aco-vote-with-aa-announcement"; /// /// Message for when the system alerts automatically unlock /// [DataField] public LocId UnlockedMessage = "no-captain-aa-unlocked-announcement"; }