diff --git a/Content.Server/Radio/Components/ActiveRadioComponent.cs b/Content.Server/Radio/Components/ActiveRadioComponent.cs index 881ce7a2fe..2c3ed9defa 100644 --- a/Content.Server/Radio/Components/ActiveRadioComponent.cs +++ b/Content.Server/Radio/Components/ActiveRadioComponent.cs @@ -14,4 +14,10 @@ public sealed class ActiveRadioComponent : Component /// [DataField("channels", customTypeSerializer: typeof(PrototypeIdHashSetSerializer))] public HashSet Channels = new(); + + /// + /// If this radio can hear all messages on all maps + /// + [DataField("globalReceive")] + public bool GlobalReceive = false; } diff --git a/Content.Server/Radio/EntitySystems/RadioSystem.cs b/Content.Server/Radio/EntitySystems/RadioSystem.cs index 15e439465e..6557d5edef 100644 --- a/Content.Server/Radio/EntitySystems/RadioSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioSystem.cs @@ -90,14 +90,14 @@ public sealed class RadioSystem : EntitySystem if (!radio.Channels.Contains(channel.ID)) continue; - if (!channel.LongRange && transform.MapID != sourceMapId) + if (!channel.LongRange && transform.MapID != sourceMapId && !radio.GlobalReceive) continue; // don't need telecom server for long range channels or handheld radios and intercoms var needServer = !channel.LongRange && (!hasMicro || !speakerQuery.HasComponent(receiver)); if (needServer && !hasActiveServer) continue; - + // check if message can be sent to specific receiver var attemptEv = new RadioReceiveAttemptEvent(channel, radioSource, receiver); RaiseLocalEvent(ref attemptEv); diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index 8ef363de41..1d40637431 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -41,6 +41,7 @@ - Service - Supply - Syndicate + globalReceive: true - type: Sprite overrideContainerOcclusion: true # Ghosts always show up regardless of where they're contained. netsync: false