Beispiel #1
0
        private static void combo()
        {
            var target = TargetSelector.GetTarget(W.Range, TargetSelector.DamageType.Magical);

            if (target == null || !target.IsValidTarget())
            {
                return;
            }

            Obj_AI_Hero targetR = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Magical);
            var         rmana   = Config.Item("Rmana").GetValue <Slider>().Value;

            if (R.IsReady() && player.ManaPercent < rmana && targetR.IsValidTarget(R.Range - 30))
            {
                bool enoughEnemies = Config.Item("Rene").GetValue <Slider>().Value <= player.CountEnemiesInRange(R.Range - 50);

                if (maoR && ((Config.Item("Rkill").GetValue <bool>() && Damage.GetSpellDamage(player, targetR, SpellSlot.R) + player.CalcDamage(target, Damage.DamageType.Magical, maoRStack) > targetR.Health) || (!enoughEnemies)))
                {
                    R.Cast();
                }
                if (targetR != null && !maoR && player.ManaPercent > rmana && (enoughEnemies || R.IsInRange(targetR)))
                {
                    R.Cast();
                }
            }

            if (W.IsReady() && target.IsValidTarget(W.Range) && Config.Item("UseW").GetValue <bool>())
            {
                W.CastOnUnit(target);
            }

            if (E.IsReady() && target.IsValidTarget(E.Range) && Config.Item("UseE").GetValue <bool>())
            {
                E.CastIfHitchanceEquals(target, HitChance.High);
            }

            if (Q.IsReady() && Config.Item("UseQ").GetValue <bool>() && target.IsValidTarget(Q.Range))
            {
                Q.CastIfHitchanceEquals(target, HitChance.High);
            }

            var rDmg = player.GetSpellDamage(target, SpellSlot.R);

            if (Config.Item("Rkill").GetValue <bool>() && target.HealthPercent <= rDmg)
            {
                R.Cast();
            }

            if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo)
            {
                items();
            }
        }
Beispiel #2
0
        public static float getJayceEHamDmg(Obj_AI_Base target)
        {
            double percentage = 5 + (3 * Player.Spellbook.GetSpell(SpellSlot.E).Level);

            return((float)Player.CalcDamage(target, Damage.DamageType.Magical, ((target.MaxHealth / 100) * percentage) + (Player.FlatPhysicalDamageMod)));
        }
Beispiel #3
0
 public static float GetRendDamage(Obj_AI_Base target, int customStacks = -1)
 {
     return((float)player.CalcDamage(target, Damage.DamageType.Physical, GetRawRendDamage(target, customStacks)) - 20 * 0.98f);
 }
Beispiel #4
0
        public static float GetRealDamage(this SpellSlot slot, Obj_AI_Base target)
        {
            // Validate spell level
            var spellLevel = player.Spellbook.GetSpell(slot).Level;

            if (spellLevel == 0)
            {
                return(0);
            }
            spellLevel--;

            // Helpers
            var   damageType  = Damage.DamageType.Physical;
            float damage      = 0;
            float extraDamage = 0;

            switch (slot)
            {
            case SpellSlot.Q:

                // First Cast: Varus starts drawing back his next shot, gradually increasing its range and damage.
                // Second Cast: Varus fires, dealing 10/47/83/120/157 (+1) to 15/70/125/180/235 (+1.6) physical damage, reduced by 15% per enemy hit (minimum 33%).
                // While preparing to shoot Varus' Movement Speed is slowed by 20%. After 4 seconds, Piercing Arrow fails but refunds half its Mana cost.
                var chargePercentage = SpellManager.Q.Range / SpellManager.Q.ChargedMaxRange;
                damage = (new float[] { 10, 47, 83, 120, 157 }[spellLevel] +new float[] { 5, 23, 42, 60, 78 }[spellLevel] *chargePercentage) +
                         (1 + chargePercentage * 6) * player.TotalAttackDamage();
                break;

            case SpellSlot.W:

                // Passive: Varus' basic attacks deal 10/14/18/22/26 (+0.25) bonus magic damage and apply Blight for 6 seconds (stacks 3 times).
                damageType = Damage.DamageType.Magical;
                damage     = new float[] { 10, 14, 18, 22, 26 }[spellLevel] +0.25f * player.TotalMagicalDamage();

                // Varus' other abilities detonate Blight, dealing magic damage equal to 2/2.75/3.5/4.25/5% (+0.02%) of the target's maximum Health per stack (Max: 360 total damage vs Monsters).
                if (target.GetBlightStacks() > 0)
                {
                    extraDamage = (float)player.CalcDamage(target, Damage.DamageType.Magical, (new float[] { 2, 2.75f, 3.5f, 4.25f, 5 }[spellLevel] *target.MaxHealth) * target.GetBlightStacks());
                    if (target is Obj_AI_Minion)
                    {
                        // Special case: max damage 360
                        extraDamage = Math.Min(360, extraDamage);
                    }
                }
                break;

            case SpellSlot.E:

                // Varus fires a hail of arrows that deals 65/100/135/170/205 (+0.6) physical damage and desecrates the ground for 4 seconds.
                // Desecrated Ground slows enemy Movement Speed by 25/30/35/40/45% and reduces healing effects by 50%.
                damage = new float[] { 65, 100, 135, 170, 205 }[spellLevel] +0.6f * player.TotalAttackDamage();
                break;

            case SpellSlot.R:

                // Varus flings out a tendril of corruption that deals 150/250/350 (+1) magic damage and immobilizes the first enemy champion hit for 2 seconds.
                // The corruption then spreads towards nearby uninfected enemy champions, applying the same damage and immobilize if it reaches them.
                damageType = Damage.DamageType.Magical;
                damage     = new float[] { 150, 250, 350 }[spellLevel] +player.TotalMagicalDamage();
                break;
            }

            // No damage set
            if (damage == 0 && extraDamage == 0)
            {
                return(0);
            }

            // Calculate damage on target and return (-20 to make it actually more accurate Kappa)
            return((float)player.CalcDamage(target, damageType, damage) + extraDamage - 20);
        }
Beispiel #5
0
/*        public static List<List<Vector3>> GetQPredictions(Vector3 position)
 *      {
 *          foreach (var soldier in AzirSoldier.Where(h => h.IsValid && !h.IsDead))
 *          {
 *              var d = Player.Distance(soldier);
 *              d = d > Q.Range ? soldier.Distance(position) : Q.Range;
 *
 *              var startPos = soldier.ServerPosition;
 *              var endPos = soldier.ServerPosition.Extend(position, d);
 *              var line = new Geometry.Line(startPos.To2D(), endPos.To2D(), startPos.Distance(endPos));
 *              //   line.ToPolygon().Points
 *          }
 *      }
 */

        public static double GetWDamage(Obj_AI_Turret turret)
        {
            return(Player.CalcDamage(
                       turret, Damage.DamageType.Magical, 80 + 25 * Player.Level + .6 * Player.FlatMagicDamageMod));
        }
