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_DisplayMap.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 ArtifactMapChestDirt(); m_Dirt1.MoveToWorld( m_Location, m_DisplayMap ); m_Dirt2 = new ArtifactMapChestDirt(); m_Dirt2.MoveToWorld( new Point3D( m_Location.X, m_Location.Y - 1, m_Location.Z ), m_DisplayMap ); } 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 ArtifactMapChest( m_From, m_ArtifactMap.Level, true ); m_Chest.MoveToWorld( new Point3D( m_Location.X, m_Location.Y, m_Location.Z - 15 ), m_DisplayMap ); } else { m_Chest.Z++; } Effects.PlaySound( m_Chest, m_DisplayMap, 0x33B ); } if ( m_Chest != null && m_Chest.Location.Z >= m_Location.Z ) { Stop(); m_From.EndAction( typeof( ArtifactMap ) ); m_Chest.Temporary = false; m_ArtifactMap.Completed = true; m_ArtifactMap.CompletedBy = m_From; int spawns; switch ( m_ArtifactMap.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_ArtifactMap.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(); } }
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_DisplayMap.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 ArtifactMapChestDirt(); m_Dirt1.MoveToWorld(m_Location, m_DisplayMap); m_Dirt2 = new ArtifactMapChestDirt(); m_Dirt2.MoveToWorld(new Point3D(m_Location.X, m_Location.Y - 1, m_Location.Z), m_DisplayMap); } 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 ArtifactMapChest(m_From, m_ArtifactMap.Level, true); m_Chest.MoveToWorld(new Point3D(m_Location.X, m_Location.Y, m_Location.Z - 15), m_DisplayMap); } else { m_Chest.Z++; } Effects.PlaySound(m_Chest, m_DisplayMap, 0x33B); } if (m_Chest != null && m_Chest.Location.Z >= m_Location.Z) { Stop(); m_From.EndAction(typeof(ArtifactMap)); m_Chest.Temporary = false; m_ArtifactMap.Completed = true; m_ArtifactMap.CompletedBy = m_From; int spawns; switch (m_ArtifactMap.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_ArtifactMap.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(); } }