Beispiel #1
0
            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);
            }
Beispiel #2
0
            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);
            }
Beispiel #3
0
        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);
        }
Beispiel #4
0
            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
                });
            }
Beispiel #5
0
            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));
                }
            }
Beispiel #6
0
            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);
            }