Beispiel #6
0
        private static void Farm()
        {
            foreach (var minion in
                     ObjectManager.Get <Obj_AI_Minion>()
                     .Where(
                         minion =>
                         minion.IsValidTarget() && minion.IsEnemy &&
                         minion.Distance(Player.ServerPosition) < spells[Spells.E].Range))
            {
                var qdmg    = spells[Spells.Q].GetDamage(minion);
                var wdmg    = spells[Spells.W].GetDamage(minion);
                var edmg    = spells[Spells.E].GetDamage(minion);
                var markDmg = Player.CalcDamage(
                    minion,
                    Damage.DamageType.Magical,
                    Player.FlatMagicDamageMod * 0.15 + Player.Level * 15);

                //Killable with Q
                if (minion.Health - qdmg <= 0 && minion.Distance(Player.ServerPosition) <= spells[Spells.Q].Range &&
                    spells[Spells.Q].IsReady() && (config.Item("wFarm").GetValue <bool>()))
                {
                    spells[Spells.Q].CastOnUnit(minion);
                }

                if (minion.Health - wdmg <= 0 && minion.Distance(Player.ServerPosition) <= spells[Spells.W].Range &&
                    spells[Spells.W].IsReady() && (config.Item("wFarm").GetValue <bool>()))
                {
                    spells[Spells.Q].Cast();
                    return;
                }

                if (minion.Health - edmg <= 0 && minion.Distance(Player.ServerPosition) <= spells[Spells.E].Range &&
                    spells[Spells.E].IsReady() && (config.Item("eFarm").GetValue <bool>()))
                {
                    CastE(minion);
                    return;
                }

                if (minion.Health - wdmg - qdmg <= 0 && minion.Distance(Player.ServerPosition) <= spells[Spells.W].Range &&
                    spells[Spells.Q].IsReady() && spells[Spells.W].IsReady() &&
                    (config.Item("qFarm").GetValue <bool>()) && (config.Item("wFarm").GetValue <bool>()))
                {
                    spells[Spells.Q].Cast(minion);
                    spells[Spells.W].Cast();
                    return;
                }

                if (minion.Health - wdmg - qdmg - markDmg <= 0 &&
                    minion.Distance(Player.ServerPosition) <= spells[Spells.W].Range && spells[Spells.Q].IsReady() &&
                    spells[Spells.W].IsReady() && (config.Item("qFarm").GetValue <bool>()) &&
                    (config.Item("wFarm").GetValue <bool>()))
                {
                    spells[Spells.Q].Cast(minion);
                    spells[Spells.W].Cast();
                    return;
                }

                if (minion.Health - wdmg - qdmg - markDmg - edmg <= 0 &&
                    minion.Distance(Player.ServerPosition) <= spells[Spells.W].Range && spells[Spells.E].IsReady() &&
                    spells[Spells.Q].IsReady() && spells[Spells.W].IsReady() &&
                    (config.Item("qFarm").GetValue <bool>()) && (config.Item("wFarm").GetValue <bool>()) &&
                    (config.Item("eFarm").GetValue <bool>()))
                {
                    CastE(minion);
                    spells[Spells.Q].Cast(minion);
                    spells[Spells.W].Cast();
                    return;
                }
            }
        }
        public static int GetCustomDamage(string auraname, Obj_AI_Hero target, Obj_AI_Hero source)
        {
            switch (auraname)
            {
                case "itemsunfirecapeaura":
                    return
                        (int)
                            source.CalcDamage(target, Damage.DamageType.Magical,
                                25 + (1*source.Level));

                case "gangplankattackdotpassive":
                    return
                        (int)
                            source.CalcDamage(target, Damage.DamageType.True,
                                20 + (10*source.Level) + 1.2 * (source.BaseAttackDamage + source.FlatPhysicalDamageMod));

                case "bantamtraptarget":
                    return
                        (int)
                            source.CalcDamage(target, Damage.DamageType.Magical,
                                new[] {50, 81, 112}[source.Level/6] + 0.25 * (source.FlatMagicDamageMod));
            }

            return 10;
        }
Beispiel #8
0
        static void Game_OnGameUpdate(EventArgs args)
        {
            double temp = 0;

            foreach (
                var c in
                ObjectManager.Get <Obj_AI_Hero>().Where(x => x.IsVisible && x.IsEnemy && x.IsValid))    //&& x.Distance(ObjectManager.Player) < 2500))
            {
                var dmg = Player.GetAutoAttackDamage(c);

                var howmanyautos = c.Health / dmg;

                if (howmanyautos > 3 && Vayne && Player.Spellbook.GetSpell(SpellSlot.W).State != SpellState.NotLearned)
                {
                    var g = new float[] { 0, 20, 30, 40, 50, 60 };
                    var h = new double[] { 0, .04, .05, .06, .07, .08 };

                    howmanyautos = (c.Health) / (dmg + ((g[Player.Spellbook.GetSpell(SpellSlot.W).Level] + (c.MaxHealth * h[Player.Spellbook.GetSpell(SpellSlot.W).Level]))) / 3);
                }

                else if (howmanyautos > 7 && Cait)
                {
                    howmanyautos = (c.Health) / (dmg + (Player.CalcDamage(c, Damage.DamageType.Physical,
                                                                          1.5 * (Player.BaseAttackDamage + Player.FlatPhysicalDamageMod)) / 7));
                }

                else if (Satan)
                {
                    if (Player.Spellbook.GetSpell(SpellSlot.E).State != SpellState.NotLearned)
                    {
                        howmanyautos = c.Health /
                                       (Player.CalcDamage(c, Damage.DamageType.Magical,
                                                          Player.Spellbook.GetSpell(SpellSlot.E).Level *10 +
                                                          Player.FlatMagicDamageMod * .3) + dmg);
                    }
                }

                else if (Mf)
                {
                    howmanyautos = c.Health / (Player.GetSpellDamage(c, SpellSlot.W) + dmg);
                }

                else if (Jinx)
                {
                    var mult = new double[] { 0, 1.30, 1.55, 1.80, 2.05, 2.30 };
                    temp = atkspd * mult[Player.Spellbook.GetSpell(SpellSlot.Q).Level];  //assume max stack of Q before engaging
                    if (Player.HasBuff("JinxQ"))
                    {
                        howmanyautos = c.Health / (Player.CalcDamage(c, Damage.DamageType.Physical, .1 * (Player.BaseAttackDamage + Player.FlatPhysicalDamageMod)) + dmg);
                    }
                }

                else if (Draven)
                {
                    howmanyautos = c.Health / ((Player.GetSpellDamage(c, SpellSlot.Q)) + dmg);  //assume axes 24/7
                }

                else if (KogMaw)
                {
                    howmanyautos = c.Health / (dmg + Player.GetSpellDamage(c, SpellSlot.W));
                }

                else if (Corki)
                {
                    howmanyautos = c.Health / (dmg + ((Player.BaseAttackDamage + Player.FlatMagicDamageMod)) * .1);
                }

                double howmuchtime = 0;
                if (temp == 0)
                {
                    howmuchtime = howmanyautos / (atkspd * Player.AttackSpeedMod);
                }

                else
                {
                    howmuchtime = howmanyautos / (temp);
                }
                Drawing.DrawText(c.HPBarPosition.X, c.HPBarPosition.Y - 22, System.Drawing.Color.DeepSkyBlue, "Time: " + String.Format("{0:0.00}", howmuchtime) + "  Autos: " + String.Format("{0:0.00}", howmanyautos));
            }
        }
