From f7edbe55d6da686ad40f2d4d191f5db6a5bf61f2 Mon Sep 17 00:00:00 2001 From: CoderCow Date: Thu, 27 Jun 2013 10:46:59 +0200 Subject: [PATCH] Fixed /region allow adding an already existing user id to the database multiple times. --- TShockAPI/DB/RegionManager.cs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index a0382a2e..a9cc2739 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -381,30 +381,36 @@ namespace TShockAPI.DB return false; } - public bool AddNewUser(string regionName, String userName) + public bool AddNewUser(string regionName, string userName) { try { - string MergedIDs = string.Empty; + string mergedIDs = string.Empty; using ( - var reader = database.QueryReader("SELECT * FROM Regions WHERE RegionName=@0 AND WorldID=@1", regionName, + var reader = database.QueryReader("SELECT UserIds FROM Regions WHERE RegionName=@0 AND WorldID=@1", regionName, Main.worldID.ToString())) { if (reader.Read()) - MergedIDs = reader.Get("UserIds"); + mergedIDs = reader.Get("UserIds"); } - if (string.IsNullOrEmpty(MergedIDs)) - MergedIDs = Convert.ToString(TShock.Users.GetUserID(userName)); - else - MergedIDs = MergedIDs + "," + Convert.ToString(TShock.Users.GetUserID(userName)); + string userIdToAdd = Convert.ToString(TShock.Users.GetUserID(userName)); + string[] ids = mergedIDs.Split(','); + // Is the user already allowed to the region? + if (ids.Contains(userIdToAdd)) + return true; - int q = database.Query("UPDATE Regions SET UserIds=@0 WHERE RegionName=@1 AND WorldID=@2", MergedIDs, + if (string.IsNullOrEmpty(mergedIDs)) + mergedIDs = userIdToAdd; + else + mergedIDs = string.Concat(mergedIDs, ",", userIdToAdd); + + int q = database.Query("UPDATE Regions SET UserIds=@0 WHERE RegionName=@1 AND WorldID=@2", mergedIDs, regionName, Main.worldID.ToString()); foreach (var r in Regions) { if (r.Name == regionName && r.WorldID == Main.worldID.ToString()) - r.setAllowedIDs(MergedIDs); + r.setAllowedIDs(mergedIDs); } return q != 0; }