Inheritance: Server.Items.LockableContainer
示例#1
0
		private void AddCampChests()
		{
			LockableContainer chest = null;

			switch (Utility.Random(3))
			{
				case 0: chest = new MetalChest(); break;
				case 1: chest = new MetalGoldenChest(); break;
				default: chest = new WoodenChest(); break;
			}
            
            // Plume : Retrait des items magiques du coffre.
			chest.LiftOverride = true;
            chest.DropItem(new Gold(Utility.RandomMinMax(300, 600)));
			chest.RequiredSkill = 36;
            chest.LockLevel = 26;
            chest.MaxLockLevel = 76;
            chest.Locked = true;
			//TreasureMapChest.Fill(chest, 1);

			AddItem(chest, -2, -2, 0);

			LockableContainer crates = null;

			switch (Utility.Random(4))
			{
				case 0: crates = new SmallCrate(); break;
				case 1: crates = new MediumCrate(); break;
				case 2: crates = new LargeCrate(); break;
				default: crates = new LockableBarrel(); break;
			}

			crates.TrapType = TrapType.ExplosionTrap;
			crates.TrapPower = Utility.RandomMinMax(30, 40);
			crates.TrapLevel = 2;
            
			crates.RequiredSkill = 76;
			crates.LockLevel = 66;
			crates.MaxLockLevel = 116;
          
            crates.Locked = true;
			crates.DropItem(new Gold(Utility.RandomMinMax(100, 400)));
			crates.DropItem(new Arrow(10));
			crates.DropItem(new Bolt(10));

			crates.LiftOverride = true;

			if (Utility.RandomDouble() < 0.8)
			{
				switch (Utility.Random(4))
				{
					case 0: crates.DropItem(new LesserCurePotion()); break;
					case 1: crates.DropItem(new LesserExplosionPotion()); break;
					case 2: crates.DropItem(new LesserHealPotion()); break;
					default: crates.DropItem(new LesserPoisonPotion()); break;
				}
			}

			AddItem(crates, 2, 2, 0);
		}
示例#2
0
        public override void AddComponents()
        {
            IronGate gate = new IronGate( DoorFacing.EastCCW );
            m_Gate = gate;

            gate.KeyValue = Key.RandomValue();
            gate.Locked = true;

            AddItem( gate, -2, 1, 0 );

            MetalChest chest = new MetalChest();

            chest.ItemID = 0xE7C;
            chest.DropItem( new Key( KeyType.Iron, gate.KeyValue ) );
            chest.LiftOverride = true;

            TreasureMapChest.FillOld( chest, 2 );

            AddItem( chest, 4, 4, 0 );

            AddMobile( new Ratman(), 15, 0, -2, 0 );
            AddMobile( new Ratman(), 15, 0, 1, 0 );
            AddMobile( new RatmanMage(), 15, 0, -1, 0 );
            AddMobile( new RatmanArcher(), 15, 0, 0, 0 );

            m_Prisoner = new BaseEscort();

            m_Prisoner.YellHue = Utility.RandomList( 0x57, 0x67, 0x77, 0x87, 0x117 );

            AddMobile( m_Prisoner, 2, -2, 0, 0 );
        }
示例#3
0
        public override void AddComponents()
        {
            IronGate gate = new IronGate( DoorFacing.EastCCW );
            m_Gate = gate;

            gate.KeyValue = Key.RandomValue();
            gate.Locked = true;

            AddItem( gate, -2, 1, 0 );

            MetalChest chest = new MetalChest();

            chest.ItemID = 0xE7C;
            chest.DropItem( new Key( KeyType.Iron, gate.KeyValue ) );

            TreasureMapChest.Fill( chest, 2 );

            AddItem( chest, 4, 4, 0 );

            AddMobile( new Gnoll(), 15, 0, -2, 0 );
            AddMobile( new Gnoll(), 15, 0,  1, 0 );
            AddMobile( new Gnoll(), 15, 0, -1, 0 );
            AddMobile( new Gnoll(), 15, 0,  0, 0 );

            switch ( Utility.Random( 2 ) )
            {
                case 0: m_Prisoner = new Noble(); break;
                case 1: m_Prisoner = new SeekerOfAdventure(); break;
            }

            m_Prisoner.YellHue = Utility.RandomList( 0x57, 0x67, 0x77, 0x87, 0x117 );

            AddMobile( m_Prisoner, 2, -2, 0, 0 );
        }
示例#4
0
        private void AddCampChests(IronGate gate)
        {
            LockableContainer chest = null;

            chest = new MetalChest();

            chest.ItemID = 3708;
            chest.LiftOverride = true;

            TreasureMapChest.Fill(chest, 3);
            chest.DropItem(new Key(KeyType.Iron, gate.KeyValue));

            AddItem(chest, 4, 4, 1);

            LockableContainer crates = null;

            switch (Utility.Random(4))
            {
                case 0: crates = new SmallCrate(); break;
                case 1: crates = new MediumCrate(); break;
                case 2: crates = new LargeCrate(); break;
                default: crates = new LockableBarrel(); break;
            }

            crates.TrapType = TrapType.ExplosionTrap;
            crates.TrapPower = Utility.RandomMinMax(50, 70);
            crates.TrapLevel = 3;

            crates.RequiredSkill = 86;
            crates.LockLevel = 86;
            crates.MaxLockLevel = 126;
            crates.Locked = true;

            crates.DropItem(new Gold(Utility.RandomMinMax(100, 400)));
            crates.DropItem(new Arrow(10));
            crates.DropItem(new Bolt(10));

            crates.LiftOverride = true;

            if (Utility.RandomDouble() < 0.8)
            {
                switch (Utility.Random(4))
                {
                    case 0: crates.DropItem(new LesserCurePotion()); break;
                    case 1: crates.DropItem(new LesserExplosionPotion()); break;
                    case 2: crates.DropItem(new LesserHealPotion()); break;
                    default: crates.DropItem(new LesserPoisonPotion()); break;
                }
            }

            AddItem(crates, 2, 2, 0);
        }
示例#5
0
		public override void AddComponents()
		{
			m_Gate = new IronGate(DoorFacing.EastCCW) {
				KeyValue = Key.RandomValue(),
				Locked = true
			};

			AddItem(m_Gate, -2, 1, 0);

			m_Chest = new MetalChest {
				ItemID = 0xE7C,
				LiftOverride = true
			};

			m_Chest.DropItem(new Key(KeyType.Iron, m_Gate.KeyValue));

			AddItem(m_Chest, 4, 4, 0);

			AddMobile(new Lizardman(), 15, 0, -2, 0);
			AddMobile(new Lizardman(), 15, 0, -2, 0);
			AddMobile(new Lizardman(), 15, 0, -2, 0);
			AddMobile(new LizardWarrior(), 15, 0, 1, 0);
			AddMobile(new LizardMage(), 15, 0, -1, 0);
			AddMobile(new LizardMage(), 15, 0, -1, 0);
			AddMobile(new LizardArcher(), 15, 0, 0, 0);
			AddMobile(new LizardArcher(), 15, 0, 0, 0);

			switch (Utility.Random(2))
			{
				case 0:
					m_Prisoner = new Noble();
					break;
				case 1:
					m_Prisoner = new SeekerOfAdventure();
					break;
			}

			m_Prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117);

			AddMobile(m_Prisoner, 2, -2, 0, 0);
		}