Beispiel #9
0
        public static float GetRealDamage(SpellSlot slot, Obj_AI_Base target, TransformState state = TransformState.AUTOMATIC)
        {
            // Helpers
            var   spellLevel  = player.Spellbook.GetSpell(slot).Level;
            var   damageType  = Damage.DamageType.Physical;
            float damage      = 0;
            float extraDamage = 0;

            // Validate spell level
            if (spellLevel == 0)
            {
                return(0);
            }
            spellLevel--;

            switch (slot)
            {
            case SpellSlot.Q:

                if (state == TransformState.MINI || state == TransformState.AUTOMATIC && player.IsMiniGnar())
                {
                    // Throws a boomerang that deals 5/35/65/95/125 (+1.15) physical damage and slows enemies by 15/20/25/30/35% for 2 seconds.
                    // The boomerang returns towards Gnar after hitting an enemy, dealing 50% damage to subsequent targets. Each enemy can only be hit once.
                    damage = new[] { 5, 35, 65, 95, 125 }[spellLevel] +1.15f * player.TotalAttackDamage();
                }
                else if (state == TransformState.MEGA || state == TransformState.AUTOMATIC && player.IsMegaGnar())
                {
                    // Throws a boulder that stops when it hits an enemy, slowing all nearby enemies and dealing 5/45/85/125/165 (+1.2) physical damage.
                    damage = new[] { 5, 45, 85, 125, 165 }[spellLevel] +1.2f * (player.BaseAttackDamage + player.FlatPhysicalDamageMod);
                }

                break;

            case SpellSlot.W:

                if (state == TransformState.MINI || state == TransformState.AUTOMATIC && player.IsMiniGnar())
                {
                    // Every 3rd attack or spell on the same target deals an additional 10/20/30/40/50 (+1) + 6/8/10/12/14% of the target's max Health as magic damage
                    // and grants Gnar undefined% Movement Speed that decays over 3 seconds (max 100/150/200/250/300 damage vs. monsters).
                    var buff = target.Buffs.FirstOrDefault(b => b.IsActive && Game.Time < b.EndTime && b.DisplayName == "GnarWProc" && b.Caster.NetworkId == player.NetworkId);
                    if (buff != null && buff.Count == 2)
                    {
                        damageType = Damage.DamageType.Magical;
                        damage     = new[] { 10, 20, 30, 40, 50 }[spellLevel] +player.TotalMagicalDamage() + new[] { 0.06f, 0.08f, 0.1f, 0.12f, 0.14f }[spellLevel] *target.MaxHealth;

                        // Special case for minions
                        if (target is Obj_AI_Minion)
                        {
                            var maxDamage = new[] { 100, 150, 200, 250, 300 }[spellLevel];
                            if (player.CalcDamage(target, damageType, damage) > maxDamage)
                            {
                                damageType = Damage.DamageType.True;
                                damage     = maxDamage;
                            }
                        }
                    }
                }
                else if (state == TransformState.MEGA || state == TransformState.AUTOMATIC && player.IsMegaGnar())
                {
                    // Stuns enemies in an area for 1.25 seconds, dealing 25/45/65/85/105 (+1) physical damage.
                    damage = new[] { 25, 45, 65, 85, 105 }[spellLevel] +(player.BaseAttackDamage + player.FlatPhysicalDamageMod);
                }

                break;

            case SpellSlot.E:

                if (state == TransformState.MINI || state == TransformState.AUTOMATIC && player.IsMiniGnar())
                {
                    // Leaps to a location, gaining 20/30/40/50/60% Attack Speed for 3 seconds. If Gnar lands on a unit he will bounce off it, traveling further.
                    // Deals 20/60/100/140/180 (+undefined) [6% of Gnar's Max Health] physical damage and slows briefly if the unit landed on was an enemy.
                    damage = new[] { 20, 60, 100, 140, 180 }[spellLevel] +0.06f * player.MaxHealth;
                }
                else if (state == TransformState.MEGA || state == TransformState.AUTOMATIC && player.IsMegaGnar())
                {
                    // Leaps to a location and deals 20/60/100/140/180 (+undefined) [6% of Gnar's Max Health] physical damage to all nearby enemies on landing.
                    // Enemies Gnar lands directly on top of are slowed briefly.
                    damage = new[] { 20, 60, 100, 140, 180 }[spellLevel] +0.06f * player.MaxHealth;
                }

                break;

            case SpellSlot.R:

                if (state == TransformState.MEGA || state == TransformState.AUTOMATIC && player.IsMegaGnar())
                {
                    // Knocks all nearby enemies in the specified direction, dealing 200/300/400 (+0.2) (+0.5) physical damage and slowing them by 45% for 1.25/1.5/1.75 seconds.
                    // Any enemy that hits a wall takes 150% damage and is stunned instead of slowed.
                    damage      = new[] { 200, 300, 400 }[spellLevel] +0.2f * player.TotalAttackDamage();
                    extraDamage = (float)player.CalcDamage(target, Damage.DamageType.Magical, player.BaseAbilityDamage + player.FlatMagicDamageMod);
                }

                break;
            }

            // No damage set
            if (damage == 0 && extraDamage == 0)
            {
                return(0);
            }

            // Calculate damage on target and return (-20 to make it actually more accurate Kappa)
            return((float)player.CalcDamage(target, damageType, damage) + extraDamage - 20);
        }
Beispiel #10
0
        private float GetQDamage(Obj_AI_Base target)
        {
            var dmg = new double[] { 30, 55, 80, 105, 130 }[Q.Level - 1] +player.TotalAttackDamage * 0.4f;

            return((float)player.CalcDamage(target, Damage.DamageType.Physical, dmg));
        }
Beispiel #11
0
        public static float GetItemsDamage(Obj_AI_Hero target)
        {
            double damage = 0;

            if (Items.HasItem(odins.Id) && Items.CanUseItem(odins.Id))
            {
                damage += Damage.GetItemDamage(player, target, Damage.DamageItems.OdingVeils);
            }
            if (Items.HasItem(hexgun.Id) && Items.CanUseItem(hexgun.Id))
            {
                damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Hexgun);
            }
            var ludenStacks = player.Buffs.FirstOrDefault(buff => buff.Name == "itemmagicshankcharge");

            if (ludenStacks != null && (Items.HasItem(Ludens.Id) && ludenStacks.Count == 100))
            {
                damage += player.CalcDamage(
                    target, Damage.DamageType.Magical,
                    Damage.CalcDamage(player, target, Damage.DamageType.Magical, 100 + player.FlatMagicDamageMod * 0.15));
            }
            if (Items.HasItem(lich.Id) && Items.CanUseItem(lich.Id))
            {
                damage += player.CalcDamage(
                    target, Damage.DamageType.Magical, player.BaseAttackDamage * 0.75 + player.FlatMagicDamageMod * 0.5);
            }
            if (Items.HasItem(Dfg.Id) && Items.CanUseItem(Dfg.Id))
            {
                damage  = damage * 1.2;
                damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Dfg);
            }
            if (Items.HasItem(Bft.Id) && Items.CanUseItem(Bft.Id))
            {
                damage  = damage * 1.2;
                damage += Damage.GetItemDamage(player, target, Damage.DamageItems.BlackFireTorch);
            }
            if (Items.HasItem(tiamat.Id) && Items.CanUseItem(tiamat.Id))
            {
                damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Tiamat);
            }
            if (Items.HasItem(hydra.Id) && Items.CanUseItem(hydra.Id))
            {
                damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Hydra);
            }
            if (Items.HasItem(bilgewater.Id) && Items.CanUseItem(bilgewater.Id))
            {
                damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Bilgewater);
            }
            if (Items.HasItem(botrk.Id) && Items.CanUseItem(botrk.Id))
            {
                damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Botrk);
            }
            if (Items.HasItem(sheen.Id) && (Items.CanUseItem(sheen.Id) || player.HasBuff("sheen")))
            {
                damage += player.CalcDamage(target, Damage.DamageType.Physical, player.BaseAttackDamage);
            }
            if (Items.HasItem(gaunlet.Id) && Items.CanUseItem(gaunlet.Id))
            {
                damage += player.CalcDamage(target, Damage.DamageType.Physical, player.BaseAttackDamage * 1.25);
            }
            if (Items.HasItem(trinity.Id) && Items.CanUseItem(trinity.Id))
            {
                damage += player.CalcDamage(target, Damage.DamageType.Physical, player.BaseAttackDamage * 2);
            }
            return((float)damage);
        }
