public virtual CombatResults CastAbilityTarget(StatsPackage caster, StatsPackage target) { if (CanCastAbility(caster, target)) { ApplyAbilityCost(caster); currentCD = cooldown; results = CalculateResults(caster, target); return(results); } return(new CombatResults() { Caster = caster, Target = target, UsedAbility = this, CanAfford = false }); }
public CombatResults DoesAttackHit(StatsPackage caster, StatsPackage target) { CombatResults results = new CombatResults() { DidMiss = true, DidAvoid = false, Caster = caster, Target = target, UsedAbility = this }; int result = Engine.RNG.Next(0, 100); if (abilityType == AbilityTypes.Physical) { if (result <= caster.PhysicalHitChance.EffectiveValue) { results.DidMiss = false; result = Engine.RNG.Next(0, 100); if (result <= target.PhysicalAvoidance.EffectiveValue) { results.DidAvoid = true; } else { results.DidAvoid = false; } } } else if (abilityType == AbilityTypes.Magical) { if (result <= caster.SpellHitChance.EffectiveValue) { results.DidMiss = false; result = Engine.RNG.Next(0, 100); if (result <= target.SpellAvoidance.EffectiveValue) { results.DidAvoid = true; } else { results.DidAvoid = false; } } } return(results); }
} //Whenever the holder attacks public virtual void OnDefend(CombatResults results) { } //Whenever the holder is attacked
public virtual void OnAttack(CombatResults results) { } //Whenever the holder attacks