From 6bb6f63dd729a1577bdee6076326b15221b7d5f7 Mon Sep 17 00:00:00 2001 From: juanjp600 Date: Mon, 29 Aug 2016 19:43:35 -0300 Subject: [PATCH] Hacked clients can't change their character name Also made spam filter's aggressiveness consistent --- Subsurface/Source/Networking/GameServer.cs | 23 +++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index ab816bf24..d56fd4a5d 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -55,11 +55,11 @@ namespace Barotrauma.Networking name = name.Replace(":", ""); name = name.Replace(";", ""); - this.name = name; - this.password = ""; - if (password.Length>0) - { - this.password = Encoding.UTF8.GetString(NetUtility.ComputeSHAHash(Encoding.UTF8.GetBytes(password))); + this.name = name; + this.password = ""; + if (password.Length>0) + { + this.password = Encoding.UTF8.GetString(NetUtility.ComputeSHAHash(Encoding.UTF8.GetBytes(password))); } config = new NetPeerConfiguration("barotrauma"); @@ -1485,7 +1485,7 @@ namespace Barotrauma.Networking similarity += sender.ChatSpamSpeed * 0.05f; //the faster messages are being sent, the faster the filter will block for (int i = 0; i < sender.ChatMessages.Count; i++) { - float closeFactor = 1.0f / (sender.ChatMessages.Count - i); + float closeFactor = 1.0f / (20.0f - i); int levenshteinDist = ToolBox.LevenshteinDistance(message.Text, sender.ChatMessages[i]); similarity += Math.Max((message.Text.Length - levenshteinDist) / message.Text.Length * closeFactor, 0.0f); @@ -1613,6 +1613,9 @@ namespace Barotrauma.Networking private void ReadCharacterData(NetIncomingMessage message) { + Client sender = connectedClients.Find(c => c.Connection == message.SenderConnection); + if (sender == null) return; + string name = ""; Gender gender = Gender.Male; int headSpriteId = 0; @@ -1630,6 +1633,11 @@ 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; + } List jobPreferences = new List(); int count = message.ReadByte(); @@ -1640,9 +1648,6 @@ namespace Barotrauma.Networking if (jobPrefab != null) jobPreferences.Add(jobPrefab); } - Client sender = connectedClients.Find(c => c.Connection == message.SenderConnection); - if (sender == null) return; - sender.characterInfo = new CharacterInfo(Character.HumanConfigFile, name, gender); sender.characterInfo.HeadSpriteId = headSpriteId; sender.jobPreferences = jobPreferences;