diff --git a/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs b/Barotrauma/BarotraumaShared/SharedSource/Items/Components/Signal/WifiComponent.cs index 7547d590c..d2803e3a2 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; } @@ -59,41 +60,14 @@ namespace Barotrauma.Items.Components set; } - [ConditionallyEditable(ConditionallyEditable.ConditionType.AllowLinkingWifiToChat)] - [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(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 { } -// } + [ConditionallyEditable(ConditionallyEditable.ConditionType.AllowLinkingWifiToChat)] + [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; + 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 " + @@ -121,6 +95,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,16 +161,13 @@ namespace Barotrauma.Items.Components public void TransmitSignal(Signal signal, bool sentFromChat) { + if (sentFromChat) + { + item.LastSentSignalRecipients.Clear(); + } var senderComponent = signal.source?.GetComponent(); if (senderComponent != null && !CanReceive(senderComponent)) { return; } -#if SERVER - var should = GameMain.Lua.hook.Call("wifiSignalTransmitted", new DynValue[] { UserData.Create(this), UserData.Create(signal), DynValue.NewBoolean(sentFromChat) }); - - if (should != null && should.CastToBool()) - return; -#endif - bool chatMsgSent = false; var receivers = GetReceiversInRange(); @@ -203,13 +178,14 @@ 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); + if (wifiComp.signalOutConnection != null) + { + wifiComp.item.SendSignal(s, wifiComp.signalOutConnection); + } - signal.source = null; - - wifiComp.item.SendSignal(signal, "signal_out"); - if (signal.source != null) { foreach (Connection receiver in wifiComp.item.LastSentSignalRecipients) @@ -251,7 +227,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); }