Beispiel #1
0
        public static void ConsumeMaterials(Mobile from, Mobile mobileTarget, DungeonMould dungeonMould, bool newWeapon, DungeonEnum dungeon)
        {
            if (from == null || mobileTarget == null)
            {
                return;
            }

            List <DungeonCore>         m_DungeonCores         = mobileTarget.Backpack.FindItemsByType <DungeonCore>();
            List <DungeonDistillation> m_DungeonDistillations = mobileTarget.Backpack.FindItemsByType <DungeonDistillation>();

            List <DungeonCore>         m_MatchingDungeonCores         = new List <DungeonCore>();
            List <DungeonDistillation> m_MatchingDungeonDistillations = new List <DungeonDistillation>();

            int coresNeeded         = DungeonWeapon.CoresNeededForUpgrade;
            int distillationsNeeded = DungeonWeapon.DistillationNeededForUpgrade;

            if (newWeapon)
            {
                coresNeeded         = DungeonWeapon.CoresNeededForCreation;
                distillationsNeeded = DungeonWeapon.DistillationNeededForCreation;
            }

            Queue m_Queue = new Queue();

            foreach (DungeonCore dungeonCore in m_DungeonCores)
            {
                if (dungeonCore.Dungeon == dungeon)
                {
                    if (dungeonCore.Amount > coresNeeded)
                    {
                        dungeonCore.Amount -= coresNeeded;
                        coresNeeded         = 0;
                    }

                    else
                    {
                        //Queue for Deletion
                        coresNeeded -= dungeonCore.Amount;

                        m_Queue.Enqueue(dungeonCore);
                    }
                }

                if (coresNeeded <= 0)
                {
                    break;
                }
            }

            while (m_Queue.Count > 0)
            {
                DungeonCore dungeonCore = (DungeonCore)m_Queue.Dequeue();
                dungeonCore.Delete();
            }

            m_Queue = new Queue();

            foreach (DungeonDistillation dungeonDistillation in m_DungeonDistillations)
            {
                if (dungeonDistillation.Dungeon == dungeon)
                {
                    m_Queue.Enqueue(dungeonDistillation);
                    distillationsNeeded--;
                }

                if (distillationsNeeded <= 0)
                {
                    break;
                }
            }

            while (m_Queue.Count > 0)
            {
                DungeonDistillation dungeonDistillation = (DungeonDistillation)m_Queue.Dequeue();
                dungeonDistillation.Delete();
            }

            if (dungeonMould != null)
            {
                dungeonMould.Delete();
            }
        }