public override void OnAccept()
        {
            base.OnAccept();

            if (QuestHelper.TryReceiveQuestItem(Owner, typeof(TreasureHuntingBook), TimeSpan.FromDays(7)))
            {
                WoodenChest chest = new WoodenChest();
                chest.DropItem(new TreasureHuntingBook());

                GreaterHealPotion heals = new GreaterHealPotion
                {
                    Amount = 10
                };
                chest.DropItem(heals);

                TelekinisisScroll scrolls = new TelekinisisScroll
                {
                    Amount = 20
                };
                chest.DropItem(scrolls);

                chest.DropItem(new Pickaxe());
                chest.DropItem(new TreasureSeekersLockpick());

                Owner.Backpack.DropItem(chest);
            }
        }
        public override void OnDoubleClick(Mobile from)
        {
            if (!IsChildOf(from.Backpack))
            {
                from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
            }
            else
            {
                var chest = new WoodenChest();

                chest.DropItem(new WeddingShortBuffetTableDeed());
                chest.DropItem(new WeddingLongBuffetTableDeed());

                var tablebag = new Bag();
                tablebag.DropItem(new WeddingCocktailTable());
                tablebag.DropItem(new WeddingCocktailTable());
                tablebag.DropItem(new WeddingCocktailTable());
                tablebag.DropItem(new WeddingCocktailTable());
                chest.DropItem(tablebag);

                var covchairbag = new Bag();
                covchairbag.DropItem(new WeddingCoveredChair());
                covchairbag.DropItem(new WeddingCoveredChair());
                covchairbag.DropItem(new WeddingCoveredChair());
                covchairbag.DropItem(new WeddingCoveredChair());
                chest.DropItem(covchairbag);

                var folchairbag = new Bag();
                folchairbag.DropItem(new WeddingFoldingChair());
                folchairbag.DropItem(new WeddingFoldingChair());
                folchairbag.DropItem(new WeddingFoldingChair());
                folchairbag.DropItem(new WeddingFoldingChair());
                folchairbag.DropItem(new WeddingFoldingChair());
                folchairbag.DropItem(new WeddingFoldingChair());
                folchairbag.DropItem(new WeddingFoldingChair());
                folchairbag.DropItem(new WeddingFoldingChair());
                folchairbag.DropItem(new WeddingFoldingChair());
                folchairbag.DropItem(new WeddingFoldingChair());
                chest.DropItem(folchairbag);

                var decobag = new Bag();
                decobag.DropItem(new WeddingTabletopBouquet());
                decobag.DropItem(new WeddingTabletopBouquet());
                decobag.DropItem(new WeddingTabletopBouquet());
                decobag.DropItem(new WeddingTabletopBouquet());
                decobag.DropItem(new WeddingTabletopBouquet());
                decobag.DropItem(new WeddingTabletopBouquet());
                decobag.DropItem(new WeddingStandingBouquet());
                decobag.DropItem(new WeddingStandingBouquet());
                decobag.DropItem(new WeddingFancyCandelabra());
                decobag.DropItem(new WeddingRegularCandelabra());
                chest.DropItem(decobag);

                from.AddToBackpack(chest);

                Delete();
            }
        }
Exemple #3
0
        public override void Paint(Level level)
        {
            Entity chest = null;

            if (Rnd.Chance(10))
            {
                chest = new ProtoChest();
            }
            else
            {
                try {
                    chest = ChestRegistry.PlaceRandom(Vector2.Zero, level.Area);
                } catch (Exception e) {
                    Log.Error(e);
                    chest = new WoodenChest();
                }
            }

            level.Area.Add(chest);
            chest.BottomCenter = GetCenter() * 16 + new Vector2(8, 8);
        }
