Intercoms and Radios both pick up proximate speech (#32737)

* Deduping of recent messages should consider the channel it's being sent to

* rerun actions
This commit is contained in:
Centronias
2024-11-02 08:04:22 -07:00
committed by GitHub
parent 7614c2fba7
commit e7ca4b8f2f

View File

@@ -30,7 +30,7 @@ public sealed class RadioDeviceSystem : EntitySystem
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
// Used to prevent a shitter from using a bunch of radios to spam chat.
private HashSet<(string, EntityUid)> _recentlySent = new();
private HashSet<(string, EntityUid, RadioChannelPrototype)> _recentlySent = new();
public override void Initialize()
{
@@ -114,7 +114,7 @@ public sealed class RadioDeviceSystem : EntitySystem
{
if (args.Powered)
return;
SetMicrophoneEnabled(uid, null, false, true, component);
SetMicrophoneEnabled(uid, null, false, true, component);
}
public void SetMicrophoneEnabled(EntityUid uid, EntityUid? user, bool enabled, bool quiet = false, RadioMicrophoneComponent? component = null)
@@ -191,8 +191,9 @@ public sealed class RadioDeviceSystem : EntitySystem
if (HasComp<RadioSpeakerComponent>(args.Source))
return; // no feedback loops please.
if (_recentlySent.Add((args.Message, args.Source)))
_radio.SendRadioMessage(args.Source, args.Message, _protoMan.Index<RadioChannelPrototype>(component.BroadcastChannel), uid);
var channel = _protoMan.Index<RadioChannelPrototype>(component.BroadcastChannel)!;
if (_recentlySent.Add((args.Message, args.Source, channel)))
_radio.SendRadioMessage(args.Source, args.Message, channel, uid);
}
private void OnAttemptListen(EntityUid uid, RadioMicrophoneComponent component, ListenAttemptEvent args)
@@ -279,7 +280,7 @@ public sealed class RadioDeviceSystem : EntitySystem
if (TryComp<RadioMicrophoneComponent>(ent, out var mic))
mic.BroadcastChannel = channel;
if (TryComp<RadioSpeakerComponent>(ent, out var speaker))
speaker.Channels = new(){ channel };
speaker.Channels = new() { channel };
Dirty(ent);
}
}