diff --git a/Robust.Server/Audio/AudioSystem.cs b/Robust.Server/Audio/AudioSystem.cs index 981c01e770e..2474469f351 100644 --- a/Robust.Server/Audio/AudioSystem.cs +++ b/Robust.Server/Audio/AudioSystem.cs @@ -101,6 +101,11 @@ public override (EntityUid Entity, AudioComponent Component)? PlayEntity(string? if (TerminatingOrDeleted(uid)) return null; + var ev = new PlayAudioAttemptEvent(); + RaiseLocalEvent(uid, ref ev, false); + if (ev.Cancelled) + return null; + var entity = SetupAudio(filename, audioParams); // Move it after setting it up XformSystem.SetCoordinates(entity, new EntityCoordinates(uid, Vector2.Zero)); @@ -118,6 +123,11 @@ public override (EntityUid Entity, AudioComponent Component)? PlayPvs(string? fi if (TerminatingOrDeleted(uid)) return null; + var ev = new PlayAudioAttemptEvent(); + RaiseLocalEvent(uid, ref ev, false); + if (ev.Cancelled) + return null; + var entity = SetupAudio(filename, audioParams); XformSystem.SetCoordinates(entity, new EntityCoordinates(uid, Vector2.Zero)); @@ -162,6 +172,7 @@ public override (EntityUid Entity, AudioComponent Component)? PlayPvs(string? fi if (!coordinates.IsValid(EntityManager)) return null; + // TODO: Transform TryFindGridAt mess + optimisation required. var entity = SetupAudio(filename, audioParams); XformSystem.SetCoordinates(entity, coordinates); diff --git a/Robust.Shared/Audio/Components/AudioComponent.cs b/Robust.Shared/Audio/Components/AudioComponent.cs index 2cb47398445..046b9c27ecf 100644 --- a/Robust.Shared/Audio/Components/AudioComponent.cs +++ b/Robust.Shared/Audio/Components/AudioComponent.cs @@ -275,3 +275,9 @@ public enum AudioFlags : byte NoOcclusion = 1 << 1, } + +/// +/// Raised directed at an entity, which is emitting the audio. Raised only when audio played at the entity itself, not the coordinates. +/// +[ByRefEvent] +public record struct PlayAudioAttemptEvent(bool Cancelled = false);