Exemple #4
0
        public override void Paint(Level level)
        {
            base.Paint(level);

            /*
             * todo: a rare variant that spawns below certaint depth with rainbow chests and the cost set to constant 69
             */

            if (Rnd.Chance())
            {
                if (Rnd.Chance())
                {
                    var tt = Tiles.RandomFloor();

                    Painter.Set(level, Left + 2, Top + 2, tt, true);
                    Painter.Set(level, Right - 2, Top + 2, tt, true);
                }

                var t = Tiles.Pick(Tile.WallA, Tile.Chasm, Tile.SensingSpikeTmp, Tile.Planks);

                Painter.Set(level, Left + 2, Top + 2, t);
                Painter.Set(level, Right - 2, Top + 2, t);
            }

            var maanex = new Maanex();

            level.Area.Add(maanex);
            maanex.BottomCenter = new Vector2(Left + 4.5f, Top + 2) * 16;

            var prize = Rnd.Int(4);

            for (var i = 0; i < 3; i++)
            {
                var chest = new WoodenChest();
                level.Area.Add(chest);

                chest.Empty        = i != prize;
                chest.BottomCenter = new Vector2(Left + 2.5f + i * 2, Bottom - 1.5f) * 16;
            }
        }
Exemple #5
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;
            }

            chest.LiftOverride = 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);
        }
Exemple #6
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(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, 60))
                    {
                        Item preLoot = null;

                        switch (Utility.Random(8))
                        {
                        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:                                 //Hats
                        {
                            if (Utility.RandomBool())
                            {
                                preLoot = new SkullCap();
                            }
                            else
                            {
                                preLoot = new TricorneHat();
                            }

                            break;
                        }

                        case 6:                                 // Misc
                        {
                            int[] list = new int[]
                            {
                                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;

                        if (Utility.RandomBool())
                        {
                            chest = new MetalGoldenChest();
                        }
                        else
                        {
                            chest = new WoodenChest();
                        }

                        if (sos.IsAncient)
                        {
                            chest.Hue = 0x481;
                        }

                        TreasureMapChest.Fill(chest, Math.Max(1, Math.Max(4, sos.Level)));

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

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

                        sos.Delete();

                        return(chest);
                    }
                }
            }

            return(base.Construct(type, from));
        }
Exemple #7
0
        public override Item Construct(Type type, Mobile from, Item tool)
        {
            // Searing Weapon Support
            if (type == typeof(BaseWeapon))
            {
                return(null);
            }

            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(from.Map == Map.Felucca ? Map.Felucca : Map.Trammel));
            }
            else if (type == typeof(WhitePearl))
            {
                return(new WhitePearl());
            }

            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 == Map.Felucca || from.Map == Map.Trammel) && from.InRange(sos.TargetLocation, 60))
                    {
                        Item preLoot = null;
                        bool dredge  = HasTypeHook(tool, HookType.Dredging);

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

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

                        case 2:     // Bone parts
                        case 3:
                        {
                            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), dredge);
                            break;
                        }

                        case 4:     // Paintings and portraits
                        case 5:
                        {
                            preLoot = new ShipwreckedItem(Utility.Random(0xE9F, 10), dredge);
                            break;
                        }

                        case 6:     // Pillows
                        case 7:
                        {
                            preLoot = new ShipwreckedItem(Utility.Random(0x13A4, 11), dredge);
                            break;
                        }

                        case 8:     // Shells
                        case 9:
                        {
                            preLoot = new ShipwreckedItem(Utility.Random(0xFC4, 9), dredge);
                            break;
                        }

                        case 10:     //Hats
                        case 11:
                        {
                            if (Utility.RandomBool())
                            {
                                preLoot = new SkullCap();
                            }
                            else
                            {
                                preLoot = new TricorneHat();
                            }

                            break;
                        }

                        case 12:     // Misc
                        case 13:
                        {
                            int[] list = new int[]
                            {
                                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), dredge);
                            }

                            break;
                        }

                            #region High Seas
                        case 14:
                        {
                            int[] list = new int[]
                            {
                                0x1E19, 0x1E1A, 0x1E1B,         //Fish heads
                                0x1E2A, 0x1E2B,                 //Oars
                                0x1E71, 0x1E7A,                 //Unfinished drawers
                                0x1E75,                         //Unfinished legs
                            };

                            double ran = Utility.RandomDouble();

                            if (ran < 0.05)
                            {
                                preLoot = new YellowPolkaDotBikini();
                            }
                            else if (ran < 0.25)
                            {
                                preLoot = new ShipwreckedItem(list[Utility.RandomMinMax(3, 7)], dredge);
                            }
                            else
                            {
                                preLoot = new ShipwreckedItem(list[Utility.Random(3)], dredge);
                            }
                            break;
                        }
                            #endregion
                        }

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

                            return(preLoot);
                        }

                        LockableContainer chest;

                        if (0.01 > Utility.RandomDouble())
                        {
                            chest = new ShipsStrongbox(sos.Level);
                        }
                        else
                        {
                            if (Utility.RandomBool())
                            {
                                chest = new MetalGoldenChest();
                            }
                            else
                            {
                                chest = new WoodenChest();
                            }
                        }

                        if (sos.IsAncient)
                        {
                            chest.Hue = 0x481;
                        }

                        TreasureMapChest.Fill(chest, from is PlayerMobile ? ((PlayerMobile)from).RealLuck : from.Luck, Math.Max(1, Math.Min(4, sos.Level)), true, from.Map);
                        sos.OnSOSComplete(chest);

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

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

                        chest.IsShipwreckedItem = true;

                        sos.Delete();

                        return(chest);
                    }
                }
            }

            return(base.Construct(type, from, tool));
        }
