diff --git a/TShockAPI/DB/GroupManager.cs b/TShockAPI/DB/GroupManager.cs index 7b15da46..ce9e911a 100644 --- a/TShockAPI/DB/GroupManager.cs +++ b/TShockAPI/DB/GroupManager.cs @@ -107,7 +107,7 @@ namespace TShockAPI.DB comms = comms + ","; comms = comms + info[i].Trim(); } - com.AddParameter("@groupname", info[0].Trim()); + com.AddParameter("@groupname", info[0].Trim().ToString()); com.AddParameter("@commands", comms); com.AddParameter("@order", hasOrder ? info[info.Length-1] : "0"); com.ExecuteNonQuery(); @@ -123,8 +123,6 @@ namespace TShockAPI.DB File.Delete(file2); File.Move(file, file2); } - - LoadPermisions(); } } @@ -133,6 +131,7 @@ namespace TShockAPI.DB if (group == "superadmin") return true; + try { using (var com = database.CreateCommand()) @@ -171,23 +170,19 @@ namespace TShockAPI.DB while (reader.Read()) { Group group = null; - string groupname = reader.Get("GroupName"); - int order = Int32.Parse(reader.Get("OrderBy")); + string groupname = reader.Get("GroupName"); group = new Group(groupname); - group.Order = order; //Inherit Given commands - foreach (string perm in reader.Get("Commands").Split(',')) + String[] commands = reader.Get("Commands").Split(','); + for( int i = 0; i < commands.Length; i++ ) { - group.AddPermission(perm); + group.AddPermission(commands[i].Trim()); } - groups.Add(group); - - reader.Close(); } } - + /** ORDER BY IS DUMB //Inherit all commands from group below in order, unless Order is 0 (unique groups anyone) foreach (Group group in groups) { @@ -201,7 +196,7 @@ namespace TShockAPI.DB } } } - } + }*/ } } catch (Exception ex) diff --git a/TShockAPI/Group.cs b/TShockAPI/Group.cs index 7ac12ede..6016a87d 100644 --- a/TShockAPI/Group.cs +++ b/TShockAPI/Group.cs @@ -55,20 +55,27 @@ namespace TShockAPI public void AddPermission(string permission) { - recursePermissions(permission); + recursePermissions(permission, new List()); } - public void recursePermissions( string permission ){ - if( TShock.Groups.GroupExists( permission ) ) + public void recursePermissions( string permission, List used){ + if (used.Contains(permission)) { - Group g = Tools.GetGroup( permission ); - foreach( string perm in g.permissions ) + return; + } + else if( TShock.Groups.GroupExists( permission ) ) + { + used.Add(permission); + Group g = Tools.GetGroup(permission); + foreach (string perm in g.permissions) { - recursePermissions( perm ); + recursePermissions(perm, used); } } else + { permissions.Add(permission); + } } } diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 63311e7b..17c36c7d 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -172,6 +172,7 @@ namespace TShockAPI Warps = new WarpManager(DB); Regions = new RegionManager(DB); Groups = new GroupManager(DB); + Groups.LoadPermisions(); Users = new UserManager(DB); Itembans = new ItemManager(DB);