From cd018fed8d417e326d74368c1fcf7ebbe6224831 Mon Sep 17 00:00:00 2001 From: Lucas Nicodemus Date: Thu, 21 Jul 2011 12:25:57 -0600 Subject: [PATCH] Regions are now UserID based. --- TShockAPI/Commands.cs | 3 ++- TShockAPI/DB/RegionManager.cs | 28 +++++++++++++++++++++------- TShockAPI/DB/UserManager.cs | 26 ++++++++++++++++++++++++++ TShockAPI/Properties/AssemblyInfo.cs | 4 ++-- TShockAPI/TSPlayer.cs | 1 + 5 files changed, 52 insertions(+), 10 deletions(-) diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index f8d9c6e7..9190128c 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -312,6 +312,7 @@ namespace TShockAPI { args.Player.Group = Tools.GetGroup(exr[1]); args.Player.UserAccountName = args.Parameters[0]; + args.Player.UserID = TShock.Users.GetUserID(args.Player.UserAccountName); args.Player.IsLoggedIn = true; args.Player.SendMessage("Authenticated as " + args.Parameters[0] + " successfully.", Color.LimeGreen); Log.ConsoleInfo(args.Player.Name + " authenticated successfully as user: " + args.Parameters[0]); @@ -1286,7 +1287,7 @@ namespace TShockAPI foreach (Region r in TShock.Regions.Regions) { args.Player.SendMessage(r.RegionName + ": P: " + r.DisableBuild + " X: " + r.RegionArea.X + " Y: " + r.RegionArea.Y + " W: " + r.RegionArea.Width + " H: " + r.RegionArea.Height ); - foreach (string s in r.RegionAllowedIDs) + foreach (int s in r.RegionAllowedIDs) { args.Player.SendMessage(r.RegionName + ": " + s); } diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index 1015e59f..f14358ef 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -222,7 +222,21 @@ namespace TShockAPI.DB string[] SplitIDs = MergedIDs.Split(','); Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected, Main.worldID.ToString()); - r.RegionAllowedIDs = SplitIDs; + r.RegionAllowedIDs = new int[SplitIDs.Length]; + try + { + for (int i = 0; i < SplitIDs.Length; i++) + { + r.RegionAllowedIDs[i] = Convert.ToInt32(SplitIDs[i]); + } + } catch (Exception e) + { + Log.Error("Your database contains invalid UserIDs (they should be ints)."); + Log.Error("A lot of things will fail because of this. You must manually delete and re-create the allowed field."); + Log.Error(e.Message); + continue; + } + Regions.Add(r); } reader.Close(); @@ -363,7 +377,7 @@ namespace TShockAPI.DB public bool AddNewUser(string regionName, String userName) { - string MergedIDs = string.Empty; + try { @@ -372,7 +386,7 @@ namespace TShockAPI.DB com.CommandText = "SELECT * FROM Regions WHERE RegionName=@name AND WorldID=@worldid"; com.AddParameter("@name", regionName); com.AddParameter("@worldid", Main.worldID.ToString()); - + string MergedIDs = string.Empty; using (var reader = com.ExecuteReader()) { if (reader.Read()) @@ -380,9 +394,9 @@ namespace TShockAPI.DB } if (MergedIDs == string.Empty) - MergedIDs = userName; + MergedIDs = Convert.ToString(TShock.Users.GetUserID(userName)); else - MergedIDs = MergedIDs + "," + userName; + MergedIDs = MergedIDs + "," + Convert.ToString(TShock.Users.GetUserID(userName)); com.Parameters.Clear(); com.CommandText = "UPDATE Regions SET UserIds=@ids WHERE RegionName=@name AND WorldID=@worldid"; com.AddParameter("@ids", MergedIDs); @@ -435,7 +449,7 @@ namespace TShockAPI.DB public string RegionName { get; set; } public int DisableBuild { get; set; } public string RegionWorldID { get; set; } - public string[] RegionAllowedIDs { get; set; } + public int[] RegionAllowedIDs { get; set; } public Region(Rectangle region, string name, int disablebuild, string RegionWorldIDz) { @@ -476,7 +490,7 @@ namespace TShockAPI.DB for (int i = 0; i < RegionAllowedIDs.Length; i++) { - if (RegionAllowedIDs[i] == ply.UserAccountName) + if (RegionAllowedIDs[i] == ply.UserID) { return true; } diff --git a/TShockAPI/DB/UserManager.cs b/TShockAPI/DB/UserManager.cs index 81d056c0..a1e898b3 100644 --- a/TShockAPI/DB/UserManager.cs +++ b/TShockAPI/DB/UserManager.cs @@ -193,6 +193,32 @@ namespace TShockAPI.DB return returndata; } + public int GetUserID(string username) + { + try + { + using (var com = database.CreateCommand()) + { + com.CommandText = "SELECT * FROM Users WHERE Username=@name"; + com.AddParameter("@name", username.ToLower()); + + using (var reader = com.ExecuteReader()) + { + if (reader.Read()) + { + return reader.Get("ID"); + } + reader.Close(); + } + } + } + catch (Exception ex) + { + Log.ConsoleError("FetchHashedPasswordAndGroup SQL returned an error: " + ex.ToString()); + } + return -1; + } + /// /// Returns a Group for a ip from the database /// diff --git a/TShockAPI/Properties/AssemblyInfo.cs b/TShockAPI/Properties/AssemblyInfo.cs index 8748cf9c..0fa20d8e 100644 --- a/TShockAPI/Properties/AssemblyInfo.cs +++ b/TShockAPI/Properties/AssemblyInfo.cs @@ -35,5 +35,5 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.3.4.0720")] -[assembly: AssemblyFileVersion("2.3.4.0720")] +[assembly: AssemblyVersion("2.3.4.0721")] +[assembly: AssemblyFileVersion("2.3.4.0721")] diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index 2e9d217f..0e2e3bd5 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -50,6 +50,7 @@ namespace TShockAPI public string UserAccountName { get; set; } public bool HasBeenSpammedWithBuildMessage = false; public bool IsLoggedIn = false; + public int UserID = -1; Player FakePlayer = null; public bool RealPlayer