示例#6
0
        public override void AddComponents()
        {
            IronGate gate = new IronGate( DoorFacing.EastCCW );
            m_Gate = gate;

            gate.KeyValue = Key.RandomValue();
            gate.Locked = true;

            AddItem( gate, -2, 1, 0 );

            MetalChest chest = new MetalChest();
            chest.Movable = false;
            chest.ItemID = 0xE7C; // metal chest facing East
            chest.DropItem( new Key( KeyType.Rusty, gate.KeyValue ) );
            LootPack.Average.Generate( chest );

            AddItem( chest, 4, 4, 0 );

            AddMobile( new Orc(), 15, 0, -2, 0 );
            AddMobile( new Orc(), 15, 0,  1, 0 );
            AddMobile( new Orc(), 15, 0,  1, 0 );
            AddMobile( new Orc(), 15, 0,  1, 0 );
            AddMobile( new Orc(), 15, 0,  1, 0 );
            AddMobile( new OrcishMage(), 15, 0, -1, 0 );
            AddMobile( new OrcCaptain(), 15, 0, -1, 0 );
            if ( Utility.RandomBool() )
                AddMobile( new OrcishLord(), 15, 0,  0, 0 );

            switch ( Utility.Random( 8 ) )
            {
                default:m_Prisoner = new Noble(); break;
                case 0: m_Prisoner = new SeekerOfAdventure(); break;
                case 1: m_Prisoner = new Messenger(); break;
                case 2: m_Prisoner = new Peasant(); break;
                case 3: m_Prisoner = new BrideGroom(); break;
            }

            m_Prisoner.YellHue = Utility.RandomList( 0x57, 0x67, 0x77, 0x87, 0x117 );

            AddMobile( m_Prisoner, 2, -2, 0, 0 );
        }
示例#7
0
        public override void AddComponents()
        {
            BaseCreature bc;

            IronGate gate = new IronGate( DoorFacing.EastCCW );
            m_Gate = gate;

            gate.KeyValue = Key.RandomValue();
            gate.Locked = true;

            AddItem( gate, -2, 1, 0 );

            MetalChest chest = new MetalChest();

            chest.ItemID = 0xE7C;
            chest.LiftOverride = true;
            chest.DropItem( new Key( KeyType.Iron, gate.KeyValue ) );

            /*TreasureMapChest.Fill( chest, 2 );*/

            AddItem( chest, 4, 4, 1 );

            AddMobile( new Orc(), 15, 0, -2, 0 );
            AddMobile( new Orc(), 15, 0,  1, 0 );
            AddMobile( new OrcishMage(), 15, 0, -1, 0 );
            AddMobile( new OrcCaptain(), 15, 0,  0, 0 );

            switch ( Utility.Random( 2 ) )
            {
                case 0: m_Prisoner = new Noble(); break;
                case 1: m_Prisoner = new SeekerOfAdventure(); break;
            }

            bc = (BaseCreature)m_Prisoner;
            bc.IsPrisoner = true;
            m_Prisoner.YellHue = Utility.RandomList( 0x57, 0x67, 0x77, 0x87, 0x117 );

            AddMobile( m_Prisoner, 2, -2, 0, 0 );
        }
示例#8
0
        public override void AddComponents()
        {
            this.AddItem(new Item(0xFAC), 0, 0, 0); // fire pit
            this.AddItem(new Item(0xDE3), 0, 0, 0); // camp fire
            this.AddItem(new Item(0x974), 0, 0, 1); // cauldron
			
            for (int i = 0; i < 2; i ++)
            {
                LockableContainer cont = null;
				
                switch ( Utility.Random(3) )
                {
                    case 0:
                        cont = new MetalChest();
                        break;
                    case 1:
                        cont = new WoodenChest();
                        break;
                    case 2:
                        cont = new SmallCrate();
                        break;
                }
				
                cont.Movable = false;
                cont.Locked = true;
				
                cont.TrapType = TrapType.ExplosionTrap;
                cont.TrapPower = Utility.RandomMinMax(30, 40);
                cont.TrapLevel = 2;
                cont.RequiredSkill = 76;
                cont.LockLevel = 66;
                cont.MaxLockLevel = 116;
                cont.DropItem(new Gold(Utility.RandomMinMax(100, 400)));
                cont.DropItem(new Arrow(10));
                cont.DropItem(new Bolt(10));
				
                if (Utility.RandomDouble() < 0.8)
                {
                    switch ( Utility.Random(4) )
                    {
                        case 0:
                            cont.DropItem(new LesserCurePotion());
                            break;
                        case 1:
                            cont.DropItem(new LesserExplosionPotion());
                            break;
                        case 2:
                            cont.DropItem(new LesserHealPotion());
                            break;
                        case 3:
                            cont.DropItem(new LesserPoisonPotion());
                            break;
                    }
                }
				
                if (Utility.RandomDouble() < 0.5)
                {
                    Item item = Loot.RandomArmorOrShieldOrWeapon();					
					
                    if (item is BaseWeapon)
                        BaseRunicTool.ApplyAttributesTo((BaseWeapon)item, false, 0, Utility.RandomMinMax(1, 5), 10, 100);
                    else if (item is BaseArmor)
                        BaseRunicTool.ApplyAttributesTo((BaseArmor)item, false, 0, Utility.RandomMinMax(1, 5), 10, 100);
						
                    cont.DropItem(item);
                }
				
                Point3D loc = this.GetRandomSpawnPoint(3);
				
                this.AddItem(cont, loc.X, loc.Y, loc.Z);			
            }
			
            switch ( Utility.Random(2) )
            {
                case 0:
                    this.m_Prisoner = new Noble();
                    break;
                case 1:
                    this.m_Prisoner = new SeekerOfAdventure();
                    break;
            }
			
            for (int i = 0; i < 4; i ++)
            {
                Point3D loc = this.GetRandomSpawnPoint(5);				
				
                this.AddMobile(this.Camper, 6, loc.X, loc.Y, loc.Z);
            }
			
            Point3D p = this.GetRandomSpawnPoint(3);
			
            this.AddMobile(this.m_Prisoner, 0, p.X, p.Y, p.Z);
            Console.WriteLine(this.Location.ToString());
        }
