diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 0c8a93f0..41b11c18 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1443,7 +1443,7 @@ namespace TShockAPI int.TryParse(args.Parameters[1], out page); var sb = new StringBuilder(); - List Regions = TShock.Regions.ListAllRegions(); + List Regions = TShock.Regions.ListAllRegions(); if (Regions.Count > (15 * (page - 1))) { diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index cf7bd94b..f99a8cbd 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -35,6 +35,8 @@ namespace TShockAPI.DB { public static List Regions = new List(); + public Region[] RegionArray; + private IDbConnection database; public RegionManager(IDbConnection db) @@ -45,15 +47,54 @@ namespace TShockAPI.DB { if (TShock.Config.StorageType.ToLower() == "sqlite") com.CommandText = - "CREATE TABLE IF NOT EXISTS 'Regions' ('X1' NUMERIC, 'Y1' NUMERIC, 'X2' NUMERIC, 'Y2' NUMERIC, 'RegionName' TEXT PRIMARY KEY, 'WorldID' TEXT, 'UserIds' TEXT, 'Protected' NUMERIC);"; + "CREATE TABLE IF NOT EXISTS 'Regions' ('X1' NUMERIC, 'Y1' NUMERIC, 'height' NUMERIC, 'width' NUMERIC, 'RegionName' TEXT PRIMARY KEY, 'WorldID' TEXT, 'UserIds' TEXT, 'Protected' NUMERIC);"; else if (TShock.Config.StorageType.ToLower() == "mysql") com.CommandText = - "CREATE TABLE IF NOT EXISTS Regions (X1 INT(11), Y1 INT(11), X2 INT(11), Y2 INT(11), RegionName VARCHAR(255) PRIMARY, WorldID VARCHAR(255), UserIds VARCHAR(255), Protected INT(1));"; + "CREATE TABLE IF NOT EXISTS Regions (X1 INT(11), Y1 INT(11), height INT(11), width INT(11), RegionName VARCHAR(255) PRIMARY, WorldID VARCHAR(255), UserIds VARCHAR(255), Protected INT(1));"; com.ExecuteNonQuery(); } } + public void ReloadAllRegions() + { + try + { + using (var com = database.CreateCommand()) + { + com.CommandText = "SELECT * FROM Regions WHERE WorldID=@worldid"; + com.AddParameter("@worldid", Main.worldID.ToString()); + using (var reader = com.ExecuteReader()) + { + int regionCount = reader.RecordsAffected; + RegionArray = new Region[regionCount]; + int iterationCounter = 0; + while (reader.Read()) + { + int X1 = reader.Get("X1"); + int Y1 = reader.Get("Y1"); + int height = reader.Get("height"); + int width = reader.Get("width"); + int Protected = reader.Get("Protected"); + string MergedIDs = DbExt.Get(reader, "UserIds"); + string name = DbExt.Get(reader, "RegionName"); + + string[] SplitIDs = MergedIDs.Split(','); + + Region r = new Region(new Rectangle(X1, Y1, width, height), name, Protected, Main.worldID.ToString()); + RegionArray[iterationCounter] = r; + iterationCounter++; + } + reader.Close(); + } + } + } + catch (Exception ex) + { + Log.Error(ex.ToString()); + } + } + public bool AddRegion(int tx, int ty, int width, int height, string regionname, string worldid) { try @@ -141,17 +182,17 @@ namespace TShockAPI.DB { int X1 = reader.Get("X1"); int Y1 = reader.Get("Y1"); - int X2 = reader.Get("X2"); - int Y2 = reader.Get("Y2"); + int height = reader.Get("height"); + int width = reader.Get("width"); int Protected = reader.Get("Protected"); string MergedIDs = DbExt.Get(reader, "UserIds"); string[] SplitIDs = MergedIDs.Split(','); if (X >= X1 && - X <= X2 && + X <= height && Y >= Y1 && - Y <= Y2 && + Y <= width && Protected == 1) { if (!SplitIDs.Contains(user.ID.ToString())) @@ -237,7 +278,7 @@ namespace TShockAPI.DB using (var reader = com.ExecuteReader()) { while (reader.Read()) - Regions.Add(new Region(new Rectangle(reader.Get("X1"), reader.Get("Y1"), reader.Get("X2"), reader.Get("Y2")), reader.Get("RegionName"), reader.Get("Protected"), reader.Get("WorldID"))); + Regions.Add(new Region(new Rectangle(reader.Get("X1"), reader.Get("Y1"), reader.Get("height"), reader.Get("width")), reader.Get("RegionName"), reader.Get("Protected"), reader.Get("WorldID"))); reader.Close(); } } @@ -256,14 +297,14 @@ namespace TShockAPI.DB public string RegionName { get; set; } public int DisableBuild { get; set; } public string RegionWorldID { get; set; } - public string RegionAllowedIDs { get; set; } + public string[] RegionAllowedIDs { get; set; } - public Region(Rectangle region, string name, int disablebuild, string worldname) + public Region(Rectangle region, string name, int disablebuild, string RegionWorldIDz) { RegionArea = region; RegionName = name; DisableBuild = disablebuild; - RegionWorldID = worldname; + RegionWorldID = RegionWorldIDz; } public Region() diff --git a/TShockAPI/Properties/AssemblyInfo.cs b/TShockAPI/Properties/AssemblyInfo.cs index ad10961a..591bc76d 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.0713")] -[assembly: AssemblyFileVersion("2.3.4.0713")] +[assembly: AssemblyVersion("2.3.4.0714")] +[assembly: AssemblyFileVersion("2.3.4.0714")] diff --git a/TShockAPI/RegionStore.cs b/TShockAPI/RegionStore.cs deleted file mode 100644 index 4a67442b..00000000 --- a/TShockAPI/RegionStore.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using TShockAPI.DB; - -namespace TShockAPI -{ - class RegionStore - { - public int X1; - public int X2; - public int Y1; - public int Y2; - public int IsProtected; - public string[] UserIDs; - public RegionStore(string tX1, string tX2, string tY1, string tY2, int tIsProtected, string[] tUserIDs) - { - X1 = Convert.ToInt32(tX1); - X2 = Convert.ToInt32(tX2); - Y1 = Convert.ToInt32(tY1); - Y2 = Convert.ToInt32(tY2); - IsProtected = tIsProtected; - UserIDs = tUserIDs; - } - - public RegionStore(int tX1, int tX2, int tY1, int tY2, int tIsProtected, string[] tUserIDs) - { - X1 = Convert.ToInt32(tX1); - X2 = Convert.ToInt32(tX2); - Y1 = Convert.ToInt32(tY1); - Y2 = Convert.ToInt32(tY2); - IsProtected = tIsProtected; - UserIDs = tUserIDs; - } - - public RegionStore(string tX1, string tX2, string tY1, string tY2) - { - X1 = Convert.ToInt32(tX1); - X2 = Convert.ToInt32(tX2); - Y1 = Convert.ToInt32(tY1); - Y2 = Convert.ToInt32(tY2); - } - - public RegionStore(int tX1, int tX2, int tY1, int tY2) - { - X1 = Convert.ToInt32(tX1); - X2 = Convert.ToInt32(tX2); - Y1 = Convert.ToInt32(tY1); - Y2 = Convert.ToInt32(tY2); - } - - public bool InProtectedArea(int x, int y, User user) - { - if (x >= X1 && - x <= X2 && - y >= Y1 && - y <= Y2 && - IsProtected == 1) - { - if (!UserIDs.Contains(user.ID.ToString())) - return true; - } - return false; - } - } -} diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj index 5f2addef..6cef2940 100644 --- a/TShockAPI/TShockAPI.csproj +++ b/TShockAPI/TShockAPI.csproj @@ -100,7 +100,6 @@ - True diff --git a/TShockAPI/Tools.cs b/TShockAPI/Tools.cs index 9627ab23..f959ee45 100755 --- a/TShockAPI/Tools.cs +++ b/TShockAPI/Tools.cs @@ -501,7 +501,7 @@ namespace TShockAPI using (var sha = new SHA512CryptoServiceProvider()) { var bytes = sha.ComputeHash(Encoding.ASCII.GetBytes(password)); - return bytes.Aggregate("", (s, b) => s + b.ToString("X2")); + return bytes.Aggregate("", (s, b) => s + b.ToString("height")); } }