Beispiel #1
0
        public override void GenerateLoot()
        {
            if (Utility.Random(100) < 20)
            {
                Lantern lantern = new Lantern();
                lantern.Hue = Utility.RandomMinMax(2113, 2118);
                PackItem(lantern);
            }

            if (Utility.Random(100) < 10)
            {
                Item item;

                switch (Utility.Random(111))
                {
                case 0: item = new Tapestry6W(); break;

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

                case 2: item = new MetalGoldenChest(); break;

                case 3: item = new MetalBox(); break;

                case 4: item = new AniLargeVioletFlask(); break;

                case 5: item = new AniRedRibbedFlask(); break;

                case 6: item = new AniSmallBlueFlask(); break;

                case 7: item = new BlueBeaker(); break;

                case 8: item = new BlueCurvedFlask(); break;

                case 9: item = new EmptyVial(); break;

                case 10: item = new EmptyVialsWRack(); break;

                case 11: item = new LargeFlask(); break;

                case 12: item = new LargeVioletFlask(); break;

                //case 13: item = new HourGlass(); break;
                //case 14: item = new HourGlassAni(); break;
                case 15: item = new DecorativeDAxeWest(); break;

                case 16: item = new DecorativeDAxeNorth(); break;

                case 17: item = new DecorativeBowWest(); break;

                case 18: item = new DecorativeBowNorth(); break;

                case 19: item = new DecorativeAxeWest(); break;

                case 20: item = new DecorativeAxeNorth(); break;

                case 21: item = new DecorativeShieldSword2West(); break;

                case 22: item = new DecorativeShieldSword2North(); break;

                case 23: item = new DecorativeShieldSword1West(); break;

                case 24: item = new DecorativeShieldSword1North(); break;

                case 25: item = new DecorativeShield11(); break;

                case 26: item = new DecorativeShield10(); break;

                case 27: item = new DecorativeShield9(); break;

                case 28: item = new DecorativeShield8(); break;

                case 29: item = new DecorativeShield7(); break;

                case 30: item = new DecorativeShield6(); break;

                case 31: item = new DecorativeShield5(); break;

                case 32: item = new DecorativeShield4(); break;

                case 33: item = new DecorativeShield3(); break;

                case 34: item = new DecorativeShield2(); break;

                case 35: item = new DecorativeShield1(); break;

                case 36: item = new Whip(); break;

                case 37: item = new SilverWire(); break;

                case 38: item = new Rope(); break;

                case 39: item = new PaintsAndBrush(); break;

                case 40: item = new IronWire(); break;

                case 41: item = new GoldWire(); break;

                case 42: item = new CopperWire(); break;

                case 43: item = new WoodDebris(); break;

                case 44: item = new RuinedPainting(); break;

                case 45: item = new RuinedFallenChairB(); break;

                case 46: item = new FullVialsWRack(); break;

                case 47: item = new FullJar(); break;

                case 48: item = new FullJars2(); break;

                case 49: item = new FullJars3(); break;

                case 50: item = new FullJars4(); break;

                case 51: item = new GreenBeaker(); break;

                case 52: item = new GreenBottle(); break;

                case 53: item = new VioletStemmedBottle(); break;

                case 54: item = new SpinningHourglass(); break;

                case 55: item = new ArcheryButte(); break;

                case 56: item = new PhillipsWoodenSteed(); break;

                case 57: item = new PileOfGlacialSnow(); break;

                case 58: item = new RedPoinsettia(); break;

                case 59: item = new RoseOfTrinsic(); break;

                case 60: item = new RaiseSwitch(); break;

                case 61: item = new SpecialFishingNet(); break;

                case 62: item = new SpecialHairDye(); break;

                case 63: item = new SpecialBeardDye(); break;

                case 64: item = new SnowPile(); break;

                case 65: item = new StatueEast2(); break;

                case 66: item = new StatuePegasus2(); break;

                case 67: item = new StatueSouth2(); break;

                case 68: item = new StatueSouthEast(); break;

                case 69: item = new StatuetteDyeTub(); break;

                case 70: item = new StatueWest(); break;

                case 71: item = new TapestryOfSosaria(); break;

                case 72: item = new WhitePoinsettia(); break;

                case 73: item = new WindChimes(); break;

                case 74: item = new ZoogiFungus(); break;

                case 75: item = new RuinedFallenChairA(); break;

                case 76: item = new RuinedDrawers(); break;

                case 77: item = new RuinedClock(); break;

                case 78: item = new RuinedChair(); break;

                case 79: item = new RuinedBooks(); break;

                case 80: item = new RuinedBookcase(); break;

                case 81: item = new RuinedArmoire(); break;

                case 82: item = new SmallStretchedHideSouthDeed(); break;

                case 83: item = new SmallStretchedHideEastDeed(); break;

                case 84: item = new PolarBearRugSouthDeed(); break;

                case 85: item = new PolarBearRugEastDeed(); break;

                case 86: item = new MediumStretchedHideSouthDeed(); break;

                case 87: item = new MediumStretchedHideEastDeed(); break;

                case 88: item = new LightFlowerTapestrySouthDeed(); break;

                case 89: item = new LightFlowerTapestryEastDeed(); break;

                case 90: item = new DarkFlowerTapestrySouthDeed(); break;

                case 91: item = new DarkFlowerTapestryEastDeed(); break;

                case 92: item = new BrownBearRugSouthDeed(); break;

                case 93: item = new BrownBearRugEastDeed(); break;

                case 94: item = new WallSconce(); break;

                case 95: item = new WallTorch(); break;

                case 96: item = new CandleShort(); break;

                case 97: item = new CandleLarge(); break;

                case 98: item = new DecorativeSwordNorth(); break;

                case 99: item = new DecorativeSwordWest(); break;

                case 100: item = new Tapestry1N(); break;

                case 101: item = new Tapestry2N(); break;

                case 102: item = new Tapestry2W(); break;

                case 103: item = new Tapestry3N(); break;

                case 104: item = new Tapestry3W(); break;

                case 105: item = new Tapestry4N(); break;

                case 106: item = new Tapestry4W(); break;

                case 107: item = new Tapestry5N(); break;

                case 108: item = new Tapestry5W(); break;

                case 109: item = new Tapestry6N(); break;

                default: item = new CandleSkull(); break;
                }

                item.LootType = LootType.Regular;
                item.Movable  = true;
                PackItem(item);
            }
        }
        private void GiveMagicItems()
        {
            ArrayList toGive = new ArrayList();

            LogHelper Logger = new LogHelper("HarrowerLoot.log", false);


            ArrayList allNonExpiredPMDamageEntries = new ArrayList();

            //New Looting method (Pix: 4/8/06)
            for (int i = 0; i < DamageEntries.Count; i++)
            {
                DamageEntry de = DamageEntries[i] as DamageEntry;
                if (de != null)
                {
                    Logger.Log(LogType.Text, string.Format("DE[{0}]: {1} ({2})", i, de.Damager, de.Damager != null ? de.Damager.Name : ""));
                    if (de.HasExpired)
                    {
                        Logger.Log(LogType.Text, string.Format("DE[{0}]: Expired", i));
                    }
                    else
                    {
                        if (de.Damager != null && !de.Damager.Deleted)
                        {
                            if (de.Damager is BaseCreature)
                            {
                                Logger.Log(LogType.Text, string.Format("DE[{0}]: BaseCreature", i));
                                BaseCreature bc = (BaseCreature)de.Damager;
                                if (bc.ControlMaster != null && !bc.ControlMaster.Deleted)
                                {
                                    //de.Damager = bc.ControlMaster;
                                    DamageEntry cmde = new DamageEntry(bc.ControlMaster);
                                    cmde.DamageGiven = de.DamageGiven;
                                    de = cmde;
                                    Logger.Log(LogType.Text, string.Format("DE[{0}]: New Damager: {1}", i, de.Damager.Name));
                                }
                            }

                            if (de.Damager is PlayerMobile)
                            {
                                Logger.Log(LogType.Text, string.Format("DE[{0}]: PlayerMobile", i));

                                if (de.Damager.Alive)
                                {
                                    Logger.Log(LogType.Text, string.Format("DE[{0}]: PM Alive", i));

                                    bool bFound = false;
                                    for (int j = 0; j < allNonExpiredPMDamageEntries.Count; j++)
                                    {
                                        DamageEntry de2 = (DamageEntry)allNonExpiredPMDamageEntries[j];
                                        if (de2.Damager == de.Damager)
                                        {
                                            Logger.Log(LogType.Text, string.Format("DE[{0}]: PM Found, adding damage", i));

                                            de2.DamageGiven += de.DamageGiven;
                                            bFound           = true;
                                            break;
                                        }
                                    }

                                    if (!bFound)
                                    {
                                        Logger.Log(LogType.Text, string.Format("DE[{0}]: PM not found, adding", i));
                                        allNonExpiredPMDamageEntries.Add(de);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            //Remove any PMs that are over 100 tiles away
            ArrayList toRemove = new ArrayList();

            for (int i = 0; i < allNonExpiredPMDamageEntries.Count; i++)
            {
                DamageEntry de = (DamageEntry)allNonExpiredPMDamageEntries[i];
                if (de.Damager.GetDistanceToSqrt(this.Location) > 100)
                {
                    Logger.Log(LogType.Text, string.Format("Removing {0} for being too far away at death", de.Damager.Name));
                    toRemove.Add(allNonExpiredPMDamageEntries[i]);
                }
            }
            for (int i = 0; i < toRemove.Count; i++)
            {
                allNonExpiredPMDamageEntries.Remove(toRemove[i]);
            }

            int topDamage = 0;
            int minDamage = 0;

            for (int i = 0; i < allNonExpiredPMDamageEntries.Count; i++)
            {
                DamageEntry de = (DamageEntry)allNonExpiredPMDamageEntries[i];
                if (de.DamageGiven > topDamage)
                {
                    topDamage = de.DamageGiven;
                }

                Logger.Log(LogType.Text, string.Format("Non-Expired[{0}]: {1} (damage: {2})", i, de.Damager.Name, de.DamageGiven));
            }

            //Now filter on 'enough' damage
            if (HitsMax >= 3000)
            {
                minDamage = topDamage / 16;
            }
            else if (HitsMax >= 1000)
            {
                minDamage = topDamage / 8;
            }
            else if (HitsMax >= 200)
            {
                minDamage = topDamage / 4;
            }
            else
            {
                minDamage = topDamage / 2;
            }

            Logger.Log(LogType.Text, string.Format("HitsMax: {0}, TopDamage: {1}, MinDamage: {2}", HitsMax, topDamage, minDamage));


            for (int i = 0; i < allNonExpiredPMDamageEntries.Count; i++)
            {
                DamageEntry de = (DamageEntry)allNonExpiredPMDamageEntries[i];
                if (de.DamageGiven >= minDamage)
                {
                    toGive.Add(de.Damager);
                }
            }


            if (toGive.Count == 0)
            {
                return;
            }

            // Randomize
            for (int i = 0; i < toGive.Count; ++i)
            {
                int    rand = Utility.Random(toGive.Count);
                object hold = toGive[i];
                toGive[i]    = toGive[rand];
                toGive[rand] = hold;
            }

            Logger.Log(LogType.Text, "");             // new line
            Logger.Log(LogType.Text, "Randomized list of players:");
            for (int i = 0; i < toGive.Count; ++i)
            {
                Mobile mob = toGive[i] as Mobile;
                Logger.Log(LogType.Mobile, mob, "alive:" + mob.Alive.ToString());
            }

            Logger.Log(LogType.Text, "");             // new line
            Logger.Log(LogType.Text, "Begin loot distribution: Who/What:");

            // Loop goes until we've generated MaxGifts items.
            for (int i = 0; i < MaxGifts; ++i)
            {
                Item   reward = null;
                Mobile m      = (Mobile)toGive[i % toGive.Count];

                switch (Utility.Random(10))
                {
                case 0:                         // Power/Vanq Weapon
                case 1:
                case 2:                         // 3 in 10 chance
                {                               // 33% chance at best
                    reward = CreateWeapon((0.32 >= Utility.RandomDouble()) ? 5 : 4);
                    break;
                }

                case 3:                         // Fort/Invul Armor
                case 4:
                case 5:                         // 3 in 10 chance
                {                               // 33% chance at best
                    reward = CreateArmor((0.32 >= Utility.RandomDouble()) ? 5 : 4);
                    break;
                }

                case 6:                                 // hair/beard dye
                {                                       // 1 in 10 chance
                    if (Utility.RandomBool())
                    {
                        reward = new SpecialHairDye();
                    }
                    else
                    {
                        reward = new SpecialBeardDye();
                    }
                    break;
                }

                case 7:                                 // special cloth
                {                                       // 1 in 10 chance
                    reward = new UncutCloth(50);
                    if (Utility.RandomBool())
                    {
                        // best ore hues (vet rewards) + really dark 'evil cloth'
                        reward.Hue = Utility.RandomList(2213, 2219, 2207, 2425, 1109);
                    }
                    else
                    {
                        reward.Hue = 0x01;                                              // black cloth
                    }
                    break;
                }

                case 8:                                 // potted plant
                {                                       // 1 in 10 chance
                    switch (Utility.Random(11))
                    {
                    default:                                                    // should never happen
                    case 0: reward = new PottedCactus(); break;

                    case 1: reward = new PottedCactus1(); break;

                    case 2: reward = new PottedCactus2(); break;

                    case 3: reward = new PottedCactus3(); break;

                    case 4: reward = new PottedCactus4(); break;

                    case 5: reward = new PottedCactus5(); break;

                    case 6: reward = new PottedPlant(); break;

                    case 7: reward = new PottedPlant1(); break;

                    case 8: reward = new PottedPlant2(); break;

                    case 9: reward = new PottedTree(); break;

                    case 10: reward = new PottedTree1(); break;
                    }
                    break;
                }

                default:                                // Should never happen
                /* fall through*/

                case 9:                                 // Magic Item Drop
                {                                       // 1 in 10 chance
                    reward = Loot.RandomClothingOrJewelry();
                    if (reward != null)
                    {
                        int minLevel = 3;
                        int maxLevel = 3;
                        if (reward is BaseClothing)
                        {
                            ((BaseClothing)reward).SetRandomMagicEffect(minLevel, maxLevel);
                        }
                        else if (reward is BaseJewel)
                        {
                            ((BaseJewel)reward).SetRandomMagicEffect(minLevel, maxLevel);
                        }
                    }
                    break;
                }
                }

                if (reward != null)
                {
                    // Drop the new weapon into their backpack and send them a message.
                    m.SendMessage("You have received a special item!");
                    m.AddToBackpack(reward);

                    Logger.Log(LogType.Mobile, m, "alive:" + m.Alive.ToString());
                    Logger.Log(LogType.Item, reward, string.Format("Hue:{0}:Rare:{1}",
                                                                   reward.Hue,
                                                                   (reward is BaseWeapon || reward is BaseArmor || reward is BaseClothing || reward is BaseJewel) ? "False" : "True"));
                }
            }

            // done logging
            Logger.Finish();
        }
Beispiel #3
0
        public override void GenerateLoot()
        {
            if (Utility.Random(100) <= 20)
            {
                int hue = Utility.RandomMinMax(1, 1001);

                Sandals sandals = new Sandals();

                sandals.Hue = hue;

                PackItem(sandals);
            }

            if (Utility.Random(100) <= 10)
            {
                int hue = Utility.RandomMinMax(1, 1001);

                Sandals sandals = new Sandals();

                sandals.Hue = hue;

                PackItem(sandals);
            }

            if (Utility.Random(100) <= 5)
            {
                int hue = Utility.RandomMinMax(1, 1001);

                Sandals sandals = new Sandals();

                sandals.Hue = hue;

                PackItem(sandals);
            }

            if (Utility.Random(100) <= 5)
            {
                int hue = Utility.RandomMinMax(1201, 1255);

                Sandals sandals = new Sandals();

                sandals.Hue = hue;

                PackItem(sandals);
            }

            if (Utility.Random(100) <= 2)
            {
                int hue = Utility.RandomMinMax(2101, 2130);

                Sandals sandals = new Sandals();

                sandals.Hue = hue;

                PackItem(sandals);
            }


            if (Utility.Random(100) <= 1)
            {
                int hue = 2936;

                Sandals sandals = new Sandals();

                sandals.Hue = hue;

                PackItem(sandals);
            }

            if (Utility.Random(1000) <= 2)
            {
                int     hue;
                Sandals sandals = new Sandals();

                switch (Utility.Random(7))
                {
                case 0: hue = 1155; break;

                case 1: hue = 1156; break;

                case 2: hue = 1157; break;

                case 3: hue = 1158; break;

                case 4: hue = 1160; break;

                case 5: hue = 1172; break;

                default: hue = 1175; break;
                }

                sandals.Hue = hue;
                PackItem(sandals);
            }

            if (Utility.Random(1000) <= 2)
            {
                int     hue;
                Sandals sandals = new Sandals();

                switch (Utility.Random(5))
                {
                case 0: hue = 1176; break;

                case 1: hue = 1171; break;

                case 2: hue = 1159; break;

                case 3: hue = 1170; break;

                default: hue = 1161; break;
                }

                sandals.Hue = hue;
                PackItem(sandals);
            }


            double chance = Utility.RandomDouble();

            if (chance <= 0.10)
            {
                Seed seed;

                PlantType type;
                switch (Utility.Random(17))
                {
                case 0: type = PlantType.CampionFlowers; break;

                case 1: type = PlantType.Poppies; break;

                case 2: type = PlantType.Snowdrops; break;

                case 3: type = PlantType.Bulrushes; break;

                case 4: type = PlantType.Lilies; break;

                case 5: type = PlantType.PampasGrass; break;

                case 6: type = PlantType.Rushes; break;

                case 7: type = PlantType.ElephantEarPlant; break;

                case 8: type = PlantType.Fern; break;

                case 9: type = PlantType.PonytailPalm; break;

                case 10: type = PlantType.SmallPalm; break;

                case 11: type = PlantType.CenturyPlant; break;

                case 12: type = PlantType.WaterPlant; break;

                case 13: type = PlantType.SnakePlant; break;

                case 14: type = PlantType.PricklyPearCactus; break;

                case 15: type = PlantType.BarrelCactus; break;

                default: type = PlantType.TribarrelCactus; break;
                }

                PlantHue hue;
                switch (Utility.Random(19))
                {
                case 0: hue = PlantHue.Plain; break;

                case 1: hue = PlantHue.Red; break;

                case 2: hue = PlantHue.Blue; break;

                case 3: hue = PlantHue.Yellow; break;

                case 4: hue = PlantHue.BrightRed; break;

                case 5: hue = PlantHue.BrightBlue; break;

                case 6: hue = PlantHue.BrightYellow; break;

                case 7: hue = PlantHue.Purple; break;

                case 8: hue = PlantHue.Green; break;

                case 9: hue = PlantHue.Orange; break;

                case 10: hue = PlantHue.BrightPurple; break;

                case 11: hue = PlantHue.BrightGreen; break;

                case 12: hue = PlantHue.BrightOrange; break;

                case 13: hue = PlantHue.Black; break;

                case 14: hue = PlantHue.White; break;

                case 15: hue = PlantHue.Pink; break;

                case 16: hue = PlantHue.Magenta; break;

                case 17: hue = PlantHue.Aqua; break;

                default: hue = PlantHue.FireRed; break;
                }

                seed = new Seed(type, hue, false);
                PackItem(seed);

                if (Utility.Random(500) == 1)
                {
                    PackItem(new BlackDyeTub());
                }

                if (Utility.Random(100) < 15)
                {
                    Item item;

                    switch (Utility.Random(111))
                    {
                    case 0: item = new Tapestry6W(); break;

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

                    case 2: item = new MetalGoldenChest(); break;

                    case 3: item = new MetalBox(); break;

                    case 4: item = new AniLargeVioletFlask(); break;

                    case 5: item = new AniRedRibbedFlask(); break;

                    case 6: item = new AniSmallBlueFlask(); break;

                    case 7: item = new BlueBeaker(); break;

                    case 8: item = new BlueCurvedFlask(); break;

                    case 9: item = new EmptyVial(); break;

                    case 10: item = new EmptyVialsWRack(); break;

                    case 11: item = new LargeFlask(); break;

                    case 12: item = new LargeVioletFlask(); break;

                    //case 13: item = new HourGlass(); break;
                    //case 14: item = new HourGlassAni(); break;
                    case 15: item = new DecorativeDAxeWest(); break;

                    case 16: item = new DecorativeDAxeNorth(); break;

                    case 17: item = new DecorativeBowWest(); break;

                    case 18: item = new DecorativeBowNorth(); break;

                    case 19: item = new DecorativeAxeWest(); break;

                    case 20: item = new DecorativeAxeNorth(); break;

                    case 21: item = new DecorativeShieldSword2West(); break;

                    case 22: item = new DecorativeShieldSword2North(); break;

                    case 23: item = new DecorativeShieldSword1West(); break;

                    case 24: item = new DecorativeShieldSword1North(); break;

                    case 25: item = new DecorativeShield11(); break;

                    case 26: item = new DecorativeShield10(); break;

                    case 27: item = new DecorativeShield9(); break;

                    case 28: item = new DecorativeShield8(); break;

                    case 29: item = new DecorativeShield7(); break;

                    case 30: item = new DecorativeShield6(); break;

                    case 31: item = new DecorativeShield5(); break;

                    case 32: item = new DecorativeShield4(); break;

                    case 33: item = new DecorativeShield3(); break;

                    case 34: item = new DecorativeShield2(); break;

                    case 35: item = new DecorativeShield1(); break;

                    case 36: item = new Whip(); break;

                    case 37: item = new SilverWire(); break;

                    case 38: item = new Rope(); break;

                    case 39: item = new PaintsAndBrush(); break;

                    case 40: item = new IronWire(); break;

                    case 41: item = new GoldWire(); break;

                    case 42: item = new CopperWire(); break;

                    case 43: item = new WoodDebris(); break;

                    case 44: item = new RuinedPainting(); break;

                    case 45: item = new RuinedFallenChairB(); break;

                    case 46: item = new FullVialsWRack(); break;

                    case 47: item = new FullJar(); break;

                    case 48: item = new FullJars2(); break;

                    case 49: item = new FullJars3(); break;

                    case 50: item = new FullJars4(); break;

                    case 51: item = new GreenBeaker(); break;

                    case 52: item = new GreenBottle(); break;

                    case 53: item = new VioletStemmedBottle(); break;

                    case 54: item = new SpinningHourglass(); break;

                    case 55: item = new ArcheryButte(); break;

                    case 56: item = new PhillipsWoodenSteed(); break;

                    case 57: item = new PileOfGlacialSnow(); break;

                    case 58: item = new RedPoinsettia(); break;

                    case 59: item = new RoseOfTrinsic(); break;

                    case 60: item = new RaiseSwitch(); break;

                    case 61: item = new SpecialFishingNet(); break;

                    case 62: item = new SpecialHairDye(); break;

                    case 63: item = new SpecialBeardDye(); break;

                    case 64: item = new SnowPile(); break;

                    case 65: item = new StatueEast2(); break;

                    case 66: item = new StatuePegasus2(); break;

                    case 67: item = new StatueSouth2(); break;

                    case 68: item = new StatueSouthEast(); break;

                    case 69: item = new StatuetteDyeTub(); break;

                    case 70: item = new StatueWest(); break;

                    case 71: item = new TapestryOfSosaria(); break;

                    case 72: item = new WhitePoinsettia(); break;

                    case 73: item = new WindChimes(); break;

                    case 74: item = new ZoogiFungus(); break;

                    case 75: item = new RuinedFallenChairA(); break;

                    case 76: item = new RuinedDrawers(); break;

                    case 77: item = new RuinedClock(); break;

                    case 78: item = new RuinedChair(); break;

                    case 79: item = new RuinedBooks(); break;

                    case 80: item = new RuinedBookcase(); break;

                    case 81: item = new RuinedArmoire(); break;

                    case 82: item = new SmallStretchedHideSouthDeed(); break;

                    case 83: item = new SmallStretchedHideEastDeed(); break;

                    case 84: item = new PolarBearRugSouthDeed(); break;

                    case 85: item = new PolarBearRugEastDeed(); break;

                    case 86: item = new MediumStretchedHideSouthDeed(); break;

                    case 87: item = new MediumStretchedHideEastDeed(); break;

                    case 88: item = new LightFlowerTapestrySouthDeed(); break;

                    case 89: item = new LightFlowerTapestryEastDeed(); break;

                    case 90: item = new DarkFlowerTapestrySouthDeed(); break;

                    case 91: item = new DarkFlowerTapestryEastDeed(); break;

                    case 92: item = new BrownBearRugSouthDeed(); break;

                    case 93: item = new BrownBearRugEastDeed(); break;

                    case 94: item = new WallSconce(); break;

                    case 95: item = new WallTorch(); break;

                    case 96: item = new CandleShort(); break;

                    case 97: item = new CandleLarge(); break;

                    case 98: item = new DecorativeSwordNorth(); break;

                    case 99: item = new DecorativeSwordWest(); break;

                    case 100: item = new Tapestry1N(); break;

                    case 101: item = new Tapestry2N(); break;

                    case 102: item = new Tapestry2W(); break;

                    case 103: item = new Tapestry3N(); break;

                    case 104: item = new Tapestry3W(); break;

                    case 105: item = new Tapestry4N(); break;

                    case 106: item = new Tapestry4W(); break;

                    case 107: item = new Tapestry5N(); break;

                    case 108: item = new Tapestry5W(); break;

                    case 109: item = new Tapestry6N(); break;

                    default: item = new CandleSkull(); break;
                    }

                    item.LootType = LootType.Regular;
                    item.Movable  = true;
                    PackItem(item);
                }

                if (Utility.Random(100) < 10)
                {
                    Item item;

                    switch (Utility.Random(111))
                    {
                    case 0: item = new Tapestry6W(); break;

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

                    case 2: item = new MetalGoldenChest(); break;

                    case 3: item = new MetalBox(); break;

                    case 4: item = new AniLargeVioletFlask(); break;

                    case 5: item = new AniRedRibbedFlask(); break;

                    case 6: item = new AniSmallBlueFlask(); break;

                    case 7: item = new BlueBeaker(); break;

                    case 8: item = new BlueCurvedFlask(); break;

                    case 9: item = new EmptyVial(); break;

                    case 10: item = new EmptyVialsWRack(); break;

                    case 11: item = new LargeFlask(); break;

                    case 12: item = new LargeVioletFlask(); break;

                    //case 13: item = new HourGlass(); break;
                    //case 14: item = new HourGlassAni(); break;
                    case 15: item = new DecorativeDAxeWest(); break;

                    case 16: item = new DecorativeDAxeNorth(); break;

                    case 17: item = new DecorativeBowWest(); break;

                    case 18: item = new DecorativeBowNorth(); break;

                    case 19: item = new DecorativeAxeWest(); break;

                    case 20: item = new DecorativeAxeNorth(); break;

                    case 21: item = new DecorativeShieldSword2West(); break;

                    case 22: item = new DecorativeShieldSword2North(); break;

                    case 23: item = new DecorativeShieldSword1West(); break;

                    case 24: item = new DecorativeShieldSword1North(); break;

                    case 25: item = new DecorativeShield11(); break;

                    case 26: item = new DecorativeShield10(); break;

                    case 27: item = new DecorativeShield9(); break;

                    case 28: item = new DecorativeShield8(); break;

                    case 29: item = new DecorativeShield7(); break;

                    case 30: item = new DecorativeShield6(); break;

                    case 31: item = new DecorativeShield5(); break;

                    case 32: item = new DecorativeShield4(); break;

                    case 33: item = new DecorativeShield3(); break;

                    case 34: item = new DecorativeShield2(); break;

                    case 35: item = new DecorativeShield1(); break;

                    case 36: item = new Whip(); break;

                    case 37: item = new SilverWire(); break;

                    case 38: item = new Rope(); break;

                    case 39: item = new PaintsAndBrush(); break;

                    case 40: item = new IronWire(); break;

                    case 41: item = new GoldWire(); break;

                    case 42: item = new CopperWire(); break;

                    case 43: item = new WoodDebris(); break;

                    case 44: item = new RuinedPainting(); break;

                    case 45: item = new RuinedFallenChairB(); break;

                    case 46: item = new FullVialsWRack(); break;

                    case 47: item = new FullJar(); break;

                    case 48: item = new FullJars2(); break;

                    case 49: item = new FullJars3(); break;

                    case 50: item = new FullJars4(); break;

                    case 51: item = new GreenBeaker(); break;

                    case 52: item = new GreenBottle(); break;

                    case 53: item = new VioletStemmedBottle(); break;

                    case 54: item = new SpinningHourglass(); break;

                    case 55: item = new ArcheryButte(); break;

                    case 56: item = new PhillipsWoodenSteed(); break;

                    case 57: item = new PileOfGlacialSnow(); break;

                    case 58: item = new RedPoinsettia(); break;

                    case 59: item = new RoseOfTrinsic(); break;

                    case 60: item = new RaiseSwitch(); break;

                    case 61: item = new SpecialFishingNet(); break;

                    case 62: item = new SpecialHairDye(); break;

                    case 63: item = new SpecialBeardDye(); break;

                    case 64: item = new SnowPile(); break;

                    case 65: item = new StatueEast2(); break;

                    case 66: item = new StatuePegasus2(); break;

                    case 67: item = new StatueSouth2(); break;

                    case 68: item = new StatueSouthEast(); break;

                    case 69: item = new StatuetteDyeTub(); break;

                    case 70: item = new StatueWest(); break;

                    case 71: item = new TapestryOfSosaria(); break;

                    case 72: item = new WhitePoinsettia(); break;

                    case 73: item = new WindChimes(); break;

                    case 74: item = new ZoogiFungus(); break;

                    case 75: item = new RuinedFallenChairA(); break;

                    case 76: item = new RuinedDrawers(); break;

                    case 77: item = new RuinedClock(); break;

                    case 78: item = new RuinedChair(); break;

                    case 79: item = new RuinedBooks(); break;

                    case 80: item = new RuinedBookcase(); break;

                    case 81: item = new RuinedArmoire(); break;

                    case 82: item = new SmallStretchedHideSouthDeed(); break;

                    case 83: item = new SmallStretchedHideEastDeed(); break;

                    case 84: item = new PolarBearRugSouthDeed(); break;

                    case 85: item = new PolarBearRugEastDeed(); break;

                    case 86: item = new MediumStretchedHideSouthDeed(); break;

                    case 87: item = new MediumStretchedHideEastDeed(); break;

                    case 88: item = new LightFlowerTapestrySouthDeed(); break;

                    case 89: item = new LightFlowerTapestryEastDeed(); break;

                    case 90: item = new DarkFlowerTapestrySouthDeed(); break;

                    case 91: item = new DarkFlowerTapestryEastDeed(); break;

                    case 92: item = new BrownBearRugSouthDeed(); break;

                    case 93: item = new BrownBearRugEastDeed(); break;

                    case 94: item = new WallSconce(); break;

                    case 95: item = new WallTorch(); break;

                    case 96: item = new CandleShort(); break;

                    case 97: item = new CandleLarge(); break;

                    case 98: item = new DecorativeSwordNorth(); break;

                    case 99: item = new DecorativeSwordWest(); break;

                    case 100: item = new Tapestry1N(); break;

                    case 101: item = new Tapestry2N(); break;

                    case 102: item = new Tapestry2W(); break;

                    case 103: item = new Tapestry3N(); break;

                    case 104: item = new Tapestry3W(); break;

                    case 105: item = new Tapestry4N(); break;

                    case 106: item = new Tapestry4W(); break;

                    case 107: item = new Tapestry5N(); break;

                    case 108: item = new Tapestry5W(); break;

                    case 109: item = new Tapestry6N(); break;

                    default: item = new CandleSkull(); break;
                    }

                    item.LootType = LootType.Regular;
                    item.Movable  = true;
                    PackItem(item);
                }
            }
        }
        public override void OnDeath(Container c)
        {
            base.OnDeath(c);

            if (!Summoned && !NoKillAwards && DemonKnight.CheckArtifactChance(this))
            {
                DemonKnight.DistributeArtifact(this);
            }

            if (0.75 > Utility.RandomDouble())
            {
                int  r    = Utility.Random(100);
                Item drop = null;

                if (r < 1)
                {
                    drop = new LayerSashDeed();
                }
                else if (r < 4)
                {
                    drop = new SpecialQuestSandals();
                }
                else if (r < 6)
                {
                    drop = new RareCreamCarpet(PieceType.Centre);
                }
                else if (r < 8)
                {
                    drop = new RareBlueCarpet(PieceType.Centre);
                }
                else if (r < 10)
                {
                    drop = new RareBloodCarpet(PieceType.Centre);
                }
                else if (r < 12)
                {
                    drop = new BasicBlueCarpet(PieceType.Centre);
                }
                else if (r < 14)
                {
                    drop = new BasicPinkCarpet(PieceType.Centre);
                }
                else if (r < 29)
                {
                    drop = new BloodPentagramPart(Utility.Random(5));
                }
                else if (r < 30)
                {
                    drop = new ClothingBlessDeed();
                }
                else if (r < 35)
                {
                    drop = new MysteriousCloth();
                }
                else if (r < 40)
                {
                    drop = new SpecialHairDye();
                }
                else if (r < 45)
                {
                    drop = new SpecialBeardDye();
                }
                else if (r < 50)
                {
                    drop = new NameChangeDeed();
                }
                else if (r < 65)
                {
                    drop = new SkillTunic();
                }
                else if (r < 80)
                {
                    drop = new TamersCrook();
                }
                else if (r < 85)
                {
                    drop = new HeroShield();
                }
                else if (r < 88)
                {
                    drop = new EvilShield();
                }
                else if (r < 91)
                {
                    drop = new MondainHat();
                }
                else if (r < 94)
                {
                    drop = new PlatinGloves();
                }
                else if (r < 96)
                {
                    drop = new AncientSamuraiHelm();
                }
                else if (r < 98)
                {
                    drop = Utility.RandomBool() ? (Item)(new MirrorEast()) : (Item)(new MirrorNorth());
                }
                else
                {
                    drop = Utility.RandomBool() ? (Item)(new BoneBenchEastPart()) : (Item)(new BoneBenchWestPart());
                }

                c.DropItem(drop);
            }
        }