示例#9
0
        protected virtual void FinishEffect(Point3D p, Map map, Mobile from)
        {
            from.RevealingAction();

            int spawncount = GetSpawnCount();
            int z          = p.Z;
            //Ghost ship Z, should be 10 lower than the spawn Z
            int gsZ = z - 30; //Set to -30 so it spawns under the sea and then emerges up
            //Spawn Z, needs to be 10 higher than ghost ship Z so they get on top of the boat
            int spawnZ = z - 20;

            //Create the ghost ship here
            GhostShip gs = new GhostShip();

            //Add treasure
            MetalChest tc = new MetalChest {
                ItemID = 0xE7C, LiftOverride = true
            };

            TreasureMapChest.Fill(tc, 5);

            //Now declare an area the same size as the ship, to look for items that might block
            Point2D     start = new Point2D(p.X - 10, p.Y - 7); //Starting location of the area
            Point2D     end   = new Point2D(p.X + 10, p.Y + 7); //Ending location of the area
            Rectangle2D rect  = new Rectangle2D(start, end);    //Declaring the entire area as a rectangle

            //Create a new list that will contain all items in the rectangle
            List <Item> list = new List <Item>();

            IPooledEnumerable eable = map.GetItemsInBounds(rect); //Get all items in the rectangle

            foreach (Item item in eable)                          //Add all items in the rectangle to the list
            {
                list.Add(item);
            }

            eable.Free();

            //While an item exists in the rectangle, move the spawnlocation of the boat/monsters
            while (list.Count > 0)
            {
                if (Utility.RandomDouble() < 0.5)
                {
                    p.X += 1;
                }
                else
                {
                    p.X -= 1;
                }

                if (Utility.RandomDouble() < 0.5)
                {
                    p.Y += 1;
                }
                else
                {
                    p.Y -= 1;
                }

                start = new Point2D(p.X - 10, p.Y - 7);
                end   = new Point2D(p.X + 10, p.Y + 7);
                rect  = new Rectangle2D(start, end);

                eable = map.GetItemsInBounds(rect);

                //Clear the list as we need to create a new one with the new location of the ship
                list.Clear();

                foreach (Item item in eable)
                {
                    list.Add(item); //Add the items (if any) in the new spawnlocation to the list
                }
                eable.Free();
            }

            //No items blocking, move the ship to the world
            p.Z = gsZ;
            gs.MoveToWorld(p, map);

            //Move the treasure chest to the world
            p.Z  = spawnZ + 2;
            p.X -= 9;
            tc.MoveToWorld(p, map);

            //Add the boat and all items inside the boat here
            gs.Itemlist.Add(gs);
            gs.Itemlist.Add(tc);

            //Add as many spawns as spawncount allows
            for (int i = 0; i < spawncount; ++i)
            {
                BaseCreature spawn;

                switch (Utility.Random(4))
                {
                default:
                    spawn = new LichLord();
                    break;

                case 1:
                    spawn = new AncientLich();
                    break;

                case 2:
                    spawn = new Lich();
                    break;

                case 3:
                    spawn = new SkeletalCaptain();
                    break;
                }

                p.Z = spawnZ;
                Spawn(p, map, spawn);

                spawn.Combatant = from;

                //Add the spawn to the list "spawns", needed for the boat decay timer and emerge timer
                gs.Spawnlist.Add(spawn);
            }

            //Start the emerge timer, so the boat doesn't just appear instantly on top of the water
            new EmergeTimer(gs.Itemlist, gs.Spawnlist).Start();

            Delete();
        }
示例#10
0
        public void BuildChest()
        {
            m_MetalChest = new MetalChest();
            m_MetalChest.Name = "Dead Man's Chest";
            m_MetalChest.Hue = Utility.RandomMetalHue();
            m_MetalChest.Movable = false;

            // level 5 chest logic
            m_MetalChest.RequiredSkill = 100;
            m_MetalChest.LockLevel = m_MetalChest.RequiredSkill - 10;
            m_MetalChest.MaxLockLevel = m_MetalChest.RequiredSkill + 40;

            // reset the trap
            m_MetalChest.TrapEnabled = true;
            m_MetalChest.TrapPower = 5 * 25;	// level 5
            m_MetalChest.Locked = true;
            m_MetalChest.TrapType = Utility.RandomBool() ? TrapType.PoisonTrap : TrapType.ExplosionTrap;

            // setup timmed release logic
            string[] lines = new string[4];
            lines[0] = "Movable true";
            lines[1] = "TrapEnabled false";
            lines[2] = "TrapPower 0";
            lines[3] = "Locked true";

            // the chest will become movable in 10-25 minutes
            DateTime SetTime = DateTime.Now + TimeSpan.FromMinutes(Utility.RandomMinMax(10, 25));
            new TimedSet(m_MetalChest, SetTime, lines).MoveItemToIntStorage();

            // add loot
            FillChest();

            // move the chest to world;
            m_MetalChest.MoveToWorld(Location, Map);

        }
