diff --git a/Content.Server/Interaction/Components/EmitSoundOnUseComponent.cs b/Content.Server/Interaction/Components/EmitSoundOnUseComponent.cs index d39f5e4e85..a0224843c4 100644 --- a/Content.Server/Interaction/Components/EmitSoundOnUseComponent.cs +++ b/Content.Server/Interaction/Components/EmitSoundOnUseComponent.cs @@ -9,5 +9,16 @@ namespace Content.Server.Interaction.Components [RegisterComponent] public sealed class EmitSoundOnUseComponent : BaseEmitSoundComponent { + /// + /// Whether or not to mark an interaction as handled after playing the sound. Useful if this component is + /// used to play sound for some other component with on-use functionality + /// + /// + /// If false, you should be confident that the interaction will also be handled by some other system, as + /// otherwise this might enable sound spamming, as use-delays are only initiated if the interaction was + /// handled. + /// + [DataField("handle")] + public bool Handle = true; } } diff --git a/Content.Server/Sound/Components/EmitSoundOnActivateComponent.cs b/Content.Server/Sound/Components/EmitSoundOnActivateComponent.cs index b86a10f4ff..b78009e5f1 100644 --- a/Content.Server/Sound/Components/EmitSoundOnActivateComponent.cs +++ b/Content.Server/Sound/Components/EmitSoundOnActivateComponent.cs @@ -8,5 +8,16 @@ namespace Content.Server.Sound.Components [RegisterComponent] public sealed class EmitSoundOnActivateComponent : BaseEmitSoundComponent { + /// + /// Whether or not to mark an interaction as handled after playing the sound. Useful if this component is + /// used to play sound for some other component with activation functionality. + /// + /// + /// If false, you should be confident that the interaction will also be handled by some other system, as + /// otherwise this might enable sound spamming, as use-delays are only initiated if the interaction was + /// handled. + /// + [DataField("handle")] + public bool Handle = true; } } diff --git a/Content.Server/Sound/EmitSoundSystem.cs b/Content.Server/Sound/EmitSoundSystem.cs index 24cf39cfa8..f4a1b610de 100644 --- a/Content.Server/Sound/EmitSoundSystem.cs +++ b/Content.Server/Sound/EmitSoundSystem.cs @@ -41,10 +41,13 @@ namespace Content.Server.Sound TryEmitSound(component); } - private void HandleEmitSoundOnUseInHand(EntityUid eUI, BaseEmitSoundComponent component, UseInHandEvent arg) + private void HandleEmitSoundOnUseInHand(EntityUid eUI, EmitSoundOnUseComponent component, UseInHandEvent arg) { - // Intentionally not handling interaction. This component is an easy way to add sounds in addition to other behavior. + // Intentionally not checking whether the interaction has already been handled. TryEmitSound(component); + + if (component.Handle) + arg.Handled = true; } private void HandleEmitSoundOnThrown(EntityUid eUI, BaseEmitSoundComponent component, ThrownEvent arg) @@ -52,10 +55,13 @@ namespace Content.Server.Sound TryEmitSound(component); } - private void HandleEmitSoundOnActivateInWorld(EntityUid eUI, BaseEmitSoundComponent component, ActivateInWorldEvent arg) + private void HandleEmitSoundOnActivateInWorld(EntityUid eUI, EmitSoundOnActivateComponent component, ActivateInWorldEvent arg) { - // Intentionally not handling interaction. This component is an easy way to add sounds in addition to other behavior. + // Intentionally not checking whether the interaction has already been handled. TryEmitSound(component); + + if (component.Handle) + arg.Handled = true; } private void TryEmitSound(BaseEmitSoundComponent component)