public override bool OnBeforeDeath() { if ( !NoKillAwards ) { GivePowerScrolls(); Map map = this.Map; if ( map != null ) { for ( int x = -12; x <= 12; ++x ) { for ( int y = -12; y <= 12; ++y ) { double dist = Math.Sqrt(x*x+y*y); if ( dist <= 12 ) new GoodiesTimer( map, X + x, Y + y ).Start(); } } } } //Added by Blady: if ( SpellHelper.IsFeluccaT2A(this.Map, this.Location) && Utility.RandomDouble() < 0.6 && Backpack != null ) { BaseArmor armor = null; switch (Utility.Random(6)) { case 0: armor = new SunArmor(); break; case 1: armor = new SunGloves(); break; case 2: armor = new SunArms(); break; case 3: armor = new SunLegs(); break; case 4: armor = new SunGorget(); break; case 5: armor = new SunHelm(); break; } if (armor != null) PackItem(armor); } return base.OnBeforeDeath(); }
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; //Added by Blady: if (Utility.Random(80) < Math.Max(2, m_TreasureMap.Level)) { BaseCreature bc = Spawn( m_TreasureMap.Level, m_Chest.Location, m_Chest.Map, null, true ); if ( bc != null ) { m_Chest.Guardians.Add( bc ); bc.Hue = 2213; bc.Title = "The Sun Guardian"; BaseArmor armor = null; switch (Utility.Random(6)) { case 0: armor = new SunArmor(); break; case 1: armor = new SunGloves(); break; case 2: armor = new SunArms(); break; case 3: armor = new SunLegs(); break; case 4: armor = new SunGorget(); break; case 5: armor = new SunHelm(); break; } if (armor != null) bc.PackItem(armor); } } 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(); } }