示例#11
0
		public override Item Construct(Type type, Mobile from)
		{
			if (type == typeof(TreasureMap))
			{
				int level;
				//if ( from is PlayerMobile && ((PlayerMobile)from).Young && from.Map == Map.Trammel && TreasureMap.IsInHavenIsland( from ) )
				//	level = 0;
				//else
				level = 1;

				return new TreasureMap(level, Map.Felucca);
			}
			else if (type == typeof(MessageInABottle))
			{
				return new MessageInABottle( /*from.Map == Map.Felucca ?*/ Map.Felucca /* : Map.Trammel*/);
			}

			Container pack = from.Backpack;

			if (pack != null)
			{
				List<SOS> messages = pack.FindItemsByType<SOS>();

				for (int i = 0; i < messages.Count; ++i)
				{
					SOS sos = messages[i];

					if (from.Map == sos.TargetMap &&
						from.InRange(sos.TargetLocation, (int)(from.Skills[SkillName.Fishing].Value - 75.0)))
					{
						Item preLoot = null;

						switch (Utility.Random(8))
						{
							case 0: // Body parts
								{
									var list = new[]
									{
										0x1CDD, 0x1CE5, // arm
										0x1CE0, 0x1CE8, // torso
										0x1CE1, 0x1CE9, // head
										0x1CE2, 0x1CEC // leg
									};

									preLoot = new ShipwreckedItem(Utility.RandomList(list));
									break;
								}
							case 1: // Bone parts
								{
									var list = new[]
									{
										0x1AE0, 0x1AE1, 0x1AE2, 0x1AE3, 0x1AE4, // skulls
										0x1B09, 0x1B0A, 0x1B0B, 0x1B0C, 0x1B0D, 0x1B0E, 0x1B0F, 0x1B10, // bone piles
										0x1B15, 0x1B16 // pelvis bones
									};

									preLoot = new ShipwreckedItem(Utility.RandomList(list));
									break;
								}
							case 2: // Paintings and portraits
								{
									preLoot = new ShipwreckedItem(Utility.Random(0xE9F, 10));
									break;
								}
							case 3: // Pillows
								{
									preLoot = new ShipwreckedItem(Utility.Random(0x13A4, 11));
									break;
								}
							case 4: // Shells
								{
									preLoot = new ShipwreckedItem(Utility.Random(0xFC4, 9));
									break;
								}
							case 5: //Hats
								{
									if (Utility.RandomBool())
									{
										preLoot = new SkullCap();
									}
									else
									{
										preLoot = new TricorneHat();
									}

									break;
								}
							case 6: // Misc
								{
									var list = new[]
									{
										0x1EB5, // unfinished barrel
										0xA2A, // stool
										0xC1F, // broken clock
										0x1047, 0x1048, // globe
										0x1EB1, 0x1EB2, 0x1EB3, 0x1EB4 // barrel staves
									};

									if (Utility.Random(list.Length + 1) == 0)
									{
										preLoot = new Candelabra();
									}
									else
									{
										preLoot = new ShipwreckedItem(Utility.RandomList(list));
									}

									break;
								}
						}

						if (preLoot != null)
						{
							if (preLoot is IShipwreckedItem)
							{
								((IShipwreckedItem)preLoot).IsShipwreckedItem = true;
							}

							return preLoot;
						}

						LockableContainer chest = null;

						switch (Utility.Random(3))
						{
							case 0:
								chest = new MetalGoldenChest();
								break;
							case 1:
								chest = new MetalChest();
								break;
							default:
							case 2:
								chest = new WoodenChest();
								break;
						}
						chest.Breakable = false;
						chest.Locked = false;

						if (sos.IsAncient)
						{
							int hue = 1150;

							if (0.20 > Utility.RandomDouble())
							{
								switch (Utility.Random((chest is WoodenChest) ? 6 : 14))
								{
									case 0:
										hue = 1193;
										break;
									case 1:
										hue = 1281;
										break;
									case 2:
										hue = 1190;
										break;
									case 3:
										hue = 1165;
										break;
									case 4:
										hue = 1160;
										break;
									case 5:
										hue = 1126;
										break;
									case 6:
										hue = CraftResources.GetInfo(CraftResource.Valorite).Hue;
										break;
									case 7:
										hue = CraftResources.GetInfo(CraftResource.Verite).Hue;
										break;
									case 8:
										hue = CraftResources.GetInfo(CraftResource.Agapite).Hue;
										break;
									case 9:
										hue = CraftResources.GetInfo(CraftResource.Gold).Hue;
										break;
									case 10:
										hue = CraftResources.GetInfo(CraftResource.Bronze).Hue;
										break;
									case 11:
										hue = CraftResources.GetInfo(CraftResource.Copper).Hue;
										break;
									case 12:
										hue = CraftResources.GetInfo(CraftResource.ShadowIron).Hue;
										break;
									case 13:
										hue = CraftResources.GetInfo(CraftResource.DullCopper).Hue;
										break;
								}
							}

							chest.Hue = hue;
						}
						else if ((chest is MetalChest || chest is MetalGoldenChest) && (0.5 * sos.Level) >= Utility.RandomDouble())
						{
							int randhue = Utility.Random(120);
							var resource = CraftResource.None;

							if (randhue >= 118)
							{
								resource = CraftResource.Valorite;
							}
							else if (randhue >= 115)
							{
								resource = CraftResource.Verite;
							}
							else if (randhue >= 110)
							{
								resource = CraftResource.Agapite;
							}
							else if (randhue >= 100)
							{
								resource = CraftResource.Gold;
							}
							else if (randhue >= 90)
							{
								resource = CraftResource.Bronze;
							}
							else if (randhue >= 70)
							{
								resource = CraftResource.Copper;
							}
							else if (randhue >= 40)
							{
								resource = CraftResource.ShadowIron;
							}
							else
							{
								resource = CraftResource.DullCopper;
							}

							chest.Hue = CraftResources.GetInfo(resource).Hue;
						}

						int soslevel = sos.Level;

						TreasureMapChest.Fill(chest, soslevel, from.Expansion);

						if (!sos.IsAncient)
						{
							chest.Locked = false;
						}

						double chance = Utility.RandomDouble();
						BaseCreature mibmonster1;
						BaseCreature mibmonster2;
						mibmonster1 = new DeepWaterElemental();
						if (chance <= 0.02 && from.Skills[SkillName.Fishing].Base >= 115)
						{
							mibmonster2 = new Osiredon();
							int choice = Utility.Random(5);
							switch (choice)
							{
								case 4:
									mibmonster2.PackItem(new SmallFishingNetDeed());
									break;
								case 3:
									mibmonster2.PackItem(new LargeFishingNetDeed());
									break;
								case 2:
									mibmonster2.PackItem(new Shell());
									break;
								case 1:
									mibmonster2.PackItem(new Anchor());
									break;
								case 0:
									mibmonster2.PackItem(new Hook());
									break;
							}
						}
						else if (soslevel < 5)
						{
							mibmonster2 = new WaterElemental();
						}
						else
						{
							mibmonster2 = new DeepWaterElemental();
						}
						int x = from.X, y = from.Y;

						Map map = from.Map;

						mibmonster1.MoveToWorld(new Point3D(x, y, -5), map);
						mibmonster2.MoveToWorld(new Point3D(x, y, -5), map);

						mibmonster1.Home = mibmonster1.Location;
						mibmonster1.HomeMap = mibmonster1.Map;
						mibmonster1.RangeHome = 10;

						mibmonster2.Home = mibmonster2.Location;
						mibmonster2.HomeMap = mibmonster2.Map;
						mibmonster2.RangeHome = 10;

						if (sos.IsAncient)
						{
							chest.DropItem(new FabledFishingNet());
						}
						else
						{
							chest.DropItem(new SpecialFishingNet());
						}

						chest.Movable = true;
						chest.Name = "treasure chest";
						chest.IsShipwreckedItem = true;

						if (sos.Level > 0)
						{
							chest.TrapType = TrapType.ExplosionTrap;
							chest.TrapPower = soslevel * Utility.RandomMinMax(9, 19);
							chest.TrapLevel = 0;
						}
						else
						{
							chest.TrapType = TrapType.None;
							chest.TrapPower = 1;
							chest.TrapLevel = 1;
						}

						sos.Delete();

						return chest;
					}
				}
			}

			return base.Construct(type, from);
		}
