public DiceRoll GetBonus(GetBonusDto bonusDto) { var diceRoll = new DiceRoll(); var totalBonus = FixedValue.GetValueOrDefault(); if (AbilityModifyer != null) { totalBonus += bonusDto.Abilities.First(x => x.Ability.ID == AbilityModifyer.ID).GetCurrentModifier(bonusDto); } else if (ClassProgression != null && ClassProgression.Any()) { var progressions = ClassProgression.Where(x => x.AtLevel <= bonusDto.Classes.FirstOrDefault(y => y.Class.ID == x.ClassProgression.ID)?.Level).OrderByDescending(x => x.AtLevel).FirstOrDefault(); if (progressions != null) { diceRoll += progressions.Bonues; } } diceRoll.AddFixedAmount(totalBonus); if (Dice != null) { diceRoll.AddDice(Dice.GetDice()); } return(diceRoll); }