using Content.Shared.Charges.Components; using Content.Shared.Cloning; using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Changeling.Components; /// /// Changeling transformation in item form! /// An entity with this component works like an implanter: /// First you use it on a humanoid to make a copy of their identity, along with all species relevant components, /// then use it on someone else to tranform them into a clone of them. /// Can be used in combination with /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class ChangelingClonerComponent : Component { /// /// A clone of the player you have copied the identity from. /// This is a full humanoid backup, stored on a paused map. /// /// /// Since this entity is stored on a separate map it will be outside PVS range. /// [DataField, AutoNetworkedField] public EntityUid? ClonedBackup; /// /// Current state of the item. /// [DataField, AutoNetworkedField] public ChangelingClonerState State = ChangelingClonerState.Empty; /// /// The cloning settings to use. /// [DataField, AutoNetworkedField] public ProtoId Settings = "ChangelingCloningSettings"; /// /// Doafter time for drawing and injecting. /// [DataField, AutoNetworkedField] public TimeSpan DoAfter = TimeSpan.FromSeconds(5); /// /// Can this item be used more than once? /// [DataField, AutoNetworkedField] public bool Reusable = true; /// /// Whether or not to add a reset verb to purge the stored identity, /// allowing you to draw a new one. /// [DataField, AutoNetworkedField] public bool CanReset = true; /// /// Raise events when renaming the target? /// This will change their ID card, crew manifest entry, and so on. /// For admeme purposes. /// [DataField, AutoNetworkedField] public bool RaiseNameChangeEvents; /// /// The sound to play when taking someone's identity with the item. /// [DataField, AutoNetworkedField] public SoundSpecifier? DrawSound; /// /// The sound to play when someone is transformed. /// [DataField, AutoNetworkedField] public SoundSpecifier? InjectSound; } /// /// Current state of the item. /// [Serializable, NetSerializable] public enum ChangelingClonerState : byte { /// /// No sample taken yet. /// Empty, /// /// Filled with a DNA sample. /// Filled, /// /// Has been used (single use only). /// Spent, }