static bool ValidColor(char c) { return(Colors.IsStandard(c) || Colors.IsDefined(c)); }
static void ParseProperty(string key, string value, ref Group temp) { string raw = value; // for prefix we need to keep space value = value.Trim(); if (key.CaselessEq("rankname")) { if (temp != null) { AddGroup(ref temp); } value = value.Replace(" ", ""); if (value.CaselessEq("op")) { Logger.Log(LogType.Warning, "Cannot have a rank named \"{0}\", this rank is hard-coded.", value); } else if (Group.Find(value) == null) { temp = new Group(); temp.Name = value; } else { Logger.Log(LogType.Warning, "Cannot add the rank {0} twice", value); } return; } if (temp == null) { return; } switch (key.ToLower()) { case "permission": int perm; if (!int.TryParse(value, out perm)) { Logger.Log(LogType.Warning, "Invalid permission: " + value); temp = null; } if (perm > 120 || perm < -50) { Logger.Log(LogType.Warning, "Permission must be between -50 and 120 for ranks"); temp = null; } else if (Group.Find((LevelPermission)perm) == null) { temp.Permission = (LevelPermission)perm; } else { Logger.Log(LogType.Warning, "Cannot have 2 ranks set at permission level " + value); temp = null; } break; case "limit": temp.DrawLimit = int.Parse(value); break; case "maxundo": temp.MaxUndo = int.Parse(value); break; case "genvolume": temp.GenVolume = int.Parse(value); break; case "afkkicked": temp.AfkKicked = bool.Parse(value); break; case "afkkickminutes": temp.AfkKickMinutes = int.Parse(value); break; case "color": char col; char.TryParse(value, out col); if (Colors.IsDefined(col)) { temp.Color = "&" + col; } else { Logger.Log(LogType.Warning, "Invalid color code: " + value); temp = null; } break; case "filename": if (value.Contains("\\") || value.Contains("/")) { Logger.Log(LogType.Warning, "Invalid filename: " + value); temp = null; } else { temp.filename = value; } break; case "motd": temp.MOTD = value; break; case "osmaps": temp.OverseerMaps = byte.Parse(value); break; case "prefix": if (!String.IsNullOrEmpty(value)) { temp.Prefix = raw.TrimStart(); } if (Colors.Strip(temp.Prefix).Length > 3) { Logger.Log(LogType.Warning, "Prefixes may only consist of color codes and three letters"); temp.Prefix = temp.Prefix.Substring(0, 3); } break; case "copyslots": temp.CopySlots = byte.Parse(value); break; } }