コード例 #1
0
        public static BestModsResult FindBestMods(Eidolon pEidolon, DPSCase pCase, Weapon pSniper, Health pHealthType, Mod pRiven1, Mod pRiven2, Mod pArcanes, bool pAllowHeavyCaliber)
        {
            //List<Mod> allMods = new List<Mod>(MainMods.TestMods);
            List <Mod> allMods = new List <Mod>(MainMods.AllMods(pSniper.WeaponClass, pAllowHeavyCaliber, pSniper.AugmentNames));

            allMods.Remove(allMods.Where((x) => x.Name == "Riven").Single());

            for (int i = allMods.Count - 1; i >= 0; i--)
            {
                var mod = allMods[i];
                if (mod.IsAugment)
                {
                    if (!pSniper.AugmentNames.Contains(mod.Name))
                    {
                        allMods.RemoveAt(i);
                    }
                }
            }

            if (pRiven1 == null && pRiven2 == null)
            {
                return(FindBestMods(pEidolon, pCase, pSniper, pHealthType, allMods, pArcanes));
            }

            BestModsResult result1 = null;
            BestModsResult result2 = null;

            if (pRiven1 != null)
            {
                allMods.Add(pRiven1);
                result1 = FindBestMods(pEidolon, pCase, pSniper, pHealthType, allMods, pArcanes);
                allMods.Remove(pRiven1);
            }
            if (pRiven2 != null)
            {
                allMods.Add(pRiven2);
                result2 = FindBestMods(pEidolon, pCase, pSniper, pHealthType, allMods, pArcanes);
                allMods.Remove(pRiven2);
            }

            if (result1 == null)
            {
                return(result2);
            }
            if (result2 == null)
            {
                return(result1);
            }

            return
                (result1.DPSResult.ToLimbBreak_TimeSeconds <
                 result2.DPSResult.ToLimbBreak_TimeSeconds ?
                 result1 : result2);
        }
コード例 #2
0
        private static BestModsResult FindBestMods(Eidolon pEidolon, DPSCase pCase, Weapon pSniper, Health pHealthType, IReadOnlyCollection <Mod> pMods, Mod pArcanes)
        {
            var perms     = Permutations(pMods.ToList(), 8, 8);
            int permCount = perms.Count;

            BestModsResult bestResult = null;

            for (int i = 0; i < perms.Count; i++)
            {
                var perm = perms[i];
                perm.Add(pArcanes);
                var elems = ElementCombinations.PossibleCombinations(perm);
                foreach (var elem in elems)
                {
                    var thisResult = MainCalculation(pEidolon, pCase, pSniper, elem, pHealthType, 0, perm.ToArray());
                    if (bestResult == null || thisResult.ToLimbBreak_TimeSeconds < bestResult.DPSResult.ToLimbBreak_TimeSeconds)
                    {
                        bestResult = new BestModsResult(perm, elem, thisResult);
                    }
                }
            }
            bestResult.Mods.Remove(pArcanes);
            return(bestResult);
        }