using Content.Shared.Storage.EntitySystems; using Content.Shared.Containers.ItemSlots; using Content.Shared.Item; using Robust.Shared.Containers; using Robust.Shared.Prototypes; using Content.Shared.Tools; using Robust.Shared.GameStates; using Content.Shared.DoAfter; using Robust.Shared.Serialization; namespace Content.Shared.Storage.Components { /// /// Logic for a secret slot stash, like plant pot or toilet cistern. /// Unlike it doesn't have interaction logic or verbs. /// Other classes like should implement it. /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] [Access(typeof(SecretStashSystem))] public sealed partial class SecretStashComponent : Component { /// /// Max item size that can be fitted into secret stash. /// [DataField("maxItemSize")] public ProtoId MaxItemSize = "Small"; /// /// If stash has way to open then this will switch between open and closed. /// [DataField, AutoNetworkedField] public bool ToggleOpen; /// /// Prying the door. /// [DataField] public float PryDoorTime = 1f; [DataField] public ProtoId PryingQuality = "Prying"; /// /// Is stash openable?. /// [DataField, AutoNetworkedField] public bool OpenableStash = false; /// /// IC secret stash name. For example "the toilet cistern". /// If empty string, will replace it with entity name in init. /// [DataField] public string SecretPartName { get; set; } = ""; [DataField, AutoNetworkedField] public string ExamineStash = "comp-secret-stash-on-examine-found-hidden-item"; /// /// Container used to keep secret stash item. /// [ViewVariables] public ContainerSlot ItemContainer = default!; } /// /// Simple pry event for prying open a stash door. /// [Serializable, NetSerializable] public sealed partial class StashPryDoAfterEvent : SimpleDoAfterEvent { } /// /// Visualizers for handling stash open closed state if stash has door. /// [Serializable, NetSerializable] public enum StashVisuals : byte { DoorVisualState, } [Serializable, NetSerializable] public enum DoorVisualState : byte { DoorOpen, DoorClosed } }