Inheritance: BaseCreature
			protected override void OnTick() 
			{
				if ( m_Item != null )
					m_Item.IsDigging = false;
					
				if ( !m_From.Alive )
				{
					m_From.SendMessage( "You cannot continue digging in this state." );
					Stop();
				}
				else
				{
					if ( Utility.Random( 100 ) < 35 )
					{
						switch ( Utility.Random ( 10 ) )
						{
							case 0:
							Skeleton skel = new Skeleton();
							skel.Location = m_From.Location;
							skel.Map = m_From.Map;
							skel.Combatant = m_From;

							if ( Utility.Random( 100 ) < 50 )
								skel.IsParagon = true;

	        					World.AddMobile( skel );
							break;

							case 1:
							Ghoul ghoul = new Ghoul();
							ghoul.Location = m_From.Location;
							ghoul.Map = m_From.Map;
							ghoul.Combatant = m_From;

							if ( Utility.Random( 100 ) < 50 )
								ghoul.IsParagon = true;
	
	        					World.AddMobile( ghoul );
							break;

							case 2:
							Lich lich = new Lich();
							lich.Location = m_From.Location;
							lich.Map = m_From.Map;
							lich.Combatant = m_From;
	
							if ( Utility.Random( 100 ) < 50 )
								lich.IsParagon = true;

	        					World.AddMobile( lich );
							break;

							case 3:
							LichLord lichl = new LichLord();
							lichl.Location = m_From.Location;
							lichl.Map = m_From.Map;
							lichl.Combatant = m_From;

							if ( Utility.Random( 100 ) < 50 )
								lichl.IsParagon = true;
	
	        					World.AddMobile( lichl );
							break;
	
							case 4:
							AncientLich alich = new AncientLich();
							alich.Location = m_From.Location;
							alich.Map = m_From.Map;
							alich.Combatant = m_From;
	
							if ( Utility.Random( 100 ) < 50 )
								alich.IsParagon = true;
	
	        					World.AddMobile( alich );
							break;
	
							case 5:
							Zombie zom = new Zombie();
							zom.Location = m_From.Location;
							zom.Map = m_From.Map;
							zom.Combatant = m_From;
	
							if ( Utility.Random( 100 ) < 50 )
								zom.IsParagon = true;
	
	        					World.AddMobile( zom );
							break;
	
							case 6:
							SkeletalKnight sk = new SkeletalKnight();
							sk.Location = m_From.Location;
							sk.Map = m_From.Map;
							sk.Combatant = m_From;
	
							if ( Utility.Random( 100 ) < 50 )
								sk.IsParagon = true;
	
	        					World.AddMobile( sk );
							break;

							case 7:
							SkeletalMage sm = new SkeletalMage();
							sm.Location = m_From.Location;
							sm.Map = m_From.Map;
							sm.Combatant = m_From;
	
							if ( Utility.Random( 100 ) < 50 )
								sm.IsParagon = true;
	
	        					World.AddMobile( sm );
							break;
	
							case 8:
							Spectre spec = new Spectre();
							spec.Location = m_From.Location;
							spec.Map = m_From.Map;
							spec.Combatant = m_From;
	
							if ( Utility.Random( 100 ) < 50 )
								spec.IsParagon = true;

	        					World.AddMobile( spec );
							break;
	
							case 9:
							Shade shade = new Shade();
							shade.Location = m_From.Location;
							shade.Map = m_From.Map;
							shade.Combatant = m_From;
	
							if ( Utility.Random( 100 ) < 50 )
								shade.IsParagon = true;
	
	        					World.AddMobile( shade );
							break;
						}
						m_From.SendMessage( "You have angered the spirits." );
					}
					else if ( m_From.Skills[SkillName.Mining].Base > 10 )
					{
						if ( Utility.Random( 120 ) >= (m_From.Skills[SkillName.Mining].Base) )
						{
							m_From.SendMessage( "You fail to dig anything up." );
						}
						else
						{
							m_From.SendMessage( "You dig up the hideous remains of the demon.  Unfortunately your shovel breaks in the process." );
							m_From.AddToBackpack( new PumpkinheadRemains() );
							m_Item.Delete();
							
						}
					}
					else if ( m_From.Skills[SkillName.Mining].Base <= 10 )
					{
						if ( Utility.Random( 120 ) > 10 )
						{
							m_From.SendMessage( "You fail to dig anything up." );
						}
						else
						{
							m_From.SendMessage( "You dig up the hideous remains of the demon.  Unfortunately your shovel breaks in the process." );
							m_From.AddToBackpack( new PumpkinheadRemains() );
							m_Item.Delete();
							
						}
					}
					else
					{
						m_From.SendMessage( "You fail to dig anything up." );
					}
		
					Stop();
				}
			}
		public void SpawnUndeads( Mobile target )
		{
			Map map = this.Map;

			if ( map == null )
				return;

			int undeads = 0;

			foreach ( Mobile m in this.GetMobilesInRange( 10 ) )
			{
				if ( m is Skeleton || m is SkeletalMage || m is Zombie || m is BoneMagi || m is Ghoul || m is Wraith || m is Shade || m is Spectre )
					++undeads;
			}

			if ( undeads < 7 )
			{
				PlaySound( 586 );

				int newUndeads = Utility.RandomMinMax( 2, 5 );

				for ( int i = 0; i < newUndeads; ++i )
				{
					BaseCreature undead;

					switch ( Utility.Random( 16 ) )
					{
						default:
						case 0: case 1:	undead = new Skeleton(); break;
						case 2: case 3:	undead = new SkeletalMage(); break;
						case 4:	case 5:	undead = new BoneMagi(); break;
						case 6:	case 7:	undead = new Zombie(); break;
						case 8:	case 9:	undead = new Ghoul(); break;
						case 10: case 11: undead = new Wraith(); break;
						case 12: case 13: undead = new Shade(); break;
						case 14: case 15: undead = new Spectre(); break;
					}

					undead.Team = this.Team;

					bool validLocation = false;
					Point3D loc = this.Location;

					for ( int j = 0; !validLocation && j < 10; ++j )
					{
						int x = X + Utility.Random( 3 ) - 1;
						int y = Y + Utility.Random( 3 ) - 1;
						int z = map.GetAverageZ( x, y );

						if ( validLocation = map.CanFit( x, y, this.Z, 16, false, false ) )
							loc = new Point3D( x, y, Z );
						else if ( validLocation = map.CanFit( x, y, z, 16, false, false ) )
							loc = new Point3D( x, y, z );
					}

					undead.MoveToWorld( loc, map );
					undead.Combatant = target;
				}
			}
		}
