From e4b3743bdb93c098c81b3614554d67f86f8c3606 Mon Sep 17 00:00:00 2001 From: Evil Factory <36804725+evilfactory@users.noreply.github.com> Date: Tue, 28 Sep 2021 17:26:53 -0300 Subject: [PATCH] fix wifi components not working correctly --- .../Items/Components/Signal/WifiComponent.cs | 68 +++++++++---------- 1 file changed, 31 insertions(+), 37 deletions(-) diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs index 9c1544481..48fcd6243 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Xml.Linq; -using MoonSharp.Interpreter; namespace Barotrauma.Items.Components { @@ -23,7 +22,9 @@ namespace Barotrauma.Items.Components private string prevSignal; - private int[] channelMemory = new int[ChannelMemorySize]; + private readonly int[] channelMemory = new int[ChannelMemorySize]; + + private Connection signalOutConnection; [Serialize(CharacterTeamType.None, true, description: "WiFi components can only communicate with components that have the same Team ID.", alwaysUseInstanceValues: true)] public CharacterTeamType TeamID { get; set; } @@ -64,37 +65,22 @@ namespace Barotrauma.Items.Components "as chat messages in the chatbox of the player holding the item.", alwaysUseInstanceValues: true)] public bool LinkToChat { - get - { #if SERVER + get + { return GameMain.Lua.game.allowWifiChat; -#endif -#if CLIENT - return true; -#endif - } - set - { + } - } + set + { + + } +#else + get; + set; +#endif } - // [Editable, Serialize(false, false, description: "If enabled, any signals received from another chat-linked wifi component are displayed " + - // "as chat messages in the chatbox of the player holding the item.", alwaysUseInstanceValues: true)] - // public bool LinkToChat - // { - // get - // { - //#if SERVER - // return GameMain.Lua.game.allowWifiChat; - //#endif - //#if CLIENT - // return true; - //#endif - // } - // set { } - // } - [Editable, Serialize(1.0f, true, description: "How many seconds have to pass between signals for a message to be displayed in the chatbox. " + "Setting this to a very low value is not recommended, because it may cause an excessive amount of chat messages to be created " + "if there are chat-linked wifi components that transmit a continuous signal.")] @@ -121,6 +107,10 @@ namespace Barotrauma.Items.Components public override void OnItemLoaded() { + if (item.Connections != null) + { + signalOutConnection = item.Connections.Find(c => c.Name == "signal_out"); + } if (channelMemory.All(m => m == 0)) { for (int i = 0; i < channelMemory.Length; i++) @@ -183,14 +173,18 @@ namespace Barotrauma.Items.Components public void TransmitSignal(Signal signal, bool sentFromChat) { - var senderComponent = signal.source?.GetComponent(); - if (senderComponent != null && !CanReceive(senderComponent)) { return; } - var should = new LuaResult(GameMain.Lua.hook.Call("wifiSignalTransmitted", new object[] { this, signal, sentFromChat })); if (should.Bool()) return; + if (sentFromChat) + { + item.LastSentSignalRecipients.Clear(); + } + var senderComponent = signal.source?.GetComponent(); + if (senderComponent != null && !CanReceive(senderComponent)) { return; } + bool chatMsgSent = false; var receivers = GetReceiversInRange(); @@ -201,12 +195,13 @@ namespace Barotrauma.Items.Components //signal strength diminishes by distance float sentSignalStrength = signal.strength * MathHelper.Clamp(1.0f - (Vector2.Distance(item.WorldPosition, wifiComp.item.WorldPosition) / wifiComp.range), 0.0f, 1.0f); + Signal s = new Signal(signal.value, ++signal.stepsTaken, sender: signal.sender, source: signal.source, + power: 0.0f, strength: sentSignalStrength); - //Signal s = new Signal(signal.value, signal.stepsTaken, sender: signal.sender, source: signal.source, power: 0.0f, strength: sentSignalStrength); - - signal.source = null; - - wifiComp.item.SendSignal(signal, "signal_out"); + if (wifiComp.signalOutConnection != null) + { + wifiComp.item.SendSignal(s, wifiComp.signalOutConnection); + } if (signal.source != null) { @@ -249,7 +244,6 @@ namespace Barotrauma.Items.Components Client recipientClient = GameMain.Server.ConnectedClients.Find(c => c.Character == wifiComp.item.ParentInventory.Owner); if (recipientClient != null) { - GameMain.Server.SendDirectChatMessage( ChatMessage.Create(signal.source?.Name ?? "", chatMsg, ChatMessageType.Radio, null), recipientClient); }