Correct signal linker removing (#13058)

This commit is contained in:
Morb
2022-12-21 23:47:49 +03:00
committed by GitHub
parent 89c17f13e0
commit 1b88d11ac3

View File

@@ -164,15 +164,19 @@ namespace Content.Server.MachineLinking.System
// validate links
Dictionary<EntityUid, SignalTransmitterComponent?> uidCache = new();
foreach (var rport in receiver.Inputs)
{
var toRemove = new List<PortIdentifier>();
foreach (var tport in rport.Value)
{
if (!uidCache.TryGetValue(tport.Uid, out var transmitter))
uidCache.Add(tport.Uid, transmitter = CompOrNull<SignalTransmitterComponent>(tport.Uid));
if (transmitter == null || !transmitter.Outputs.TryGetValue(tport.Port, out var tpv))
rport.Value.Remove(tport);
toRemove.Add(tport);
else if (!tpv.Contains(new(uid, rport.Key)))
tpv.Add(new(uid, rport.Key));
}
toRemove.ForEach(tport => rport.Value.Remove(tport));
}
}
private void OnTransmitterRemoved(EntityUid uid, SignalTransmitterComponent transmitter, ComponentRemove args)