From dd3883b3930bad6bd03669a31bf2b77e09001d0f Mon Sep 17 00:00:00 2001 From: PhoenixICE Date: Fri, 11 Oct 2013 21:12:47 +1100 Subject: [PATCH] ItemBan Use Group Parenting Made Item bans now abide by group parenting. --- TShockAPI/DB/ItemManager.cs | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/TShockAPI/DB/ItemManager.cs b/TShockAPI/DB/ItemManager.cs index b95bd886..5c631242 100644 --- a/TShockAPI/DB/ItemManager.cs +++ b/TShockAPI/DB/ItemManager.cs @@ -196,13 +196,28 @@ namespace TShockAPI.DB return Name == other.Name; } - public bool HasPermissionToUseItem(TSPlayer ply) - { - if (ply == null) - return false; - return AllowedGroups.Contains(ply.Group.Name); - // could add in the other permissions in this class instead of a giant if switch. - } + public bool HasPermissionToUseItem(TSPlayer ply) + { + if (ply == null) + return false; + var cur = ply.Group; + var traversed = new List(); + while (cur != null) + { + if (AllowedGroups.Contains(cur.Name)) + { + return true; + } + if (traversed.Contains(cur)) + { + throw new InvalidOperationException("Infinite group parenting ({0})".SFormat(cur.Name)); + } + traversed.Add(cur); + cur = cur.Parent; + } + return false; + // could add in the other permissions in this class instead of a giant if switch. + } public void SetAllowedGroups(String groups) {