Example #1
0
        public override Item Construct( Type type, Mobile from )
        {
            if ( type == typeof( MessageInABottle ) )
                return new MessageInABottle( SafeMap( from.Map ) );

            Container pack = from.Backpack;

            if ( pack != null )
            {
                Item[] messages = pack.FindItemsByType( typeof( SOS ) );

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

                    if ( from.Map == sos.TargetMap && from.InRange( sos.TargetLocation, 60 ) )
                    {
                        Item preLoot = null;

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

                                preLoot = new ShipwreckedItem( Utility.RandomList( list ) );
                                break;
                            }
                            case 1: // Bone parts
                            {
                                int[] list = new int[]
                                    {
                                        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: // Misc
                            {
                                int[] list = new int[]
                                    {
                                        0x1EB5, // unfinished barrel
                                        0xA2A, // stool
                                        0xC1F, // broken clock
                                        0x1047, 0x1048, // globe
                                        0x1EB1, 0x1EB2, 0x1EB3, 0x1EB4 // barrel staves
                                    };

                                preLoot = new ShipwreckedItem( Utility.RandomList( list ) );
                                break;
                            }
                        }

                        if ( preLoot != null )
                            return preLoot;

                        sos.Delete();

                        WoodenChest chest = new WoodenChest();

                        //TreasureMapChest.Fill( chest, Utility.RandomMinMax( 1, 3 ) );

                        // TODO: Are there chances on this? All MIB's I've done had nets..
                        chest.DropItem( new SpecialFishingNet() );

                        chest.Movable = true;
                        chest.Locked = false;
                        chest.TrapType = TrapType.None;
                        chest.TrapPower = 0;
                        chest.Trapped = false;

                        return chest;
                    }
                }
            }

            return base.Construct( type, from );
        }
Example #2
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, from.Map == Map.Felucca ? Map.Felucca : Map.Trammel );
            }
            else if ( type == typeof( MessageInABottle ) )
            {
                return new MessageInABottle( SafeMap( from.Map ) );
            }

            Container pack = from.Backpack;

            if ( pack != null )
            {
                Item[] messages = pack.FindItemsByType( typeof( SOS ) );

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

                    if ( from.Map == sos.TargetMap && from.InRange( sos.TargetLocation, 60 ) )
                    {
                        Item preLoot = null;

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

                                preLoot = new ShipwreckedItem( Utility.RandomList( list ) );
                                break;
                            }
                            case 1: // Bone parts
                            {
                                int[] list = new int[]
                                    {
                                        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: // Misc
                            {
                                int[] list = new int[]
                                    {
                                        0x1EB5, // unfinished barrel
                                        0xA2A, // stool
                                        0xC1F, // broken clock
                                        0x1047, 0x1048, // globe
                                        0x1EB1, 0x1EB2, 0x1EB3, 0x1EB4, // barrel staves
                                        0xB5B, 0xB4F, 0xB5E, 0xB57, 0xB53, // chairs
                                        0x1560, 0x1562, 0x155D, 0x155E, 0x1582, 0x1634, //Deco Bows/Swords
                                        0x156C, 0x157E, 0x1580, 0x1565, 0x1578, 0x1569, //Deco Shields/Axe
                                        0xC1B, 0xC10, 0xC19, 0xC2C, 0xC2D, 0xB95, // Ruined things/Sign
                                        0xE31, 0x19AA, 0x1853, 0x9FB, 0xA05, 0xA26, // Light sources
                                        0x1EA7, 0x26AC, 0x1879, 0x1005, 0x185B, 0xEFB, // Misc items
                                        0x1810, 0xEFC, 0X14F8, 0x166E // More Misc Items
                                        //
                                        // *** Can easily add more stuff to fish up while doing chest!!
                                        //
                                    };

                                preLoot = new ShipwreckedItem( Utility.RandomList( list ) );
                                // This statement converts to Item and tags "... from shipwreck"
                                break;
                            }
                        }

                        if (preLoot != null)  // Drew a "0-5" in above Case Stmt and have preLoot
                        {
                            if (0.143 > Utility.RandomDouble()) // Spawn weak monster ~ every 7 tries
                            {
                                BaseCreature serp1;

                                switch (Utility.Random(5))
                                {
                                    case 0:  { serp1 = new IcebergSnake(); break; }
                                    case 1:  { serp1 = new SeaSlime(); break; }
                                    case 2:  { serp1 = new SeaWorm(); break; }
                                    case 3:  { serp1 = new ToxicSlime(); break; }
                                    default: { serp1 = new OilSlime(); break; }
                                }

                                int x = from.X, y = from.Y;
                                Map map = from.Map;

                                for (int ii = 0; map != null && ii < 20; ++ii)
                                {
                                    int tx = from.X - 10 + Utility.Random(21);
                                    int ty = from.Y - 10 + Utility.Random(21);
                                    Tile t = map.Tiles.GetLandTile(tx, ty);

                                    if (t.Z == -5 && ((t.ID >= 0xA8 && t.ID <= 0xAB) || (t.ID >= 0x136 && t.ID <= 0x137)) && !Spells.SpellHelper.CheckMulti(new Point3D(tx, ty, -5), map))
                                    {
                                        x = tx;
                                        y = ty;
                                        break;
                                    }
                                }

                                serp1.MoveToWorld(new Point3D(x, y, -5), map);
                                serp1.Home = serp1.Location;
                                serp1.RangeHome = 10;
                                from.SendLocalizedMessage(503170); // Uh oh! That doesn't look like a fish!

                            }

                            return preLoot;
                        }

                        sos.Delete();

                        WoodenChest chest = new WoodenChest();

                        TreasureMapChest.Fill( chest, Utility.RandomMinMax( 1, 4 ) );

                        // TODO: Are there chances on this? All MIB's I've done had nets..
                        chest.DropItem( new SpecialFishingNet() );

                        chest.Movable = true;
                        chest.Locked = false;
                        chest.TrapType = TrapType.None;
                        chest.TrapPower = 0;

                        return chest;
                    }
                }
            }

            return base.Construct( type, from );
        }
Example #3
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);
		}
Example #4
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);
		}