Hacked clients can't send chat messages from other characters anymore

Also added sendername as userdata in chat messages, for now it's not used for anything but we'll probably find something where this is useful
This commit is contained in:
juanjp600
2016-08-30 17:35:58 -03:00
parent 07398be97e
commit 52270e3a35
7 changed files with 73 additions and 45 deletions
+30 -5
View File
@@ -117,8 +117,11 @@ namespace Barotrauma.Networking
public void WriteNetworkMessage(NetOutgoingMessage msg) public void WriteNetworkMessage(NetOutgoingMessage msg)
{ {
msg.WriteRangedInteger(0, Enum.GetValues(typeof(ChatMessageType)).Length, (byte)Type); msg.WriteRangedInteger(0, Enum.GetValues(typeof(ChatMessageType)).Length, (byte)Type);
msg.Write(Sender == null ? (ushort)0 : Sender.ID); if (GameMain.Server != null)
msg.Write(SenderName); {
msg.Write(Sender == null ? (ushort)0 : Sender.ID);
msg.Write(SenderName);
}
msg.Write(Text); msg.Write(Text);
} }
@@ -126,11 +129,33 @@ namespace Barotrauma.Networking
public static ChatMessage ReadNetworkMessage(NetBuffer msg) public static ChatMessage ReadNetworkMessage(NetBuffer msg)
{ {
ChatMessageType type = (ChatMessageType)msg.ReadRangedInteger(0, Enum.GetValues(typeof(ChatMessageType)).Length); ChatMessageType type = (ChatMessageType)msg.ReadRangedInteger(0, Enum.GetValues(typeof(ChatMessageType)).Length);
ushort senderId = msg.ReadUInt16(); string senderName="";
string senderName = msg.ReadString(); 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(); string text = msg.ReadString();
return new ChatMessage(senderName, text, type, Entity.FindEntityByID(senderId) as Character); return new ChatMessage(senderName, text, type, character);
} }
} }
} }
@@ -1443,6 +1443,7 @@ namespace Barotrauma.Networking
{ {
Client sender = connectedClients.Find(x => x.Connection == inc.SenderConnection); Client sender = connectedClients.Find(x => x.Connection == inc.SenderConnection);
ChatMessage message = ChatMessage.ReadNetworkMessage(inc); ChatMessage message = ChatMessage.ReadNetworkMessage(inc);
if (message == null) return;
List<Client> recipients = new List<Client>(); List<Client> recipients = new List<Client>();
@@ -309,6 +309,7 @@ namespace Barotrauma.Networking
((chatBox.CountChildren % 2) == 0) ? Color.Transparent : Color.Black * 0.1f, message.Color, ((chatBox.CountChildren % 2) == 0) ? Color.Transparent : Color.Black * 0.1f, message.Color,
Alignment.Left, null, null, true); Alignment.Left, null, null, true);
msg.Font = GUI.SmallFont; msg.Font = GUI.SmallFont;
msg.UserData = message.SenderName;
msg.Padding = new Vector4(20.0f, 0, 0, 0); msg.Padding = new Vector4(20.0f, 0, 0, 0);
@@ -989,6 +989,7 @@ namespace Barotrauma
((chatBox.CountChildren % 2) == 0) ? Color.Transparent : Color.Black*0.1f, message.Color, ((chatBox.CountChildren % 2) == 0) ? Color.Transparent : Color.Black*0.1f, message.Color,
Alignment.Left, GUI.Style, null, true); Alignment.Left, GUI.Style, null, true);
msg.Font = GUI.SmallFont; msg.Font = GUI.SmallFont;
msg.UserData = message.SenderName;
msg.CanBeFocused = false; msg.CanBeFocused = false;
msg.Padding = new Vector4(20, 0, 0, 0); msg.Padding = new Vector4(20, 0, 0, 0);