Exemplo n.º 1
0
 private void PurchaseCloth(UncutCloth cloth, GenericBuyInfo info)
 {
     if (cloth != null)
     {
         cloth.ItemID = info.ItemID;
     }
 }
        public override void OnDeath(Container c)
        {
            if (Utility.Random(2) < 1)
            {
                int randomise = Utility.Random(7);

                switch (randomise)
                {
                case 0: m_Idol = new Idol(IdolType.Shame); break;

                case 1: m_Idol = new Idol(IdolType.Hythloth); break;

                case 2: m_Idol = new Idol(IdolType.Destard); break;

                case 3: m_Idol = new Idol(IdolType.Deceit); break;

                case 4: m_Idol = new Idol(IdolType.Despise); break;

                case 5: m_Idol = new Idol(IdolType.Wrong); break;

                case 6: m_Idol = new Idol(IdolType.Covetous); break;
                }

                c.DropItem(m_Idol);
            }

            if (Utility.Random(50) < 1)
            {
                UncutCloth cloth = new UncutCloth();
                cloth.Hue = 1364;
                c.DropItem(cloth);
            }

            base.OnDeath(c);
        }
Exemplo n.º 3
0
 public override void OnDeath(Container c)
 {
     if (Utility.Random(200) < 1)
     {
         UncutCloth cloth = new UncutCloth();
         cloth.Hue = 1364;
         c.DropItem(cloth);
     }
     base.OnDeath(c);
 }
Exemplo n.º 4
0
        private static Item CreateCloth(int type)
        {
            if (type >= 0 && type < m_ClothHues.Length)
            {
                UncutCloth cloth = new UncutCloth(100);
                cloth.Hue = m_ClothHues[type][Utility.Random(m_ClothHues[type].Length)];
                return(cloth);
            }

            throw new InvalidOperationException();
        }
Exemplo n.º 5
0
        private static Item CreateCloth(int type)
        {
            if (type >= 0 && type < m_ClothHues.Length)
            {
                UncutCloth cloth = new UncutCloth(100);
                // Scriptiz : les pigments seront trouvés via un autre système
                //cloth.Hue = m_ClothHues[type][Utility.Random( m_ClothHues[type].Length )];
                return(cloth);
            }

            throw new InvalidOperationException();
        }
Exemplo n.º 6
0
        private static Item CreateCloth(int type)
        {
            if (type < 0 || type >= m_ClothHues.Length)
            {
                throw new InvalidOperationException();
            }
            var cloth = new UncutCloth(5)
            {
                Hue = m_ClothHues[type][Utility.Random(m_ClothHues[type].Length)]
            };

            return(cloth);
        }
Exemplo n.º 7
0
        public Item MakeCloth(int hue1, int hue2, int hue3, int hue4)
        {
            int hue;

            switch (Utility.Random(4))
            {
            default:
            case 0: hue = hue1 + 0; break;

            case 1: hue = hue2 + 0; break;

            case 2: hue = hue3 + 0; break;

            case 3: hue = hue4 + 0; break;
            }

            UncutCloth v = new UncutCloth(1);

            v.Hue = hue;

            return(v);
        }
Exemplo n.º 8
0
        private void CombineCloth(Mobile m, CraftItem craftItem, BaseTool tool)
        {
            PlayCraftEffect(m);

            Timer.DelayCall(TimeSpan.FromSeconds(Delay), () =>
            {
                if (m.Backpack == null)
                {
                    m.SendGump(new CraftGump(m, this, tool, null));
                }

                Container pack = m.Backpack;

                Dictionary <int, int> cloth = new Dictionary <int, int>();
                List <Item> toConsume       = new List <Item>();
                object num = null;

                foreach (var item in pack.Items)
                {
                    Type t = item.GetType();

                    if (t == typeof(UncutCloth) || t == typeof(Cloth) || t == typeof(CutUpCloth))
                    {
                        if (!cloth.ContainsKey(item.Hue))
                        {
                            toConsume.Add(item);
                            cloth[item.Hue] = item.Amount;
                        }
                        else
                        {
                            toConsume.Add(item);
                            cloth[item.Hue] += item.Amount;
                        }
                    }
                }

                if (cloth.Count == 0)
                {
                    num = 1044253;     // You don't have the components needed to make that.
                }
                else
                {
                    foreach (var item in toConsume)
                    {
                        item.Delete();
                    }

                    foreach (var kvp in cloth)
                    {
                        var c = new UncutCloth(kvp.Value);
                        c.Hue = kvp.Key;

                        DropItem(m, c, tool);
                    }
                }

                if (tool != null)
                {
                    tool.UsesRemaining--;

                    if (tool.UsesRemaining <= 0 && !tool.Deleted)
                    {
                        tool.Delete();
                        m.SendLocalizedMessage(1044038);
                    }
                    else
                    {
                        m.SendGump(new CraftGump(m, this, tool, num));
                    }
                }

                ColUtility.Free(toConsume);
                cloth.Clear();
            });
        }
Exemplo n.º 9
0
        private void CutUpCloth(Mobile m, CraftItem craftItem, ITool tool)
        {
            PlayCraftEffect(m);

            Timer.DelayCall(TimeSpan.FromSeconds(Delay), () =>
            {
                if (m.Backpack == null)
                {
                    m.SendGump(new CraftGump(m, this, tool, null));
                }

                Dictionary <int, int> bolts = new Dictionary <int, int>();
                List <Item> toConsume       = new List <Item>();
                object num     = null;
                Container pack = m.Backpack;

                foreach (Item item in pack.Items)
                {
                    if (item.GetType() == typeof(BoltOfCloth))
                    {
                        if (!bolts.ContainsKey(item.Hue))
                        {
                            toConsume.Add(item);
                            bolts[item.Hue] = item.Amount;
                        }
                        else
                        {
                            toConsume.Add(item);
                            bolts[item.Hue] += item.Amount;
                        }
                    }
                }

                if (bolts.Count == 0)
                {
                    num = 1044253;     // You don't have the components needed to make that.
                }
                else
                {
                    foreach (Item item in toConsume)
                    {
                        item.Delete();
                    }

                    foreach (KeyValuePair <int, int> kvp in bolts)
                    {
                        UncutCloth cloth = new UncutCloth(kvp.Value * 50)
                        {
                            Hue = kvp.Key
                        };

                        DropItem(m, cloth, tool);
                    }
                }

                if (tool != null)
                {
                    tool.UsesRemaining--;

                    if (tool.UsesRemaining <= 0 && !tool.Deleted)
                    {
                        tool.Delete();
                        m.SendLocalizedMessage(1044038);
                    }
                    else
                    {
                        m.SendGump(new CraftGump(m, this, tool, num));
                    }
                }

                ColUtility.Free(toConsume);
                bolts.Clear();
            });
        }
Exemplo n.º 10
0
        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();
        }