diff --git a/TShockAPI/DB/GroupManager.cs b/TShockAPI/DB/GroupManager.cs
index 1772dc9c..c817705d 100755
--- a/TShockAPI/DB/GroupManager.cs
+++ b/TShockAPI/DB/GroupManager.cs
@@ -110,6 +110,45 @@ namespace TShockAPI.DB
return 1 == ret.Count() ? ret.ElementAt(0) : null;
}
+ ///
+ /// Adds group with name and permissions if it does not exist.
+ ///
+ /// name of group
+ /// parent of group
+ /// permissions
+ /// chatcolor
+ public void AddGroup(String name, string parentname, String permissions, String chatcolor)
+ {
+ if (GroupExists(name))
+ {
+ throw new GroupExistsException(name);
+ }
+
+ var group = new Group(name, null, chatcolor);
+ group.Permissions = permissions;
+ if (!string.IsNullOrWhiteSpace(parentname))
+ {
+ var parent = groups.FirstOrDefault(gp => gp.Name == parentname);
+ if (parent == null || name == parentname)
+ {
+ var error = "Invalid parent {0} for group {1}".SFormat(parentname, group.Name);
+ TShock.Log.ConsoleError(error);
+ throw new GroupManagerException(error);
+ }
+ group.Parent = parent;
+ }
+
+ string query = (TShock.Config.StorageType.ToLower() == "sqlite")
+ ? "INSERT OR IGNORE INTO GroupList (GroupName, Parent, Commands, ChatColor) VALUES (@0, @1, @2, @3);"
+ : "INSERT IGNORE INTO GroupList SET GroupName=@0, Parent=@1, Commands=@2, ChatColor=@3";
+ if (database.Query(query, name, parentname, permissions, chatcolor) == 1)
+ {
+ groups.Add(group);
+ }
+ else
+ throw new GroupManagerException("Failed to add group '" + name + ".'");
+ }
+
///
/// Adds group with name and permissions if it does not exist.
///
@@ -118,6 +157,7 @@ namespace TShockAPI.DB
/// permissions
/// chatcolor
/// exceptions true indicates use exceptions for errors false otherwise
+ [Obsolete("Use AddGroup(name, parentname, permissions, chatcolor) instead.")]
public String AddGroup(String name, string parentname, String permissions, String chatcolor = Group.defaultChatColor, bool exceptions = false)
{
if (GroupExists(name))