using Robust.Shared.GameStates; using Robust.Shared.Audio; using Content.Shared.Containers.ItemSlots; using Robust.Shared.Prototypes; using Content.Shared.Radio; using Content.Shared.Access; using Content.Shared._NF.Bank.Components; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Shared._NF.Shipyard.Components; [RegisterComponent, NetworkedComponent, Access(typeof(SharedShipyardSystem)), AutoGenerateComponentPause, AutoGenerateComponentState] public sealed partial class ShipyardConsoleComponent : Component { public static string TargetIdCardSlotId = "ShipyardConsole-targetId"; [DataField] public ItemSlot TargetIdSlot = new(); [DataField] public SoundSpecifier ErrorSound = new SoundPathSpecifier("/Audio/Effects/Cargo/buzz_sigh.ogg"); [DataField] public SoundSpecifier ConfirmSound = new SoundPathSpecifier("/Audio/Effects/Cargo/ping.ogg"); /// /// The comms channel that announces the ship purchase. The purchase is *always* announced /// on this channel. /// [DataField] public ProtoId ShipyardChannel = "Traffic"; /// /// A second comms channel that announces the ship purchase, with some information redacted. /// Currently used for black market and syndicate shipyards to alert the NFSD. /// [DataField] public ProtoId? SecretShipyardChannel = null; /// /// If non-empty, specifies the new job title that should be given to the owner of the ship. /// [DataField] public LocId? NewJobTitle; /// /// Access levels to be added to the owner's ID card. /// [DataField] public List> NewAccessLevels = new(); /// /// Indicates that the deeds that come from this console can be copied and transferred. /// [DataField] public bool CanTransferDeed = true; /// /// The accounts to receive payment, and the tax rate to apply for ship sales from this console. /// [DataField] public Dictionary TaxAccounts = new(); /// /// If true, the base sale rate is ignored before calculating taxes. /// [DataField] public bool IgnoreBaseSaleRate; /// /// The time at which the console will be able to play the deny sound. /// [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] public TimeSpan NextDenySoundTime = TimeSpan.Zero; /// /// The minimum time between playing the deny sound. /// [DataField] public TimeSpan DenySoundDelay = TimeSpan.FromSeconds(2); [AutoNetworkedField] public NetEntity? CurIdCard; }