From f8a96031014efa6b159fbb5263969fb621e62b98 Mon Sep 17 00:00:00 2001 From: MarioE Date: Wed, 2 Jul 2014 16:53:49 -0400 Subject: [PATCH] Add connection ghosting Adds #815 --- TShockAPI/TShock.cs | 56 +++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 1b90e0c7..48e72605 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -383,36 +383,32 @@ namespace TShockAPI } } - private void NetHooks_NameCollision(NameCollisionEventArgs args) - { - string ip = TShock.Utils.GetRealIP(Netplay.serverSock[args.Who].tcpClient.Client.RemoteEndPoint.ToString()); - foreach (TSPlayer ply in TShock.Players) - { - if (ply == null) - { - continue; - } - if (ply.Name == args.Name && ply.Index != args.Who) - { - if (ply.IP == ip) - { - if (ply.State < 2) - { - Utils.ForceKick(ply, "Name collision and this client has no world data.", true, false); - args.Handled = true; - return; - } - else - { - args.Handled = false; - return; - } - } - } - } - args.Handled = false; - return; - } + private void NetHooks_NameCollision(NameCollisionEventArgs args) + { + string ip = TShock.Utils.GetRealIP(Netplay.serverSock[args.Who].tcpClient.Client.RemoteEndPoint.ToString()); + + var player = TShock.Players.First(p => p != null && p.Name == args.Name && p.Index != args.Who); + if (player != null) + { + if (player.IP == ip) + { + player.Disconnect("Connection killed"); + args.Handled = true; + return; + } + else if (player.IsLoggedIn) + { + User user = TShock.Users.GetUserByName(player.UserAccountName); + var ips = JsonConvert.DeserializeObject>(user.KnownIps); + if (ips.Contains(ip)) + { + player.Disconnect("Connection killed"); + args.Handled = true; + return; + } + } + } + } private void OnXmasCheck(ChristmasCheckEventArgs args) {