diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 4e20e7897..446624a34 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -1688,11 +1688,19 @@ namespace Barotrauma Vector2 closestItemPos = closestItem != null ? closestItem.DrawPosition : Vector2.Zero; closestItemPos.Y = -closestItemPos.Y; GUI.DrawLine(spriteBatch, closestItemPos - new Vector2(0, 5), closestItemPos + new Vector2(0, 5), Color.Lime, 0, 10); + + Vector2 pos = DrawPosition; + pos.Y = -pos.Y; + + if (speechBubbleTimer > 0.0f) + { + GUI.SpeechBubbleIcon.Draw(spriteBatch, pos - Vector2.UnitY * 100.0f, + speechBubbleColor * Math.Min(speechBubbleTimer, 1.0f), 0.0f, + Math.Min((float)speechBubbleTimer, 1.0f)); + } if (this == controlled) return; - Vector2 pos = DrawPosition; - pos.Y = -pos.Y; if (info != null) { @@ -1720,13 +1728,6 @@ namespace Barotrauma GUI.DrawProgressBar(spriteBatch, healthBarPos, new Vector2(100.0f, 15.0f), health / maxHealth, Color.Lerp(Color.Red, Color.Green, health / maxHealth) * 0.8f); } - - if (speechBubbleTimer > 0.0f) - { - GUI.SpeechBubbleIcon.Draw(spriteBatch, pos - Vector2.UnitY * 100.0f, - speechBubbleColor * Math.Min(speechBubbleTimer, 1.0f), 0.0f, - Math.Min((float)speechBubbleTimer, 1.0f)); - } } /// diff --git a/Subsurface/Source/Networking/ChatMessage.cs b/Subsurface/Source/Networking/ChatMessage.cs index 1a8c1d39f..62f2ca9b8 100644 --- a/Subsurface/Source/Networking/ChatMessage.cs +++ b/Subsurface/Source/Networking/ChatMessage.cs @@ -146,19 +146,44 @@ namespace Barotrauma.Networking msg.Write((byte)ServerNetObject.CHAT_MESSAGE); msg.Write(NetStateID); msg.Write((byte)Type); - msg.Write(SenderName); msg.Write(Text); + + msg.Write(Sender != null); + if (Sender != null) + { + msg.Write(Sender.ID); + } + else + { + msg.Write(SenderName); + } } static public void ClientRead(NetIncomingMessage msg) { UInt32 ID = msg.ReadUInt32(); - ChatMessageType type = (ChatMessageType)msg.ReadByte(); - string senderName = msg.ReadString(); + ChatMessageType type = (ChatMessageType)msg.ReadByte(); string txt = msg.ReadString(); + + string senderName = ""; + Character senderCharacter = null; + bool hasSenderCharacter = msg.ReadBoolean(); + if (hasSenderCharacter) + { + senderCharacter = Entity.FindEntityByID(msg.ReadUInt16()) as Character; + if (senderCharacter != null) + { + senderName = senderCharacter.Name; + } + } + else + { + senderName = msg.ReadString(); + } + if (ID > LastID) { - GameMain.Client.AddChatMessage(txt, type, senderName); + GameMain.Client.AddChatMessage(txt, type, senderName, senderCharacter); LastID = ID; } } diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index 13668474b..91d1b45cb 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -1337,7 +1337,7 @@ namespace Barotrauma.Networking if (!string.IsNullOrWhiteSpace(myReceivedMessage)) { - AddChatMessage(myReceivedMessage, (ChatMessageType)type, senderName); + AddChatMessage(myReceivedMessage, (ChatMessageType)type, senderName, senderCharacter); } } diff --git a/Subsurface/Source/Networking/NetworkMember.cs b/Subsurface/Source/Networking/NetworkMember.cs index 7131a5df2..3f910d2ac 100644 --- a/Subsurface/Source/Networking/NetworkMember.cs +++ b/Subsurface/Source/Networking/NetworkMember.cs @@ -222,7 +222,7 @@ namespace Barotrauma.Networking if (message.Sender != null) { - message.Sender.ShowSpeechBubble(2.0f, ChatMessage.MessageColor[(int)ChatMessageType.Default]); + message.Sender.ShowSpeechBubble(2.0f, ChatMessage.MessageColor[(int)message.Type]); } GameMain.NetLobbyScreen.NewChatMessage(message);