Exemple #8
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
                            };

                            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;

                        return(chest);
                    }
                }
            }

            return(base.Construct(type, from));
        }
Exemple #9
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(/*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, 60))
                    {
                        Item preLoot = null;

                        switch (Utility.Random(8))
                        {
                        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:                                 //Hats
                        {
                            if (Utility.RandomBool())
                            {
                                preLoot = new SkullCap();
                            }
                            else
                            {
                                preLoot = new TricorneHat();
                            }

                            break;
                        }

                        case 6:                                 // Misc
                        {
                            int[] list = new int[]
                            {
                                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;
                        }

                        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);
                            CraftResource 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 = Math.Max(1, Math.Max(4, sos.Level));

                        TreasureMapChest.Fill(chest, soslevel);

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

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

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

                        sos.Delete();

                        return(chest);
                    }
                }
            }

            return(base.Construct(type, from));
        }
        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);
        }
Exemple #11
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();
                    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);
        }
Exemple #12
0
        public override void AddComponents()
        {
            AddItem(new Item(0xFAC), 0, 0, 0);                 // fire pit
            AddItem(new Item(0xDE3), 0, 0, 0);                 // camp fire
            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 = GetRandomSpawnPoint(3);

                AddItem(cont, loc.X, loc.Y, loc.Z);
            }

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

            case 1: m_Prisoner = new SeekerOfAdventure(); break;
            }

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

                AddMobile(Camper, 6, loc.X, loc.Y, loc.Z);
            }

            Point3D p = GetRandomSpawnPoint(3);

            AddMobile(m_Prisoner, 0, p.X, p.Y, p.Z);
            Console.WriteLine(Location.ToString());
        }
Exemple #13
0
        public override Item Construct(Type type, Mobile from, Item _i, HarvestDefinition _d, HarvestBank _b, HarvestResource _r)
        {
            if (type == typeof(TreasureMap))
            {
                int level = 1;

                return(new TreasureMap(level, Map.Felucca));
            }

            else if (type == typeof(MessageInABottle))
            {
                return(new MessageInABottle(Map.Felucca));
            }

            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, 60) && !sos.Completed)
                    {
                        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:     // Pillows
                        {
                            preLoot = new ShipwreckedItem(Utility.Random(0x13A4, 11));
                            break;
                        }

                        case 3:     // Shells
                        {
                            preLoot = new ShipwreckedItem(Utility.Random(0xFC4, 9));
                            break;
                        }

                        case 4:         //Hats
                        {
                            if (Utility.RandomBool())
                            {
                                preLoot = new SkullCap();
                            }
                            else
                            {
                                preLoot = new TricorneHat();
                            }

                            break;
                        }

                        case 5:     // Misc
                        {
                            int[] list = new int[]
                            {
                                0x1EB5,                                        // unfinished barrel
                                0xA2A,                                         // stool
                                0xC1F,                                         // broken clock
                                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;

                        if (Utility.RandomBool())
                        {
                            chest = new MetalGoldenChest();
                        }
                        else
                        {
                            chest = new WoodenChest();
                        }

                        if (sos.IsAncient)
                        {
                            chest.Hue = 0x481;
                        }

                        TreasureMapChest.Fill(chest, Math.Max(1, Math.Min(3, (sos.Level + 1))));

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

                        if (Utility.Random(500) == 0)
                        {
                            Item mask = new HornedTribalMask();
                            mask.Hue  = 2715;
                            mask.Name = "Mask of Cthulu";

                            chest.DropItem(mask);
                        }

                        switch (Utility.Random(300))
                        {
                        case 0:
                        {
                            Item rustedchest = new PlateChest();
                            rustedchest.Hue  = 2718;
                            rustedchest.Name = "a rusted platemail chest recovered from a shipwreck";

                            chest.DropItem(rustedchest);
                            break;
                        }

                        case 1:
                        {
                            Item rustedarms = new PlateArms();
                            rustedarms.Hue  = 2718;
                            rustedarms.Name = "rusted platemail arms recovered from a shipwreck";

                            chest.DropItem(rustedarms);
                            break;
                        }

                        case 2:
                        {
                            Item rustedlegs = new PlateLegs();
                            rustedlegs.Hue  = 2718;
                            rustedlegs.Name = "rusted platemail legguards recovered from a shipwreck";

                            chest.DropItem(rustedlegs);
                            break;
                        }

                        case 3:
                        {
                            Item rustedgloves = new PlateGloves();
                            rustedgloves.Hue  = 2718;
                            rustedgloves.Name = "rusted platemail gloves recovered from a shipwreck";

                            chest.DropItem(rustedgloves);
                            break;
                        }

                        case 4:
                        {
                            Item rustedgorget = new PlateGorget();
                            rustedgorget.Hue  = 2718;
                            rustedgorget.Name = "rusted platemail gorget recovered from a shipwreck";

                            chest.DropItem(rustedgorget);
                            break;
                        }

                        case 5:
                        {
                            Item rustedhelm = new PlateHelm();
                            rustedhelm.Hue  = 2718;
                            rustedhelm.Name = "a rusted platemail helmet recovered from a shipwreck";

                            chest.DropItem(rustedhelm);
                            break;
                        }
                        }

                        switch (Utility.Random(400))
                        {
                        case 0:
                        {
                            Item lamp = new LampPost1();
                            lamp.Name = "Britannia Head Light";
                            lamp.Hue  = 2601;

                            chest.DropItem(lamp);
                            break;
                        }

                        case 1:
                        {
                            Item lantern = new HangingLantern();
                            lantern.Name    = "Fog Lamp";
                            lantern.Hue     = 2601;
                            lantern.Movable = true;

                            chest.DropItem(lantern);
                            break;
                        }
                        }

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

                        sos.Completed = true;

                        BaseBoat ownerBoat = BaseBoat.FindBoatAt(from.Location, from.Map);

                        PlayerMobile player = from as PlayerMobile;

                        if (ownerBoat != null && player != null)
                        {
                            if (ownerBoat.IsFriend(player) || ownerBoat.IsOwner(player) || ownerBoat.IsCoOwner(player))
                            {
                                double doubloonValue = Utility.RandomMinMax(25, 50);

                                int finalDoubloonAmount = (int)doubloonValue;

                                bool shipOwner          = ownerBoat.IsOwner(player);
                                bool bankDoubloonsValid = false;
                                bool holdPlacementValid = false;

                                //Deposit Half In Player's Bank
                                if (Banker.DepositUniqueCurrency(player, typeof(Doubloon), finalDoubloonAmount))
                                {
                                    Doubloon doubloonPile = new Doubloon(finalDoubloonAmount);
                                    player.SendSound(doubloonPile.GetDropSound());
                                    doubloonPile.Delete();

                                    bankDoubloonsValid = true;
                                }

                                //Deposit Other Half in Ship
                                if (ownerBoat.DepositDoubloons(finalDoubloonAmount))
                                {
                                    Doubloon doubloonPile = new Doubloon(finalDoubloonAmount);
                                    player.SendSound(doubloonPile.GetDropSound());
                                    doubloonPile.Delete();

                                    holdPlacementValid = true;
                                }

                                if (shipOwner)
                                {
                                    player.PirateScore += finalDoubloonAmount;
                                    //ownerBoat.doubloonsEarned += finalDoubloonAmount * 2;

                                    if (bankDoubloonsValid && holdPlacementValid)
                                    {
                                        player.SendMessage("You've received " + (finalDoubloonAmount * 2).ToString() + " doubloons for completing a message in a bottle! They have been evenly split between your bank box and your ship's hold.");
                                    }

                                    else if (bankDoubloonsValid && !holdPlacementValid)
                                    {
                                        player.SendMessage("You've earned " + (finalDoubloonAmount * 2).ToString() + " doubloons, however there was not enough room to place all of them in your ship's hold.");
                                    }

                                    else if (!bankDoubloonsValid && holdPlacementValid)
                                    {
                                        player.SendMessage("You've earned " + (finalDoubloonAmount * 2).ToString() + " doubloons, however there was not enough room to place all of them in your bank box.");
                                    }
                                }

                                else
                                {
                                    //ownerBoat.doubloonsEarned += finalDoubloonAmount;
                                    player.PirateScore += finalDoubloonAmount;

                                    if (bankDoubloonsValid)
                                    {
                                        player.SendMessage("You've earned " + finalDoubloonAmount.ToString() + " doubloons for completing a message in a bottle! They have been placed in your bank box.");
                                    }

                                    else
                                    {
                                        player.SendMessage("You've earned doubloons, but there was not enough room to place all of them in your bank box.");
                                    }
                                }
                            }
                        }

                        return(chest);
                    }
                }
            }

            return(base.Construct(type, from, _i, _d, _b, _r));
        }
Exemple #14
0
        public override Item Construct(Type type, Mobile from, object[] args)
        {
            if (type == typeof(TreasureMap))
            {
                return(new TreasureMap(1, from.Map == Map.Felucca ? Map.Felucca : Map.Trammel));
            }
            else if (type == typeof(MessageInABottle))
            {                   // build a level N mib based on the good fishing map level
                if (args != null && args.Length == 2 && args[0] == typeof(MessageInABottle) && args[1] is int)
                {
                    return(new MessageInABottle(SafeMap(from.Map), (int)args[1]));
                }
                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);
                        }

                        Container chest = null;

                        if (sos.Level >= 4 && Utility.RandomChance(10))
                        {
                            chest = new MetalGoldenChest();
                        }
                        else
                        {
                            chest = new WoodenChest();
                        }

                        // regular sos's have a chance at a 1, 2 or 3. high level sos's are high level chests
                        int level = (sos.Level >= 4) ? sos.Level : Utility.RandomMinMax(1, 3);
                        TreasureMapChest.Fill((chest as LockableContainer), level);

                        // add 50% more gold since we are decreasing the chance to get rares
                        Item[] golds = chest.FindItemsByType(typeof(Gold));
                        if (golds != null && golds.Length > 0)
                        {
                            int total = 0;
                            for (int tx = 0; tx < golds.Length; tx++)
                            {
                                total += (golds[tx] as Gold).Amount;
                            }

                            // add 50% more gold
                            chest.DropItem(new Gold(total / 2));

                            // add some cursed gold
                            chest.DropItem(new CursedGold(total / 8));
                        }

                        // adjust high end loot by removing high end weapons and armor
                        if (sos.Level >= 4)
                        {
                            // trim the high end weps and armor so as not to to give away all the highend weapons usually reserved for Treasure Map hunters
                            Item[] lootz     = chest.FindItemsByType(new Type[] { typeof(EnchantedScroll), typeof(BaseArmor), typeof(BaseWeapon) });
                            int    LootzKeep = level == 4 ? Utility.RandomList(2) + 2 : Utility.RandomList(3) + 2;

                            if (lootz != null && lootz.Length > LootzKeep)
                            {
                                // remove some items as we're dropping too much for the sea chest
                                int toDel = lootz.Length - LootzKeep;
                                for (int ox = 0; ox < toDel; ox++)
                                {
                                    Item dx = lootz[ox];
                                    chest.RemoveItem(dx);
                                    dx.Delete();
                                }
                            }
                        }

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

                        // add Good Fishing bonus lootz
                        if (Utility.RandomChance(sos.Level * 8))
                        {
                            switch (sos.Level)
                            {
                            case 1:
                                if (Utility.RandomChance(10))
                                {
                                    Item[] list = new Item[]
                                    {
                                        new AddonDeed(0x0DBB),                                                 // 3515 (0x0DBB) Seaweed
                                        new AddonDeed(0x0C2E),                                                 // 3118 (0x0C2E) debris
                                    };
                                    chest.DropItem(Utility.RandomList(list));
                                }
                                else
                                {
                                    Item[] list = new Item[]
                                    {
                                        new AddonDeed(0x154D),                                                          // 5453 (0x054D) water barrel – empty or filled we don't have them on ai yet.
                                        new AddonDeed(0x0DC9),                                                          // 3529 (0x0DC9) fishing net – unhued and oddly shaped
                                    };
                                    chest.DropItem(Utility.RandomList(list));
                                }
                                break;

                            case 2:
                                if (Utility.RandomChance(10))
                                {
                                    Item[] list = new Item[]
                                    {
                                        new AddonDeed(0x1E9A),                                                 // 7834 (0x1E9A) hook
                                        new AddonDeed(0x1E9D),                                                 // 7837 (0x1E9D) pulleys
                                        new AddonDeed(0x1E9E),                                                 // 7838 (0x1E9E) Pulley
                                    };
                                    chest.DropItem(Utility.RandomList(list));
                                }
                                else
                                {
                                    Item[] list = new Item[]
                                    {
                                        new AddonDeed(0x1EA0),                                                 // 7840 (0x1EA0) Rope
                                        new AddonDeed(0x1EA9, Direction.South),                                // 7849 (0x1EA9) Winch – south
                                        new AddonDeed(0x1EAC, Direction.East),                                 // 7852 (0x1EAC) Winch – east
                                    };
                                    chest.DropItem(Utility.RandomList(list));
                                }
                                break;

                            case 3:
                                if (Utility.RandomChance(10))
                                {
                                    Item[] list = new Item[]
                                    {
                                        new AddonDeed(0x0FCD, Direction.South),                                               // 4045 (0x0FCD) string of shells – south
                                        new AddonDeed(0x0FCE, Direction.South),                                               // 4046 (0x0FCE) string of shells – south
                                        new AddonDeed(0x0FCF, Direction.South),                                               // 4047 (0x0FCF) – string of shells – south
                                        new AddonDeed(0x0FD0, Direction.South),                                               // 4048 (0x0FD0) – string of shells – south
                                        new AddonDeed(0x0FD1, Direction.East),                                                // 4049 (0x0FD1) – string of shells – east
                                        new AddonDeed(0x0FD2, Direction.East),                                                // 4050 (0x0FD2) – string of shells – east
                                        new AddonDeed(0x0FD3, Direction.East),                                                // 4051 (0x0FD3) – string of shells – east
                                        new AddonDeed(0x0FD4, Direction.East),                                                // 4052 (0x0FD4) – string of shells – east
                                    };
                                    chest.DropItem(Utility.RandomList(list));
                                }
                                else
                                {
                                    switch (Utility.Random(4))
                                    {
                                    case 0:
                                        // 4099 (0x1003) – Spittoon
                                        chest.DropItem(new ShipwreckedItem(0x1003));
                                        break;

                                    case 1:
                                        // 4091 (0x0FFB) – Skull mug 1
                                        chest.DropItem(new ShipwreckedItem(0x0FFB));
                                        break;

                                    case 2:
                                        // 4092 (0x0FFC) – Skull mug 2
                                        chest.DropItem(new ShipwreckedItem(0x0FFC));
                                        break;

                                    case 3:
                                        // 3700 (0x0E74) Cannon Balls
                                        chest.DropItem(new AddonDeed(0x0E74));
                                        break;
                                    }
                                }
                                break;

                            case 4:
                                if (Utility.RandomChance(10))
                                {
                                    Item[] list = new Item[]
                                    {
                                        new AddonDeed(0x0C2C),                                                 // 3116 (0x0C2C) Ruined Painting
                                        new AddonDeed(0x0C18),                                                 // 3096 (0x0C18) Covered chair - (server birth on osi)
                                    };
                                    chest.DropItem(Utility.RandomList(list));
                                }
                                else
                                {
                                    Item[] list = new Item[]
                                    {
                                        new AddonDeed(0x1EA3, Direction.South),                                                 // 7843 (0x1EA3) net – south
                                        new AddonDeed(0x1EA4, Direction.East),                                                  // 7844 (0x1EA4) net – east
                                        new AddonDeed(0x1EA5, Direction.South),                                                 // 7845 (0x1EA5) net – south
                                        new AddonDeed(0x1EA6, Direction.East),                                                  // 7846 (0x1EA6) net – east
                                    };
                                    chest.DropItem(Utility.RandomList(list));
                                }
                                break;

                            case 5:
                                if (Utility.RandomChance(10))
                                {
                                    Item[] list = new Item[]
                                    {
                                        new DarkFlowerTapestrySouthDeed(),
                                        new DarkFlowerTapestryEastDeed(),
                                        new LightTapestrySouthDeed(),
                                        new LightTapestryEastDeed(),
                                    };
                                    chest.DropItem(Utility.RandomList(list));
                                }
                                else
                                {
                                    Item[] list = new Item[]
                                    {
                                        new DarkTapestrySouthDeed(),
                                        new DarkTapestryEastDeed(),
                                        new LightFlowerTapestrySouthDeed(),
                                        new LightFlowerTapestryEastDeed(),
                                    };
                                    chest.DropItem(Utility.RandomList(list));
                                }
                                break;
                            }
                        }

                        // 1 in 1000 chance at the actual item (rare)
                        if (Utility.RandomChance(.1))
                        {
                            switch (sos.Level)
                            {
                            case 1:
                                if (Utility.RandomChance(10))
                                {
                                    int[] list = new int[]
                                    {
                                        0x0DBB,                                         // 3515 (0x0DBB) Seaweed
                                        0x0C2E,                                         // 3118 (0x0C2E) debris
                                    };
                                    chest.DropItem(new ShipwreckedItem(Utility.RandomList(list)));
                                }
                                else
                                {
                                    int[] list = new int[]
                                    {
                                        0x154D,                                                 // 5453 (0x054D) water barrel – empty or filled we don't have them on ai yet.
                                        0x0DC9,                                                 // 3529 (0x0DC9) fishing net – unhued and oddly shaped
                                    };
                                    chest.DropItem(new ShipwreckedItem(Utility.RandomList(list)));
                                }
                                break;

                            case 2:
                                if (Utility.RandomChance(10))
                                {
                                    int[] list = new int[]
                                    {
                                        0x1E9A,                                         // 7834 (0x1E9A) hook
                                        0x1E9D,                                         // 7837 (0x1E9D) pulleys
                                        0x1E9E,                                         // 7838 (0x1E9E) Pulley
                                    };
                                    chest.DropItem(new ShipwreckedItem(Utility.RandomList(list)));
                                }
                                else
                                {
                                    int[] list = new int[]
                                    {
                                        0x1EA0,                                         // 7840 (0x1EA0) Rope
                                        0x1EA9,                                         // 7849 (0x1EA9) Winch – south
                                        0x1EAC,                                         // 7852 (0x1EAC) Winch – east
                                    };
                                    chest.DropItem(new ShipwreckedItem(Utility.RandomList(list)));
                                }
                                break;

                            case 3:
                                if (Utility.RandomChance(10))
                                {
                                    int[] list = new int[]
                                    {
                                        0x0FCD,                                         // 4045 (0x0FCD) string of shells – south
                                        0x0FCE,                                         // 4046 (0x0FCE) string of shells – south
                                        0x0FCF,                                         // 4047 (0x0FCF) – string of shells – south
                                        0x0FD0,                                         // 4048 (0x0FD0) – string of shells – south
                                        0x0FD1,                                         // 4049 (0x0FD1) – string of shells – east
                                        0x0FD2,                                         // 4050 (0x0FD2) – string of shells – east
                                        0x0FD3,                                         // 4051 (0x0FD3) – string of shells – east
                                        0x0FD4,                                         // 4052 (0x0FD4) – string of shells – east
                                    };
                                    chest.DropItem(new ShipwreckedItem(Utility.RandomList(list)));
                                }
                                else
                                {
                                    int[] list = new int[]
                                    {
                                        0x1003,                                         // 4099 (0x1003) – Spittoon
                                        0x0FFB,                                         // 4091 (0x0FFB) – Skull mug 1
                                        0x0FFC,                                         // 4092 (0x0FFC) – Skull mug 2
                                        0x0E74,                                         // 3700 (0x0E74) Cannon Balls
                                    };
                                    chest.DropItem(new ShipwreckedItem(Utility.RandomList(list)));
                                }
                                break;

                            case 4:
                                if (Utility.RandomChance(10))
                                {
                                    int[] list = new int[]
                                    {
                                        0x0C2C,                                         // 3116 (0x0C2C) Ruined Painting
                                        0x0C18,                                         // 3096 (0x0C18) Covered chair - (server birth on osi)
                                    };
                                    chest.DropItem(new ShipwreckedItem(Utility.RandomList(list)));
                                }
                                else
                                {
                                    int[] list = new int[]
                                    {
                                        0x1EA3,                                         // 7843 (0x1EA3) net – south
                                        0x1EA4,                                         // 7844 (0x1EA4) net – east
                                        0x1EA5,                                         // 7845 (0x1EA5) net – south
                                        0x1EA6,                                         // 7846 (0x1EA6) net – east
                                    };
                                    chest.DropItem(new ShipwreckedItem(Utility.RandomList(list)));
                                }
                                break;

                            case 5:                                     // same frequent drop
                                if (Utility.RandomChance(10))
                                {
                                    Item[] list = new Item[]
                                    {
                                        new DarkFlowerTapestrySouthDeed(),
                                        new DarkFlowerTapestryEastDeed(),
                                        new LightTapestrySouthDeed(),
                                        new LightTapestryEastDeed(),
                                    };
                                    chest.DropItem(Utility.RandomList(list));
                                }
                                else
                                {
                                    Item[] list = new Item[]
                                    {
                                        new DarkTapestrySouthDeed(),
                                        new DarkTapestryEastDeed(),
                                        new LightFlowerTapestrySouthDeed(),
                                        new LightFlowerTapestryEastDeed(),
                                    };
                                    chest.DropItem(Utility.RandomList(list));
                                }
                                break;
                            }
                        }

                        (chest as LockableContainer).Movable   = true;
                        (chest as LockableContainer).Locked    = false;
                        (chest as LockableContainer).TrapType  = TrapType.None;
                        (chest as LockableContainer).TrapPower = 0;
                        (chest as LockableContainer).TrapLevel = 0;

                        sos.Delete();

                        return(chest);
                    }
                }
            }

            return(base.Construct(type, from, args));
        }
Exemple #15
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);
        }
Exemple #16
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));
        }