示例#12
0
		private Item CreateItem(int ItemID) // Create the appropriate item class - Defaults to a Static Item
		{
			Item item = null;

			switch(ItemID)
			{
				#region MobileSaver
				case 0x0001: // Now used for Mobile Importing.
				{
					item = new Static( 0x1 );
					break;
				}
				#endregion
				case 0x1F19: // Add any unwanted items here.
				case 0x0FB7: // TODO: Boat parts: planks, tillerman, etc.
					break;



				case 0x0FB1:  //forge
					item = new SmallForgeAddon();
					break;
				case 0x0FAF:  //anvil east
					item = new AnvilEastAddon();
					break;
				case 0x0FB0:  //anvil south
					item = new AnvilSouthAddon();
					break;

				case 0x2DD8: //Elven Forge
					item = new ElvenForgeAddon();
					break;

				case 0x1922: //FlourMill East
					item = new FlourMillEastAddon();
					break;
					case 0x1920: case 0x1924: break; //Don't add those items since the addon has them.
				case 0x192E: //FlourMill South
					item = new FlourMillSouthAddon();
					break;
					case 0x192C: case 0x1930: break; //Don't add those items since the addon has them.

				case 0x1060: //Loom East
					item = new LoomEastAddon();
					break;
					case 0x105F: break; //Don't add those items since the addon has them.
				case 0x1061: //Loom South
					item = new LoomSouthAddon();
					break;
					case 0x1062: break; //Don't add those items since the addon has them.

				case 0x1019: //Spinningwheel East
					item = new SpinningwheelEastAddon();
					break;
				case 0x1015: //Spinningwheel South
					item = new SpinningwheelSouthAddon();
					break;


				// Housing Metal Doors
				case 0x679:
					item = new NorthWestDoor();
					break;
				case 0x67B:
					item = new NorthEastDoor();
					break;
				case 0x675:
					item = new SouthWestDoor();
					break;
				case 0x677:
					item = new SouthEastDoor();
					break;
				case 0x683:
					item = new WestNorthDoor();
					break;
				case 0x681:
					item = new WestSouthDoor();
					break;
				case 0x67F:
					item = new EastNorthDoor();
					break;
				case 0x67D:
					item = new EastSouthDoor();
					break;

				/*
				case 0x0675: // Metal Doors 2 NOTE: Some doors seem to open the wrong way, but there's no way to determine correct CCW/CW from the POL file.
					item = new MetalDoor2( DoorFacing.WestCW );
					break;
				case 0x0677:
					item = new MetalDoor2( DoorFacing.EastCCW );
					break;
				case 0x067D:
					item = new MetalDoor2( DoorFacing.SouthCW );
					break;
				case 0x067F:
					item = new MetalDoor2( DoorFacing.NorthCCW );
					break;
				*/

				case 0x0685: // Barred Metal Doors
					item = new BarredMetalDoor( DoorFacing.WestCW );
					break;
				case 0x0687:
					item = new BarredMetalDoor( DoorFacing.EastCCW );
					break;
				case 0x068D:
					item = new BarredMetalDoor( DoorFacing.SouthCW );
					break;
				case 0x068F:
					item = new BarredMetalDoor( DoorFacing.NorthCCW );
					break;

				case 0x0695: // Rattan Doors
					item = new RattanDoor( DoorFacing.WestCW );
					break;
				case 0x0697:
					item = new RattanDoor( DoorFacing.EastCCW );
					break;
				case 0x069D:
					item = new RattanDoor( DoorFacing.SouthCW );
					break;
				case 0x069F:
					item = new RattanDoor( DoorFacing.NorthCCW );
					break;

				case 0x06A5: // Dark Wood Doors
					item = new DarkWoodDoor( DoorFacing.WestCW );
					break;
				case 0x06A7:
					item = new DarkWoodDoor( DoorFacing.EastCCW );
					break;
				case 0x06AD:
					item = new DarkWoodDoor( DoorFacing.SouthCW );
					break;
				case 0x06AF:
					item = new DarkWoodDoor( DoorFacing.NorthCCW );
					break;

				case 0x06B5: // Medium Wood Doors
					item = new MediumWoodDoor( DoorFacing.WestCW );
					break;
				case 0x06B7:
					item = new MediumWoodDoor( DoorFacing.EastCCW );
					break;
				case 0x06BD:
					item = new MediumWoodDoor( DoorFacing.SouthCW );
					break;
				case 0x06BF:
					item = new MediumWoodDoor( DoorFacing.NorthCCW );
					break;

				/*
				case 0x06C5: // Metal Doors
					item = new MetalDoor( DoorFacing.WestCW );
					break;
				case 0x06C7:
					item = new MetalDoor( DoorFacing.EastCCW );
					break;
				case 0x06CD:
					item = new MetalDoor( DoorFacing.SouthCW );
					break;
				case 0x06CF:
					item = new MetalDoor( DoorFacing.NorthCCW );
					break;
				*/

				case 0x06D5: // Light Wood Doors
					item = new LightWoodDoor( DoorFacing.WestCW );
					break;
				case 0x06D7:
					item = new LightWoodDoor( DoorFacing.EastCCW );
					break;
				case 0x06DD:
					item = new LightWoodDoor( DoorFacing.SouthCW );
					break;
				case 0x06DF:
					item = new LightWoodDoor( DoorFacing.NorthCCW );
					break;

				case 0x06E5: // Strong Wood Doors
					item = new StrongWoodDoor( DoorFacing.WestCW );
					break;
				case 0x06E7:
					item = new StrongWoodDoor( DoorFacing.EastCCW );
					break;
				case 0x06ED:
					item = new StrongWoodDoor( DoorFacing.SouthCW );
					break;
				case 0x06EF:
					item = new StrongWoodDoor( DoorFacing.NorthCCW );
					break;

				case 0x2A05: //South facing West half Paper door (SE)
					item = new SWPaperSEDoor();
					break;
				case 0x2A07: //South facing East half Paper door (SE)
					item = new SEPaperSEDoor();
					break;
				case 0x2A09: //East facing South half Paper door (SE)
					item = new ESPaperSEDoor();
					break;
				case 0x2A0B: //East facing North half Paper door (SE)
					item = new ENPaperSEDoor();
					break;

				case 0x2A0D: //South facing West half Cloth door (SE)
					item = new SWClothSEDoor();
					break;
				case 0x2A0F: //South facing East half Cloth door (SE)
					item = new SEClothSEDoor();
					break;
				case 0x2A11: //East facing South half Cloth door (SE)
					item = new ESClothSEDoor();
					break;
				case 0x2A13: //East facing North half Cloth door (SE)
					item = new ENClothSEDoor();
					break;

				case 0x2A16: //South facing West half Wooden door (SE)
					item = new SWWoodenSEDoor();
					break;
				case 0x2A17: //South facing East half Wooden door (SE)
					item = new SEWoodenSEDoor();
					break;
				case 0x2A19: //East facing South half Wooden door (SE)
					item = new ESWoodenSEDoor();
					break;
				case 0x2A1B: //East facing North half Wooden door (SE)
					item = new ENWoodenSEDoor();
					break;



				case 0xE77: //Barrel
					item = new Barrel();
					item.Movable = false;
					break;
				case 0xE7F: //Keg
					item = new Keg();
					item.Movable = false;
					break;
				case 0xE7A: //PicnicBasket
					item = new PicnicBasket();
					item.Movable = false;
					break;
				case 0x990: //Basket
					item = new Basket();
					item.Movable = false;
					break;
				case 0x9AA: //WoodenBox (0xE7D)
					item = new WoodenBox();
					item.Movable = false;
					break;
				case 0xE7D: //WoodenBox (0xE7D)
					item = new WoodenBox();
					item.Movable = false;
					item.ItemID = 0xE7D;
					break;
				case 0x9A9: //SmallCrate (0xE7E)
					item = new SmallCrate();
					item.Movable = false;
					break;
				case 0xE7E: //SmallCrate (0xE7E)
					item = new SmallCrate();
					item.Movable = false;
					item.ItemID = 0xE7E;
					break;
				case 0xE3F: //MediumCrate (0xE3E)
					item = new MediumCrate();
					item.Movable = false;
					break;
				case 0xE3E: //MediumCrate (0xE3E)
					item = new MediumCrate();
					item.Movable = false;
					item.ItemID = 0xE3E;
					break;
				case 0xE3D: //LargeCrate (0xE3C)
					item = new LargeCrate();
					item.Movable = false;
					break;
				case 0xE3C: //LargeCrate (0xE3C)
					item = new LargeCrate();
					item.Movable = false;
					item.ItemID = 0xE3C;
					break;
				case 0x9A8: //MetalBox (0xE80)
					item = new MetalBox();
					item.Movable = false;
					break;
				case 0xE80: //MetalBox (0xE80)
					item = new MetalBox();
					item.Movable = false;
					item.ItemID = 0xE80;
					break;
				case 0x9AB: //MetalChest (0xE7C)
					item = new MetalChest();
					item.Movable = false;
					break;
				case 0xE7C: //MetalChest (0xE7C)
					item = new MetalChest();
					item.Movable = false;
					item.ItemID = 0xE7C;
					break;
				case 0xE41: //MetalGoldenChest (0xE40)
					item = new MetalGoldenChest();
					item.Movable = false;
					break;
				case 0xE40: //MetalGoldenChest (0xE40)
					item = new MetalGoldenChest();
					item.Movable = false;
					item.ItemID = 0xE40;
					break;
				case 0xe43: //WoodenChest (0xe42)
					item = new WoodenChest();
					item.Movable = false;
					break;
				case 0xe42: //WoodenChest (0xe42)
					item = new WoodenChest();
					item.Movable = false;
					item.ItemID = 0xe42;
					break;
				case 0x280B: //PlainWoodenChest (0x280C)
					item = new PlainWoodenChest();
					item.Movable = false;
					break;
				case 0x280C: //PlainWoodenChest (0x280C)
					item = new PlainWoodenChest();
					item.Movable = false;
					item.ItemID = 0x280C;
					break;
				case 0x280D: //OrnateWoodenChest (0x280E)
					item = new OrnateWoodenChest();
					item.Movable = false;
					break;
				case 0x280E: //OrnateWoodenChest (0x280E)
					item = new OrnateWoodenChest();
					item.Movable = false;
					item.ItemID = 0x280E;
					break;
				case 0x280F: //GildedWoodenChest (0x2810)
					item = new GildedWoodenChest();
					item.Movable = false;
					break;
				case 0x2810: //GildedWoodenChest (0x2810)
					item = new GildedWoodenChest();
					item.Movable = false;
					item.ItemID = 0x2810;
					break;
				case 0x2811: //WoodenFootLocker (0x2812)
					item = new WoodenFootLocker();
					item.Movable = false;
					break;
				case 0x2812: //WoodenFootLocker (0x2812)
					item = new WoodenFootLocker();
					item.Movable = false;
					item.ItemID = 0x2812;
					break;
				case 0x2813: //FinishedWoodenChest (0x2814)
					item = new FinishedWoodenChest();
					item.Movable = false;
					break;
				case 0x2814: //FinishedWoodenChest (0x2814)
					item = new FinishedWoodenChest();
					item.Movable = false;
					item.ItemID = 0x2814;
					break;

				case 0x2815: //TallCabinet (0x2816)
					item = new TallCabinet();
					item.Movable = false;
					break;
				case 0x2816: //TallCabinet (0x2816)
					item = new TallCabinet();
					item.Movable = false;
					item.ItemID = 0x2816;
					break;
				case 0x2817: //ShortCabinet (0x2818)
					item = new ShortCabinet();
					item.Movable = false;
					break;
				case 0x2818: //ShortCabinet (0x2818)
					item = new ShortCabinet();
					item.Movable = false;
					item.ItemID = 0x2818;
					break;
				case 0x2857: //RedArmoire (0x2858)
					item = new RedArmoire();
					item.Movable = false;
					break;
				case 0x2858: //RedArmoire (0x2858)
					item = new RedArmoire();
					item.Movable = false;
					item.ItemID = 0x2858;
					break;
				case 0x285D: //CherryArmoire (0x285E)
					item = new CherryArmoire();
					item.Movable = false;
					break;
				case 0x285E: //CherryArmoire (0x285E)
					item = new CherryArmoire();
					item.Movable = false;
					item.ItemID = 0x285E;
					break;
				case 0x285B: //MapleArmoire (0x285C)
					item = new MapleArmoire();
					item.Movable = false;
					break;
				case 0x285C: //MapleArmoire (0x285C)
					item = new MapleArmoire();
					item.Movable = false;
					item.ItemID = 0x285C;
					break;
				case 0x2859: //ElegantArmoire (0x285A)
					item = new ElegantArmoire();
					item.Movable = false;
					break;
				case 0x285A: //ElegantArmoire (0x285A)
					item = new ElegantArmoire();
					item.Movable = false;
					item.ItemID = 0x285A;
					break;
				case 0xA97: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c)
					item = new FullBookcase();
					item.Movable = false;
					break;
				case 0xA99: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c)
					item = new FullBookcase();
					item.Movable = false;
					item.ItemID = 0xa99;
					break;
				case 0xA98: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c)
					item = new FullBookcase();
					item.Movable = false;
					item.ItemID = 0xa98;
					break;
				case 0xA9a: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c)
					item = new FullBookcase();
					item.Movable = false;
					item.ItemID = 0xa9a;
					break;
				case 0xA9b: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c)
					item = new FullBookcase();
					item.Movable = false;
					item.ItemID = 0xa9b;
					break;
				case 0xA9c: //FullBookcase (0xa97, 0xa99, 0xa98, 0xa9a, 0xa9b, 0xa9c)
					item = new FullBookcase();
					item.Movable = false;
					item.ItemID = 0xa9c;
					break;
				case 0xA9D: //EmptyBookcase (0xa9e)
					item = new EmptyBookcase();
					item.Movable = false;
					break;
				case 0xa9e: //EmptyBookcase (0xa9e)
					item = new EmptyBookcase ();
					item.Movable = false;
					item.ItemID = 0xa9e;
					break;
				case 0xA2C: //Drawer (0xa34)
					item = new Drawer();
					item.Movable = false;
					break;
				case 0xa34: //Drawer (0xa34)
					item = new Drawer();
					item.Movable = false;
					item.ItemID = 0xa34;
					break;
				case 0xA30: //FancyDrawer (0xa38)
					item = new FancyDrawer();
					item.Movable = false;
					break;
				case 0xa38: //FancyDrawer (0xa38)
					item = new FancyDrawer();
					item.Movable = false;
					item.ItemID = 0xa38;
					break;
				case 0xA4F: //Armoire (0xa53)
					item = new Armoire();
					item.Movable = false;
					break;
				case 0xa53: //Armoire (0xa53)
					item = new Armoire();
					item.Movable = false;
					item.ItemID = 0xa53;
					break;
				case 0xA4D: //FancyArmoire (0xa51)
					item = new FancyArmoire();
					item.Movable = false;
					break;
				case 0xa51: //FancyArmoire (0xa51)
					item = new FancyArmoire();
					item.Movable = false;
					item.ItemID = 0xa51;
					break;



				default:
					item = new Static(ItemID);
					item.Movable = false;
					break;

			}

			return item;
		}
