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 }); }
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)); }
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)); }
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); }
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 })); }
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 })); }