コード例 #1
0
        private IEnumerable <Recommendation> GetRecommendations(CharacterRecomendationInfo info,
                                                                IDictionary <ItemSlot.SlotHashes, int> seasonPassSlots)
        {
            if (info.IntPowerLevel < SoftCap)
            {
                var collections = GetVendorRecommendations(info.Items, info.IntPowerLevel);
                return(collections.Concat(new[]
                {
                    new Recommendation($"Rare and Legendary Engrams to increase your power level to {SoftCap}")
                }));
            }

            Recommendation engramsRecommendation = null;
            var            engramUpgrades        = info.Engrams.Where(engram =>
            {
                return(info.Items.Any(item => engram.PowerLevel > item.PowerLevel));
            });

            if (engramUpgrades.Any())
            {
                var count       = engramUpgrades.Count();
                var countString = count > 1 ? $" {count}" : string.Empty;
                engramsRecommendation = new Recommendation($"Decrypt Engrams at the Cryptarch{count}");
            }

            if (info.IntPowerLevel < PowerfulCap)
            {
                var recommendations = new List <Recommendation>(GetVendorRecommendations(info.Items, info.IntPowerLevel));

                if (engramsRecommendation != null)
                {
                    recommendations.Add(engramsRecommendation);
                }

                // Recommmend legendary engrams for any slots that could easily be upgraded
                recommendations.AddRange(CombineItems(info.Items, info.IntPowerLevel - 2, "Rare/Legendary Engrams"));

                var seasonPassRewards = GetItemRecommendations(info.Items, seasonPassSlots, info.IntPowerLevel, 1);
                if (seasonPassRewards.Any())
                {
                    var recommendation = new Recommendation(GetDisplayString("Season Pass Rewards", seasonPassRewards));
                    recommendations.Add(recommendation);
                }

                recommendations.Add(new Recommendation("Powerful Engrams"));
                recommendations.Add(new Recommendation("Pinnacle Engrams"));

                return(recommendations);
            }

            if (info.IntPowerLevel < HardCap)
            {
                var recommendations = new List <Recommendation>();

                if (engramsRecommendation != null)
                {
                    recommendations.Add(engramsRecommendation);
                }

                var seasonPassRewards = GetSeasonPassPinnacleRecomendations(info.Items, seasonPassSlots, info.PowerLevel);
                if (seasonPassRewards.Any())
                {
                    var recommendation = new Recommendation(GetDisplayString("Season Pass Rewards", seasonPassRewards));
                    recommendations.Add(recommendation);
                }

                // If any slot is at least two power levels behind,
                // a Powerful Engram would increase the max power level.
                // Ignore any slots where a season pass reward can be used first.
                var trailingSlots = info.Items.Where(item => info.IntPowerLevel - item.PowerLevel >= TrailingPowerLevelDifference)
                                    .OrderBy(item => item.PowerLevel)
                                    .Select(item => (item.Slot, 1))
                                    .Except(seasonPassRewards, new ItemComparer());
                if (trailingSlots.Any())
                {
                    var recommendation = new Recommendation(GetDisplayString("Powerful Engrams", trailingSlots));
                    recommendations.Add(recommendation);
                }

                recommendations.AddRange(CreatePinnacleRecommendations(info.IntPowerLevel, info.Items));
                return(recommendations);
            }

            // At the hard cap. Nothing to do.
            return(Enumerable.Empty <Recommendation>());
        }
コード例 #2
0
        public async Task <IEnumerable <Recommendation> > GetRecommendations(CharacterRecomendationInfo info)
        {
            var seasonPassSlots = await _seasonPass.LoadAvailableSeasonPassItems(SeasonHash, info.Progressions);

            return(GetRecommendations(info, seasonPassSlots));
        }