diff --git a/TShockAPI/ConfigFile.cs b/TShockAPI/ConfigFile.cs index c8cf073d..c5067c19 100644 --- a/TShockAPI/ConfigFile.cs +++ b/TShockAPI/ConfigFile.cs @@ -93,7 +93,9 @@ namespace TShockAPI public string TileKillAbuseReason = "Tile Kill abuse ({0})"; public string HardcoreBanReason = "Death results in a ban"; public string HardcoreKickReason = "Death results in a kick"; - + + public bool EnableDNSHostResolution = false; + public static ConfigFile Read(string path) { if (!File.Exists(path)) diff --git a/TShockAPI/DB/UserManager.cs b/TShockAPI/DB/UserManager.cs index 30076080..81d056c0 100644 --- a/TShockAPI/DB/UserManager.cs +++ b/TShockAPI/DB/UserManager.cs @@ -222,6 +222,36 @@ namespace TShockAPI.DB } return Tools.GetGroup("default"); } + + public Group GetGroupForIPExpensive(string ip) + { + try + { + using (var com = database.CreateCommand()) + { + com.CommandText = "SELECT * FROM Users"; + + using (var reader = com.ExecuteReader()) + { + while(reader.Read()) + { + if (Tools.GetIPv4Address(reader.Get("IP")) == ip) + { + string group = reader.Get("UserGroup"); + return Tools.GetGroup(group); + } + } + } + } + } + catch (Exception ex) + { + Log.ConsoleError("GetGroupForIP SQL returned an error: " + ex.ToString()); + } + return Tools.GetGroup("default"); + } + + public User GetUserByName(string name) { try diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 6a70337f..63311e7b 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -49,7 +49,7 @@ namespace TShockAPI public class TShock : TerrariaPlugin { public static readonly Version VersionNum = Assembly.GetExecutingAssembly().GetName().Version; - public static readonly string VersionCodename = "The Deathly Database Part 2"; + public static readonly string VersionCodename = "Codename: Re"; public static string SavePath = "tshock"; @@ -376,8 +376,13 @@ namespace TShockAPI private void OnJoin(int ply, HandledEventArgs handler) { var player = new TSPlayer(ply); - - player.Group = TShock.Users.GetGroupForIP(player.IP); + if (Config.EnableDNSHostResolution) + { + player.Group = TShock.Users.GetGroupForIPExpensive(player.IP); + } else + { + player.Group = TShock.Users.GetGroupForIP(player.IP); + } if (Tools.ActivePlayers() + 1 > TShock.Config.MaxSlots && !player.Group.HasPermission("reservedslot")) {