Beispiel #12
0
        private static void KillSteal()
        {
            //&& !HasRBuff()
            if (_config.Item("KillSteal").GetValue <bool>())
            {
                foreach (
                    Obj_AI_Hero hero in
                    ObjectManager.Get <Obj_AI_Hero>()
                    .Where(
                        hero =>
                        ObjectManager.Player.Distance(hero.ServerPosition) <= spells[Spells.E].Range && !hero.IsMe &&
                        hero.IsValidTarget() && hero.IsEnemy && !hero.IsInvulnerable))
                {
                    var   qdmg    = spells[Spells.Q].GetDamage(hero);
                    var   wdmg    = spells[Spells.W].GetDamage(hero);
                    var   edmg    = spells[Spells.E].GetDamage(hero);
                    var   markDmg = _player.CalcDamage(hero, Damage.DamageType.Magical, _player.FlatMagicDamageMod * 0.15 + _player.Level * 15);
                    float ignitedmg;

                    //Ignite Damage
                    if (_igniteSlot != SpellSlot.Unknown)
                    {
                        ignitedmg = (float)_player.GetSummonerSpellDamage(hero, Damage.SummonerSpell.Ignite);
                    }
                    else
                    {
                        ignitedmg = 0f;
                    }

                    if (hero.HasBuff("katarinaqmark") && hero.Health - wdmg - markDmg < 0 && spells[Spells.W].IsReady() &&
                        spells[Spells.W].IsInRange(hero))
                    {
                        spells[Spells.W].Cast();
                    }

                    if (hero.Health - ignitedmg < 0 && _igniteSlot.IsReady())
                    {
                        _player.Spellbook.CastSpell(_igniteSlot, hero);
                    }


                    if (hero.Health - edmg < 0 && spells[Spells.E].IsReady())
                    {
                        spells[Spells.E].Cast(hero);
                    }

                    if (hero.Health - qdmg < 0 && spells[Spells.Q].IsReady() && spells[Spells.Q].IsInRange(hero))
                    {
                        spells[Spells.Q].Cast(hero);
                    }

                    if (hero.Health - edmg - wdmg < 0 && spells[Spells.E].IsReady() && spells[Spells.W].IsReady())
                    {
                        CastE(hero);
                        spells[Spells.W].Cast();
                    }

                    if (hero.Health - edmg - qdmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady())
                    {
                        CastE(hero);
                        spells[Spells.Q].Cast(hero);
                    }

                    if (hero.Health - edmg - wdmg - qdmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady())
                    {
                        CastE(hero);
                        spells[Spells.Q].Cast(hero);
                        spells[Spells.W].Cast();
                    }

                    if (hero.Health - edmg - wdmg - qdmg - markDmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady())
                    {
                        CastE(hero);
                        spells[Spells.Q].Cast(hero);
                        spells[Spells.W].Cast();
                    }

                    if (hero.Health - edmg - wdmg - qdmg - ignitedmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady() &&
                        _igniteSlot.IsReady())
                    {
                        CastE(hero);
                        spells[Spells.Q].Cast(hero);
                        spells[Spells.W].Cast();
                        _player.Spellbook.CastSpell(_igniteSlot, hero);
                    }
                }

                foreach (
                    Obj_AI_Base target in
                    ObjectManager.Get <Obj_AI_Base>()
                    .Where(
                        target =>
                        ObjectManager.Player.Distance(target.ServerPosition) <= spells[Spells.E].Range && !target.IsMe &&
                        target.IsTargetable && !target.IsInvulnerable))
                {
                    foreach (
                        Obj_AI_Hero focus in
                        ObjectManager.Get <Obj_AI_Hero>()
                        .Where(
                            focus =>
                            focus.Distance(focus.ServerPosition) <= spells[Spells.Q].Range && focus.IsEnemy && !focus.IsMe &&
                            !focus.IsInvulnerable && focus.IsValidTarget()))
                    {
                        //Variables
                        var   qdmg = spells[Spells.Q].GetDamage(focus);
                        var   wdmg = spells[Spells.W].GetDamage(focus);
                        float ignitedmg;

                        //Ignite Damage
                        if (_igniteSlot != SpellSlot.Unknown)
                        {
                            ignitedmg =
                                (float)_player.GetSummonerSpellDamage(focus, Damage.SummonerSpell.Ignite);
                        }
                        else
                        {
                            ignitedmg = 0f;
                        }

                        //Mark Damage
                        var markDmg = _player.CalcDamage(focus, Damage.DamageType.Magical, _player.FlatMagicDamageMod * 0.15 + _player.Level * 15);

                        //Q
                        if (focus.Health - qdmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() &&
                            focus.Distance(target.ServerPosition) <= spells[Spells.Q].Range)
                        {
                            CastE(target);
                            spells[Spells.Q].Cast(focus);
                        }
                        // Q + W
                        if (focus.Distance(target.ServerPosition) <= spells[Spells.W].Range && focus.Health - qdmg - wdmg < 0 &&
                            spells[Spells.E].IsReady() && spells[Spells.Q].IsReady())
                        {
                            CastE(target);
                            spells[Spells.Q].Cast(focus);
                            spells[Spells.W].Cast();
                        }
                        // Q + W + Mark
                        if (focus.Distance(target.ServerPosition) <= spells[Spells.W].Range && focus.Health - qdmg - wdmg - markDmg < 0 &&
                            spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady())
                        {
                            CastE(target);
                            spells[Spells.Q].Cast(focus);
                            spells[Spells.W].Cast();
                        }
                        // Q + Ignite
                        if (focus.Distance(target.ServerPosition) <= 600 && focus.Health - qdmg - ignitedmg < 0 &&
                            spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && _igniteSlot.IsReady())
                        {
                            CastE(target);
                            spells[Spells.Q].Cast(focus);
                            _player.Spellbook.CastSpell(_igniteSlot, focus);
                        }
                        // Q + W + Ignite
                        if (focus.Distance(target.ServerPosition) <= spells[Spells.W].Range &&
                            focus.Health - qdmg - wdmg - ignitedmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady() &&
                            _igniteSlot.IsReady())
                        {
                            CastE(target);
                            spells[Spells.Q].Cast(focus);
                            spells[Spells.W].Cast();
                            _player.Spellbook.CastSpell(_igniteSlot, focus);
                        }
                    }
                }
            }
        }
Beispiel #13
0
        public static float ComboDamage(Obj_AI_Hero hero)
        {
            float damage = 0;

            if (Q.IsReady())
            {
                damage += (float)Damage.GetSpellDamage(player, hero, SpellSlot.Q);
            }
            if (E.IsReady())
            {
                damage += (float)Damage.GetSpellDamage(player, hero, SpellSlot.E);
            }
            //lich
            if (Items.HasItem(3100) && Items.CanUseItem(3100))
            {
                damage += (float)player.CalcDamage(hero, Damage.DamageType.Magical, player.BaseAttackDamage * 0.75 + player.FlatMagicDamageMod * 0.5);
            }
            //sheen
            if (Items.HasItem(3057) && (Items.CanUseItem(3057) || player.HasBuff("sheen", true)))
            {
                damage += (float)player.CalcDamage(hero, Damage.DamageType.Physical, player.BaseAttackDamage);
            }
            //gaunlet
            if (Items.HasItem(3025) && Items.CanUseItem(3025))
            {
                damage += (float)player.CalcDamage(hero, Damage.DamageType.Physical, player.BaseAttackDamage * 1.25);
            }
            //trinity
            if (Items.HasItem(3078) && Items.CanUseItem(3078))
            {
                damage += (float)player.CalcDamage(hero, Damage.DamageType.Physical, player.BaseAttackDamage * 2);
            }
            if ((Items.HasItem(Bft.Id) && Items.CanUseItem(Bft.Id)) ||
                (Items.HasItem(Dfg.Id) && Items.CanUseItem(Dfg.Id)))
            {
                damage = (float)(damage * 1.2);
            }
            if (Items.HasItem(Bft.Id) && Items.CanUseItem(Bft.Id))
            {
                damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Dfg);
            }
            if (Items.HasItem(Dfg.Id) && Items.CanUseItem(Dfg.Id))
            {
                damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Dfg);
            }

            if (player.Spellbook.CanUseSpell(player.GetSpellSlot("summonerdot")) == SpellState.Ready)
            {
                damage += (float)player.GetSummonerSpellDamage(hero, Damage.SummonerSpell.Ignite);
            }
            if (Items.HasItem(3077) && Items.CanUseItem(3077))
            {
                damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Tiamat);
            }
            if (Items.HasItem(3074) && Items.CanUseItem(3074))
            {
                damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Hydra);
            }
            if (Items.HasItem(3144) && Items.CanUseItem(3144))
            {
                damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Bilgewater);
            }
            if (Items.HasItem(3153) && Items.CanUseItem(3153))
            {
                damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Botrk);
            }
            if (Items.HasItem(3146) && Items.CanUseItem(3146))
            {
                damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Hexgun);
            }
            if (Items.HasItem(3091) && Items.CanUseItem(3091))
            {
                damage += (float)player.CalcDamage(hero, Damage.DamageType.Magical, 42);
            }
            return(damage);
        }
Beispiel #14
0
        private static float ComboDamage(Obj_AI_Hero hero)
        {
            float damage = 0;

            if (Q.IsReady())
            {
                damage += (float)Damage.GetSpellDamage(me, hero, SpellSlot.Q);
            }
            if (E.IsReady())
            {
                damage += (float)Damage.GetSpellDamage(me, hero, SpellSlot.E);
            }
            if (W.IsReady())
            {
                double wdot = new double[] { 40, 70, 100, 130, 160 }[W.Level] +(new double[] { 4, 6, 8, 10, 12 }[W.Level] / 100) * me.MaxHealth;
                damage += (float)me.CalcDamage(hero, Damage.DamageType.Magical, wdot);
                damage += (float)Damage.GetSpellDamage(me, hero, SpellSlot.W);
            }
            if (R.IsReady())
            {
                damage += (float)Damage.GetSpellDamage(me, hero, SpellSlot.R);
            }
            if ((Items.HasItem(Bft.Id) && Items.CanUseItem(Bft.Id)) ||
                (Items.HasItem(Dfg.Id) && Items.CanUseItem(Dfg.Id)))
            {
                damage = (float)(damage * 1.2);
            }
            if (Items.HasItem(Bft.Id) && Items.CanUseItem(Bft.Id))
            {
                damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Dfg);
            }
            if (Items.HasItem(Dfg.Id) && Items.CanUseItem(Dfg.Id))
            {
                damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Dfg);
            }
            if (me.Spellbook.CanUseSpell(me.GetSpellSlot("summonerdot")) == SpellState.Ready && hero.Health < damage + me.GetSummonerSpellDamage(hero, Damage.SummonerSpell.Ignite))
            {
                damage += (float)me.GetSummonerSpellDamage(hero, Damage.SummonerSpell.Ignite);
            }
            if (Items.HasItem(3077) && Items.CanUseItem(3077))
            {
                damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Tiamat);
            }
            if (Items.HasItem(3074) && Items.CanUseItem(3074))
            {
                damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Hydra);
            }
            if (Items.HasItem(3144) && Items.CanUseItem(3144))
            {
                damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Bilgewater);
            }
            if (Items.HasItem(3153) && Items.CanUseItem(3153))
            {
                damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Botrk);
            }
            if (Items.HasItem(3146) && Items.CanUseItem(3146))
            {
                damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Hexgun);
            }
            if (Items.HasItem(3091) && Items.CanUseItem(3091))
            {
                damage += (float)me.CalcDamage(hero, Damage.DamageType.Magical, 42);
            }
            return(damage);
        }
Beispiel #15
0
        private static double GetComboDamage(Obj_AI_Hero target)
        {
            if (target == null)
            {
                return(0);
            }

            //Thanks Asuvril
            double passive = 0;

            if (Me.Level == 18)
            {
                passive = 0.5;
            }
            else if (Me.Level >= 15)
            {
                passive = 0.45;
            }
            else if (Me.Level >= 12)
            {
                passive = 0.4;
            }
            else if (Me.Level >= 9)
            {
                passive = 0.35;
            }
            else if (Me.Level >= 6)
            {
                passive = 0.3;
            }
            else if (Me.Level >= 3)
            {
                passive = 0.25;
            }
            else
            {
                passive = 0.2;
            }

            double damage = 0;

            if (Q.IsReady())
            {
                var qhan = 3 - QStack;

                damage += Q.GetDamage(target) * qhan + Me.GetAutoAttackDamage(target) * qhan * (1 + passive);
            }

            if (W.IsReady())
            {
                damage += W.GetDamage(target);
            }

            if (R.IsReady() && Me.HasBuff("RivenFengShuiEngine"))
            {
                damage += Me.CalcDamage(target, Damage.DamageType.Physical,
                                        (new double[] { 80, 120, 160 }[R.Level - 1] +
                                         0.6 * Me.FlatPhysicalDamageMod) *
                                        (1 + (target.MaxHealth - target.Health) /
                                         target.MaxHealth > 0.75
                        ? 0.75
                        : (target.MaxHealth - target.Health) / target.MaxHealth) * 8 / 3);
            }

            return(damage);
        }
Beispiel #16
0
        private Obj_AI_Hero GetTarget()
        {
            if (Master.Program.IsValid(newTarget, Range))
            {
                return(newTarget);
            }
            Obj_AI_Hero bestTarget = null;

            if (Config.SubMenu("TS").Item("TS_Mode").GetValue <StringList>().SelectedIndex == 0)
            {
                float bestRatio = 0;
                foreach (var Obj in ObjectManager.Get <Obj_AI_Hero>().Where(i => Master.Program.IsValid(i, Range)))
                {
                    float Prior = 1;
                    switch (Config.SubMenu("TS").Item("TS_Prior" + Obj.ChampionName).GetValue <Slider>().Value)
                    {
                    case 2:
                        Prior = 1.5f;
                        break;

                    case 3:
                        Prior = 1.75f;
                        break;

                    case 4:
                        Prior = 2;
                        break;

                    case 5:
                        Prior = 2.5f;
                        break;
                    }
                    var Ratio = 100 / (1 + Obj.Health) * Prior;
                    if (Ratio > bestRatio)
                    {
                        bestRatio  = Ratio;
                        bestTarget = Obj;
                    }
                }
            }
            else
            {
                foreach (var Obj in ObjectManager.Get <Obj_AI_Hero>().Where(i => Master.Program.IsValid(i, Range)))
                {
                    if (bestTarget == null)
                    {
                        bestTarget = Obj;
                    }
                    else
                    {
                        switch (Config.SubMenu("TS").Item("TS_Mode").GetValue <StringList>().SelectedIndex)
                        {
                        case 1:
                            if (Obj.BaseAttackDamage + Obj.FlatPhysicalDamageMod < bestTarget.BaseAttackDamage + bestTarget.FlatPhysicalDamageMod)
                            {
                                bestTarget = Obj;
                            }
                            break;

                        case 2:
                            if (Obj.FlatMagicDamageMod < bestTarget.FlatMagicDamageMod)
                            {
                                bestTarget = Obj;
                            }
                            break;

                        case 3:
                            if (Obj.Health - Player.CalcDamage(Obj, Damage.DamageType.Physical, Obj.Health) < bestTarget.Health - Player.CalcDamage(bestTarget, Damage.DamageType.Physical, bestTarget.Health))
                            {
                                bestTarget = Obj;
                            }
                            break;

                        case 4:
                            if (Obj.Health - Player.CalcDamage(Obj, Damage.DamageType.Magical, Obj.Health) < bestTarget.Health - Player.CalcDamage(bestTarget, Damage.DamageType.Magical, bestTarget.Health))
                            {
                                bestTarget = Obj;
                            }
                            break;

                        case 5:
                            if (Obj.Health < bestTarget.Health)
                            {
                                bestTarget = Obj;
                            }
                            break;

                        case 6:
                            if (Player.Distance3D(Obj) < Player.Distance3D(bestTarget))
                            {
                                bestTarget = Obj;
                            }
                            break;

                        case 7:
                            if (Obj.Position.Distance(Game.CursorPos) + 50 < bestTarget.Position.Distance(Game.CursorPos))
                            {
                                bestTarget = Obj;
                            }
                            break;
                        }
                    }
                }
            }
            return(bestTarget);
        }
Beispiel #17
0
        private static int calcDamage(Obj_AI_Hero target)
        {
            //var vTarget = SimpleTs.GetTarget(Q.Range, SimpleTs.DamageType.Physical);
            // normal damage 2 Auto Attacks
            var AA     = Player.CalcDamage(target, Damage.DamageType.Physical, Player.FlatPhysicalDamageMod + Player.BaseAttackDamage);
            var damage = AA;

            if (_igniteSlot != SpellSlot.Unknown &&
                Player.SummonerSpellbook.CanUseSpell(_igniteSlot) == SpellState.Ready)
            {
                damage += ObjectManager.Player.GetSummonerSpellDamage(target, Damage.SummonerSpell.Ignite);
            }

            if (Items.HasItem(3153) && Items.CanUseItem(3153))
            {
                damage += Player.GetItemDamage(target, Damage.DamageItems.Botrk); //ITEM BOTRK
            }
            if (E.IsReady() && Config.Item("UseE").GetValue <bool>())             // edamage
            {
                damage += Player.CalcDamage(target, Damage.DamageType.Physical,
                                            10 + (E.Level * 30) + (Player.FlatPhysicalDamageMod * 0.2));
            }

            if (Q.IsReady() && Config.Item("UseQ").GetValue <bool>()) // qdamage
            {
                damage += Player.CalcDamage(target, Damage.DamageType.Physical,
                                            30 + (Q.Level * 40) + (Player.FlatPhysicalDamageMod * 0.65));
            }

            if (!IsValorMode() && target.HasBuff("QuinnW") && E.IsReady())
            {
                damage += Player.CalcDamage(target, Damage.DamageType.Physical,
                                            15 + (Player.Level * 10) + (Player.FlatPhysicalDamageMod * 0.5)) * 2; // //if target has buff and E is ready passive*2
            }

            if (!IsValorMode() && !target.HasBuff("QuinnW") && E.IsReady()) // if e ISANT ready then calculate only 1 time passive
            {
                damage += Player.CalcDamage(target, Damage.DamageType.Physical,
                                            15 + (Player.Level * 10) + (Player.FlatPhysicalDamageMod * 0.5)); // passive
            }

            if (!IsValorMode() && target.HasBuff("QuinnW") && !E.IsReady()) // if e ISANT ready then calculate only 1 time passive
            {
                damage += Player.CalcDamage(target, Damage.DamageType.Physical,
                                            15 + (Player.Level * 10) + (Player.FlatPhysicalDamageMod * 0.5)); // passive
            }

            if (R.IsReady() && Config.Item("UseR").GetValue <bool>()) // rdamage
            {
                if (Player.CalcDamage(target, Damage.DamageType.Physical, (75 + (R.Level * 55) + (Player.FlatPhysicalDamageMod * 0.5)) * (2 - ((target.Health - damage - AA * 3) / target.MaxHealth))) > target.Health)
                {
                    damage += Player.CalcDamage(target, Damage.DamageType.Physical, (75 + (R.Level * 55) + (Player.FlatPhysicalDamageMod * 0.5)) * (2 - ((target.Health - damage) / target.MaxHealth)));
                }
            }


            return((int)damage);
        }
