public CategoryEntry(CategoryEntry parent, CategoryLine[] lines, ref int index) { m_Parent = parent; string text = lines[index].Text; int start = text.IndexOf('('); if (start < 0) { throw new FormatException(String.Format("Input string not correctly formatted ('{0}')", text)); } m_Title = text.Substring(0, start).Trim(); int end = text.IndexOf(')', ++start); if (end < start) { throw new FormatException(String.Format("Input string not correctly formatted ('{0}')", text)); } text = text.Substring(start, end - start); string[] split = text.Split(';'); ArrayList list = new ArrayList(); for (int i = 0; i < split.Length; ++i) { Type type = ScriptCompiler.FindTypeByName(split[i].Trim()); if (type == null) { Console.WriteLine("Match type not found ('{0}')", split[i].Trim()); } else { list.Add(type); } } m_Matches = (Type[])list.ToArray(typeof(Type)); list.Clear(); int ourIndentation = lines[index].Indentation; ++index; while (index < lines.Length && lines[index].Indentation > ourIndentation) { list.Add(new CategoryEntry(this, lines, ref index)); } m_SubCategories = (CategoryEntry[])list.ToArray(typeof(CategoryEntry)); list.Clear(); m_Matched = list; }
public static void RecurseFindCategories(CategoryEntry ce, ArrayList list) { list.Add(ce); for (int i = 0; i < ce.SubCategories.Length; ++i) { RecurseFindCategories(ce.SubCategories[i], list); } }
public static void Load() { ArrayList types = new ArrayList(); AddTypes(Core.Assembly, types); for (int i = 0; i < ScriptCompiler.Assemblies.Length; ++i) { AddTypes(ScriptCompiler.Assemblies[i], types); } m_RootItems = Load(types, "Data/items.cfg"); m_RootMobiles = Load(types, "Data/mobiles.cfg"); }
public static void Export(CategoryEntry ce, string fileName, string title) { XmlTextWriter xml = new XmlTextWriter(fileName, System.Text.Encoding.UTF8); xml.Indentation = 1; xml.IndentChar = '\t'; xml.Formatting = Formatting.Indented; xml.WriteStartDocument(true); RecurseExport(xml, ce); xml.Flush(); xml.Close(); }
private static CategoryEntry Load(ArrayList types, string config) { CategoryLine[] lines = CategoryLine.Load(config); if (lines.Length > 0) { int index = 0; CategoryEntry root = new CategoryEntry(null, lines, ref index); Fill(root, types); return(root); } return(new CategoryEntry()); }
private static CategoryEntry GetDeepestMatch(CategoryEntry root, Type type) { if (!root.IsMatch(type)) { return(null); } for (int i = 0; i < root.SubCategories.Length; ++i) { CategoryEntry check = GetDeepestMatch(root.SubCategories[i], type); if (check != null) { return(check); } } return(root); }
private static void Fill(CategoryEntry root, ArrayList list) { for (int i = 0; i < list.Count; ++i) { Type type = (Type)list[i]; CategoryEntry match = GetDeepestMatch(root, type); if (match == null) { continue; } try { match.Matched.Add(new CategoryTypeEntry(type)); } catch { } } }
public static void RecurseExport(XmlTextWriter xml, CategoryEntry ce) { xml.WriteStartElement("category"); xml.WriteAttributeString("title", ce.Title); ArrayList subCats = new ArrayList(ce.SubCategories); subCats.Sort(new CategorySorter()); for (int i = 0; i < subCats.Count; ++i) { RecurseExport(xml, (CategoryEntry)subCats[i]); } ce.Matched.Sort(new CategorySorter()); for (int i = 0; i < ce.Matched.Count; ++i) { CategoryTypeEntry cte = (CategoryTypeEntry)ce.Matched[i]; xml.WriteStartElement("object"); xml.WriteAttributeString("type", cte.Type.ToString()); object obj = cte.Object; if (obj is Item) { Item item = (Item)obj; int itemID = item.ItemID; if (item is BaseAddon && ((BaseAddon)item).Components.Count == 1) { itemID = ((AddonComponent)(((BaseAddon)item).Components[0])).ItemID; } if (itemID > TileData.MaxItemValue) { itemID = 1; } xml.WriteAttributeString("gfx", XmlConvert.ToString(itemID)); int hue = item.Hue & 0x7FFF; if ((hue & 0x4000) != 0) { hue = 0; } if (hue != 0) { xml.WriteAttributeString("hue", XmlConvert.ToString(hue)); } item.Delete(); } else if (obj is Mobile) { Mobile mob = (Mobile)obj; int itemID = ShrinkTable.Lookup(mob, 1); xml.WriteAttributeString("gfx", XmlConvert.ToString(itemID)); int hue = mob.Hue & 0x7FFF; if ((hue & 0x4000) != 0) { hue = 0; } if (hue != 0) { xml.WriteAttributeString("hue", XmlConvert.ToString(hue)); } mob.Delete(); } xml.WriteEndElement(); } xml.WriteEndElement(); }