protected override void OnTick()
{
if ( m_NextSkillTime != m_From.NextSkillTime || m_NextSpellTime != m_From.NextSpellTime || m_NextActionTime != m_From.NextActionTime )
{
Terminate();
return;
}
if ( m_LastMoveTime != m_From.LastMoveTime )
{
m_From.SendLocalizedMessage( 503023 ); // You cannot move around while digging up treasure. You will need to start digging anew.
Terminate();
return;
}
int z = ( m_Chest != null ) ? m_Chest.Z + m_Chest.ItemData.Height : int.MinValue;
int height = 16;
if ( z > m_Location.Z )
height -= ( z - m_Location.Z );
else
z = m_Location.Z;
if ( !m_Map.CanFit( m_Location.X, m_Location.Y, z, height, true, true, false ) )
{
m_From.SendLocalizedMessage( 503024 ); // You stop digging because something is directly on top of the treasure chest.
Terminate();
return;
}
m_Count++;
m_From.RevealingAction();
m_From.Direction = m_From.GetDirectionTo( m_Location );
if ( m_Count > 1 && m_Dirt1 == null )
{
m_Dirt1 = new TreasureChestDirt();
m_Dirt1.MoveToWorld( m_Location, m_Map );
m_Dirt2 = new TreasureChestDirt();
m_Dirt2.MoveToWorld( new Point3D( m_Location.X, m_Location.Y - 1, m_Location.Z ), m_Map );
}
if ( m_Count == 5 )
{
m_Dirt1.Turn1();
}
else if ( m_Count == 10 )
{
m_Dirt1.Turn2();
m_Dirt2.Turn2();
}
else if ( m_Count > 10 )
{
if ( m_Chest == null )
{
m_Chest = new TreasureMapChest( m_From, m_TreasureMap.Level, true );
m_Chest.MoveToWorld( new Point3D( m_Location.X, m_Location.Y, m_Location.Z - 15 ), m_Map );
}
else
{
m_Chest.Z++;
}
Effects.PlaySound( m_Chest, m_Map, 0x33B );
}
if ( m_Chest != null && m_Chest.Location.Z >= m_Location.Z )
{
Stop();
m_From.EndAction( typeof( TreasureMap ) );
m_Chest.Temporary = false;
m_TreasureMap.Completed = true;
m_TreasureMap.CompletedBy = m_From;
int spawns;
switch ( m_TreasureMap.Level )
{
case 0: spawns = 3; break;
case 1: spawns = 0; break;
default: spawns = 4; break;
}
for ( int i = 0; i < spawns; ++i )
{
BaseCreature bc = Spawn( m_TreasureMap.Level, m_Chest.Location, m_Chest.Map, null, true );
if ( bc != null )
m_Chest.Guardians.Add( bc );
}
}
else
{
if ( m_From.Body.IsHuman && !m_From.Mounted )
m_From.Animate( 11, 5, 1, true, false, 0 );
new SoundTimer( m_From, 0x125 + (m_Count % 2) ).Start();
}
}