diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 0b7cfa7ea..337049b56 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -864,12 +864,12 @@ namespace Barotrauma return owner.isDead || owner.IsUnconscious || owner.Stun > 0.0f || owner.LockHands; } - if (inventory.Owner is Item) + if (inventory.Owner is Item) { var owner = (Item)inventory.Owner; - if (!CanAccessItem(owner)) - { - return false; + if (!CanAccessItem(owner)) + { + return false; } } return true; @@ -878,22 +878,22 @@ namespace Barotrauma public bool CanAccessItem(Item item) { if (item.ParentInventory != null) - { + { return CanAccessInventory(item.ParentInventory); - } - + } + float maxDist = item.PickDistance * 1.2f; - if (maxDist <= 0.01f) - { - maxDist = 150.0f; - } - - if (Vector2.Distance(WorldPosition, item.WorldPosition) < maxDist || - item.IsInsideTrigger(WorldPosition)) - { - return true; - } - + if (maxDist <= 0.01f) + { + maxDist = 150.0f; + } + + if (Vector2.Distance(WorldPosition, item.WorldPosition) < maxDist || + item.IsInsideTrigger(WorldPosition)) + { + return true; + } + return item.GetComponent() != null; } diff --git a/Subsurface/Source/Networking/ChatMessage.cs b/Subsurface/Source/Networking/ChatMessage.cs index 28c8b33f9..ed71aa84c 100644 --- a/Subsurface/Source/Networking/ChatMessage.cs +++ b/Subsurface/Source/Networking/ChatMessage.cs @@ -116,21 +116,46 @@ namespace Barotrauma.Networking public void WriteNetworkMessage(NetOutgoingMessage msg) { - msg.WriteRangedInteger(0, Enum.GetValues(typeof(ChatMessageType)).Length, (byte)Type); - msg.Write(Sender == null ? (ushort)0 : Sender.ID); - msg.Write(SenderName); + msg.WriteRangedInteger(0, Enum.GetValues(typeof(ChatMessageType)).Length, (byte)Type); + if (GameMain.Server != null) + { + msg.Write(Sender == null ? (ushort)0 : Sender.ID); + msg.Write(SenderName); + } msg.Write(Text); } public static ChatMessage ReadNetworkMessage(NetBuffer msg) { - ChatMessageType type = (ChatMessageType)msg.ReadRangedInteger(0, Enum.GetValues(typeof(ChatMessageType)).Length); - ushort senderId = msg.ReadUInt16(); - string senderName = msg.ReadString(); + ChatMessageType type = (ChatMessageType)msg.ReadRangedInteger(0, Enum.GetValues(typeof(ChatMessageType)).Length); + string senderName=""; + Character character = null; + if (GameMain.Server == null) + { + ushort senderId = msg.ReadUInt16(); + character = Entity.FindEntityByID(senderId) as Character; + senderName = msg.ReadString(); + } + else + { + NetIncomingMessage inc = msg as NetIncomingMessage; + if (inc == null) return null; + Client sender = GameMain.Server.ConnectedClients.Find(x => x.Connection == inc.SenderConnection); + if (sender == null) return null; + character = sender.Character; + if (character != null) + { + senderName = character.Name; + } + else + { + senderName = sender.name; + } + } string text = msg.ReadString(); - return new ChatMessage(senderName, text, type, Entity.FindEntityByID(senderId) as Character); + return new ChatMessage(senderName, text, type, character); } } } diff --git a/Subsurface/Source/Networking/Client.cs b/Subsurface/Source/Networking/Client.cs index d6fc927d5..0c5cdebae 100644 --- a/Subsurface/Source/Networking/Client.cs +++ b/Subsurface/Source/Networking/Client.cs @@ -93,17 +93,17 @@ namespace Barotrauma.Networking name = name.Substring(0, 20); } string rName = ""; - for (int i=0;i 126) - { - //TODO: allow safe unicode characters, this is just to prevent players from taking names that look similar but aren't the same - rName += '?'; - } - else - { - rName += name[i]; - } + for (int i=0;i 126) + { + //TODO: allow safe unicode characters, this is just to prevent players from taking names that look similar but aren't the same + rName += '?'; + } + else + { + rName += name[i]; + } } return rName; @@ -125,7 +125,7 @@ namespace Barotrauma.Networking } public bool HasPermission(ClientPermissions permission) - { + { return false; //Permissions.HasFlag(permission); } diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index d56fd4a5d..368a0f90c 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -1443,6 +1443,7 @@ namespace Barotrauma.Networking { Client sender = connectedClients.Find(x => x.Connection == inc.SenderConnection); ChatMessage message = ChatMessage.ReadNetworkMessage(inc); + if (message == null) return; List recipients = new List(); @@ -1494,7 +1495,7 @@ namespace Barotrauma.Networking if (similarity > 5.0f) { sender.ChatSpamCount++; - + if (sender.ChatSpamCount > 3) { //kick for spamming too much @@ -1633,10 +1634,10 @@ namespace Barotrauma.Networking headSpriteId = 0; } - if (sender.characterInfo != null) - { - //clients can't change their character's name once it's been set - name = sender.characterInfo.Name; + if (sender.characterInfo != null) + { + //clients can't change their character's name once it's been set + name = sender.characterInfo.Name; } List jobPreferences = new List(); diff --git a/Subsurface/Source/Networking/GameServerLogin.cs b/Subsurface/Source/Networking/GameServerLogin.cs index cce6d0c5f..ff617de88 100644 --- a/Subsurface/Source/Networking/GameServerLogin.cs +++ b/Subsurface/Source/Networking/GameServerLogin.cs @@ -81,10 +81,10 @@ namespace Barotrauma.Networking return; } - if (ConnectedClients.Count>=config.MaximumConnections) - { + if (ConnectedClients.Count>=config.MaximumConnections) + { inc.SenderConnection.Disconnect("Server full"); - return; + return; } DebugConsole.NewMessage("New player has joined the server", Color.White); diff --git a/Subsurface/Source/Networking/NetworkMember.cs b/Subsurface/Source/Networking/NetworkMember.cs index 55cb4ff48..027b1afb2 100644 --- a/Subsurface/Source/Networking/NetworkMember.cs +++ b/Subsurface/Source/Networking/NetworkMember.cs @@ -309,6 +309,7 @@ namespace Barotrauma.Networking ((chatBox.CountChildren % 2) == 0) ? Color.Transparent : Color.Black * 0.1f, message.Color, Alignment.Left, null, null, true); msg.Font = GUI.SmallFont; + msg.UserData = message.SenderName; msg.Padding = new Vector4(20.0f, 0, 0, 0); diff --git a/Subsurface/Source/Screens/NetLobbyScreen.cs b/Subsurface/Source/Screens/NetLobbyScreen.cs index aa205bf1c..309306e04 100644 --- a/Subsurface/Source/Screens/NetLobbyScreen.cs +++ b/Subsurface/Source/Screens/NetLobbyScreen.cs @@ -989,6 +989,7 @@ namespace Barotrauma ((chatBox.CountChildren % 2) == 0) ? Color.Transparent : Color.Black*0.1f, message.Color, Alignment.Left, GUI.Style, null, true); msg.Font = GUI.SmallFont; + msg.UserData = message.SenderName; msg.CanBeFocused = false; msg.Padding = new Vector4(20, 0, 0, 0);