示例#13
0
        public override void AddComponents()
        {
            BaseCreature bc;

            AddItem(new Static(0xFAC), 0, 0, 0); // fire pit
            AddItem(new Static(0xDE3), 0, 0, 0); // camp fire
            AddItem(new Static(0x974), 0, 0, 1); // cauldron

            // Chest
            MetalChest chest = new MetalChest();

            switch (Utility.Random(3))
            {
                case 0: chest.ItemID = 0x9AB; break; // MetalChest
                case 1: chest.ItemID = 0xe43; break; // WoodenChest
                case 2: chest.ItemID = 0x9A9; break; // SmallCrate
            }

            chest.Movable = false;
            chest.Locked = true;
            chest.TrapType = TrapType.ExplosionTrap;
            chest.TrapPower = Utility.RandomMinMax(30, 40);
            chest.TrapLevel = 2;
            chest.RequiredSkill = 76;
            chest.LockLevel = 66;
            chest.MaxLockLevel = 116;
            chest.DropItem(new Gold(Utility.RandomMinMax(100, 400)));
            chest.DropItem(new Arrow(10));
            chest.DropItem(new Bolt(10));

            if (Utility.RandomDouble() < 0.8)
            {
                switch (Utility.Random(4))
                {
                    case 0: chest.DropItem(new LesserCurePotion()); break;
                    case 1: chest.DropItem(new LesserExplosionPotion()); break;
                    case 2: chest.DropItem(new LesserHealPotion()); break;
                    case 3: chest.DropItem(new LesserPoisonPotion()); break;
                }
            }

            if (Utility.RandomDouble() < 0.5)
            {
                Item item = Loot.RandomArmorOrShieldOrWeapon();

                if (item is BaseWeapon)
                    BaseRunicTool.ApplyAttributesTo((BaseWeapon)item, false, 0, Utility.RandomMinMax(1, 5), 10, 100);
                else if (item is BaseArmor)
                    BaseRunicTool.ApplyAttributesTo((BaseArmor)item, false, 0, Utility.RandomMinMax(1, 5), 10, 100);

                chest.DropItem(item);
            }

            AddItem(chest, 1, 1, 1);

            // Brigands
            AddMobile(new Brigand(), 15, 0, -2, 0);
            AddMobile(new Brigand(), 15, 0, 1, 0);
            AddMobile(new Brigand(), 15, 0, -1, 0);
            AddMobile(new Brigand(), 15, 0, 0, 0);
            AddMobile(new Brigand(), 15, 0, -1, 0);
            AddMobile(new Brigand(), 15, 0, 0, 0);

            // prisioner
            switch (Utility.Random(2))
            {
                case 0: m_Prisoner = new Noble(); break;
                case 1: m_Prisoner = new SeekerOfAdventure(); break;
            }

            bc = (BaseCreature)m_Prisoner;
            bc.IsPrisoner = true;
            m_Prisoner.YellHue = Utility.RandomList(0x57, 0x67, 0x77, 0x87, 0x117);

            AddMobile(m_Prisoner, 2, -2, 0, 0);
        }
