Example #1
0
        protected virtual void FinishEffect(Point3D p, Map map, Mobile from)
        {
            from.RevealingAction();

            int count = GetSpawnCount();

            for (int i = 0; map != null && i < count; ++i)
            {
                BaseCreature spawn;

                switch (Utility.Random(5))
                {
                default:
                case 0: spawn = new SeaSerpent(); break;

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

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

                case 3: spawn = new Kraken(); break;

                case 4: spawn = new DeepWaterElemental(); break;
                }

                Spawn(p, map, spawn);

                spawn.Combatant = from;
            }

            Delete();
        }
        protected virtual void FinishEffect(Point3D p, Map map, Mobile from)
        {
            from.RevealingAction();
            Server.Engines.Harvest.Fishing.FishingSkill(from, 8);

            int     count   = Utility.RandomMinMax(1, 1);
            int     onBoat  = 0;
            string  monster = "";
            Point3D SpawnAt = p;

            switch (Utility.Random(8))
            {
            case 0: monster = "WaterNaga"; break;

            case 1: monster = "SeaHagGreater"; SpawnAt = from.Location; onBoat = 1; break;

            case 2: monster = "SeaDragon"; break;

            case 3: monster = "SeaGiant"; break;

            case 4: monster = "DeepSeaSerpent"; break;

            case 5: monster = "DemonOfTheSea"; SpawnAt = from.Location; onBoat = 1; break;

            case 6: monster = "RottingSquid"; break;

            case 7: monster = "DeepWaterElemental"; break;
            }

            for (int i = 0; map != null && i < count; ++i)
            {
                BaseCreature spawn = new WaterNaga();

                if (monster == "WaterNaga")
                {
                    spawn = new WaterNaga();
                }
                else if (monster == "SeaHagGreater")
                {
                    spawn = new SeaHagGreater();
                }
                else if (monster == "SeaDragon")
                {
                    spawn = new SeaDragon();
                }
                else if (monster == "SeaGiant")
                {
                    spawn = new SeaGiant();
                }
                else if (monster == "DeepSeaSerpent")
                {
                    spawn = new DeepSeaSerpent();
                }
                else if (monster == "DemonOfTheSea")
                {
                    spawn = new DemonOfTheSea();
                }
                else if (monster == "RottingSquid")
                {
                    spawn = new RottingSquid();
                }
                else if (monster == "DeepWaterElemental")
                {
                    spawn = new DeepWaterElemental();
                }

                Spawn(SpawnAt, map, spawn, onBoat);

                spawn.WhisperHue = 999;                 // SO TASK MANAGER DELETES THEM EVENTUALLY
                spawn.Combatant  = from;
            }

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

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

            Container pack = from.Backpack;

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

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

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

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

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

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

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

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

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

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

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

                            break;
                        }

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

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

                            break;
                        }
                        }

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

                            return(preLoot);
                        }

                        LockableContainer chest = null;

                        switch (Utility.Random(3))
                        {
                        case 0:
                            chest = new MetalGoldenChest();
                            break;

                        case 1:
                            chest = new MetalChest();
                            break;

                        default:
                        case 2:
                            chest = new WoodenChest();
                            break;
                        }
                        chest.Breakable = false;
                        chest.Locked    = false;

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

                            if (0.20 > Utility.RandomDouble())
                            {
                                switch (Utility.Random((chest is WoodenChest) ? 6 : 14))
                                {
                                case 0:
                                    hue = 1193;
                                    break;

                                case 1:
                                    hue = 1281;
                                    break;

                                case 2:
                                    hue = 1190;
                                    break;

                                case 3:
                                    hue = 1165;
                                    break;

                                case 4:
                                    hue = 1160;
                                    break;

                                case 5:
                                    hue = 1126;
                                    break;

                                case 6:
                                    hue = CraftResources.GetInfo(CraftResource.Valorite).Hue;
                                    break;

                                case 7:
                                    hue = CraftResources.GetInfo(CraftResource.Verite).Hue;
                                    break;

                                case 8:
                                    hue = CraftResources.GetInfo(CraftResource.Agapite).Hue;
                                    break;

                                case 9:
                                    hue = CraftResources.GetInfo(CraftResource.Gold).Hue;
                                    break;

                                case 10:
                                    hue = CraftResources.GetInfo(CraftResource.Bronze).Hue;
                                    break;

                                case 11:
                                    hue = CraftResources.GetInfo(CraftResource.Copper).Hue;
                                    break;

                                case 12:
                                    hue = CraftResources.GetInfo(CraftResource.ShadowIron).Hue;
                                    break;

                                case 13:
                                    hue = CraftResources.GetInfo(CraftResource.DullCopper).Hue;
                                    break;
                                }
                            }

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

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

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

                        int soslevel = sos.Level;

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

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

                        double       chance = Utility.RandomDouble();
                        BaseCreature mibmonster1;
                        BaseCreature mibmonster2;
                        mibmonster1 = new DeepWaterElemental();
                        if (chance <= 0.02 && from.Skills[SkillName.Fishing].Base >= 115)
                        {
                            mibmonster2 = new Osiredon();
                            int choice = Utility.Random(5);
                            switch (choice)
                            {
                            case 4:
                                mibmonster2.PackItem(new SmallFishingNetDeed());
                                break;

                            case 3:
                                mibmonster2.PackItem(new LargeFishingNetDeed());
                                break;

                            case 2:
                                mibmonster2.PackItem(new Shell());
                                break;

                            case 1:
                                mibmonster2.PackItem(new Anchor());
                                break;

                            case 0:
                                mibmonster2.PackItem(new Hook());
                                break;
                            }
                        }
                        else if (soslevel < 5)
                        {
                            mibmonster2 = new WaterElemental();
                        }
                        else
                        {
                            mibmonster2 = new DeepWaterElemental();
                        }
                        int x = from.X, y = from.Y;

                        Map map = from.Map;

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

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

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

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

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

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

                        sos.Delete();

                        return(chest);
                    }
                }
            }

            return(base.Construct(type, from));
        }
Example #4
0
        public override void SendSuccessTo(Mobile from, Item item, HarvestResource resource)
        {
            if (item is BigFish)
            {
                // Deleted this message since you can now get loot, which is notta fish
                // I wish I knew how to send "custom" message to the screen like...
                // "Whoa! You just reeled in something very interesting"

                // from.SendLocalizedMessage( 1042635 ); // Your fishing pole bends as you pull a big fish from the depths!

                ((BigFish)item).Fisher = from;
            }
            else if (item is WoodenChest)
            {
                from.SendLocalizedMessage(503175);                   // You pull up a heavy chest from the depths of the ocean!
            }
            else
            {
                int    number;
                string name;

                if (item is BaseMagicFish)
                {
                    number = 1008124;
                    name   = "a mess of small fish";
                }
                else if (item is Fish)
                {
                    number = 1008124;
                    name   = "a fish";
                }
                else if (item is BaseShoes)
                {
                    number = 1008124;
                    name   = item.ItemData.Name;
                }
                else if (item is TreasureMap)
                {
                    number = 1008125;
                    name   = "a sodden piece of parchment";
                }
                else if (item is MessageInABottle)
                {
                    number = 1008125;
                    name   = "a bottle, with a message in it";
                }
                else if (item is SpecialFishingNet)
                {
                    number = 1008125;
                    name   = "a special fishing net"; // TODO: this is just a guess--what should it really be named?
                }
                else
                {
                    number = 1043297; // It's Some Other Stuff...

                    // Console.WriteLine(item.ItemData.Name);

                    if ((item.ItemData.Flags & TileFlag.ArticleA) != 0)
                    {
                        name = "a " + item.ItemData.Name;
                    }
                    else if ((item.ItemData.Flags & TileFlag.ArticleAn) != 0)
                    {
                        name = "an " + item.ItemData.Name;
                    }
                    else
                    {
                        name = item.ItemData.Name;
                    }

                    if (number == 1043297)
                    {
                        from.SendLocalizedMessage(number, name);
                    }
                    else
                    {
                        from.SendLocalizedMessage(number, true, name);
                    }
                }

                double temp_random_dbl = Utility.RandomDouble();
                // Console.WriteLine("Trying to spawn Random Monster when 0.05 > {0}", temp_random_dbl);

                if (0.05 > temp_random_dbl)    // Spawn a monster ~ every 20 tries
                {
                    BaseCreature serp2;

                    switch (Utility.Random(11))
                    {
                    case 0:  { serp2 = new DeepSeaSnake(); break; }

                    case 1:  { serp2 = new DeepWaterElemental(); break; }

                    case 2:  { serp2 = new FlameShark(); break; }

                    case 3:  { serp2 = new HurricaneElemental(); break; }

                    case 4:  { serp2 = new IcebergElemental(); break; }

                    case 5:  { serp2 = new RoamingKraken(); break; }

                    case 6:  { serp2 = new StormSerpent(); break; }

                    case 7:  { serp2 = new TsunamiSerpent(); break; }

                    case 8:  { serp2 = new GiantWaterStrider(); break; }

                    case 9:  { serp2 = new DeepSeaSerpent(); break; }

                    default: { serp2 = new SeaSerpent(); break; }
                    }

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

                    for (int i = 0; map != null && i < 20; ++i)
                    {
                        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;
                        }
                    }

                    serp2.MoveToWorld(new Point3D(x, y, -5), map);
                    serp2.Home      = serp2.Location;
                    serp2.RangeHome = 10;
                    from.SendLocalizedMessage(503170);  // Uh oh! That doesn't look like a fish!
                }
            }
        }
Example #5
0
        public override bool Give(Mobile m, Item item, bool placeAtFeet)
        {
            // This code is triggered when you've harvested a Map/MIB/Net. You first
            // spawn a critter and then add the special item to his/her pack for loot

            if (item is TreasureMap || item is MessageInABottle || item is SpecialFishingNet)
            {
                BaseCreature serp;

                switch (Utility.Random(11))
                {
                case 0:  { serp = new DeepSeaSnake(); break; }

                case 1:  { serp = new DeepWaterElemental(); break; }

                case 2:  { serp = new FlameShark(); break; }

                case 3:  { serp = new HurricaneElemental(); break; }

                case 4:  { serp = new IcebergElemental(); break; }

                case 5:  { serp = new RoamingKraken(); break; }

                case 6:  { serp = new StormSerpent(); break; }

                case 7:  { serp = new TsunamiSerpent(); break; }

                case 8:  { serp = new GiantWaterStrider(); break; }

                case 9:  { serp = new DeepSeaSerpent(); break; }

                default: { serp = new SeaSerpent(); break; }
                }

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

                for (int i = 0; map != null && i < 20; ++i)
                {
                    int tx = m.X - 10 + Utility.Random(21);
                    int ty = m.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;
                    }
                }

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

                serp.Home      = serp.Location;
                serp.RangeHome = 10;

                serp.PackItem(item);

                m.SendLocalizedMessage(503170); // Uh oh! That doesn't look like a fish!

                return(true);                   // we don't want to give the item to the player, it's on the serpent
            }

            // BigFish go into the pack, but why does it look like they are put at feet? R12?
            if (item is BigFish || item is WoodenChest)
            {
                placeAtFeet = true;
            }

            // Here's where we sometimes replace the Big fish with a Special Item.
            // Note that we have to trigger on the Big Fish to stop folks from
            // macroing on the shore (shallow water) for Magic Weps. This method
            // does not have the right variables for deepwater check

            if (item is BigFish)   // We know we're in Deepwater, and it's a rare event
            {
                double leet_loot_chance = 0.1;

                if (leet_loot_chance > Utility.RandomDouble())
                {
                    switch (Utility.Random(2))
                    {
                    case 0:
                    {
                        BaseWeapon temp_weapon = Loot.RandomWeapon();
                        temp_weapon.DamageLevel     = (WeaponDamageLevel)Utility.Random(6);
                        temp_weapon.AccuracyLevel   = (WeaponAccuracyLevel)Utility.Random(6);
                        temp_weapon.DurabilityLevel = (WeaponDurabilityLevel)Utility.Random(1);
                        // Item was in the water forever...shouldn't be very durable
                        item = (Item)temp_weapon;
                        break;
                    }

                    default:
                    {
                        BaseArmor temp_armor = Loot.RandomArmor();
                        temp_armor.ProtectionLevel = (ArmorProtectionLevel)Utility.Random(4);
                        temp_armor.Durability      = (ArmorDurabilityLevel)Utility.Random(1);
                        // Item was in the water forever...shouldn't be very durable
                        item = (Item)temp_armor;
                        break;
                    }
                    }
                }
                // else just give the fisher a Big Fish
            }
            // Could also easily add variations on the following...but I've left it at Weps/Armor
            // item = Loot.RandomShield();
            // item = Loot.RandomJewelry();
            // item = Loot.RandomInstrument();
            // item = Loot.RandomScroll(2, 8, SpellbookType.Regular);
            // item = Loot.RandomPotion();
            // item = new BankCheck( 1000000 );
            // item = new ShipwreckedItem(5055); // Chain tunic with Shipwreck Label

            return(base.Give(m, item, placeAtFeet));               // Here's where you GIVE player the "item"
        }
Example #6
0
        protected virtual void FinishEffect(Point3D p, Map map, Mobile from)
        {
            from.RevealingAction();

            int     count   = Utility.RandomMinMax(1, 1);
            int     onBoat  = 0;
            string  monster = "";
            Point3D SpawnAt = p;

            switch (Utility.Random(7))
            {
            case 0: monster = "StormGiant"; SpawnAt = from.Location; onBoat = 1; break;

            case 1: monster = "Leviathan"; break;

            case 2: monster = "DemonOfTheSea"; SpawnAt = from.Location; onBoat = 1; break;

            case 3: monster = "DeepWaterElemental"; break;

            case 4: monster = "KelpElemental"; break;

            case 5: monster = "IcebergElemental"; SpawnAt = from.Location; onBoat = 1; break;

            case 6: monster = "DeepSeaDragon"; break;
            }

            for (int i = 0; map != null && i < count; ++i)
            {
                BaseCreature spawn = new WaterNaga();

                if (monster == "StormGiant")
                {
                    spawn = new StormGiant();
                }
                else if (monster == "Leviathan")
                {
                    spawn = new Leviathan();
                }
                else if (monster == "DemonOfTheSea")
                {
                    spawn = new DemonOfTheSea();
                }
                else if (monster == "DeepWaterElemental")
                {
                    spawn = new DeepWaterElemental();
                }
                else if (monster == "KelpElemental")
                {
                    spawn = new KelpElemental();
                }
                else if (monster == "IcebergElemental")
                {
                    spawn = new IcebergElemental();
                }
                else if (monster == "DeepSeaDragon")
                {
                    spawn = new DeepSeaDragon();
                }

                Spawn(SpawnAt, map, spawn, onBoat);

                spawn.WhisperHue = 999;                 // SO TASK MANAGER DELETES THEM EVENTUALLY
                spawn.Combatant  = from;
            }

            Delete();
        }