using Content.Shared.Inventory; using Content.Shared.Whitelist; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array; namespace Content.Shared.Cloning; /// /// Settings for cloning a humanoid. /// Used to decide which components should be copied. /// [Prototype] public sealed partial class CloningSettingsPrototype : IPrototype, IInheritingPrototype { /// [IdDataField] public string ID { get; private set; } = default!; [ParentDataField(typeof(PrototypeIdArraySerializer))] public string[]? Parents { get; } [AbstractDataField] [NeverPushInheritance] public bool Abstract { get; } /// /// Determines if cloning can be prevented by traits etc. /// [DataField] public bool ForceCloning = true; /// /// Which inventory slots will receive a copy of the original's clothing. /// Disabled when null. /// [DataField] public SlotFlags? CopyEquipment = SlotFlags.All; /// /// Whether or not to copy slime storage and storage implant contents. /// [DataField] public bool CopyInternalStorage = true; /// /// Whether or not to copy implants. /// [DataField] public bool CopyImplants = true; /// /// Whitelist for the equipment allowed to be copied. /// [DataField] public EntityWhitelist? Whitelist; /// /// Blacklist for the equipment allowed to be copied. /// [DataField] public EntityWhitelist? Blacklist; /// TODO: Make this not a string https://github.com/space-wizards/RobustToolbox/issues/5709 /// /// Components to copy from the original to the clone. /// This only makes a shallow copy of datafields! /// If you need a deep copy or additional component initialization, then subscribe to CloningEvent instead! /// [DataField] [AlwaysPushInheritance] public HashSet Components = new(); }