#W# Added Dynamic Spawn system.
This commit is contained in:
parent
f53b368695
commit
cd4b2757ff
7 changed files with 1018 additions and 45 deletions
146
Scripts/Engines/Spawner/DynamicSpawner/SpawnRef.cs
Normal file
146
Scripts/Engines/Spawner/DynamicSpawner/SpawnRef.cs
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
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(); }
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue