Beispiel #1
0
 public static HashSet <Attribute.AttributeType> GetGrownTypes(HashSet <Growth> growths, IRandomizer randomizer)
 {
     return(growths.Where(growth => {
         return growth.Value >= randomizer.GetNextRandom();
     })
            .Select(growth => {
         return growth.Type;
     })
            .ToHashSet());
 }
Beispiel #2
0
        public static WeaponHit ComputeHit(ICombatant attacker, ICombatant defender, IRandomizer random)
        {
            var hitChance    = new HitChance(attacker, defender);
            var glanceChance = new GlanceChance(attacker, defender);
            var critChance   = new CritChance(attacker, defender);

            if (random.GetNextRandom() > (100 - hitChance.Value))
            {
                var baseDamage = ComputeMeleeDamage(attacker, defender);
                if (random.GetNextRandom() > (100 - critChance.Value))
                {
                    baseDamage *= 2;
                }
                else if (random.GetNextRandom() > (100 - glanceChance.Value))
                {
                    baseDamage /= 2;
                }

                return(new WeaponHit(baseDamage));
            }

            return(new Miss(MissReason.Miss));
        }
Beispiel #3
0
        public override SkillEffects ComputeResult(ICombatant attacker, ICombatant defender, IRandomizer randomizer)
        {
            var parryChance = defender.GetStat(StatType.ProjectileParryChance);
            var didParry    = randomizer.GetNextRandom() < (100 - parryChance.Value);

            if (didParry)
            {
                return(new SkillEffects(
                           new List <IEffect> {
                    new Miss(MissReason.Parry)
                }
                           ));
            }

            var firstHit = DamageUtils.ComputeHit(attacker, defender, randomizer);

            return(new SkillEffects(new List <IEffect>()
            {
                firstHit
            }));
        }
Beispiel #4
0
        /// <summary>
        /// Roll the dice and find out if something happened based on integer percentage chances.
        /// </summary>
        /// <param name="percentChance">The percentage chance of an event happening.</param>
        /// <param name="randomizer">A randomizer.</param>
        /// <returns></returns>
        public static bool DidEventHappen(int percentChance, IRandomizer randomizer)
        {
            var roll = randomizer.GetNextRandom();

            return(roll > (100 - percentChance));
        }