示例#14
0
        public override bool OnBeforeDeath()
        {
            Item item = null;
            switch (Utility.Random(8))
            {
                case 0:
                    item = new SpecialLeggings();
                    item.Name = "Azothu's Leggings";
                    break;	// Leggings
                case 1:
                    item = new SpecialArms();
                    item.Name = "Azothu's Arms";
                    break;	// arms
                case 2:
                    item = new SpecialTunic();
                    item.Name = "Azothu's Tunic";
                    break;	// Chest
                case 3:
                    item = new SpecialArmor();
                    item.Name = "Azothu's Armor";
                    break;	// Female Chest
                case 4:
                    item = new SpecialGorget();
                    item.Name = "Azothu's Gorget";
                    break;	// gorget
                case 5:
                    item = new SpecialGloves();
                    item.Name = "Azothu's Gloves";
                    break;	// gloves
                case 6:
                    item = new SpecialHelm();
                    item.Name = "Azothu's Helm";
                    break;	// helm
                case 7:
                    item = new MetalChest();
                    item.Name = "Azothu's Locker";
                    break;	// helm
            }

            if (item != null)
            {
                item.Hue = 0x84A;
                PackItem(item);
            }

            return base.OnBeforeDeath();
        }
         public override void AddComponents()
         {
             IronGate gate = new IronGate( DoorFacing.EastCCW );
             m_Gate = gate;

             gate.KeyValue = Key.RandomValue();
             gate.Locked = false;

             AddItem( gate, -2, 1, 0 );

             MetalChest chest = new MetalChest();

             chest.ItemID = 0xE7C;
             chest.LiftOverride = true;
             chest.DropItem( new Key( KeyType.Iron, gate.KeyValue ) );

             TreasureMapChest.Fill(chest, 3);  //<---------Loot

             AddItem( chest, 4, 4, 1 ); //<------z +1 to hover over static
             switch (Utility.Random(4))
             {
                 case 0: 
                     {
                         AddMobile(new Orc(), 15, 0, -2, 0);
                         AddMobile(new OrcishMage(), 15, 0, 1, 0);
                         AddMobile(new OrcishLord(), 15, 0, -2, 0);
                         AddMobile(new OrcCaptain(), 15, 0, 1, 0);
                         AddMobile(new Orc(), 15, 0, -1, 0);
                         AddMobile(new OrcChopper(), 15, 0, -2, 0);
                     }break;
                 
                 case 1:
                     {
                         AddMobile(new Ratman(), 15, 0, -2, 0);
                         AddMobile(new Ratman(), 15, 0, 1, 0);
                         AddMobile(new RatmanMage(), 15, 0, -2, 0);
                         AddMobile(new Ratman(), 15, 0, 1, 0);
                         AddMobile(new RatmanArcher(), 15, 0, -1, 0);
                         AddMobile(new Ratman(), 15, 0, -2, 0);
                     } break;

                 case 2:
                     {
                         AddMobile(new Lizardman(), 15, 0, -2, 0);
                         AddMobile(new Lizardman(), 15, 0, 1, 0);
                         AddMobile(new Lizardman(), 15, 0, -2, 0);
                         AddMobile(new Lizardman(), 15, 0, 1, 0);
                         AddMobile(new Lizardman(), 15, 0, -1, 0);
                         AddMobile(new Lizardman(), 15, 0, -2, 0);
                     } break;

                      case 3:
                     {
                         AddMobile(new Brigand(), 15, 0, -2, 0);
                         AddMobile(new Brigand(), 15, 0, 1, 0);
                         AddMobile(new Brigand(), 15, 0, -2, 0);
                         AddMobile(new Brigand(), 15, 0, 1, 0);
                         AddMobile(new Brigand(), 15, 0, -1, 0);
                         AddMobile(new Brigand(), 15, 0, -2, 0);
                     } break;
             }
             
             switch ( Utility.Random( 2 ) )
             {
                 case 0: m_Prisoner = new Noble(); break;
                 case 1: m_Prisoner = new SeekerOfAdventure(); break;
             }

             m_Prisoner.YellHue = Utility.RandomList( 0x57, 0x67, 0x77, 0x87, 0x117 );

             AddMobile( m_Prisoner, 2, -2, 0, 0 );
         }
