Xenoborg jammer now ignores xenoborg associated frequencies (#38005)

* stop jammer from jamming radio of certain frequency

* xenoborg jammer no longer jamms xenoborg radio

* stop jammer from jamming device network signals from certain frequency

* xenoborg jammer no longer jamms xenoborg camera signal

* the old tale of the missing ;

* backwards

* fix issue with readonly

* comments to the frequencies excluded

* triple typo

* clearer summary

* add summary

* fixed 4th hidden typo
This commit is contained in:
Samuka-C
2025-09-24 19:02:46 -03:00
committed by GitHub
parent 4555b72608
commit ea3c44686c
9 changed files with 77 additions and 6 deletions

View File

@@ -23,4 +23,10 @@ public sealed partial class DeviceNetworkJammerComponent : Component
[DataField, AutoNetworkedField]
public HashSet<string> JammableNetworks = [];
/// <summary>
/// Device networks frequencies that wont be jammed.
/// </summary>
[DataField]
public HashSet<uint> FrequenciesExcluded = [];
}

View File

@@ -25,11 +25,17 @@ public sealed class BeforePacketSentEvent : CancellableEntityEventArgs
/// </summary>
public readonly string NetworkId;
public BeforePacketSentEvent(EntityUid sender, TransformComponent xform, Vector2 senderPosition, string networkId)
/// <summary>
/// The frequency the packet is sent on.
/// </summary>
public readonly uint Frequency;
public BeforePacketSentEvent(EntityUid sender, TransformComponent xform, Vector2 senderPosition, string networkId, uint frequency)
{
Sender = sender;
SenderTransform = xform;
SenderPosition = senderPosition;
NetworkId = networkId;
Frequency = frequency;
}
}
}

View File

@@ -60,4 +60,34 @@ public abstract class SharedDeviceNetworkJammerSystem : EntitySystem
ent.Comp.JammableNetworks.Clear();
Dirty(ent);
}
/// <summary>
/// Enables this entity to stop packets with the specified frequency from being jammmed.
/// </summary>
public void AddExcludedFrequency(Entity<DeviceNetworkJammerComponent> ent, uint frequency)
{
if (ent.Comp.FrequenciesExcluded.Add(frequency))
Dirty(ent);
}
/// <summary>
/// Stops this entity to stop packets with the specified frequency from being jammmed.
/// </summary>
public void RemoveExcludedFrequency(Entity<DeviceNetworkJammerComponent> ent, uint frequency)
{
if (ent.Comp.FrequenciesExcluded.Remove(frequency))
Dirty(ent);
}
/// <summary>
/// Stops this entity to stop packets with any frequency from being jammmed.
/// </summary>
public void ClearExcludedFrequency(Entity<DeviceNetworkJammerComponent> ent)
{
if (ent.Comp.FrequenciesExcluded.Count == 0)
return;
ent.Comp.FrequenciesExcluded.Clear();
Dirty(ent);
}
}