From f4b4d041d96f19409b2e07eda3a89a9d8ffeedfe Mon Sep 17 00:00:00 2001 From: Lucas Nicodemus Date: Thu, 14 Jul 2011 03:31:25 -0600 Subject: [PATCH] Adding more misc functions for future use. --- TShockAPI/DB/RegionManager.cs | 51 ++++++++++++++++++++++++++++++++--- TShockAPI/GetDataHandlers.cs | 4 +-- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/TShockAPI/DB/RegionManager.cs b/TShockAPI/DB/RegionManager.cs index ff7f15d0..ecddbfaa 100644 --- a/TShockAPI/DB/RegionManager.cs +++ b/TShockAPI/DB/RegionManager.cs @@ -167,8 +167,8 @@ namespace TShockAPI.DB return false; } } - [Obsolete("Use Region.* functions for more granular control over what is returned.")] - public bool InProtectedArea(int X, int Y, User user) + [Obsolete("Use CanBuild and InArea instead.")] + public bool InProtectedAreaAndCantBuild(int X, int Y, User user) { Rectangle r = new Rectangle(X, Y, 0, 0); for (int i = 0; i < RegionArray.Length; i++) @@ -187,6 +187,51 @@ namespace TShockAPI.DB return true; } + public bool CanBuild(int x, int y, User user) + { + for (int i = 0; i < RegionArray.Length; i++) + { + if (RegionArray[i].InArea(new Rectangle(x, y, 0, 0)) && RegionArray[i].HasPermissionToBuildInRegion(new Rectangle(x, y, 0, 0), user)) + { + return true; + } + } + return false; + } + + public bool CanBuild(int x, int y, TSPlayer ply) + { + User user = TShock.Users.GetUserByName(ply.TPlayer.name); + if (!ply.Group.HasPermission("canbuild")) + { + return false; + } + if (ply.Group.HasPermission("editspawn")) + { + return true; + } + for (int i = 0; i < RegionArray.Length; i++) + { + if (RegionArray[i].InArea(new Rectangle(x, y, 0, 0)) && RegionArray[i].HasPermissionToBuildInRegion(new Rectangle(x, y, 0, 0), user)) + { + return true; + } + } + return false; + } + + public bool InArea(int x, int y, User user) + { + for (int i = 0; i < RegionArray.Length; i++) + { + if (RegionArray[i].InArea(new Rectangle(x, y, 0, 0))) + { + return true; + } + } + return false; + } + public static List ListIDs(string MergedIDs) { List SplitIDs = new List(); @@ -291,7 +336,7 @@ namespace TShockAPI.DB RegionWorldID = string.Empty; } - public bool InProtectedArea(Rectangle point, User user) + public bool InArea(Rectangle point) { if (RegionArea.Intersects(point)) { diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 632d81e1..b0418d55 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -278,7 +278,7 @@ namespace TShockAPI return true; } } - if (!args.Player.Group.HasPermission("editspawn") && TShock.Regions.InProtectedArea(x, y, TShock.Users.GetUserByIP(args.Player.IP))) + if (!args.Player.Group.HasPermission("editspawn") && TShock.Regions.InProtectedAreaAndCantBuild(x, y, TShock.Users.GetUserByIP(args.Player.IP))) { if ((DateTime.UtcNow - args.Player.LastTileChangeNotify).TotalMilliseconds > 1000) { @@ -537,7 +537,7 @@ namespace TShockAPI args.Player.SendTileSquare(tilex, tiley); return true; } - if (!args.Player.Group.HasPermission("editspawn") && TShock.Regions.InProtectedArea(tilex, tiley, TShock.Users.GetUserByName(args.Player.Name))) + if (!args.Player.Group.HasPermission("editspawn") && TShock.Regions.InProtectedAreaAndCantBuild(tilex, tiley, TShock.Users.GetUserByName(args.Player.Name))) { args.Player.SendMessage("Region protected from changes.", Color.Red); args.Player.SendTileSquare(tilex, tiley);