示例#16
0
		protected virtual void FinishEffect( Point3D p, Map map, Mobile from )
		{
			from.RevealingAction();

            int spawncount = GetSpawnCount();
		    int z = p.Z;
            //Ghost ship Z, should be 10 lower than the spawn Z
            int gsZ = z - 30; //Set to -30 so it spawns under the sea and then emerges up
            //Spawn Z, needs to be 10 higher than ghost ship Z so they get on top of the boat
		    int spawnZ = z - 20;

            //Create the ghost ship here
            GhostShip gs = new GhostShip();

            //Add treasure
            MetalChest tc = new MetalChest {ItemID = 0xE7C, LiftOverride = true};
            TreasureMapChest.Fill(tc, 5);

            //Now declare an area the same size as the ship, to look for items that might block
            Point2D start = new Point2D( p.X - 10, p.Y - 7 ); //Starting location of the area
            Point2D end = new Point2D(p.X + 10, p.Y + 7); //Ending location of the area
			Rectangle2D rect = new Rectangle2D( start, end ); //Declaring the entire area as a rectangle
            
            //Create a new list that will contain all items in the rectangle
            List<Item> list = new List<Item>();

		    IPooledEnumerable eable = map.GetItemsInBounds(rect); //Get all items in the rectangle

            foreach (Item item in eable) //Add all items in the rectangle to the list
                list.Add(item);

            eable.Free();

            //While an item exists in the rectangle, move the spawnlocation of the boat/monsters
            while (list.Count > 0 )
            {
                if (Utility.RandomDouble() < 0.5 )
                    p.X += 1;
                else
                    p.X -= 1;

                if (Utility.RandomDouble() < 0.5)
                    p.Y += 1;
                else
                    p.Y -= 1;

                start = new Point2D(p.X - 10, p.Y - 7);
                end = new Point2D(p.X + 10, p.Y + 7);
                rect = new Rectangle2D(start, end);

                eable = map.GetItemsInBounds(rect);

                //Clear the list as we need to create a new one with the new location of the ship
                list.Clear();

                foreach (Item item in eable)
                    list.Add(item); //Add the items (if any) in the new spawnlocation to the list

                eable.Free();
            }

            //No items blocking, move the ship to the world
            p.Z = gsZ;
		    gs.MoveToWorld(p, map);

            //Move the treasure chest to the world
            p.Z = spawnZ + 2;
		    p.X -= 9;
            tc.MoveToWorld(p, map);

            //Add the boat and all items inside the boat here
            gs.Itemlist.Add(gs);
            gs.Itemlist.Add(tc);

            //Add as many spawns as spawncount allows
            for (int i = 0; i < spawncount; ++i)
            {
                
                BaseCreature spawn;

                switch (Utility.Random(4))
                {
                    default:
                        spawn = new LichLord();
                        break;
                    case 1:
                        spawn = new AncientLich();
                        break;
                    case 2:
                        spawn = new Lich();
                        break;
                    case 3:
                        spawn = new SkeletalCaptain();
                        break;
                }

                p.Z = spawnZ;
                Spawn(p, map, spawn);

                spawn.Combatant = from;

                //Add the spawn to the list "spawns", needed for the boat decay timer and emerge timer
                gs.Spawnlist.Add(spawn);
            }

            //Start the emerge timer, so the boat doesn't just appear instantly on top of the water
            new EmergeTimer(gs.Itemlist, gs.Spawnlist).Start();

			Delete();
		}
示例#17
0
		public override void Deserialize(GenericReader reader)
		{
			base.Deserialize(reader);

			int version = reader.ReadEncodedInt();

			switch (version)
			{
				case 1:
					m_Chest = reader.ReadItem<MetalChest>();
					m_Filled = reader.ReadBool();
					goto case 0;
				case 0:
					{
						m_Prisoner = reader.ReadMobile();
						m_Gate = reader.ReadItem<BaseDoor>();
					}
					break;
			}
		}
示例#18
0
        public override void AddComponents()
        {
            Item item = new Item( 0xFAC );
            item.Movable = false;
            AddItem( item, 0, 0, 0 ); // fire pit
            item = new Item( 0xDE3 );
            item.Movable = false;
            AddItem( item, 0, 0, 0 ); // camp fire
            item = new Item( 0x974 );
            item.Movable = false;
            AddItem( item, 0, 0, 1 ); // cauldron

            for ( int i = 0; i < 2; i++ )
            {
                LockableContainer cont = null;

                switch ( Utility.Random( 3 ) )
                {
                    case 0:
                        cont = new MetalChest();
                        break;
                    case 1:
                        cont = new WoodenChest();
                        break;
                    case 2:
                        cont = new SmallCrate();
                        break;
                }

                cont.Movable = false;
                cont.Locked = true;

                cont.TrapType = TrapType.ExplosionTrap;
                cont.TrapPower = Utility.RandomMinMax( 30, 40 );
                cont.TrapLevel = 2;
                cont.TrapEnabled = true;

                cont.RequiredSkill = 76;
                cont.LockLevel = 66;
                cont.MaxLockLevel = 116;

                cont.DropItem( new Gold( Utility.RandomMinMax( 100, 400 ) ) );
                cont.DropItem( new Arrow( 10 ) );
                cont.DropItem( new Bolt( 10 ) );

                if ( Utility.RandomDouble() < 0.8 )
                {
                    switch ( Utility.Random( 4 ) )
                    {
                        case 0:
                            cont.DropItem( new LesserCurePotion() );
                            break;
                        case 1:
                            cont.DropItem( new LesserExplosionPotion() );
                            break;
                        case 2:
                            cont.DropItem( new LesserHealPotion() );
                            break;
                        case 3:
                            cont.DropItem( new LesserPoisonPotion() );
                            break;
                    }
                }

                if ( Utility.RandomDouble() < 0.5 )
                {
                    item = Loot.RandomArmorOrShieldOrWeapon();

                    if ( item is BaseWeapon )
                        BaseRunicTool.ApplyAttributesTo( (BaseWeapon) item, false, 0, Utility.RandomMinMax( 1, 5 ), 10, 100 );
                    else if ( item is BaseArmor )
                        BaseRunicTool.ApplyAttributesTo( (BaseArmor) item, false, 0, Utility.RandomMinMax( 1, 5 ), 10, 100 );

                    cont.DropItem( item );
                }

                AddItem( cont, Utility.RandomMinMax( -5, 5 ), Utility.RandomMinMax( -5, 5 ), 0 );
            }

            m_Prisoner = new BaseEscort();

            for ( int i = 0; i < 4; i++ )
            {
                Point3D loc = GetRandomSpawnPoint( 5 );

                AddMobile( new Brigand(), 6, 0, 0, 0 );
            }

            AddMobile( m_Prisoner, 2, 2, 3, 0 );
        }