public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { CombatResults results = DoesAttackHit(caster, target); if (!results.DidMiss && !results.DidAvoid) { int damage = (int)((caster.SpellPower.EffectiveValue * 0.5) + (caster.AttackPower.EffectiveValue * 0.5)); if (DoesAttackCrit(caster)) { damage = ApplyCriticalDamage(damage, caster); results.DidCrit = true; } results.PureDamage = damage; results.AbsorbedDamage = CalculateAbsorption(damage, target); results.AppliedDamage = results.PureDamage - results.AbsorbedDamage; results.ReflectedDamage = CalculateReflectedDamage(results.AppliedDamage, target); if (!target.HasEffect(typeof(Effect_FireLashDOT))) { target.ApplyEffect(new Effect_FireLashDOT()); } } return(results); }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { CombatResults results = DoesAttackHit(caster, target); if (!results.DidMiss && !results.DidAvoid) { int damage = (int)(caster.SpellPower.EffectiveValue * 1.5); if (DoesAttackCrit(caster)) { damage = ApplyCriticalDamage(damage, caster); results.DidCrit = true; } results.PureDamage = damage; results.AbsorbedDamage = CalculateAbsorption(damage, target); results.AppliedDamage = results.PureDamage - results.AbsorbedDamage; results.ReflectedDamage = CalculateReflectedDamage(results.AppliedDamage, target); if (!target.HasEffect("Ignite")) { int result = Engine.RNG.Next(0, 100); if (result <= 20) { target.ApplyEffect(new Effect_FireballDOT(target)); } } } return(results); }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { CombatResults results = DoesAttackHit(caster, target); if (!results.DidMiss && !results.DidAvoid) { int damage = 100; if (Engine.RNG.Next(0, 100) <= 10) { damage *= 2; results.DidCrit = true; } results.PureDamage = damage; results.AbsorbedDamage = CalculateAbsorption(damage, target); results.AppliedDamage = results.PureDamage - results.AbsorbedDamage; results.ReflectedDamage = CalculateReflectedDamage(results.AppliedDamage, target); if (!target.HasEffect("Ignite")) { int result = Engine.RNG.Next(0, 100); if (result <= 15) { target.ApplyEffect(new Core.Stats.Classes.Mage.Effect_FireballDOT(target)); } } } return(results); }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { if (!target.HasEffect(typeof(Effect_WindShear))) { target.ApplyEffect(new Effect_WindShear()); } return(new CombatResults() { Caster = caster, Target = target, UsedAbility = this }); }
public override void CastAbilityGround(StatsPackage caster, int x0, int y0, int radius, Level level) { if (CanCastAbility(caster, x0, y0) && !caster.HasEffect(typeof(Effect_SoulLink))) { Entity_Impling imp = new Entity_Impling(caster.ParentEntity, level) { X = x0, Y = y0 }; level.Entities.Add(imp); caster.ApplyEffect(new Effect_SoulLink(imp, caster)); } }
public override CombatResults CalculateResults(StatsPackage caster, StatsPackage target) { CombatResults results = DoesAttackHit(caster, target); if (!results.DidMiss && !results.DidAvoid) { int damage = (int)(caster.AttackPower.EffectiveValue * 0.8); if (DoesAttackCrit(caster)) { damage = ApplyCriticalDamage(damage, caster); results.DidCrit = true; } results.PureDamage = damage; results.AbsorbedDamage = CalculateAbsorption(results.PureDamage, target); results.AppliedDamage = results.PureDamage - results.AbsorbedDamage; results.ReflectedDamage = CalculateReflectedDamage(results.AppliedDamage, target); int result = Engine.RNG.Next(0, 100); if (result <= 15) { if (!target.HasEffect(typeof(Effect_Poison))) { target.ApplyEffect(new Effect_Poison()); } else { Effect_Poison poison = (Effect_Poison)target.GetEffect(typeof(Effect_Poison)); if (poison.stacks < 5) { poison.stacks++; poison.Duration = 10; } } } } return(results); }