Beispiel #3
0
        public void SpawnCreature(Mobile target)
        {
            Map map = this.Map;

            if (map == null)
            {
                return;
            }

            int monsters = 0;

            foreach (Mobile m in this.GetMobilesInRange(4))
            {
                if (m is BoneKnight || m is BoneMagi || m is Ghoul || m is Mummy || m is Shade || m is SkeletalKnight || m is SkeletalMage || m is Skeleton || m is Spectre || m is Wraith || m is Phantom || m is Zombie)
                {
                    ++monsters;
                }
            }

            if (monsters < 6)
            {
                PlaySound(0x216);

                int newmonsters = Utility.RandomMinMax(1, 3);

                for (int i = 0; i < newmonsters; ++i)
                {
                    BaseCreature monster;

                    switch (Utility.Random(13))
                    {
                    default:
                    case 0: monster = new BoneKnight(); break;

                    case 1: monster = new BoneMagi(); break;

                    case 2: monster = new Ghoul(); break;

                    case 3: monster = new Ghostly(); break;

                    case 4: monster = new Mummy(); break;

                    case 5: monster = new Shade(); break;

                    case 6: monster = new SkeletalKnight(); break;

                    case 7: monster = new SkeletalMage(); break;

                    case 8: monster = new Skeleton(); break;

                    case 9: monster = new Spectre(); break;

                    case 10: monster = new Wraith(); break;

                    case 11: monster = new Phantom(); break;

                    case 12: monster = new Zombie(); break;
                    }

                    monster.Team = this.Team;

                    bool    validLocation = false;
                    Point3D loc           = this.Location;

                    for (int j = 0; !validLocation && j < 10; ++j)
                    {
                        int x = X + Utility.Random(3) - 1;
                        int y = Y + Utility.Random(3) - 1;
                        int z = map.GetAverageZ(x, y);

                        if (validLocation = map.CanFit(x, y, this.Z, 16, false, false))
                        {
                            loc = new Point3D(x, y, Z);
                        }
                        else if (validLocation = map.CanFit(x, y, z, 16, false, false))
                        {
                            loc = new Point3D(x, y, z);
                        }
                    }

                    monster.ControlSlots = 666;                     // DJERYV ADDED FOR MONSTER CLEANUP
                    monster.MoveToWorld(loc, map);
                    monster.Combatant = target;
                }
            }
        }
            protected override void OnTick()
            {
                Item gem = Loot.RandomGem();
                Item reg = Loot.RandomPossibleReagent();

                Item equip;
                equip = Loot.RandomArmorOrShieldOrWeaponOrJewelry();

                if ( m_Item != null )
                    m_Item.IsDigging = false;

                if ( equip is BaseWeapon )
                {
                    BaseWeapon weapon = (BaseWeapon)equip;

                    int attributeCount;
                    int min, max;

                    GetRandomAOSStats( out attributeCount, out min, out max );

                    BaseRunicTool.ApplyAttributesTo( weapon, attributeCount, min, max );
                }
                else if ( equip is BaseArmor )
                {
                    BaseArmor armor = (BaseArmor)equip;

                    int attributeCount;
                    int min, max;

                    GetRandomAOSStats( out attributeCount, out min, out max );

                    BaseRunicTool.ApplyAttributesTo( armor, attributeCount, min, max );
                }
                else if ( equip is BaseJewel )
                {
                    int attributeCount;
                    int min, max;

                    GetRandomAOSStats( out attributeCount, out min, out max );

                    BaseRunicTool.ApplyAttributesTo( (BaseJewel)equip, attributeCount, min, max );
                }

                if ( Utility.Random( 100 ) < 85 )
                {
                    switch ( Utility.Random ( 15 ) )
                    {
                        case 0:
                        Skeleton skel = new Skeleton();
                        skel.Location = m_From.Location;
                        skel.Map = m_From.Map;
                        skel.Combatant = m_From;

                            World.AddMobile( skel );
                        break;

                        case 1:
                        Ghoul ghoul = new Ghoul();
                        ghoul.Location = m_From.Location;
                        ghoul.Map = m_From.Map;
                        ghoul.Combatant = m_From;

                            World.AddMobile( ghoul );
                        break;

                        case 2:
                        Wraith wraith = new Wraith();
                        wraith.Location = m_From.Location;
                        wraith.Map = m_From.Map;
                        wraith.Combatant = m_From;

                            World.AddMobile( wraith );
                        break;

                        case 3:
                        Lich lich = new Lich();
                        lich.Location = m_From.Location;
                        lich.Map = m_From.Map;
                        lich.Combatant = m_From;

                            World.AddMobile( lich );
                        break;

                        case 4:
                        LichLord lichl = new LichLord();
                        lichl.Location = m_From.Location;
                        lichl.Map = m_From.Map;
                        lichl.Combatant = m_From;

                            World.AddMobile( lichl );
                        break;

                        case 5:
                        AncientLich alich = new AncientLich();
                        alich.Location = m_From.Location;
                        alich.Map = m_From.Map;
                        alich.Combatant = m_From;

                            World.AddMobile( alich );
                        break;

                        case 6:
                        Mummy mum = new Mummy();
                        mum.Location = m_From.Location;
                        mum.Map = m_From.Map;
                        mum.Combatant = m_From;

                            World.AddMobile( mum );
                        break;

                        case 7:
                        Zombie zom = new Zombie();
                        zom.Location = m_From.Location;
                        zom.Map = m_From.Map;
                        zom.Combatant = m_From;

                            World.AddMobile( zom );
                        break;

                        case 8:
                        SkeletalKnight sk = new SkeletalKnight();
                        sk.Location = m_From.Location;
                        sk.Map = m_From.Map;
                        sk.Combatant = m_From;

                            World.AddMobile( sk );
                        break;

                        case 9:
                        SkeletalMage sm = new SkeletalMage();
                        sm.Location = m_From.Location;
                        sm.Map = m_From.Map;
                        sm.Combatant = m_From;

                            World.AddMobile( sm );
                        break;

                        case 10:
                        BoneKnight bk = new BoneKnight();
                        bk.Location = m_From.Location;
                        bk.Map = m_From.Map;
                        bk.Combatant = m_From;

                            World.AddMobile( bk );
                        break;

                        case 11:
                        BoneMagi bm = new BoneMagi();
                        bm.Location = m_From.Location;
                        bm.Map = m_From.Map;
                        bm.Combatant = m_From;

                            World.AddMobile( bm );
                        break;

                        case 12:
                        Spectre spec = new Spectre();
                        spec.Location = m_From.Location;
                        spec.Map = m_From.Map;
                        spec.Combatant = m_From;

                            World.AddMobile( spec );
                        break;

                        case 13:
                        Shade shade = new Shade();
                        shade.Location = m_From.Location;
                        shade.Map = m_From.Map;
                        shade.Combatant = m_From;

                            World.AddMobile( shade );
                        break;
                    }
                    m_From.SendMessage( "The spirits have rose from the dead.." );
                }
                else if ( m_From.Skills[SkillName.Mining].Base < 15.0 )
                {
                    if ( Utility.Random( 100 ) < 85 )
                    {
                        m_From.SendMessage( "You fail to dig anything up." );
                    }
                    else
                    {
                        switch ( Utility.Random ( 3 ) )
                        {
                            case 0:
                            m_From.AddToBackpack( gem );
                            m_From.SendMessage( "You dig up a gem." );
                            break;

                            case 1:
                            m_From.AddToBackpack( reg );
                            m_From.SendMessage( "You dig up a reagent." );
                            break;

                            case 2:
                            m_From.AddToBackpack( equip );
                            m_From.SendMessage( "You dig up some equipment." );
                            break;
                        }
                    }
                }
                else if ( m_From.Skills[SkillName.Mining].Base < 35.0 )
                {
                    if ( Utility.Random( 100 ) < 85 )
                    {
                        m_From.SendMessage( "You fail to dig anything up." );
                    }
                    else
                    {
                        gem.Amount = Utility.RandomMinMax( 2, 4 );
                        reg.Amount = Utility.RandomMinMax( 2, 4 );

                        switch ( Utility.Random ( 5 ) )
                        {
                            case 0:
                            m_From.AddToBackpack( gem );
                            m_From.SendMessage( "You dig up some gems." );
                            break;

                            case 1:
                            m_From.AddToBackpack( reg );
                            m_From.SendMessage( "You dig up some reagents." );
                            break;

                            case 2:
                            m_From.AddToBackpack( equip );
                            m_From.SendMessage( "You dig up some equipment." );
                            break;

                            case 3:
                            m_From.AddToBackpack( Loot.RandomScroll( 0, 20, SpellbookType.Regular ) );
                            m_From.SendMessage( "You dig up a scroll." );
                            break;

                            case 4:
                            m_From.AddToBackpack( Loot.RandomScroll( 0, 5, SpellbookType.Necromancer ) );
                            m_From.SendMessage( "You dig up a scroll." );
                            break;
                        }
                    }
                }
                else if ( m_From.Skills[SkillName.Mining].Base < 50.0 )
                {
                    if ( Utility.Random( 100 ) < 85 )
                    {
                        m_From.SendMessage( "You fail to dig anything up." );
                    }
                    else
                    {
                        gem.Amount = Utility.RandomMinMax( 2, 10 );
                        reg.Amount = Utility.RandomMinMax( 2, 10 );

                        switch ( Utility.Random ( 6 ) )
                        {
                            case 0:
                            m_From.AddToBackpack( gem );
                            m_From.SendMessage( "You dig up some gems." );
                            break;

                            case 1:
                            m_From.AddToBackpack( reg );
                            m_From.SendMessage( "You dig up some reagents." );
                            break;

                            case 2:
                            m_From.AddToBackpack( equip );
                            m_From.SendMessage( "You dig up some equipment." );
                            break;

                            case 3:
                            m_From.AddToBackpack( Loot.RandomScroll( 0, 40, SpellbookType.Regular ) );
                            m_From.SendMessage( "You dig up a scroll." );
                            break;

                            case 4:
                            m_From.AddToBackpack( Loot.RandomScroll( 0, 10, SpellbookType.Regular ) );
                            m_From.SendMessage( "You dig up a scroll." );
                            break;

                            case 5:
                            m_From.AddToBackpack( new Bones() );
                            m_From.SendMessage( "You dig up a bones." );
                            break;
                        }
                    }
                }
                else if ( m_From.Skills[SkillName.Mining].Base < 75.0 )
                {
                    if ( Utility.Random( 100 ) < 85 )
                    {
                        m_From.SendMessage( "You fail to dig anything up." );
                    }
                    else
                    {
                        gem.Amount = Utility.RandomMinMax( 2, 20 );
                        reg.Amount = Utility.RandomMinMax( 2, 20 );

                        switch ( Utility.Random ( 7 ) )
                        {
                            case 0:
                            m_From.AddToBackpack( gem );
                            m_From.SendMessage( "You dig up some gems." );
                            break;

                            case 1:
                            m_From.AddToBackpack( reg );
                            m_From.SendMessage( "You dig up some reagents." );
                            break;

                            case 2:
                            m_From.AddToBackpack( equip );
                            m_From.SendMessage( "You dig up some equipment." );
                            break;

                            case 3:
                            m_From.AddToBackpack( Loot.RandomScroll( 0, 50, SpellbookType.Regular ) );
                            m_From.SendMessage( "You dig up a scroll." );
                            break;

                            case 4:
                            m_From.AddToBackpack( Loot.RandomScroll( 0, 13, SpellbookType.Necromancer ) );
                            m_From.SendMessage( "You dig up a scroll." );
                            break;

                            case 5:
                            m_From.AddToBackpack( new Bones() );
                            m_From.SendMessage( "You dig up a bones." );
                            break;

                        }
                    }
                }
                else if ( m_From.Skills[SkillName.Mining].Base < 90.0 )
                {
                    if ( Utility.Random( 100 ) < 85 )
                    {
                        m_From.SendMessage( "You fail to dig anything up." );
                    }
                    else
                    {
                        gem.Amount = Utility.RandomMinMax( 10, 30 );
                        reg.Amount = Utility.RandomMinMax( 10, 30 );

                        switch ( Utility.Random ( 8 ) )
                        {
                            case 0:
                            m_From.AddToBackpack( gem );
                            m_From.SendMessage( "You dig up some gems." );
                            break;

                            case 1:
                            m_From.AddToBackpack( reg );
                            m_From.SendMessage( "You dig up some reagents." );
                            break;

                            case 2:
                            m_From.AddToBackpack( equip );
                            m_From.SendMessage( "You dig up some equipment." );
                            break;

                            case 3:
                            m_From.AddToBackpack( Loot.RandomScroll( 0, 63, SpellbookType.Regular ) );
                            m_From.SendMessage( "You dig up a scroll." );
                            break;

                            case 4:
                            m_From.AddToBackpack( Loot.RandomScroll( 0, 15, SpellbookType.Necromancer ) );
                            m_From.SendMessage( "You dig up a scroll." );
                            break;

                            case 5:
                            m_From.AddToBackpack( new Bones() );
                            m_From.SendMessage( "You dig up a bones." );
                            break;
                        }
                    }
                }
                else if ( m_From.Skills[SkillName.Mining].Base < 150.0)
                {
                    if ( Utility.Random( 500 ) < 5 )
                    {
                        m_From.SendMessage( "You dig up and item of great value." );
                        switch ( Utility.Random ( 5 ) )
                        {
                            case 0:
                            m_From.AddToBackpack( new ArmoredRobe() );
                            break;

                            case 1:
                            m_From.AddToBackpack( new ButchersResolve() );
                            break;

                            case 2:
                            m_From.AddToBackpack( new FollowerOfTheOldLord() );
                            break;

                            case 3:
                            m_From.AddToBackpack( new SkirtOfTheAmazon() );
                            break;

                            case 4:
                            m_From.AddToBackpack( new HolyHammerOfExorcism() );
                            break;
                        }
                    }
                    else
                    {
                        gem.Amount = Utility.RandomMinMax( 2, 40 );
                        reg.Amount = Utility.RandomMinMax( 2, 40 );

                        switch ( Utility.Random ( 8 ) )
                        {
                            case 0:
                            m_From.AddToBackpack( gem );
                            m_From.SendMessage( "You dig up some gems." );
                            break;

                            case 1:
                            m_From.AddToBackpack( reg );
                            m_From.SendMessage( "You dig up some reagents." );
                            break;

                            case 2:
                            m_From.AddToBackpack( equip );
                            m_From.SendMessage( "You dig up some equipment." );
                            break;

                            case 3:
                            m_From.AddToBackpack( Loot.RandomScroll( 0, 63, SpellbookType.Regular ) );
                            m_From.SendMessage( "You dig up a scroll." );
                            break;

                            case 4:
                            m_From.AddToBackpack( Loot.RandomScroll( 0, 15, SpellbookType.Necromancer ) );
                            m_From.SendMessage( "You dig up a scroll." );
                            break;

                            case 5:
                            m_From.AddToBackpack( new Bones() );
                            m_From.SendMessage( "You dig up a bones." );
                            break;
                        }
                    }
                }
                else
                {
                    m_From.SendMessage( "You fail to dig anything up." );
                }

                Stop();
            }