Compare commits

...

2 commits

3 changed files with 24 additions and 149 deletions

View file

@ -133,6 +133,13 @@ namespace Server
typeof( Boar ), typeof( BlackBear ), typeof( BrownBear ), typeof( GreyWolf )
};
//-------------------------------------- WaterCreatures ------------------------------------------------
private static Type[] WaterCreatures = new Type[]
{
typeof( WaterElemental ), typeof( Dolphin ), typeof( DeepSeaSerpent ),
typeof( Leviathan ), typeof( SeaSerpent ), typeof( Kraken )
};
//-------------------------------------- Tier A------------------------------------------------
private static Type[] Dirt_A = new Type[]
@ -474,6 +481,11 @@ namespace Server
else if ( terrain == Terrain.Dirt )
m = Construct( DirtAnimals ) as Mobile;
}
else if ( spawn is SpawnWater )
{
if ( terrain == Terrain.Water )
m = Construct( WaterCreatures ) as Mobile;
}
else if ( spawn is Spawn_A )
{
if ( terrain == Terrain.Forest )

View file

@ -69,7 +69,13 @@ namespace Server.Items
{
Point3D savedLocation = this.Location;
Map savedMap = this.Map;
Region reg = Region.Find( savedLocation, savedMap );
if ( reg is Server.Regions.TownRegion ||
reg is Server.Regions.GuardedRegion )
{
this.Delete();
return;
}
m_TrackedMobile = Server.SpawnList.RandomSpawn( this, savedLocation, savedMap );
if ( m_TrackedMobile != null )
@ -143,4 +149,9 @@ namespace Server.Items
[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(); }
}
public class SpawnWater : BaseSpawner
{
[Constructable]
public SpawnWater(){} public SpawnWater( 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(); }
}
}

View file

@ -1,148 +0,0 @@
using System;
using Server;
namespace Server.Items
{
public abstract class BaseSpawner : Item
{
private Mobile m_TrackedMobile;
private Timer m_TrackerTimer;
public BaseSpawner() : base( 0x6519 )
{
Name = "spawn ref";
Visible = false;
Movable = false;
// Snappy 1-second timer to place the mob
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
// Save the mobile we are tracking in case the server restarts
writer.Write( m_TrackedMobile );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
m_TrackedMobile = reader.ReadMobile();
if ( m_TrackedMobile != null && !m_TrackedMobile.Deleted )
{
StartTracking();
}
else
{
// Clean up abandoned proxies on restart
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 )
{
m_TrackedMobile.MoveToWorld( savedLocation, savedMap );
// Hide this proxy item in the void instead of deleting it
this.Internalize();
StartTracking();
}
else
{
this.Delete();
}
}
else if ( !this.Deleted )
{
this.Delete();
}
}
private void StartTracking()
{
if ( m_TrackerTimer != null )
m_TrackerTimer.Stop();
// Ping every 5 seconds to check if the animal is still alive
m_TrackerTimer = Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), TimeSpan.FromSeconds( 5.0 ), new TimerCallback( TrackMobile ) );
}
private void TrackMobile()
{
if ( m_TrackedMobile == null || m_TrackedMobile.Deleted || !m_TrackedMobile.Alive )
{
if ( m_TrackerTimer != null )
m_TrackerTimer.Stop();
// Kill this proxy item so the Premium Spawner knows it's time to respawn!
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(); }
}
}