diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index b447700e..24652af5 100644 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -1687,54 +1687,36 @@ namespace TShockAPI case "set": { - if (args.Parameters.Count == 2) + int choice = 0; + if (args.Parameters.Count == 2 && + int.TryParse(args.Parameters[1], out choice) && + choice >= 1 && choice <= 2) { - if (args.Parameters[1] == "1") - { - if (!args.Player.AwaitingTemp2) - { - args.Player.SendMessage("Hit a block to Set Point 1", Color.Yellow); - args.Player.AwaitingTemp1 = true; - } - else - args.Player.SendMessage("Awaiting you to Set Point 2", Color.Yellow); - } - else if (args.Parameters[1] == "2") - { - if (args.Player.TempArea.X != 0) - { - if (!args.Player.AwaitingTemp1) - { - args.Player.SendMessage("Hit a block to Set Point 2", Color.Yellow); - args.Player.AwaitingTemp2 = true; - } - else - args.Player.SendMessage("Awaiting you to Set Point 1", Color.Yellow); - } - else - { - args.Player.SendMessage("You have not set Point 1 yet", Color.Red); - } - } - else - args.Player.SendMessage("Invalid syntax! Proper syntax: /region set [1/2]", Color.Red); + args.Player.SendMessage("Hit a block to Set Point " + choice, Color.Yellow); + args.Player.AwaitingTempPoint = choice; } else + { args.Player.SendMessage("Invalid syntax! Proper syntax: /region set [1/2]", Color.Red); + } break; } case "define": { if (args.Parameters.Count > 1) { - if (!args.Player.TempArea.IsEmpty) + if (!args.Player.TempPoints.Any(p => p == Point.Zero)) { string regionName = String.Join(" ", args.Parameters.GetRange(1, args.Parameters.Count - 1)); - if (TShock.Regions.AddRegion(args.Player.TempArea.X, args.Player.TempArea.Y, - args.Player.TempArea.Width, args.Player.TempArea.Height, - regionName, Main.worldID.ToString())) + var x = Math.Min(args.Player.TempPoints[0].X, args.Player.TempPoints[1].X); + var y = Math.Min(args.Player.TempPoints[0].Y, args.Player.TempPoints[1].Y); + var width = Math.Abs(args.Player.TempPoints[0].X - args.Player.TempPoints[1].X); + var height = Math.Abs(args.Player.TempPoints[0].Y - args.Player.TempPoints[1].Y); + + if (TShock.Regions.AddRegion(x, y, width, height, regionName, Main.worldID.ToString())) { - args.Player.TempArea = Rectangle.Empty; + args.Player.TempPoints[0] = Point.Zero; + args.Player.TempPoints[1] = Point.Zero; args.Player.SendMessage("Set region " + regionName, Color.Yellow); } else @@ -1743,7 +1725,9 @@ namespace TShockAPI } } else + { args.Player.SendMessage("Points not set up yet", Color.Red); + } } else args.Player.SendMessage("Invalid syntax! Proper syntax: /region define [name]", Color.Red); @@ -1791,10 +1775,10 @@ namespace TShockAPI } case "clear": { - args.Player.TempArea = Rectangle.Empty; + args.Player.TempPoints[0] = Point.Zero; + args.Player.TempPoints[1] = Point.Zero; args.Player.SendMessage("Cleared temp area", Color.Yellow); - args.Player.AwaitingTemp1 = false; - args.Player.AwaitingTemp2 = false; + args.Player.AwaitingTempPoint = 0; break; } case "allow": @@ -1803,7 +1787,6 @@ namespace TShockAPI { string playerName = args.Parameters[1]; string regionName = ""; - User playerID; for (int i = 2; i < args.Parameters.Count; i++) { @@ -1816,7 +1799,7 @@ namespace TShockAPI regionName = regionName + " " + args.Parameters[i]; } } - if ((playerID = TShock.Users.GetUserByName(playerName)) != null) + if (TShock.Users.GetUserByName(playerName) != null) { if (TShock.Regions.AddNewUser(regionName, playerName)) { diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index b16331d5..20f092aa 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -41,8 +41,8 @@ namespace TShockAPI.DB var table = new SqlTable("Regions", new SqlColumn("X1", MySqlDbType.Int32), new SqlColumn("Y1", MySqlDbType.Int32), - new SqlColumn("height", MySqlDbType.Int32), new SqlColumn("width", MySqlDbType.Int32), + new SqlColumn("height", MySqlDbType.Int32), new SqlColumn("RegionName", MySqlDbType.VarChar, 50) { Primary = true }, new SqlColumn("WorldID", MySqlDbType.Text), new SqlColumn("UserIds", MySqlDbType.Text), @@ -257,7 +257,8 @@ namespace TShockAPI.DB { try { - database.Query("INSERT INTO Regions VALUES (@0, @1, @2, @3, @4, @5, @6, @7);", tx, ty, height, width, regionname, worldid, "", 1); + database.Query("INSERT INTO Regions (X1, Y1, width, height, RegionName, WorldID, UserIds, Protected) VALUES (@0, @1, @2, @3, @4, @5, @6, @7);", + tx, ty, width, height, regionname, worldid, "", 1); Regions.Add(new Region(new Rectangle(tx, ty, width, height), regionname, true, worldid)); return true; } diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 69617795..33dcab37 100644 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -289,33 +289,13 @@ namespace TShockAPI return true; } - if (args.Player.AwaitingTemp1) + if (args.Player.AwaitingTempPoint > 0) { - args.Player.TempArea.X = x; - args.Player.TempArea.Y = y; - args.Player.SendMessage("Set Temp Point 1", Color.Yellow); + args.Player.TempPoints[args.Player.AwaitingTempPoint - 1].X = x; + args.Player.TempPoints[args.Player.AwaitingTempPoint - 1].Y = y; + args.Player.SendMessage("Set Temp Point " + args.Player.AwaitingTempPoint, Color.Yellow); args.Player.SendTileSquare(x, y); - args.Player.AwaitingTemp1 = false; - return true; - } - - if (args.Player.AwaitingTemp2) - { - if (x > args.Player.TempArea.X && y > args.Player.TempArea.Y) - { - args.Player.TempArea.Width = x - args.Player.TempArea.X; - args.Player.TempArea.Height = y - args.Player.TempArea.Y; - args.Player.SendMessage("Set Temp Point 2", Color.Yellow); - args.Player.SendTileSquare(x, y); - args.Player.AwaitingTemp2 = false; - } - else - { - args.Player.SendMessage("Point 2 must be below and right of Point 1", Color.Yellow); - args.Player.SendMessage("Use /region clear to start again", Color.Yellow); - args.Player.SendTileSquare(x, y); - args.Player.AwaitingTemp2 = false; - } + args.Player.AwaitingTempPoint = 0; return true; } @@ -615,44 +595,6 @@ namespace TShockAPI if (tilex < 0 || tilex >= Main.maxTilesX || tiley < 0 || tiley >= Main.maxTilesY) return false; - if (args.Player.AwaitingName) - { - args.Player.SendMessage("Region Name: " + TShock.Regions.InAreaRegionName(tilex, tiley), Color.Yellow); - args.Player.SendTileSquare(tilex, tiley); - args.Player.AwaitingName = false; - return true; - } - - if (args.Player.AwaitingTemp1) - { - args.Player.TempArea.X = tilex; - args.Player.TempArea.Y = tiley; - args.Player.SendMessage("Set Temp Point 1", Color.Yellow); - args.Player.SendTileSquare(tilex, tiley); - args.Player.AwaitingTemp1 = false; - return true; - } - - if (args.Player.AwaitingTemp2) - { - if (tilex > args.Player.TempArea.X && tiley > args.Player.TempArea.Y) - { - args.Player.TempArea.Width = tilex - args.Player.TempArea.X; - args.Player.TempArea.Height = tiley - args.Player.TempArea.Y; - args.Player.SendMessage("Set Temp Point 2", Color.Yellow); - args.Player.SendTileSquare(tilex, tiley); - args.Player.AwaitingTemp2 = false; - } - else - { - args.Player.SendMessage("Point 2 must be below and right of Point 1", Color.Yellow); - args.Player.SendMessage("Use /region clear to start again", Color.Yellow); - args.Player.SendTileSquare(tilex, tiley); - args.Player.AwaitingTemp2 = false; - } - return true; - } - if (Main.tile[tilex, tiley].type != 0x15 && (!Tools.MaxChests() && Main.tile[tilex, tiley].type != 0)) //Chest { Log.Debug(string.Format("TileKill(TileXY:{0}_{1}, Type:{2})", diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index 98670b06..9cacefe0 100644 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -39,9 +39,8 @@ namespace TShockAPI public bool ReceivedInfo { get; set; } public int Index { get; protected set; } public DateTime LastPvpChange { get; protected set; } - public Rectangle TempArea; - public bool AwaitingTemp1 { get; set; } - public bool AwaitingTemp2 { get; set; } + public Point[] TempPoints = new Point[2]; + public int AwaitingTempPoint { get; set; } public bool AwaitingName { get; set; } public DateTime LastExplosive { get; set; } public DateTime LastTileChangeNotify { get; set; }