using System; using System.Collections.Generic; using System.IO; using Server.Items; namespace Server.Spells { public class SpellRegistry { private static Type[] m_Types = new Type[700]; private static int m_Count; public static Type[] Types { get { m_Count = -1; return m_Types; } } //What IS this used for anyways. public static int Count { get { if ( m_Count == -1 ) { m_Count = 0; for ( int i = 0; i < m_Types.Length; ++i ) if ( m_Types[i] != null ) ++m_Count; } return m_Count; } } private static Dictionary m_IDsFromTypes = new Dictionary( m_Types.Length ); public static int GetRegistryNumber( ISpell s ) { return GetRegistryNumber( s.GetType() ); } public static int GetRegistryNumber( Type type ) { if( m_IDsFromTypes.ContainsKey( type ) ) return m_IDsFromTypes[type]; return -1; } public static void Register( int spellID, Type type ) { if ( spellID < 0 || spellID >= m_Types.Length ) return; if ( m_Types[spellID] == null ) ++m_Count; m_Types[spellID] = type; if( !m_IDsFromTypes.ContainsKey( type ) ) m_IDsFromTypes.Add( type, spellID ); } private static object[] m_Params = new object[2]; public static Spell NewSpell( int spellID, Mobile caster, Item scroll ) { if ( spellID < 0 || spellID >= m_Types.Length ) return null; Type t = m_Types[spellID]; if( t != null ) { m_Params[0] = caster; m_Params[1] = scroll; try { return (Spell)Activator.CreateInstance( t, m_Params ); } catch { } } return null; } private static string[] m_CircleNames = new string[] { "First", "Second", "Third", "Fourth", "Fifth", "Sixth", "Seventh", "Eighth" }; public static Spell NewSpell( string name, Mobile caster, Item scroll ) { for ( int i = 0; i < m_CircleNames.Length; ++i ) { Type t = ScriptCompiler.FindTypeByFullName( String.Format( "Server.Spells.{0}.{1}", m_CircleNames[i], name ) ); if ( t != null ) { m_Params[0] = caster; m_Params[1] = scroll; try { return (Spell)Activator.CreateInstance( t, m_Params ); } catch { } } } return null; } } }