using Content.Shared.Damage; using Robust.Shared.Audio; using Robust.Shared.GameStates; namespace Content.Shared.Clumsy; /// /// Makes the entity clumsy, randomly failing some interactions and hurting themselves. /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class ClumsyComponent : Component { // Standard options. Try to fit these in if you can! /// /// Sound to play when clumsy interactions fail. /// [DataField] public SoundSpecifier ClumsySound = new SoundPathSpecifier("/Audio/Items/bikehorn.ogg"); /// /// Default chance to fail a clumsy interaction. /// If a system needs to use something else, add a new variable in the component, do not modify this percentage. /// [DataField, AutoNetworkedField] public float ClumsyDefaultCheck = 0.5f; /// /// Default stun time. /// If a system needs to use something else, add a new variable in the component, do not modify this number. /// [DataField, AutoNetworkedField] public TimeSpan ClumsyDefaultStunTime = TimeSpan.FromSeconds(2.5); // Specific options /// /// Sound to play after hitting your head on a table. Ouch! /// [DataField] public SoundCollectionSpecifier TableBonkSound = new SoundCollectionSpecifier("TrayHit"); /// /// Stun time after failing to shoot a gun. /// [DataField, AutoNetworkedField] public TimeSpan GunShootFailStunTime = TimeSpan.FromSeconds(3); /// /// Damage taken after failing to shoot a gun. /// [DataField, AutoNetworkedField] public DamageSpecifier? GunShootFailDamage; /// /// Damage taken after failing to catch an item. /// [DataField, AutoNetworkedField] public DamageSpecifier? CatchingFailDamage; /// /// Noise to play after failing to shoot a gun. Boom! /// [DataField] public SoundSpecifier GunShootFailSound = new SoundPathSpecifier("/Audio/Weapons/Guns/Gunshots/bang.ogg"); /// /// Whether or not to apply Clumsy to hyposprays. /// [DataField, AutoNetworkedField] public bool ClumsyHypo = true; /// /// Whether or not to apply Clumsy to defibs. /// [DataField, AutoNetworkedField] public bool ClumsyDefib = true; /// /// Whether or not to apply Clumsy to guns. /// [DataField, AutoNetworkedField] public bool ClumsyGuns = true; /// /// Whether or not to apply Clumsy to catching items. /// [DataField, AutoNetworkedField] public bool ClumsyCatching = true; /// /// Whether or not to apply Clumsy to vaulting. /// [DataField, AutoNetworkedField] public bool ClumsyVaulting = true; /// /// Lets you define a new "failed" message for each event. /// [DataField] public LocId HypoFailedMessage = "clumsy-hypospray-fail-message"; [DataField] public LocId GunFailedMessage = "clumsy-gun-fail-message"; [DataField] public LocId CatchingFailedMessageSelf = "clumsy-catch-fail-message-user"; [DataField] public LocId CatchingFailedMessageOthers = "clumsy-catch-fail-message-others"; [DataField] public LocId VaulingFailedMessageSelf = "clumsy-vaulting-fail-message-user"; [DataField] public LocId VaulingFailedMessageOthers = "clumsy-vaulting-fail-message-others"; [DataField] public LocId VaulingFailedMessageForced = "clumsy-vaulting-fail-forced-message"; }