Beispiel #18
0
 private static double getQDmg(Obj_AI_Base target)
 {
     return(player.CalcDamage(target, Damage.DamageType.Magical, (SpellManaReq(Q, 30, 16) + 0.18 * player.FlatMagicDamageMod)));
 }
Beispiel #19
0
        private static void Combo()
        {
            if (Player.IsDead)
            {
                return;
            }
            var         usePacket    = Config.Item("usePackets").GetValue <bool>();
            var         isolatedlist = GetIsolatedTargets();
            HitChance   hitchance    = HarassHitChance();
            Obj_AI_Hero target       = new Obj_AI_Hero();

            if (isolatedlist != null && isolatedlist.Any())
            {
                var isolated = isolatedlist.OrderByDescending(
                    hero =>
                    Player.CalcDamage(hero, Damage.DamageType.Physical, 100) / (1 + hero.Health) *
                    TargetSelector.GetPriority(hero)).FirstOrDefault();

                target = isolated;
                isolatedlist.Clear();
            }
            else
            {
                target = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Physical);
            }

            if (target == null || !target.IsValid || !target.IsEnemy || target.IsDead || Player.Distance(target) > E.Range + 100)
            {
                target = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Physical);
            }


            if ((target != null))
            {
                // Normal abilities
                if (Player.Distance(target) <= Q.Range && Config.Item("UseQCombo").GetValue <bool>() &&
                    Q.IsReady())
                {
                    Orbwalker.SetAttack(false);
                    Q.Cast(target, usePacket);
                    Orbwalker.SetAttack(true);
                }
                if (Wnorm && Player.Distance(target) <= W.Range && Config.Item("UseWCombo").GetValue <bool>() &&
                    W.IsReady() && W.GetPrediction(target).Hitchance >= hitchance)
                {
                    PredictionOutput pred = W.GetPrediction(target);
                    W.Cast(pred.CastPosition, usePacket);
                }

                if (Player.Distance(target) <= E.Range && Config.Item("UseECombo").GetValue <bool>() &&
                    E.IsReady() && Player.Distance(target) > Q.Range)
                {
                    PredictionOutput pred = E.GetPrediction(target);
                    if (target.IsValid && !target.IsDead)
                    {
                        E.Cast(pred.CastPosition, usePacket);
                    }
                }

                // Use EQ AND EW Synergy
                if ((Player.Distance(target) <= E.Range + Q.Range && Player.Distance(target) > Q.Range && E.IsReady() &&
                     Config.Item("UseEGapclose").GetValue <bool>()) || (Player.Distance(target) <= E.Range + W.Range && Player.Distance(target) > Q.Range && E.IsReady() && W.IsReady() &&
                                                                        Config.Item("UseEGapcloseW").GetValue <bool>()))
                {
                    PredictionOutput pred = E.GetPrediction(target);
                    if (target.IsValid && !target.IsDead)
                    {
                        E.Cast(pred.CastPosition, usePacket);
                    }
                    if (Config.Item("UseRGapcloseW").GetValue <bool>() && R.IsReady())
                    {
                        R.CastOnUnit(ObjectManager.Player);
                    }
                }


                // Ult Usage
                if (R.IsReady() && !Q.IsReady() && !W.IsReady() && !E.IsReady() &&
                    Config.Item("UseRCombo").GetValue <bool>())
                {
                    R.Cast();
                    if (Config.Item("Debugon").GetValue <bool>())
                    {
                        Game.PrintChat("9 - Basic Ult Cast");
                    }
                }
                // Evolved

                if (Wevolved && Player.Distance(target) <= WE.Range && Config.Item("UseWCombo").GetValue <bool>() &&
                    W.IsReady() && W.GetPrediction(target).Hitchance >= hitchance)
                {
                    PredictionOutput pred = WE.GetPrediction(target);
                    // W.Cast(pred.CastPosition, usePacket);
                    CastWE(target, pred.UnitPosition.To2D());
                }
                if (Wevolved && Player.Distance(target) <= WE.Range && Config.Item("UseWCombo").GetValue <bool>() &&
                    W.IsReady() && W.GetPrediction(target).Hitchance >= HitChance.Collision)
                {
                    List <Obj_AI_Base> PCollision = W.GetPrediction(target).CollisionObjects;
                    foreach (
                        Obj_AI_Base PredCollisionChar in
                        PCollision.Where(PredCollisionChar => PredCollisionChar.Distance(target) <= 30))
                    {
                        W.Cast(PredCollisionChar.Position, usePacket);
                    }
                }

                if (Player.Distance(target) <= E.Range && Player.Distance(target) > Q.Range &&
                    Config.Item("UseECombo").GetValue <bool>() && E.IsReady())
                {
                    PredictionOutput pred = E.GetPrediction(target);
                    if (target.IsValid && !target.IsDead)
                    {
                        E.Cast(pred.CastPosition, usePacket);
                    }
                }


                if (Config.Item("UseItems").GetValue <bool>())
                {
                    UseItems(target);
                }
            }
        }
Beispiel #20
0
 internal static float GetRendDamage(Obj_AI_Base target, int customStacks = -1)
 {
     // Calculate the damage and return
     return((float)player.CalcDamage(target, Damage.DamageType.Physical, GetRawRendDamage(target, customStacks)) - sliderLinks["spellReductionE"].Value.Value);
 }
Beispiel #21
0
        private void Combo()
        {
            Obj_AI_Hero target = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Magical);

            if (target == null)
            {
                if (maoR)
                {
                    if (!turnOff)
                    {
                        turnOff = true;
                        Utility.DelayAction.Add(2600, () => turnOffUlt());
                    }
                }
                return;
            }
            if (config.Item("selected", true).GetValue <bool>())
            {
                target = CombatHelper.SetTarget(target, TargetSelector.GetSelectedTarget());
                orbwalker.ForceTarget(target);
            }
            var manaperc = player.Mana / player.MaxMana * 100;

            if (player.HasBuff("MaokaiSapMagicMelee") &&
                player.Distance(target) < Orbwalking.GetRealAutoAttackRange(player) + 75)
            {
                return;
            }
            if (config.Item("useItems").GetValue <bool>())
            {
                ItemHandler.UseItems(target, config, ComboDamage(target));
            }
            if (config.Item("useq", true).GetValue <bool>() && Q.CanCast(target) && config.Item("usee", true).GetValue <bool>() &&
                player.Distance(target) <= config.Item("useqrange", true).GetValue <Slider>().Value&&
                ((config.Item("useqroot", true).GetValue <bool>() &&
                  (!target.HasBuffOfType(BuffType.Snare) && !target.HasBuffOfType(BuffType.Slow) &&
                   !target.HasBuffOfType(BuffType.Stun) && !target.HasBuffOfType(BuffType.Suppression))) ||
                 !config.Item("useqroot", true).GetValue <bool>()))
            {
                Q.Cast(target, config.Item("packets").GetValue <bool>());
            }
            if (config.Item("usew", true).GetValue <bool>())
            {
                if (config.Item("blocke", true).GetValue <bool>() && player.Distance(target) < W.Range && W.IsReady() &&
                    E.CanCast(target))
                {
                    E.Cast(target, config.Item("packets").GetValue <bool>());
                    CastR(target);
                    Utility.DelayAction.Add(100, () => W.Cast(target, config.Item("packets").GetValue <bool>()));
                }
                else if (W.CanCast(target))
                {
                    CastR(target);
                    W.Cast(target, config.Item("packets").GetValue <bool>());
                }
            }
            if (config.Item("usee", true).GetValue <bool>() && E.CanCast(target))
            {
                if (!config.Item("blocke", true).GetValue <bool>() || config.Item("blocke", true).GetValue <bool>() && !W.IsReady())
                {
                    E.Cast(target, config.Item("packets").GetValue <bool>());
                }
            }

            if (R.IsReady())
            {
                bool enoughEnemies = config.Item("user", true).GetValue <Slider>().Value <=
                                     player.CountEnemiesInRange(R.Range - 50);
                Obj_AI_Hero targetR = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Magical);

                if (maoR && targetR != null &&
                    ((config.Item("rks", true).GetValue <bool>() &&
                      (Damage.GetSpellDamage(player, targetR, SpellSlot.R) +
                       player.CalcDamage(target, Damage.DamageType.Magical, maoRStack)) > targetR.Health) ||
                     manaperc < config.Item("rmana", true).GetValue <Slider>().Value ||
                     (!enoughEnemies && player.Distance(targetR) > R.Range - 50)))
                {
                    R.Cast(config.Item("packets").GetValue <bool>());
                }

                if (targetR != null && !maoR && manaperc > config.Item("rmana", true).GetValue <Slider>().Value&&
                    (enoughEnemies || R.IsInRange(targetR)))
                {
                    R.Cast(config.Item("packets").GetValue <bool>());
                }
            }
            var  ignitedmg = (float)player.GetSummonerSpellDamage(target, Damage.SummonerSpell.Ignite);
            bool hasIgnite = player.Spellbook.CanUseSpell(player.GetSpellSlot("SummonerDot")) == SpellState.Ready;

            if (config.Item("useIgnite").GetValue <bool>() && ignitedmg > target.Health && hasIgnite &&
                !E.CanCast(target))
            {
                player.Spellbook.CastSpell(player.GetSpellSlot("SummonerDot"), target);
            }
        }
