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 CategoryEntry(CategoryEntry parent, string title, CategoryEntry[] subCats) { Parent = parent; Title = title; SubCategories = subCats; Matches = Array.Empty <Type>(); Matched = new ArrayList(); }
public static void RebuildCategorization_OnCommand(CommandEventArgs e) { CategoryEntry root = new CategoryEntry(null, "Add Menu", new CategoryEntry[] { Items, Mobiles }); Export(root, "Data/objects.xml", "Objects"); e.Mobile.SendMessage("Categorization menu rebuilt."); }
public static void RebuildCategorization_OnCommand( CommandEventArgs e ) { CategoryEntry root = new CategoryEntry( null, "Add Menu", new CategoryEntry[]{ Items, Mobiles } ); Export( root, "Data/objects.xml" ); e.Mobile.SendMessage( "Categorization menu rebuilt." ); }
public CategoryEntry(CategoryEntry parent, string title, CategoryEntry[] subCats) { m_Parent = parent; m_Title = title; m_SubCategories = subCats; m_Matches = new Type[0]; m_Matched = new ArrayList(); }
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 RebuildCategorization_OnCommand(CommandEventArgs e) { var root = new CategoryEntry(null, "Add Menu", new[] { Items, Mobiles }); var ceList = new List <CategoryEntry>(); ceList.AddRange(root.SubCategories); Export(ceList, "Data/objects.json"); e.Mobile.SendMessage("Categorization menu rebuilt."); }
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 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 Load() { List <Type> types = new List <Type>(); AddTypes(Core.Assembly, types); for (int i = 0; i < AssemblyHandler.Assemblies.Length; ++i) { AddTypes(AssemblyHandler.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, Encoding.UTF8); xml.Indentation = 1; xml.IndentChar = '\t'; xml.Formatting = Formatting.Indented; xml.WriteStartDocument(true); RecurseExport(xml, ce); xml.Flush(); xml.Close(); }
public static void Export( CategoryEntry ce, string fileName ) { 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 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 CategoryEntry Load(List <Type> 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 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 { } } }
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, List <Type> list) { for (int i = 0; i < list.Count; ++i) { Type type = list[i]; CategoryEntry match = GetDeepestMatch(root, type); if (match == null) { continue; } try { match.Matched.Add(new CategoryTypeEntry(type)); } catch { // ignored } } }
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 (Exception e) { Diagnostics.ExceptionLogging.LogException(e); } } }
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 >= 0x4000) { 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(); }
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(); }
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(); }
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 RecurseExport(XmlTextWriter xml, CategoryEntry ce) { xml.WriteStartElement("category"); xml.WriteAttributeString("title", ce.Title); List <CategoryEntry> subCats = new List <CategoryEntry>(ce.SubCategories); subCats.Sort(new CategorySorter()); for (int i = 0; i < subCats.Count; ++i) { RecurseExport(xml, subCats[i]); } ce.Matched.Sort(new CategoryTypeSorter()); for (int i = 0; i < ce.Matched.Count; ++i) { CategoryTypeEntry cte = ce.Matched[i]; xml.WriteStartElement("object"); xml.WriteAttributeString("type", cte.Type.ToString()); if (cte.Object is Item item) { int itemID = item.ItemID; if (item is BaseAddon addon && addon.Components.Count == 1) { itemID = addon.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 (cte.Object is Mobile mob) { 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(); }
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; }
public static void RecurseExport(List <CAGJson> list, CategoryEntry ce, string category) { category = string.IsNullOrWhiteSpace(category) ? ce.Title : $"{category}{ce.Title}"; if (ce.Matched.Count > 0) { list.Add( new CAGJson { Category = category, Objects = ce.Matched.Select( cte => { if (cte.Object is Item item) { var itemID = item.ItemID; if (item is BaseAddon addon && addon.Components.Count == 1) { itemID = addon.Components[0].ItemID; } if (itemID > TileData.MaxItemValue) { itemID = 1; } int?hue = item.Hue & 0x7FFF; if ((hue & 0x4000) != 0) { hue = 0; } return(new CAGObject { Type = cte.Type, ItemID = itemID, Hue = hue == 0 ? null : hue }); } if (cte.Object is Mobile m) { var itemID = ShrinkTable.Lookup(m, 1); int?hue = m.Hue & 0x7FFF; if ((hue & 0x4000) != 0) { hue = 0; } return(new CAGObject { Type = cte.Type, ItemID = itemID, Hue = hue == 0 ? null : hue }); } throw new InvalidCastException( $"Categorization Type Entry: {cte.Type.Name} is not a valid type." ); } ) .ToArray() }
public CategoryEntry( CategoryEntry parent, string title, CategoryEntry[] subCats ) { m_Parent = parent; m_Title = title; m_SubCategories = subCats; m_Matches = new Type[0]; m_Matched = new ArrayList(); }