using System; using Server; namespace Server.Items { public abstract class BaseSpawner : Item, ISpawner { private Mobile m_TrackedMobile; // --- ISpawner Interface Requirements --- // If true, taming the animal unlinks it and instantly spawns a new wild one! public bool UnlinkOnTaming { get { return true; } } public Point3D HomeLocation { get { return this.Location; } } public int HomeRange { get { return 5; } } // The Magic Native Event Trigger // The server calls this natively the instant the creature dies or is deleted. public void Remove( ISpawnable spawn ) { if ( !this.Deleted ) this.Delete(); // Deleting the proxy item triggers your PremiumSpawner to respawn! } // --------------------------------------- public BaseSpawner() : base( 0x6519 ) { Name = "spawn ref"; Visible = false; Movable = false; Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerCallback( ExecuteSpawn ) ); } public BaseSpawner( Serial serial ) : base( serial ) { } public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 0 ); // version writer.Write( m_TrackedMobile ); } public override void Deserialize( GenericReader reader ) { base.Deserialize( reader ); int version = reader.ReadInt(); m_TrackedMobile = reader.ReadMobile(); // Re-link the spawner if the server restarts and the mob is still alive if ( m_TrackedMobile != null && !m_TrackedMobile.Deleted && m_TrackedMobile.Alive ) { if ( m_TrackedMobile is ISpawnable ) { ((ISpawnable)m_TrackedMobile).Spawner = this; } } else { Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerCallback( this.Delete ) ); } } private void ExecuteSpawn() { if ( !this.Deleted && this.Map != null && this.Map != Map.Internal ) { Point3D savedLocation = this.Location; Map savedMap = this.Map; m_TrackedMobile = Server.SpawnList.RandomSpawn( this, savedLocation, savedMap ); if ( m_TrackedMobile != null ) { // Link the newly born mobile to this proxy item! if ( m_TrackedMobile is ISpawnable ) { ((ISpawnable)m_TrackedMobile).Spawner = this; } m_TrackedMobile.MoveToWorld( savedLocation, savedMap ); this.Internalize(); } else { this.Delete(); } } else if ( !this.Deleted ) { this.Delete(); } } } public class SpawnAnimals : BaseSpawner { [Constructable] public SpawnAnimals(){} public SpawnAnimals( Serial serial ) : base( serial ){} public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } } public class SpawnBirds : BaseSpawner { [Constructable] public SpawnBirds(){} public SpawnBirds( Serial serial ) : base( serial ){} public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } } public class SpawnCritters : BaseSpawner { [Constructable] public SpawnCritters(){} public SpawnCritters( Serial serial ) : base( serial ){} public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Spawn_A : BaseSpawner { [Constructable] public Spawn_A(){} public Spawn_A( Serial serial ) : base( serial ){} public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Spawn_B : BaseSpawner { [Constructable] public Spawn_B(){} public Spawn_B( Serial serial ) : base( serial ){} public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Spawn_C : BaseSpawner { [Constructable] public Spawn_C(){} public Spawn_C( Serial serial ) : base( serial ){} public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Spawn_D : BaseSpawner { [Constructable] public Spawn_D(){} public Spawn_D( Serial serial ) : base( serial ){} public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } } public class Spawn_E : BaseSpawner { [Constructable] public Spawn_E(){} public Spawn_E( Serial serial ) : base( serial ){} public override void Serialize( GenericWriter writer ){ base.Serialize( writer ); writer.Write( (int) 0 ); } public override void Deserialize( GenericReader reader ){ base.Deserialize( reader ); int version = reader.ReadInt(); } } }