Beispiel #22
0
 /// <summary>
 ///     TODO The get rend damage.
 /// </summary>
 /// <param name="target">
 ///     TODO The target.
 /// </param>
 /// <param name="customStacks">
 ///     TODO The custom stacks.
 /// </param>
 /// <returns>
 ///     The <see cref="float" />.
 /// </returns>
 public static float GetRendDamage(Obj_AI_Base target, int customStacks = -1)
 {
     // Calculate the damage and return
     return((float)Player.CalcDamage(target, Damage.DamageType.Physical, GetRawRendDamage(target, customStacks)));
 }
Beispiel #23
0
        private static void CheckDamage(Obj_AI_Base target)
        {
            if (target == null)
            {
                return;
            }

            var ad     = Me.GetAutoAttackDamage(target);
            var ignite = Me.GetSpellSlot("summonerdot");

            var tmt = Items.HasItem(3077) && Items.CanUseItem(3077)
                ? Me.GetItemDamage(target, Damage.DamageItems.Tiamat)
                : 0;

            var hyd = Items.HasItem(3074) && Items.CanUseItem(3074)
                ? Me.GetItemDamage(target, Damage.DamageItems.Hydra)
                : 0;

            var bwc = Items.HasItem(3144) && Items.CanUseItem(3144) ?
                      Me.GetItemDamage(target, Damage.DamageItems.Bilgewater)
                : 0;

            var brk = Items.HasItem(3153) && Items.CanUseItem(3153)
                ? Me.GetItemDamage(target, Damage.DamageItems.Botrk)
                : 0;

            rr = Me.GetSpellDamage(target, SpellSlot.R) - 20;
            ra = ad + (ad * (runicpassive[Me.Level] / 100) * runiccount);
            rq = q.IsReady() ? DamageQ(target) : 0;

            rw = w.IsReady()
                ? Me.GetSpellDamage(target, SpellSlot.W)
                : 0;

            ri = Me.Spellbook.CanUseSpell(ignite) == SpellState.Ready
                ? Me.GetSummonerSpellDamage(target, Damage.SummonerSpell.Ignite)
                : 0;

            ritems = tmt + hyd + bwc + brk;

            ua = r.IsReady()
                ? ra +
                 Me.CalcDamage(target, Damage.DamageType.Physical,
                               Me.BaseAttackDamage + Me.FlatPhysicalDamageMod * 0.2)
                : ua;

            uq = r.IsReady()
                ? rq +
                 Me.CalcDamage(target, Damage.DamageType.Physical,
                               Me.BaseAttackDamage + Me.FlatPhysicalDamageMod * 0.2 * 0.7)
                : uq;

            uw = r.IsReady()
                ? rw +
                 Me.CalcDamage(target, Damage.DamageType.Physical,
                               Me.BaseAttackDamage + Me.FlatPhysicalDamageMod * 0.2 * 1)
                : uw;

            rr = r.IsReady()
                ? Me.GetSpellDamage(target, SpellSlot.R)
                : 0;
        }
Beispiel #24
0
        private static float GetComboDamage(Obj_AI_Base enemy)
        {
            // do nothing is there no enemy
            if (enemy == null)
            {
                return(0);
            }

            // reset values
            double damage = 0d;

            var calcQ_         = _menu.Item("menu.Calc.calcQ").GetValue <bool>();
            var calcW_         = _menu.Item("menu.Calc.calcW").GetValue <bool>();
            var calcE_         = _menu.Item("menu.Calc.calcE").GetValue <bool>();
            var calcR_         = _menu.Item("menu.Calc.calcR").GetValue <bool>();
            var calcItems_     = _menu.Item("menu.Calc.calcItems").GetValue <bool>();
            var calcSummoners_ = _menu.Item("menu.Calc.calcSummoners").GetValue <bool>();
            var AA             = _menu.Item("menu.Calc.calcAA").GetValue <Slider>().Value;

            //Console.WriteLine(Spells.Q.DamageType + " // " + Spells.W.DamageType + " // " + Spells.E.DamageType + " // " + Spells.R.DamageType);

            // Check Q Spell and Calc
            #region Q Spell Calc
            if (Spells.Q.IsReady() && calcQ_)
            {
                if (Spells.Q.DamageType == TargetSelector.DamageType.Magical)
                {
                    damage +=
                        Player.CalcDamage(enemy, _Damage.DamageType.Magical, Player.GetSpellDamage(enemy, SpellSlot.Q)) * _percentpenetrationmagic;
                }
                else if (Spells.Q.DamageType == TargetSelector.DamageType.Physical)
                {
                    damage +=
                        Player.CalcDamage(enemy, _Damage.DamageType.Physical, Player.GetSpellDamage(enemy, SpellSlot.Q)) * _percentpenetrationarmor;
                }
                else if (Spells.Q.DamageType == TargetSelector.DamageType.True)
                {
                    damage +=
                        Player.CalcDamage(enemy, _Damage.DamageType.True, Player.GetSpellDamage(enemy, SpellSlot.Q));
                }
            }
            #endregion

            // Check W Spell and Calc
            #region W Spell Calc
            if (Spells.W.IsReady() && calcW_)
            {
                if (Spells.W.DamageType == TargetSelector.DamageType.Magical)
                {
                    damage +=
                        Player.CalcDamage(enemy, _Damage.DamageType.Magical, Player.GetSpellDamage(enemy, SpellSlot.W)) * _percentpenetrationmagic;
                }
                else if (Spells.W.DamageType == TargetSelector.DamageType.Physical)
                {
                    damage +=
                        Player.CalcDamage(enemy, _Damage.DamageType.Physical, Player.GetSpellDamage(enemy, SpellSlot.W)) * _percentpenetrationarmor;
                }
                else if (Spells.W.DamageType == TargetSelector.DamageType.True)
                {
                    damage += Player.CalcDamage(enemy, _Damage.DamageType.True, Player.GetSpellDamage(enemy, SpellSlot.W));
                }
            }
            #endregion

            // Check E Spell and Calc
            #region E Spell Calc
            if (Spells.E.IsReady() && calcE_)
            {
                if (Spells.E.DamageType == TargetSelector.DamageType.Magical)
                {
                    damage += Player.CalcDamage(enemy, _Damage.DamageType.Magical, Player.GetSpellDamage(enemy, SpellSlot.E)) * _percentpenetrationmagic;
                }
                else if (Spells.E.DamageType == TargetSelector.DamageType.Physical)
                {
                    damage += Player.CalcDamage(enemy, _Damage.DamageType.Physical, Player.GetSpellDamage(enemy, SpellSlot.E)) * _percentpenetrationarmor;
                }
                else if (Spells.E.DamageType == TargetSelector.DamageType.True)
                {
                    damage += Player.CalcDamage(enemy, _Damage.DamageType.True, Player.GetSpellDamage(enemy, SpellSlot.E));
                }
            }
            #endregion

            // Check R Spell and Calc
            #region R Spell Calc
            if (Spells.R.IsReady() && calcR_)
            {
                if (Spells.R.DamageType == TargetSelector.DamageType.Magical)
                {
                    damage += Player.CalcDamage(enemy, _Damage.DamageType.Magical, Player.GetSpellDamage(enemy, SpellSlot.R)) * _percentpenetrationmagic;
                }
                else if (Spells.R.DamageType == TargetSelector.DamageType.Physical)
                {
                    damage += Player.CalcDamage(enemy, _Damage.DamageType.Physical, Player.GetSpellDamage(enemy, SpellSlot.R)) * _percentpenetrationarmor;
                }
                else if (Spells.R.DamageType == TargetSelector.DamageType.True)
                {
                    damage += Player.CalcDamage(enemy, _Damage.DamageType.True, Player.GetSpellDamage(enemy, SpellSlot.R));
                }
            }
            #endregion

            damage += Player.GetAutoAttackDamage(enemy, true) * AA; // no need for Autoattack Damage

            if (calcItems_)
            {
                damage = ActiveItems.CalcDamage(enemy, damage); // active Items thanks xSlaice :)
            }
            if (Ignite_Ready() && calcSummoners_)
            {
                damage += ObjectManager.Player.GetSummonerSpellDamage(enemy, Damage.SummonerSpell.Ignite);
            }

            return((float)damage);
        }
