diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 02fb5261..9215075c 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -2025,7 +2025,7 @@ namespace TShockAPI try { - TShock.Groups.UpdateGroup(groupName, newParentGroupName, group.Permissions, group.ChatColor); + TShock.Groups.UpdateGroup(groupName, newParentGroupName, group.Permissions, group.ChatColor, group.Suffix, group.Prefix); if (!string.IsNullOrWhiteSpace(newParentGroupName)) args.Player.SendSuccessMessage("Parent of group \"{0}\" set to \"{1}\".", groupName, newParentGroupName); @@ -2047,6 +2047,146 @@ namespace TShockAPI } #endregion return; + case "suffix": + #region Suffix + { + if (args.Parameters.Count < 2) + { + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /group suffix [new suffix]"); + return; + } + + string groupName = args.Parameters[1]; + Group group = TShock.Groups.GetGroupByName(groupName); + if (group == null) + { + args.Player.SendErrorMessage("No such group \"{0}\".", groupName); + return; + } + + if (args.Parameters.Count > 2) + { + string newSuffix = string.Join(" ", args.Parameters.Skip(2)); + + try + { + TShock.Groups.UpdateGroup(groupName, group.ParentName, group.Permissions, group.ChatColor, newSuffix, group.Prefix); + + if (!string.IsNullOrWhiteSpace(newSuffix)) + args.Player.SendSuccessMessage("Suffix of group \"{0}\" set to \"{1}\".", groupName, newSuffix); + else + args.Player.SendSuccessMessage("Removed suffix of group \"{0}\".", groupName); + } + catch (GroupManagerException ex) + { + args.Player.SendErrorMessage(ex.Message); + } + } + else + { + if (!string.IsNullOrWhiteSpace(group.Suffix)) + args.Player.SendSuccessMessage("Suffix of \"{0}\" is \"{1}\".", group.Name, group.Suffix); + else + args.Player.SendSuccessMessage("Group \"{0}\" has no suffix.", group.Name); + } + } + #endregion + return; + case "prefix": + #region Suffix + { + if (args.Parameters.Count < 2) + { + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /group prefix [new prefix]"); + return; + } + + string groupName = args.Parameters[1]; + Group group = TShock.Groups.GetGroupByName(groupName); + if (group == null) + { + args.Player.SendErrorMessage("No such group \"{0}\".", groupName); + return; + } + + if (args.Parameters.Count > 2) + { + string newPrefix = string.Join(" ", args.Parameters.Skip(2)); + + try + { + TShock.Groups.UpdateGroup(groupName, group.ParentName, group.Permissions, group.ChatColor, group.Suffix, newPrefix); + + if (!string.IsNullOrWhiteSpace(newPrefix)) + args.Player.SendSuccessMessage("Prefix of group \"{0}\" set to \"{1}\".", groupName, newPrefix); + else + args.Player.SendSuccessMessage("Removed prefix of group \"{0}\".", groupName); + } + catch (GroupManagerException ex) + { + args.Player.SendErrorMessage(ex.Message); + } + } + else + { + if (!string.IsNullOrWhiteSpace(group.Prefix)) + args.Player.SendSuccessMessage("Prefix of \"{0}\" is \"{1}\".", group.Name, group.Prefix); + else + args.Player.SendSuccessMessage("Group \"{0}\" has no prefix.", group.Name); + } + } + #endregion + return; + case "color": + #region Suffix + { + if (args.Parameters.Count < 2 || args.Parameters.Count > 3) + { + args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /group color [new color(000,000,000)]"); + return; + } + + string groupName = args.Parameters[1]; + Group group = TShock.Groups.GetGroupByName(groupName); + if (group == null) + { + args.Player.SendErrorMessage("No such group \"{0}\".", groupName); + return; + } + + if (args.Parameters.Count == 3) + { + string newColor = args.Parameters[2]; + + String[] parts = newColor.Split(','); + byte r; + byte g; + byte b; + if (parts.Length == 3 && byte.TryParse(parts[0], out r) && byte.TryParse(parts[1], out g) && byte.TryParse(parts[2], out b)) + { + try + { + TShock.Groups.UpdateGroup(groupName, group.ParentName, group.Permissions, newColor, group.Suffix, group.Prefix); + + args.Player.SendSuccessMessage("Color of group \"{0}\" set to \"{1}\".", groupName, newColor); + } + catch (GroupManagerException ex) + { + args.Player.SendErrorMessage(ex.Message); + } + } + else + { + args.Player.SendErrorMessage("Invalid syntax for color, expected \"rrr,ggg,bbb\""); + } + } + else + { + args.Player.SendSuccessMessage("Color of \"{0}\" is \"{1}\".", group.Name, group.ChatColor); + } + } + #endregion + return; case "del": #region Delete group { diff --git a/TShockAPI/DB/GroupManager.cs b/TShockAPI/DB/GroupManager.cs index 0a610c70..d6d03528 100644 --- a/TShockAPI/DB/GroupManager.cs +++ b/TShockAPI/DB/GroupManager.cs @@ -181,7 +181,7 @@ namespace TShockAPI.DB /// parent of group /// permissions /// chatcolor - public void UpdateGroup(string name, string parentname, string permissions, string chatcolor) + public void UpdateGroup(string name, string parentname, string permissions, string chatcolor, string suffix, string prefix) { Group group = GetGroupByName(name); if (group == null) @@ -210,13 +210,17 @@ namespace TShockAPI.DB // Ensure any group validation is also persisted to the DB. var newGroup = new Group(name, parent, chatcolor, permissions); - string query = "UPDATE GroupList SET Parent=@0, Commands=@1, ChatColor=@2 WHERE GroupName=@3"; - if (database.Query(query, parentname, newGroup.Permissions, string.Format("{0},{1},{2}", newGroup.R, newGroup.G, newGroup.B), name) != 1) + newGroup.Prefix = prefix; + newGroup.Suffix = suffix; + string query = "UPDATE GroupList SET Parent=@0, Commands=@1, ChatColor=@2, Suffix=@3, Prefix=@4 WHERE GroupName=@5"; + if (database.Query(query, parentname, newGroup.Permissions, newGroup.ChatColor, suffix, prefix, name) != 1) throw new GroupManagerException(string.Format("Failed to update group \"{0}\".", name)); group.ChatColor = chatcolor; group.Permissions = permissions; group.Parent = parent; + group.Prefix = prefix; + group.Suffix = suffix; } #if COMPAT_SIGS diff --git a/TShockAPI/Group.cs b/TShockAPI/Group.cs index 7aa25b6f..32d8272d 100644 --- a/TShockAPI/Group.cs +++ b/TShockAPI/Group.cs @@ -70,11 +70,11 @@ namespace TShockAPI /// /// The chat color of the group. - /// Returns "255255255", sets "255,255,255" + /// Returns "255,255,255", sets "255,255,255" /// public string ChatColor { - get { return string.Format("{0}{1}{2}", R.ToString("X2"), G.ToString("X2"), B.ToString("X2")); } + get { return string.Format("{0},{1},{2}", R.ToString("D3"), G.ToString("D3"), B.ToString("D3")); } set { if (null != value) diff --git a/TShockAPI/Rest/RestManager.cs b/TShockAPI/Rest/RestManager.cs index 7ab44715..eeea7150 100644 --- a/TShockAPI/Rest/RestManager.cs +++ b/TShockAPI/Rest/RestManager.cs @@ -719,7 +719,7 @@ namespace TShockAPI var permissions = (null == parameters["permissions"]) ? group.Permissions : parameters["permissions"]; try { - TShock.Groups.UpdateGroup(group.Name, parent, permissions, chatcolor); + TShock.Groups.UpdateGroup(group.Name, parent, permissions, chatcolor, group.Suffix, group.Prefix); } catch (Exception e) {