using Content.Shared.Damage; using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; namespace Content.Shared.Cuffs.Components; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] [Access(typeof(SharedCuffableSystem))] public sealed partial class HandcuffComponent : Component { /// /// The time it takes to cuff an entity. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float CuffTime = 3.5f; /// /// The time it takes to uncuff an entity. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float UncuffTime = 3.5f; /// /// The time it takes for a cuffed entity to uncuff itself. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float BreakoutTime = 30f; /// /// If an entity being cuffed is stunned, this amount of time is subtracted from the time it takes to add/remove their cuffs. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public float StunBonus = 2f; /// /// Will the cuffs break when removed? /// [DataField, ViewVariables(VVAccess.ReadWrite)] public bool BreakOnRemove; /// /// Will the cuffs break when removed? /// [DataField, ViewVariables(VVAccess.ReadWrite)] public EntProtoId? BrokenPrototype; /// /// Whether or not these cuffs are in the process of being removed. /// Used simply to prevent spawning multiple . /// [DataField] public bool Removing; [DataField, ViewVariables(VVAccess.ReadWrite)] public DamageSpecifier DamageOnResist = new() { DamageDict = new() { { "Blunt", 3.0 }, } }; /// /// The path of the RSI file used for the player cuffed overlay. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public string? CuffedRSI = "Objects/Misc/handcuffs.rsi"; /// /// The iconstate used with the RSI file for the player cuffed overlay. /// [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] public string? BodyIconState = "body-overlay"; /// /// An opptional color specification for /// [DataField, ViewVariables(VVAccess.ReadWrite)] public Color Color = Color.White; [DataField, ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier StartCuffSound = new SoundPathSpecifier("/Audio/Items/Handcuffs/cuff_start.ogg"); [DataField, ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier EndCuffSound = new SoundPathSpecifier("/Audio/Items/Handcuffs/cuff_end.ogg"); [DataField, ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier StartBreakoutSound = new SoundPathSpecifier("/Audio/Items/Handcuffs/cuff_breakout_start.ogg"); [DataField, ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier StartUncuffSound = new SoundPathSpecifier("/Audio/Items/Handcuffs/cuff_takeoff_start.ogg"); [DataField, ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier EndUncuffSound = new SoundPathSpecifier("/Audio/Items/Handcuffs/cuff_takeoff_end.ogg"); } /// /// Event fired on the User when the User attempts to cuff the Target. /// Should generate popups on the User. /// [ByRefEvent] public record struct UncuffAttemptEvent(EntityUid User, EntityUid Target) { public readonly EntityUid User = User; public readonly EntityUid Target = Target; public bool Cancelled = false; }