public static Rune[][] MakeSets(IList <Rune> runes, Attr slot2, Attr slot4, Attr slot6, Predicate <Rune> odds, RuneSet[] reqsets = null)
        {
            Rune[][] runesSlot = new Rune[6][];

            Predicate <Rune> set = r => true;

            if (reqsets != null)
            {
                int reqCount = 0;
                foreach (RuneSet s in reqsets)
                {
                    reqCount += Rune.SetRequired(s);
                }

                if (reqCount == 6)
                {
                    set = r => reqsets.Any(s => s == r.Set);
                }
            }

            var unlocked = runes.Where(r => !r.Locked).ToArray();
            var sets     = unlocked.Where(r => set.Invoke(r)).ToArray();
            var odd      = sets.Where(r => odds.Invoke(r)).ToArray();

            runesSlot[0] = odd.Where(r => r.Slot == 1).ToArray();
            runesSlot[1] = sets.Where(r => r.Slot == 2 && (r.MainType == slot2 || slot2 == Attr.Null)).ToArray();
            runesSlot[2] = odd.Where(r => r.Slot == 3).ToArray();
            runesSlot[3] = sets.Where(r => r.Slot == 4 && (r.MainType == slot4 || slot4 == Attr.Null)).ToArray();
            runesSlot[4] = odd.Where(r => r.Slot == 5).ToArray();
            runesSlot[5] = sets.Where(r => r.Slot == 6 && (r.MainType == slot6 || slot6 == Attr.Null)).ToArray();

            foreach (Rune[] rs in runesSlot.Where(r => r.Length == 0))
            {
                Console.WriteLine("No runes for slot " + (runesSlot.ToList().IndexOf(rs) + 1) + ":(");
            }

            return(runesSlot);
        }
Example #2
0
        public static IEnumerable<Rune>[] MakeSets(IList<Rune> runes, Attr slot2, Attr slot4, Attr slot6, Predicate<Rune> odds, RuneSet[] reqsets = null)
        {
            Rune[][] runesSlot = new Rune[6][];

            Predicate<Rune> set = r => true;
            if (reqsets != null)
            {
                int reqCount = 0;
                foreach (RuneSet s in reqsets)
                    reqCount += Rune.SetRequired(s);

                if (reqCount == 6)
                    set = r => reqsets.Any(s => s == r.Set);
            }

            var unlocked = runes.Where(r => !r.Locked).ToArray();
            var sets = unlocked.Where(r => set.Invoke(r)).ToArray();
            var odd = sets.Where(r => odds.Invoke(r)).ToArray();

            runesSlot[0] = odd.Where(r => r.Slot == 1).ToArray();
            runesSlot[1] = sets.Where(r => r.Slot == 2 && (r.MainType == slot2 || slot2 == Attr.Null)).ToArray();
            runesSlot[2] = odd.Where(r => r.Slot == 3).ToArray();
            runesSlot[3] = sets.Where(r => r.Slot == 4 && (r.MainType == slot4 || slot4 == Attr.Null)).ToArray();
            runesSlot[4] = odd.Where(r => r.Slot == 5).ToArray();
            runesSlot[5] = sets.Where(r => r.Slot == 6 && (r.MainType == slot6 || slot6 == Attr.Null)).ToArray();

            foreach (Rune[] rs in runesSlot.Where(r => r.Length == 0))
                Console.WriteLine("No runes for slot " + (runesSlot.ToList().IndexOf(rs) + 1) + ":(");

            return runesSlot;
        }