Beispiel #25
0
        public static float GetRealDamage(SpellSlot slot, Obj_AI_Base target, BurrowState state = BurrowState.AUTOMATIC)
        {
            // Damage holders
            float damage      = 0;
            float extraDamage = 0;
            var   damageType  = Damage.DamageType.Physical;

            // Validate spell level
            var spellLevel = player.Spellbook.GetSpell(slot).Level;

            if (spellLevel == 0)
            {
                return(0);
            }
            spellLevel--;

            switch (slot)
            {
            case SpellSlot.Q:

                if (state == BurrowState.UNBURROWED || state == BurrowState.AUTOMATIC && !player.IsBurrowed())
                {
                    // Rek'Sai's next 3 basic attacks within 5 seconds deal 15/25/35/45/55 (+0.3) bonus Physical Damage to nearby enemies.
                    damage      = new float[] { 15, 25, 35, 45, 55 }[spellLevel] +0.3f * player.TotalAttackDamage();
                    extraDamage = (float)player.GetAutoAttackDamage(target);
                }
                else
                {
                    // Rek'Sai launches a burst of void-charged earth that explodes on first unit hit, dealing 60/90/120/150/180 (+0.7) Magic Damage
                    // and revealing non-stealthed enemies hit for 2.5 seconds.
                    damageType = Damage.DamageType.Magical;
                    damage     = new float[] { 60, 90, 120, 150, 180 }[spellLevel] +0.7f * player.TotalMagicalDamage();
                }

                break;

            case SpellSlot.W:

                if (state == BurrowState.BURROWED || state == BurrowState.AUTOMATIC && player.IsBurrowed())
                {
                    // Un-burrow, dealing 40/80/120/160/200 (+0.4) Physical Damage and knocking up nearby enemies for up to 1 second based on their proximity to Rek'Sai.
                    // A unit cannot be hit by Un-burrow more than once every 10 seconds.
                    if (!target.HasBurrowBuff())
                    {
                        damage = new float[] { 40, 80, 120, 160, 200 }[spellLevel] +0.4f * player.TotalAttackDamage();
                    }
                }

                break;

            case SpellSlot.E:

                if (state == BurrowState.UNBURROWED || state == BurrowState.AUTOMATIC && !player.IsBurrowed())
                {
                    // Rek'Sai bites a target dealing undefined Physical Damage, increasing by up to 100% at maximum Fury. If Rek'Sai has 100 Fury, Furious Bite deals True Damage.
                    // Maximum Damage: undefined
                    damage  = new float[] { 0.8f, 0.9f, 1, 1.1f, 1.2f }[spellLevel];
                    damage *= player.TotalAttackDamage();
                    damage *= (1 + player.ManaPercent / 100);
                    // True damage on full
                    if (player.HasMaxFury())
                    {
                        damageType = Damage.DamageType.True;
                    }
                }

                break;
            }

            // Return 0 on no damage
            if (damage == 0 && extraDamage == 0)
            {
                return(0);
            }

            // Calculate damage on target and return (-20 so it's actually accurate lol)
            return((float)player.CalcDamage(target, damageType, damage) + extraDamage - 20);
        }
        private static float GetComboDamage(Obj_AI_Base enemy)
        {
            var damage = 0d;

            if (Q.IsReady())
            {
                var d = Player.GetSpellDamage(enemy, SpellSlot.Q);

                if (enemy.HasQBuff() || enemy.HasQRBuff())
                {
                    d *= 2;
                }

                damage += d;
            }

            if (R.IsReady())
            {
                var d         = 0d;
                var level     = Player.Spellbook.GetSpell(SpellSlot.R).Level;
                var maxDamage = new double[] { 200, 400, 600 }[level - 1] +1.3f * Player.FlatMagicDamageMod;

                switch (R.GetSpellSlot())
                {
                case SpellSlot.Q:
                    var qDmg = Player.CalcDamage(
                        enemy, Damage.DamageType.Magical,
                        new double[] { 100, 200, 300 }[level - 1] +.65f * Player.FlatMagicDamageMod);
                    d = qDmg > maxDamage ? maxDamage : qDmg;
                    break;

                case SpellSlot.W:
                    d = Player.CalcDamage(
                        enemy, Damage.DamageType.Magical,
                        new double[] { 150, 300, 450 }[level - 1] +.975f * Player.FlatMagicDamageMod);
                    break;

                case SpellSlot.E:
                    var eDmg = Player.CalcDamage(
                        enemy, Damage.DamageType.Magical,
                        new double[] { 100, 200, 300 }[level - 1] +.65f * Player.FlatMagicDamageMod);
                    d = eDmg > maxDamage ? maxDamage : eDmg;
                    break;
                }

                if (enemy.HasQBuff() || enemy.HasQRBuff())
                {
                    d += Player.GetSpellDamage(enemy, SpellSlot.Q);
                }

                damage += d;
            }

            if (E.IsReady())
            {
                damage += Player.GetSpellDamage(enemy, SpellSlot.E);
            }

            if (W.IsReady())
            {
                damage += Player.GetSpellDamage(enemy, SpellSlot.W);
            }

            if (Items.DFG.IsReady())
            {
                damage += .2f * damage + Player.GetItemDamage(enemy, Damage.DamageItems.Dfg);
            }

            if (Items.BFT.IsReady())
            {
                damage += .2f * damage + Player.GetItemDamage(enemy, Damage.DamageItems.BlackFireTorch);
            }

            if (Items.FQC.IsReady())
            {
                damage += Player.GetItemDamage(enemy, Damage.DamageItems.FrostQueenClaim);
            }

            if (Items.BOTRK.IsReady())
            {
                damage += Player.GetItemDamage(enemy, Damage.DamageItems.Botrk);
            }

            if (Items.LT.HasItem())
            {
                damage += Player.GetItemDamage(enemy, Damage.DamageItems.LiandrysTorment);
            }

            if (Spells.Ignite.IsReady())
            {
                damage += Player.GetSummonerSpellDamage(enemy, Damage.SummonerSpell.Ignite);
            }

            damage += Player.GetAutoAttackDamage(enemy, true);

            return((float)damage);
        }
 private static float RivenDamageQ(SpellDataInst spell, Obj_AI_Hero src, Obj_AI_Hero dsc)
 {
     double dmg = 0;
     if (spell.IsReady())
     {
         dmg += src.CalcDamage(
             dsc, Damage.DamageType.Physical,
             (-10 + (spell.Level * 20) +
              (0.35 + (spell.Level * 0.05)) * (src.FlatPhysicalDamageMod + src.BaseAttackDamage)) * 3);
     }
     return (float) dmg;
 }
Beispiel #28
0
        private static void onUpdate(EventArgs args)
        {
            if (lck || !menu.Item("Q").GetValue <KeyBind>().Active || !Q.IsReady())
            {
                return;
            }
            IEnumerable <Obj_AI_Base> a = ObjectManager.Get <Obj_AI_Base>().Where(obj => obj.IsValidTarget() && me.Distance(obj) < me.AttackRange && HealthPrediction.GetHealthPrediction(obj, (int)((me.AttackCastDelay + 1000 * me.Distance(obj) / me.BasicAttack.MissileSpeed) * (menu.Item("delaymul").GetValue <Slider>().Value / 100f) + menu.Item("delayflat").GetValue <Slider>().Value)) > me.CalcDamage(obj, Damage.DamageType.Physical, me.GetAutoAttackDamage(obj)) * me.PercentArmorPenetrationMod);

            if (!a.Any())
            {
                return;
            }
            Obj_AI_Base tgt = a.OrderByDescending(obj => me.Distance(obj)).Last();

            pos = Game.CursorPos;
            lck = true;
            int delay = (int)((me.AttackCastDelay + 1000 * me.Distance(tgt) / me.BasicAttack.MissileSpeed) * (menu.Item("delaymul").GetValue <Slider>().Value / 100f) + menu.Item("delayflat").GetValue <Slider>().Value);

            me.IssueOrder(GameObjectOrder.AttackUnit, tgt);
            Utility.DelayAction.Add(delay, castQ);
        }