Example #1
0
        public override SkillForecast ComputeForecast(ICombatant attacker, ICombatant defender)
        {
            var hitChance = new HitChance(attacker, defender);

            var critChance   = new CritChance(attacker, defender);
            var glanceChance = new GlanceChance(attacker, defender);

            var chances = new SkillChances {
                CritChance   = critChance.Value,
                HitChance    = hitChance.Value,
                GlanceChance = glanceChance.Value
            };

            var attackCount = new AttackCount(attacker, defender);

            var hit = new SkillHit {
                BaseDamage = DamageUtils.ComputeMeleeDamage(attacker, defender),
                HitCount   = attackCount.Value
            };

            return(new SkillForecast {
                Type = Type,
                Hit = hit,
                Chances = chances,
                Attacker = attacker,
                Defender = defender
            });
        }
Example #2
0
        public override SkillEffects ComputeResult(ICombatant attacker, ICombatant defender, IRandomizer randomizer)
        {
            var defenderEffects = new List <IEffect>();
            var firstHit        = DamageUtils.ComputeHit(attacker, defender, randomizer);

            defenderEffects.Add(firstHit);

            return(new SkillEffects(defenderEffects));
        }
Example #3
0
        public override SkillEffects ComputeEffects(SkillForecast forecast, IRandomizer randomizer)
        {
            var chances = forecast.Chances;
            var effects = new List <IEffect> {
                DamageUtils.GetFinalizedPhysicalDamage(forecast.Hit.BaseDamage, chances, randomizer)
            };

            return(new SkillEffects(effects));
        }
Example #4
0
        public override SkillForecast ComputeForecast(ICombatant attacker, ICombatant defender)
        {
            var result = base.ComputeForecast(attacker, defender);

            // Knockback only gets one hit, always
            var hit = new SkillHit {
                BaseDamage = DamageUtils.ComputeMeleeDamage(attacker, defender),
                HitCount   = 1
            };

            result.Hit = hit;

            return(result);
        }
Example #5
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
            }));
        }
Example #6
0
        public override SkillEffects ComputeEffects(SkillForecast forecast, IRandomizer randomizer)
        {
            var defender    = forecast.Defender;
            var parryChance = defender.GetStat(StatType.ProjectileParryChance);
            var didParry    = RandomUtils.DidEventHappen(parryChance.Value, randomizer);

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

            var baseDamage = forecast.Hit.BaseDamage;
            var hit        = DamageUtils.GetFinalizedPhysicalDamage(baseDamage, forecast.Chances, randomizer);

            return(new SkillEffects(new List <IEffect>()
            {
                hit
            }));
        }