Example #1
0
        private List <ItemChance> GetPossibleItems(Seed seed, YieldTier tier)
        {
            var baseTier      = decimal.Floor(tier.Tier);
            var actualTier    = tier.Tier;
            var possibleItems = ItemList.Where(x => x.Seeds.Any(y => y.Name == seed.Name &&
                                                                y.Tiers.Any(z => decimal.Floor(z.Tier) == baseTier)))
                                .Select(x => new Item()
            {
                Name  = x.Name,
                Seeds = x.Seeds.Select(y => new SeedTier()
                {
                    Name  = y.Name,
                    Tiers = y.Tiers.Where(z => decimal.Floor(z.Tier) == baseTier).ToList()
                })
                        .Where(y => y.Name == seed.Name && y.Tiers.Any())
                        .ToList()
            });

            List <ItemChance> results = new List <ItemChance>();

            foreach (var item in possibleItems)
            {
                // take count for each applicable tier
                var tierCounts = item.Seeds.Single().Tiers.Where(x => decimal.Floor(x.Tier) == baseTier);

                // count x ratio for that tier
                var mainTierRatio = tier.Ratio;
                var subTierRatio  = 1 - mainTierRatio;

                var     mainTier      = tierCounts.Where(x => x.Tier == actualTier).SingleOrDefault();
                var     subTier       = tierCounts.Where(x => x.Tier != actualTier).SingleOrDefault();
                decimal mainTierCount = mainTier == null ? 0 : mainTier.Count;
                decimal subTierCount  = subTier == null ? 0 : subTier.Count;

                var mainTierChance = mainTierRatio * (mainTierCount / 5);
                var subTierChance  = subTierRatio * (subTierCount / 5);

                if (mainTierChance + subTierChance > 0)
                {
                    results.Add(new ItemChance(item.Name, mainTierChance + subTierChance));
                }
            }
            return(results);
        }
Example #2
0
        public (int, int) GetTierMinMaxRankSum(YieldTier tier)
        {
            var minScore = tier.ScoreRange.Lower - 40;
            int modMax   = 12;

            if (minScore > 0)
            {
                modMax = (int)decimal.Floor(Math.Abs(12 - (decimal)minScore / 5));
            }

            if (modMax > 11)
            {
                modMax = 11;
            }

            var maxScore = tier.ScoreRange.Upper - 10;
            var modMin   = 12 - (int)decimal.Floor((decimal)maxScore / 5);

            if (modMin < 0)
            {
                modMin = 0;
            }
            return(modMin, modMax);
        }
Example #3
0
 public (int, int) GetTierMinMaxGradeSum(YieldTier tier, (int min, int max) minMaxMod, int currGradeSum)