public static TlpdEntity Parse(string tlpd, bool allowJustOpen, out int length) { if (!tlpd.StartsWith("[tlpd#")) { // reject it immediately length = 0; return TlpdEntity.InvalidEntity; } // find end of tlpd string int closebracket = tlpd.IndexOf("]"); if (closebracket < 0) { // incomplete tag, reject length = 0; return TlpdEntity.InvalidEntity; } // find closing tag if required TlpdEntity entity = new TlpdEntity(); int closingtag = tlpd.IndexOf("[/tlpd]"); if (closingtag < 0) { length = closebracket + 1; if (!allowJustOpen) { // incomplete tag, reject it now return TlpdEntity.InvalidEntity; } } else { length = closingtag + "[/tlpd]".Length; if (closebracket > closingtag) { length = closebracket; return TlpdEntity.InvalidEntity; } entity.Name = tlpd.Substring(closebracket + 1, closingtag - (closebracket + 1)); } // get tag bits string param = tlpd.Substring(0, closebracket); param = param.Substring("[tlpd#".Length); string[] tags = param.Split('#'); if (tags.Length < 2) { // not enough arguments, reject it return TlpdEntity.InvalidEntity; } entity.Id = tags[1]; switch (tags[0]) { case "maps": entity.Type = TlpdEntityType.Map; if (tags.Length > 2) entity.Database = tags[2]; if (tags.Length > 3) entity.Race = tags[3]; break; case "players": // players must have a race if (tags.Length < 3) return TlpdEntity.InvalidEntity; entity.Type = TlpdEntityType.Player; entity.Race = tags[2]; if (tags.Length > 3) entity.Database = tags[3]; break; default: return TlpdEntity.InvalidEntity; } // [tlpd#maps#id#db#tileset]name[/tlpd] // [tlpd#players#id#R#db]name[/tlpd] return entity; }
private Style ColourPlayer(TlpdEntity player) { return svc.playerStyle; //switch (player.Race) //{ // case "T": return svc.terranStyle; // case "Z": return svc.zergStyle; // case "P": return svc.protossStyle; // case "R": return svc.randomStyle; //} return null; }