diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs index a641f86d3..3eceabb0c 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs @@ -460,14 +460,16 @@ namespace Barotrauma.Items.Components } } - public override void Load(XElement componentElement) + public override void ReceiveSignal(int stepsTaken, string signal, Connection connection, Item source, Character sender, float power = 0.0f, float signalStrength = 1.0f) { if (componentElement == null) return; base.Load(componentElement); var prevRequiredItems = new Dictionary>(requiredItems); bool overrideRequiredItems = false; - foreach (XElement subElement in componentElement.Elements()) + bool wasOpen = PredictedState == null ? isOpen : PredictedState.Value; + + if (connection.Name == "toggle") { switch (subElement.Name.ToString().ToLowerInvariant()) { @@ -475,42 +477,6 @@ namespace Barotrauma.Items.Components if (!overrideRequiredItems) requiredItems.Clear(); overrideRequiredItems = true; - RelatedItem newRequiredItem = RelatedItem.Load(subElement, item.Name); - if (newRequiredItem == null) continue; - - var prevRequiredItem = prevRequiredItems.ContainsKey(newRequiredItem.Type) ? - prevRequiredItems[newRequiredItem.Type].Find(ri => ri.JoinedIdentifiers == newRequiredItem.JoinedIdentifiers) : null; - if (prevRequiredItem != null) - { - newRequiredItem.statusEffects = prevRequiredItem.statusEffects; - newRequiredItem.Msg = prevRequiredItem.Msg; - } - - if (!requiredItems.ContainsKey(newRequiredItem.Type)) - { - requiredItems[newRequiredItem.Type] = new List(); - } - requiredItems[newRequiredItem.Type].Add(newRequiredItem); - break; - } - } - } - - public override void ReceiveSignal(int stepsTaken, string signal, Connection connection, Item source, Character sender, float power = 0.0f, float signalStrength = 1.0f) - { - if (isStuck) return; - - bool wasOpen = PredictedState == null ? isOpen : PredictedState.Value; - - if (connection.Name == "toggle") - { - SetState(!wasOpen, false, true); - } - else if (connection.Name == "set_state") - { - SetState(signal != "0", false, true); - } - #if SERVER if (sender != null && wasOpen != isOpen) { diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs index f3208b384..ff6c1255e 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs @@ -640,6 +640,38 @@ namespace Barotrauma.Items.Components Msg = msg; } #endif + var prevRequiredItems = new Dictionary>(requiredItems); + bool overrideRequiredItems = false; + + foreach (XElement subElement in componentElement.Elements()) + { + foreach (InputType inputType in Enum.GetValues(typeof(InputType))) + { + case "requireditem": + if (!overrideRequiredItems) requiredItems.Clear(); + overrideRequiredItems = true; + + RelatedItem newRequiredItem = RelatedItem.Load(subElement, item.Name); + if (newRequiredItem == null) continue; + + var prevRequiredItem = prevRequiredItems.ContainsKey(newRequiredItem.Type) ? + prevRequiredItems[newRequiredItem.Type].Find(ri => ri.JoinedIdentifiers == newRequiredItem.JoinedIdentifiers) : null; + if (prevRequiredItem != null) + { + newRequiredItem.statusEffects = prevRequiredItem.statusEffects; + newRequiredItem.Msg = prevRequiredItem.Msg; + } + + if (!requiredItems.ContainsKey(newRequiredItem.Type)) + { + requiredItems[newRequiredItem.Type] = new List(); + } + requiredItems[newRequiredItem.Type].Add(newRequiredItem); + break; + } + Msg = msg; + } +#endif // Only door override required items //var prevRequiredItems = new Dictionary>(requiredItems); diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Signal/LightComponent.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Signal/LightComponent.cs index 021ad6197..9a93d357f 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Signal/LightComponent.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Signal/LightComponent.cs @@ -77,7 +77,7 @@ namespace Barotrauma.Items.Components IsActive = value; #if SERVER - if (GameMain.Server != null) item.CreateServerEvent(this); + if (GameMain.Server != null && GameMain.Server.GameStarted) { item.CreateServerEvent(this); } #endif } } diff --git a/Barotrauma/BarotraumaShared/Source/StatusEffects/StatusEffect.cs b/Barotrauma/BarotraumaShared/Source/StatusEffects/StatusEffect.cs index f5b7c4323..072c260ab 100644 --- a/Barotrauma/BarotraumaShared/Source/StatusEffects/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/StatusEffects/StatusEffect.cs @@ -467,7 +467,7 @@ namespace Barotrauma { if (!string.IsNullOrEmpty(pc.TargetItemComponentName)) { - if (!(target is ItemComponent ic) || ic.GetType().ToString() != pc.TargetItemComponentName) + if (!(target is ItemComponent ic) || ic.Name != pc.TargetItemComponentName) { continue; } @@ -484,7 +484,7 @@ namespace Barotrauma { if (!string.IsNullOrEmpty(pc.TargetItemComponentName)) { - if (!(target is ItemComponent ic) || ic.GetType().ToString() != pc.TargetItemComponentName) + if (!(target is ItemComponent ic) || ic.Name != pc.TargetItemComponentName) { continue; }