Example #1
0
        private static void CheckDamage(Obj_AI_Base target)
        {
            if (target == null)
            {
                return;
            }

            var qready = Me.Spellbook.CanUseSpell(SpellSlot.Q) == SpellState.Ready;
            var wready = Me.Spellbook.CanUseSpell(SpellSlot.W) == SpellState.Ready;
            var rready = Me.Spellbook.CanUseSpell(SpellSlot.R) == SpellState.Ready;
            var iready = Me.Spellbook.CanUseSpell(Me.GetSpellSlot("summonerdot")) == SpellState.Ready;

            _ma = (float)Me.GetAutoAttackDamage(target);
            _mq = (float)(qready ? Me.GetSpellDamage(target, SpellSlot.Q) : 0);
            _mw = (float)(wready ? Me.GetSpellDamage(target, SpellSlot.W) : 0);
            _mr = (float)(rready ? Me.GetSpellDamage(target, SpellSlot.R) : 0);
            _mi = (float)(iready ? Me.GetSummonerSpellDamage(target, Damage.SummonerSpell.Ignite) : 0);

            _guise = (float)(Items.HasItem(3151)
                ? Me.GetItemDamage(target, Damage.DamageItems.LiandrysTorment)
                : 0);
        }
Example #2
0
        private static float GetComboDamage(Obj_AI_Base enemy)
        {
            double damage = 0d;

            if (Dfg.IsReady())
            {
                damage += Player.GetItemDamage(enemy, Damage.DamageItems.Dfg) / 1.2;
            }

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

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

            if (Dfg.IsReady())
            {
                damage = damage * 1.2;
            }

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

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

            if (Items.HasItem(3155, (Obj_AI_Hero)enemy))
            {
                damage = damage - 250;
            }

            if (Items.HasItem(3156, (Obj_AI_Hero)enemy))
            {
                damage = damage - 400;
            }
            return((float)damage);
        }
Example #3
0
        private static float GetComboDamage(Obj_AI_Hero vTarget)
        {
            var fComboDamage = 0d;

            if (Q.IsReady() && Player.Distance(vTarget) < Orbwalking.GetRealAutoAttackRange(Player))
            {
                fComboDamage += Player.GetSpellDamage(vTarget, SpellSlot.Q);
            }

            if (W.IsReady() && Player.Distance(vTarget) < WDamageRange)
            {
                fComboDamage += Player.GetSpellDamage(vTarget, SpellSlot.W);
            }

            if (E.IsReady() && Player.Distance(vTarget) < E.Range)
            {
                fComboDamage += Player.GetSpellDamage(vTarget, SpellSlot.E);
            }

            if (R.IsReady() && Player.Distance(vTarget) < R.Range)
            {
                fComboDamage += Player.GetSpellDamage(vTarget, SpellSlot.R);
            }

            if (IgniteSlot != SpellSlot.Unknown && Player.Spellbook.CanUseSpell(IgniteSlot) == SpellState.Ready &&
                Player.Distance(vTarget) < R.Range)
            {
                fComboDamage += Player.GetSummonerSpellDamage(vTarget, Damage.SummonerSpell.Ignite);
            }

            if (Items.CanUseItem(3092) && Player.Distance(vTarget) < R.Range)
            {
                fComboDamage += Player.GetItemDamage(vTarget, Damage.DamageItems.FrostQueenClaim);
            }

            return((float)fComboDamage);
        }
Example #4
0
        private static float GetComboDamage(Obj_AI_Base enemy)
        {
            var damage = 0d;

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

            if (DFG.IsReady())
            {
                damage += Player.GetItemDamage(enemy, Damage.DamageItems.Dfg) / 1.2;
            }

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

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

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

            if (R.IsReady())
            {
                damage += Math.Min(7, Player.Spellbook.GetSpell(SpellSlot.R).Ammo) * Player.GetSpellDamage(enemy, SpellSlot.R, 1);
            }

            return((float)damage * (DFG.IsReady() ? 1.2f : 1));
        }
Example #5
0
        private static float GetComboDamage(Obj_AI_Base enemy)
        {
            var damage = 0d;

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

            if (_dfg.IsReady())
            {
                damage += Player.GetItemDamage(enemy, Damage.DamageItems.Dfg) / 1.2;
            }

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

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

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

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

            return((float)damage * (_dfg.IsReady() ? 1.2f : 1));
        }
Example #6
0
        private static float ComboDamage(Obj_AI_Base enemy)
        {
            var itemscheck = SmiteBlue.Any(i => Items.HasItem(i)) || SmiteRed.Any(i => Items.HasItem(i));
            var damage     = 0d;

            if (_igniteSlot != SpellSlot.Unknown &&
                _player.Spellbook.CanUseSpell(_igniteSlot) == SpellState.Ready)
            {
                damage += ObjectManager.Player.GetSummonerSpellDamage(enemy, Damage.SummonerSpell.Ignite);
            }
            if (_q.IsReady())
            {
                damage += _player.GetSpellDamage(enemy, SpellSlot.Q);
            }
            if (_e.IsReady() || ObjectManager.Player.HasBuff("JudicatorRighteousFury"))
            {
                damage += _player.GetSpellDamage(enemy, SpellSlot.E);
                damage  = damage + _player.GetAutoAttackDamage(enemy, true) * 4;
            }
            if (Items.HasItem(3128) && Items.CanUseItem(3128))
            {
                damage += _player.GetItemDamage(enemy, Damage.DamageItems.Dfg);
                damage  = damage * 1.2;
            }
            if (itemscheck &&
                ObjectManager.Player.Spellbook.CanUseSpell(_smiteSlot) == SpellState.Ready)
            {
                damage += ObjectManager.Player.GetSummonerSpellDamage(enemy, Damage.SummonerSpell.Smite);
            }
            if (ObjectManager.Player.HasBuff("LichBane"))
            {
                damage += _player.BaseAttackDamage * 0.75 + _player.FlatMagicDamageMod * 0.5;
            }

            return((float)damage);
        }
Example #7
0
        /*
         * HUGE CREDITS TO xSalice I STOLE THIS FROM HIM AND ITS INCREDIBLE
         * THIS IS ALL HIS WORK NAD YOU SHOULD CREDIT HIM FOR THIS
         *
         *
         *
         */
        public static void SmartKs()
        {
            if (!Config.Item("smartKS").GetValue <bool>())
            {
                return;
            }

            var nearChamps = (from champ in ObjectManager.Get <Obj_AI_Hero>() where _player.Distance(champ.ServerPosition) <= 1375 && champ.IsEnemy select champ).ToList();

// ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            nearChamps.OrderBy(x => x.Health);
            var packets = Config.Item("QNFE").GetValue <bool>();

            foreach (var target in nearChamps.Where(target => target != null && !target.IsDead))
            {
                //dfg
                if (Dfg.IsReady() && _player.GetItemDamage(target, Damage.DamageItems.Dfg) > target.Health + 20 && _player.Distance(target.ServerPosition) <= 750)
                {
                    Dfg.Cast(target);
                    //Game.PrintChat("ks 1");
                    return;
                }

                //dfg + q
                if (_player.Distance(target.ServerPosition) <= Q.Range &&
                    (_player.GetItemDamage(target, Damage.DamageItems.Dfg) + (_player.GetSpellDamage(target, SpellSlot.Q)) * 1.2) > target.Health + 20)
                {
                    if (Dfg.IsReady() && Q.IsReady())
                    {
                        Dfg.Cast(target);

                        Q.Cast(target, packets);
                        //Game.PrintChat("ks 2");
                        return;
                    }
                }

                //dfg + q
                if (_player.Distance(target.ServerPosition) <= E.Range &&
                    (_player.GetItemDamage(target, Damage.DamageItems.Dfg) + (_player.GetSpellDamage(target, SpellSlot.E)) * 1.2) > target.Health + 20)
                {
                    if (Dfg.IsReady() && Q.IsReady())
                    {
                        Dfg.Cast(target);

                        E.Cast(target, packets);
                        //Game.PrintChat("ks 3");
                        return;
                    }
                }

                //E + W
                if (_player.Distance(target.ServerPosition) <= E.Range && (_player.GetSpellDamage(target, SpellSlot.E) + _player.GetSpellDamage(target, SpellSlot.W)) > target.Health + 20)
                {
                    if (E.IsReady() && W.IsReady())
                    {
                        E.Cast(target, packets);
                        W.Cast();
                        //Game.PrintChat("ks 5");
                        return;
                    }
                }

                //E + Q
                if (_player.Distance(target.ServerPosition) <= E.Range && (_player.GetSpellDamage(target, SpellSlot.E) + _player.GetSpellDamage(target, SpellSlot.Q)) > target.Health + 20)
                {
                    if (E.IsReady() && Q.IsReady())
                    {
                        E.Cast(target, packets);
                        Q.Cast(target, packets);
                        //Game.PrintChat("ks 6");
                        return;
                    }
                }

                //Q
                if ((_player.GetSpellDamage(target, SpellSlot.Q)) > target.Health + 20)
                {
                    if (Q.IsReady() && _player.Distance(target.ServerPosition) <= Q.Range)
                    {
                        Q.Cast(target, packets);
                        //Game.PrintChat("ks 7");
                        return;
                    }
                    if (Q.IsReady() && E.IsReady() && _player.Distance(target.ServerPosition) <= 1375 && Config.Item("wardKs").GetValue <bool>() && CountEnemiesNearPosition(target.ServerPosition, 500) < 3)
                    {
                        JumpKs(target);
                        //Game.PrintChat("wardKS!!!!!");
                        return;
                    }
                }

                //E
                if (_player.Distance(target.ServerPosition) <= E.Range && (_player.GetSpellDamage(target, SpellSlot.E)) > target.Health + 20)
                {
                    if (E.IsReady())
                    {
                        E.Cast(target, packets);
                        //Game.PrintChat("ks 8");
                        return;
                    }
                }
            }
        }
Example #8
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;
        }
Example #9
0
        private static void KillSteal()
        {
            Obj_AI_Hero target = ObjectManager.Get <Obj_AI_Hero>()
                                 .Where(x => x.IsValidTarget() && x.Distance(Player.Position) < 1000f)
                                 .OrderBy(x => x.Health).FirstOrDefault();
            var usePacket = Config.Item("usePackets").GetValue <bool>();



            if (target != null && !target.IsInvulnerable && !target.IsDead && !target.IsZombie)
            {
                double igniteDmg = Player.GetSummonerSpellDamage(target, Damage.SummonerSpell.Ignite);
                double QDmg      = getdamages(SpellSlot.Q, target);
                double WDmg      = Player.GetSpellDamage(target, SpellSlot.W);
                double EDmg      = Player.GetSpellDamage(target, SpellSlot.E);
                double hydradmg  = Player.GetItemDamage(target, Damage.DamageItems.Hydra);
                double tiamatdmg = Player.GetItemDamage(target, Damage.DamageItems.Tiamat);
                if (Config.Item("UseIgnite").GetValue <bool>() && IgniteSlot != SpellSlot.Unknown &&
                    Player.Spellbook.CanUseSpell(IgniteSlot) == SpellState.Ready)
                {
                    if (igniteDmg > target.Health)
                    {
                        Player.Spellbook.CastSpell(IgniteSlot, target);
                    }
                }

                if (!ishealthy() && Config.Item("autoescape").GetValue <bool>() && Player.CountEnemiesInRange(300) >= 1)
                {
                    var objAiHero = ObjectManager.Get <Obj_AI_Hero>().FirstOrDefault(x => x.IsAlly && x.CountEnemiesInRange(300) == 0 && x.HealthPercentage() > 45 && E.IsInRange(x));
                    if (objAiHero != null)
                    {
                        var bestposition =
                            objAiHero.ServerPosition;
                        E.Cast(bestposition, usePacket);
                    }
                }
                if (Q.IsReady() && Player.Distance(target) <= Q.Range && Config.Item("UseQKs").GetValue <bool>())
                {
                    if (target.Health <= QDmg)
                    {
                        Orbwalker.SetAttack(false);
                        Q.Cast(target, usePacket);
                        Orbwalker.SetAttack(true);
                    }
                }

                if (E.IsReady() && Player.Distance(target) <= E.Range && Config.Item("UseEKs").GetValue <bool>())
                {
                    if (target.Health <= EDmg)
                    {
                        Utility.DelayAction.Add(
                            Game.Ping + Config.Item("EDelay").GetValue <Slider>().Value, delegate
                        {
                            PredictionOutput pred = E.GetPrediction(target);
                            if (target.IsValid && !target.IsDead)
                            {
                                E.Cast(pred.CastPosition, usePacket);
                            }
                        });
                    }
                }

                if (W.IsReady() && Wnorm && Player.Distance(target) <= W.Range && Config.Item("UseWKs").GetValue <bool>())
                {
                    if (target.Health <= WDmg)
                    {
                        if (W.GetPrediction(target).Hitchance >= HitChance.Medium)
                        {
                            PredictionOutput pred = W.GetPrediction(target);
                            W.Cast(pred.CastPosition);
                        }
                    }
                    if (W.IsReady() && Wevolved && Player.Distance(target) <= W.Range &&
                        Config.Item("UseWKs").GetValue <bool>())
                    {
                        if (target.Health <= WDmg)
                        {
                            PredictionOutput pred = W.GetPrediction(target);
                            CastWE(target, pred.UnitPosition.To2D());
                        }

                        if (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, Config.Item("usePackets").GetValue <bool>());
                            }
                        }
                    }
                }

                // Mixed's EQ KS
                if (Q.IsReady() && E.IsReady() && Player.Distance(target) <= E.Range + Q.Range &&
                    Config.Item("UseEQKs").GetValue <bool>())
                {
                    if ((target.Health <= QDmg + EDmg))
                    {
                        Utility.DelayAction.Add(Game.Ping + 200, delegate
                        {
                            PredictionOutput pred = E.GetPrediction(target);
                            if (target.IsValid && !target.IsDead)
                            {
                                E.Cast(pred.CastPosition);
                            }
                        });
                    }
                }

                // MIXED EW KS
                if (W.IsReady() && E.IsReady() && Wnorm && Player.Distance(target) <= W.Range + E.Range &&
                    Config.Item("UseEWKs").GetValue <bool>())
                {
                    if (target.Health <= WDmg)
                    {
                        Utility.DelayAction.Add(Game.Ping + 200, delegate
                        {
                            PredictionOutput pred = E.GetPrediction(target);
                            if (target.IsValid && !target.IsDead)
                            {
                                E.Cast(pred.CastPosition);
                            }
                        });
                    }
                }


                if (TIA.IsReady() && Player.Distance(target) <= TIA.Range &&
                    Config.Item("UseTiaKs").GetValue <bool>())
                {
                    if (target.Health <= tiamatdmg)
                    {
                        TIA.Cast();
                    }
                }
                if (HDR.IsReady() && Player.Distance(target) <= HDR.Range &&
                    Config.Item("UseTiaKs").GetValue <bool>())
                {
                    if (target.Health <= hydradmg)
                    {
                        HDR.Cast();
                    }
                }
            }
        }
Example #10
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);
        }
Example #11
0
        private static float GetComboDamage()
        {
            var fComboDamage = 0d;

            var qTarget = SimpleTs.GetTarget(Q.Range, SimpleTs.DamageType.Magical);
            var wTarget = SimpleTs.GetTarget(W.Range, SimpleTs.DamageType.Magical);
            var eTarget = SimpleTs.GetTarget(E.Range, SimpleTs.DamageType.Magical);

            if (Q.IsReady() && qTarget != null)
            {
                fComboDamage += Player.GetSpellDamage(qTarget, SpellSlot.Q);
            }

            if (W.IsReady() && wTarget != null)
            {
                fComboDamage += Player.GetSpellDamage(wTarget, SpellSlot.W);
            }

            if (E.IsReady() && eTarget != null)
            {
                fComboDamage += Player.GetSpellDamage(eTarget, SpellSlot.E);
            }

            var rMode = Player.Spellbook.GetSpell(SpellSlot.R).Name;

            switch (rMode)
            {
            case "LeblancChaosOrbM":     // R->Q
            {
                if (R.IsReady() && qTarget != null)
                {
                    fComboDamage += Player.GetSpellDamage(qTarget, SpellSlot.R);
                }
                break;
            }

            case "LeblancSlideM":     // R->W
            {
                if (R.IsReady() && wTarget != null)
                {
                    fComboDamage += Player.GetSpellDamage(wTarget, SpellSlot.R);
                }
                break;
            }

            case "LeblancSoulShackleM":     // R->E
            {
                if (R.IsReady() && eTarget != null)
                {
                    fComboDamage += Player.GetSpellDamage(eTarget, SpellSlot.R);
                }
                break;
            }
            }

            if (IgniteSlot != SpellSlot.Unknown && Player.SummonerSpellbook.CanUseSpell(IgniteSlot) == SpellState.Ready)
            {
                fComboDamage += Player.GetSummonerSpellDamage(wTarget, Damage.SummonerSpell.Ignite);
            }

            if (Items.CanUseItem(3128))
            {
                fComboDamage += Player.GetItemDamage(wTarget, Damage.DamageItems.Dfg);
            }

            if (Items.CanUseItem(3092))
            {
                fComboDamage += Player.GetItemDamage(wTarget, Damage.DamageItems.FrostQueenClaim);
            }

            return((float)fComboDamage);
        }
Example #12
0
        internal static void OnCombo()
        {
            bool useQ = boolLinks["comboUseQ"].Value;
            bool useE = boolLinks["comboUseE"].Value;

            Obj_AI_Hero target;

            if (useQ && Q.IsReady())
            {
                target = SimpleTs.GetTarget(Q.Range, SimpleTs.DamageType.Physical);
            }
            else
            {
                target = SimpleTs.GetTarget(E.Range * 1.2f, SimpleTs.DamageType.Physical);
            }

            if (target == null)
            {
                return;
            }

            // Item usage
            if (boolLinks["comboUseItems"].Value)
            {
                if (boolLinks["itemsBotrk"].Value)
                {
                    bool foundCutlass = Items.HasItem(3144);
                    bool foundBotrk   = Items.HasItem(3153);

                    if (foundCutlass || foundBotrk)
                    {
                        if (foundCutlass || player.Health + player.GetItemDamage(target, Damage.DamageItems.Botrk) < player.MaxHealth)
                        {
                            Items.UseItem(foundCutlass ? 3144 : 3153, target);
                        }
                    }
                }
            }

            // Spell usage
            if (useQ && Q.IsReady() && !player.IsDashing())
            {
                Q.Cast(target);
            }

            if (useE && (E.IsReady() || E.Instance.State == SpellState.Surpressed))
            {
                // Target is not in range but has E stacks on
                if (player.Distance(target, true) > Math.Pow(Orbwalking.GetRealAutoAttackRange(player), 2) && target.HasRendBuff())
                {
                    // Get minions around
                    var minions = ObjectManager.Get <Obj_AI_Minion>().Where(m => m.IsValidTarget(Orbwalking.GetRealAutoAttackRange(player)));

                    // Check if a minion can die with the current E stacks
                    if (minions.Any(m => m.IsRendKillable()))
                    {
                        E.Cast(true);
                    }
                    else
                    {
                        // Check if a minion can die with one AA and E. Also, the AA minion has be be behind the player direction for a further leap
                        var minion = GetDashObjects(minions).FirstOrDefault(m => m.Health > player.GetAutoAttackDamage(m) && m.Health < player.GetAutoAttackDamage(m) + GetRendDamage(m, 1));
                        if (minion != null)
                        {
                            menu.Orbwalker.ForceTarget(minion);
                        }
                    }
                }

                // Target is in range and has at least the set amount of E stacks on
                if (E.InRange(target.ServerPosition) && (target.IsRendKillable() || target.HasRendBuff() && target.GetRendBuff().Count >= sliderLinks["comboNumE"].Value.Value))
                {
                    var buff = target.GetRendBuff();

                    // Check if the target would die from E
                    if (target.IsRendKillable())
                    {
                        E.Cast(true);
                    }
                    // If the target is still in range or the buff is active for longer than 0.25 seconds, if not, cast it
                    else if (GetRendDamage(target, buff.Count + 2) < target.Health && target.ServerPosition.Distance(player.Position, true) > Math.Pow(E.Range * 0.8, 2) || buff.EndTime - Game.Time <= 0.25)
                    {
                        E.Cast(true);
                    }
                }
            }
        }
Example #13
0
        private static float GetComboDamage(Obj_AI_Base target)
        {
            double DamageDealt = 0;

            var useQ    = Config.Item("combo_Q").GetValue <bool>();
            var useW    = Config.Item("combo_W").GetValue <bool>();
            var useE    = Config.Item("combo_E").GetValue <bool>();
            var useR    = Config.Item("combo_R").GetValue <bool>();
            var useRUSH = Config.Item("combo_RUSH").GetValue <bool>();
            var useTMT  = Config.Item("item_TMT").GetValue <bool>();
            var useHYD  = Config.Item("item_HYD").GetValue <bool>();
            var useSOTD = Config.Item("item_SOTD").GetValue <bool>();

            // Q
            if (Q.IsReady() && useQ)
            {
                DamageDealt += DamageDealt += Q.GetDamage(target);
            }


            // W
            if (W.IsReady() && useW)
            {
                DamageDealt += W.GetDamage(target);
            }

            // R
            if (R.IsReady() && (useR || useRUSH))
            {
                DamageDealt += R.GetDamage(target);
            }

            // Double AA + SOTD
            int SOTDbonus = SOTD.IsReady() && useSOTD ? 2 : 1;

            DamageDealt += ((Player.GetAutoAttackDamage(target) * 1.1 * (Q.IsReady() ? 2 : 1)) * SOTDbonus);


            //  Tiamat
            if (TMT.IsReady() && useTMT)
            {
                DamageDealt += Player.GetItemDamage(target, Damage.DamageItems.Tiamat);
            }


            // Hydra
            if (HYD.IsReady() && useHYD)
            {
                DamageDealt += Player.GetItemDamage(target, Damage.DamageItems.Hydra);
            }

            // E damage amplification
            double[] Amp = { 0, 1.03, 1.06, 1.09, 1.12, 1.15 };

            if (E.IsReady() && useE)
            {
                DamageDealt += DamageDealt * Amp[E.Level];
            }

            return((float)DamageDealt);
        }
Example #14
0
        private static void KillSteal()
        {
            Obj_AI_Hero target = HeroList
                                 .Where(x => x.IsValidTarget() && x.Distance(Player.Position) < 1000f && !x.IsZombie)
                                 .MinOrDefault(x => x.Health);


            if (target != null)
            {
                if (Config.Item("UseIgnite").GetValue <bool>() && IgniteSlot != SpellSlot.Unknown &&
                    Player.Spellbook.CanUseSpell(IgniteSlot) == SpellState.Ready)
                {
                    double igniteDmg = Player.GetSummonerSpellDamage(target, Damage.SummonerSpell.Ignite);
                    if (igniteDmg > target.Health)
                    {
                        Player.Spellbook.CastSpell(IgniteSlot, target);
                        return;
                    }
                }

                if (Config.Item("autoescape").GetValue <bool>() && !ishealthy())
                {
                    var ally =
                        HeroList.FirstOrDefault(h => h.HealthPercent > 50 && h.CountEnemiesInRange(400) == 0 && !PointUnderEnemyTurret(h.ServerPosition));
                    if (ally != null && ally.IsValid)
                    {
                        E.Cast(ally.ServerPosition);
                        return;
                    }
                    var objAiturret = EnemyTurretPositions.Where(x => Vector3.Distance(Player.ServerPosition, x) <= 900f);
                    if (objAiturret.Any() || Player.CountEnemiesInRange(500) >= 1)
                    {
                        var bestposition = Player.ServerPosition.Extend(NexusPosition, E.Range);
                        E.Cast(bestposition);
                        return;
                    }
                }

                if (Config.Item("UseQKs").GetValue <bool>() && Q.IsReady() &&
                    Vector3.Distance(Player.ServerPosition, target.ServerPosition) <= Q.Range)
                {
                    double QDmg = GetQDamage(target);
                    if (!Jumping && target.Health <= QDmg)
                    {
                        Q.Cast(target);
                        return;
                    }
                }

                if (Config.Item("UseEKs").GetValue <bool>() && E.IsReady() &&
                    Vector3.Distance(Player.ServerPosition, target.ServerPosition) <= E.Range && Vector3.Distance(Player.ServerPosition, target.ServerPosition) > Q.Range)
                {
                    double EDmg = Player.GetSpellDamage(target, SpellSlot.E);
                    if (!Jumping && target.Health < EDmg)
                    {
                        Utility.DelayAction.Add(
                            Game.Ping + Config.Item("EDelay").GetValue <Slider>().Value, delegate
                        {
                            PredictionOutput pred = E.GetPrediction(target);
                            if (target.IsValid && !target.IsDead)
                            {
                                E.Cast(pred.CastPosition);
                            }
                        });
                    }
                }

                if (W.IsReady() && Wnorm && Vector3.Distance(Player.ServerPosition, target.ServerPosition) <= W.Range &&
                    Config.Item("UseWKs").GetValue <bool>())
                {
                    double WDmg = Player.GetSpellDamage(target, SpellSlot.W);
                    if (target.Health <= WDmg)
                    {
                        var pred = W.GetPrediction(target);
                        if (pred.Hitchance >= HitChance.Medium)
                        {
                            W.Cast(pred.CastPosition);
                            return;
                        }
                    }
                }

                if (W.IsReady() && Wevolved &&
                    Vector3.Distance(Player.ServerPosition, target.ServerPosition) <= W.Range &&
                    Config.Item("UseWKs").GetValue <bool>())
                {
                    double           WDmg = Player.GetSpellDamage(target, SpellSlot.W);
                    PredictionOutput pred = W.GetPrediction(target);
                    if (target.Health <= WDmg && pred.Hitchance > HitChance.Medium)
                    {
                        CastWE(target, pred.UnitPosition.To2D());
                        return;
                    }

                    if (pred.Hitchance >= HitChance.Collision)
                    {
                        List <Obj_AI_Base> PCollision = pred.CollisionObjects;
                        var x =
                            PCollision
                            .FirstOrDefault(PredCollisionChar => Vector3.Distance(PredCollisionChar.ServerPosition, target.ServerPosition) <= 30);
                        if (x != null)
                        {
                            W.Cast(x.Position);
                            return;
                        }
                    }
                }


                // Mixed's EQ KS
                if (Q.IsReady() && E.IsReady() &&
                    Vector3.Distance(Player.ServerPosition, target.ServerPosition) <= E.Range + Q.Range &&
                    Config.Item("UseEQKs").GetValue <bool>())
                {
                    double QDmg = GetQDamage(target);
                    double EDmg = Player.GetSpellDamage(target, SpellSlot.E);
                    if ((target.Health <= QDmg + EDmg))
                    {
                        Utility.DelayAction.Add(Config.Item("EDelay").GetValue <Slider>().Value, delegate
                        {
                            PredictionOutput pred = E.GetPrediction(target);
                            if (target.IsValidTarget() && !target.IsZombie)
                            {
                                E.Cast(pred.CastPosition);
                            }
                        });
                    }
                }

                // MIXED EW KS
                if (W.IsReady() && E.IsReady() && Wnorm &&
                    Vector3.Distance(Player.ServerPosition, target.ServerPosition) <= W.Range + E.Range &&
                    Config.Item("UseEWKs").GetValue <bool>())
                {
                    double WDmg = Player.GetSpellDamage(target, SpellSlot.W);
                    if (target.Health <= WDmg)
                    {
                        Utility.DelayAction.Add(Config.Item("EDelay").GetValue <Slider>().Value, delegate
                        {
                            PredictionOutput pred = E.GetPrediction(target);
                            if (target.IsValid && !target.IsDead)
                            {
                                E.Cast(pred.CastPosition);
                            }
                        });
                    }
                }


                if (Tiamat.IsReady() &&
                    Vector2.Distance(Player.ServerPosition.To2D(), target.ServerPosition.To2D()) <= Tiamat.Range &&
                    Config.Item("UseTiamatKs").GetValue <bool>())
                {
                    double Tiamatdmg = Player.GetItemDamage(target, Damage.DamageItems.Tiamat);
                    if (target.Health <= Tiamatdmg)
                    {
                        Tiamat.Cast();
                        return;
                    }
                }
                if (Hydra.IsReady() &&
                    Vector2.Distance(Player.ServerPosition.To2D(), target.ServerPosition.To2D()) <= Hydra.Range &&
                    Config.Item("UseTiamatKs").GetValue <bool>())
                {
                    double hydradmg = Player.GetItemDamage(target, Damage.DamageItems.Hydra);
                    if (target.Health <= hydradmg)
                    {
                        Hydra.Cast();
                    }
                }
            }
        }
Example #15
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);
        }
Example #16
0
        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.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);
        }
Example #17
0
        /// <summary>
        /// Gets the hero average damage to the opposing team.
        /// </summary>
        /// <param name="player">The player.</param>
        /// <param name="Enemies">The enemies.</param>
        /// <returns></returns>
        public static float GetHeroAvgDamage(Obj_AI_Hero player, List<Obj_AI_Hero> Enemies)
        {
            var totalEnemies = Enemies.Count();
            if (totalEnemies == 0)
            {
                return -1;
            }
            var AADamage = Enemies.Aggregate(0, (current, s) => (int) (current + player.GetAutoAttackDamage(s) * 2));
            var QDamage = Enemies.Aggregate(0, (current, s) => (int)(current + (player.GetSpell(SpellSlot.Q).IsReady() ? player.GetSpellDamage(s, SpellSlot.Q) : 0f)));
            var WDamage = Enemies.Aggregate(0, (current, s) => (int)(current + (player.GetSpell(SpellSlot.W).IsReady() ? player.GetSpellDamage(s, SpellSlot.W) : 0f)));
            var EDamage = Enemies.Aggregate(0, (current, s) => (int)(current + (player.GetSpell(SpellSlot.E).IsReady() ? player.GetSpellDamage(s, SpellSlot.E) : 0f)));
            var RDamage = Enemies.Aggregate(0, (current, s) => (int)(current + (player.GetSpell(SpellSlot.R).IsReady() ? player.GetSpellDamage(s, SpellSlot.R) : 0f)));
            
            var itemsDamage = 0f;

            foreach (var item in player.InventoryItems)
            {
                foreach (var hero in Enemies)
                {
                    var itemID = item.Id;
                    switch (itemID)
                    {
                        case ItemId.Bilgewater_Cutlass:
                            itemsDamage +=
                                (float) player.GetItemDamage(hero, Damage.DamageItems.Bilgewater);
                            break;
                        case ItemId.Blade_of_the_Ruined_King:
                            itemsDamage += (float) player.GetItemDamage(hero, Damage.DamageItems.Botrk);
                            break;
                        case ItemId.Hextech_Gunblade:
                            itemsDamage += (float) player.GetItemDamage(hero, Damage.DamageItems.Hexgun);
                            break;
                        case ItemId.Frost_Queens_Claim:
                            itemsDamage +=
                                (float) player.GetItemDamage(hero, Damage.DamageItems.FrostQueenClaim);
                            break;
                        case ItemId.Tiamat_Melee_Only:
                            itemsDamage += player.IsMelee
                                ? (float) player.GetItemDamage(hero, Damage.DamageItems.Tiamat)
                                : 0f;
                            break;
                        case ItemId.Ravenous_Hydra_Melee_Only:
                            itemsDamage += player.IsMelee
                                ? (float) player.GetItemDamage(hero, Damage.DamageItems.Hydra)
                                : 0f;
                            break;
                        case ItemId.Liandrys_Torment:
                            itemsDamage +=
                                (float) player.GetItemDamage(hero, Damage.DamageItems.LiandrysTorment);
                            break;
                    }
                }
                
            }

            var totalDamage = AADamage + QDamage + WDamage + EDamage + RDamage + itemsDamage;

            return (float) totalDamage / totalEnemies;
        }
Example #18
0
        // Main combo logic function
        private static void Combo()
        {
            // initalize variables
            var wTarget = SimpleTs.GetTarget(W.Range / 2, SimpleTs.DamageType.Magical);
            var eTarget = SimpleTs.GetTarget(E.Range, SimpleTs.DamageType.Magical);
            var rTarget = SimpleTs.GetTarget(R.Range, SimpleTs.DamageType.Magical);
            var useQ    = Config.Item("ComboUseQ").GetValue <bool>();
            var useW    = Config.Item("ComboUseW").GetValue <bool>();
            var useE    = Config.Item("ComboUseE").GetValue <bool>();
            var useR    = Config.Item("ComboUseR").GetValue <bool>();

            // Filter out people we shouldnt ult
            useR = (Config.Item("DontUlt" + rTarget.BaseSkinName) != null &&
                    Config.Item("DontUlt" + rTarget.BaseSkinName).GetValue <bool>() == false) && useR;

            // Shut off auto attack via orbwalker so it doesnt interrupt any combos
            Orbwalker.SetAttack(false);


            // -----------------------------------------------
            // ----  MAIN ATTACK LOGIC START
            // -----------------------------------------------
            // ----------------------------------------------------------------------------------------
            // First priority is to see if there is anyone in E range that can be insta killed
            if (useE && eTarget != null && eTarget.Health < Player.GetSpellDamage(eTarget, SpellSlot.E))
            {
                E.Cast(eTarget.Position);
            }
            // See if DFG or BFT are useable
            if (Items.CanUseItem(3128) || Items.CanUseItem(3188))
            {
                // See if we had a DFG
                if (useE && eTarget != null && Items.CanUseItem(3128))
                {
                    if (eTarget.Health < Player.GetSpellDamage(eTarget, SpellSlot.E) + Player.GetItemDamage(eTarget, Damage.DamageItems.Dfg) + (Player.GetSpellDamage(eTarget, SpellSlot.E) * 0.15))
                    {
                        Items.UseItem(3128, eTarget);
                        E.Cast(eTarget.Position);
                    }
                }
                // Or else we had a BFT
                else if (useE && eTarget != null && Items.CanUseItem(3188))
                {
                    if (eTarget.Health < Player.GetSpellDamage(eTarget, SpellSlot.E) + Player.GetItemDamage(eTarget, Damage.DamageItems.BlackFireTorch) + (Player.GetSpellDamage(eTarget, SpellSlot.E) * 0.15))
                    {
                        Items.UseItem(3188, eTarget);
                        E.Cast(eTarget.Position);
                    }
                }
            }
            // ----------------------------------------------------------------------------------------

            // ----------------------------------------------------------------------------------------
            // Second priority is to see if there is anyone in R range that can be insta killed without any of the DOT
            if (useR && rTarget != null && !MordekaiserHaveSlave && rTarget.Health < (Player.GetSpellDamage(rTarget, SpellSlot.R) / 2))
            {
                R.CastOnUnit(rTarget);
            }
            // See if DFG or BFT are useable
            if (Items.CanUseItem(3128) || Items.CanUseItem(3188))
            {
                // See if we had a DFG
                if (Items.CanUseItem(3128))
                {
                    if (useR && rTarget != null && !MordekaiserHaveSlave && Player.Distance(rTarget) < 695)
                    {
                        if (rTarget.Health < (Player.GetSpellDamage(rTarget, SpellSlot.R) / 2) + Player.GetItemDamage(rTarget, Damage.DamageItems.Dfg) + ((Player.GetSpellDamage(rTarget, SpellSlot.R) / 2) * 0.15))
                        {
                            if (Player.Distance(rTarget) < 599 && IgniteSlot != SpellSlot.Unknown && Player.SummonerSpellbook.CanUseSpell(IgniteSlot) == SpellState.Ready)
                            {
                                Player.SummonerSpellbook.CastSpell(IgniteSlot, rTarget);
                            }
                            Items.UseItem(3128, rTarget);
                            R.CastOnUnit(rTarget);
                        }
                    }
                }
                // Or else we had a BFT
                else if (Items.CanUseItem(3188))
                {
                    if (useR && rTarget != null && !MordekaiserHaveSlave && Player.Distance(rTarget) < 695)
                    {
                        if (rTarget.Health < (Player.GetSpellDamage(rTarget, SpellSlot.R) / 2) + Player.GetItemDamage(rTarget, Damage.DamageItems.BlackFireTorch) + ((Player.GetSpellDamage(rTarget, SpellSlot.R) / 2) * 0.15))
                        {
                            if (Player.Distance(rTarget) < 599 && IgniteSlot != SpellSlot.Unknown && Player.SummonerSpellbook.CanUseSpell(IgniteSlot) == SpellState.Ready)
                            {
                                Player.SummonerSpellbook.CastSpell(IgniteSlot, rTarget);
                            }
                            Items.UseItem(3188, rTarget);
                            R.CastOnUnit(rTarget);
                        }
                    }
                }
            }
            // ----------------------------------------------------------------------------------------

            // ----------------------------------------------------------------------------------------
            // Thrid priority is to see if there is anyone in E range that can be insta killed without any of the DOT using both E and R
            if (useR && useE && eTarget != null && !MordekaiserHaveSlave && eTarget.Health < Player.GetSpellDamage(eTarget, SpellSlot.E) + (Player.GetSpellDamage(eTarget, SpellSlot.R) / 2))
            {
                if (Player.Distance(eTarget) < 599 && IgniteSlot != SpellSlot.Unknown && Player.SummonerSpellbook.CanUseSpell(IgniteSlot) == SpellState.Ready)
                {
                    Player.SummonerSpellbook.CastSpell(IgniteSlot, eTarget);
                }
                E.Cast(eTarget.Position);
                R.CastOnUnit(eTarget);
            }
            // See if DFG or BFT are useable
            if (Items.CanUseItem(3128) || Items.CanUseItem(3188))
            {
                // See if we had a DFG
                if (useE && useR && eTarget != null && Items.CanUseItem(3128))
                {
                    if (eTarget.Health < Player.GetSpellDamage(eTarget, SpellSlot.E) + Player.GetItemDamage(eTarget, Damage.DamageItems.Dfg) + (Player.GetSpellDamage(eTarget, SpellSlot.E) * 0.15) + (Player.GetSpellDamage(rTarget, SpellSlot.R) / 2) + ((Player.GetSpellDamage(rTarget, SpellSlot.R) / 2) * 0.15))
                    {
                        if (Player.Distance(eTarget) < 599 && IgniteSlot != SpellSlot.Unknown && Player.SummonerSpellbook.CanUseSpell(IgniteSlot) == SpellState.Ready)
                        {
                            Player.SummonerSpellbook.CastSpell(IgniteSlot, eTarget);
                        }
                        Items.UseItem(3128, eTarget);
                        E.Cast(eTarget.Position);
                        R.CastOnUnit(eTarget);
                    }
                }
                // Or else we had a BFT
                else if (useE && useR && eTarget != null && Items.CanUseItem(3188))
                {
                    if (eTarget.Health < Player.GetSpellDamage(eTarget, SpellSlot.E) + Player.GetItemDamage(eTarget, Damage.DamageItems.BlackFireTorch) + (Player.GetSpellDamage(eTarget, SpellSlot.E) * 0.15) + (Player.GetSpellDamage(rTarget, SpellSlot.R) / 2) + ((Player.GetSpellDamage(rTarget, SpellSlot.R) / 2) * 0.15))
                    {
                        if (Player.Distance(eTarget) < 599 && IgniteSlot != SpellSlot.Unknown && Player.SummonerSpellbook.CanUseSpell(IgniteSlot) == SpellState.Ready)
                        {
                            Player.SummonerSpellbook.CastSpell(IgniteSlot, eTarget);
                        }
                        Items.UseItem(3188, eTarget);
                        E.Cast(eTarget.Position);
                        R.CastOnUnit(eTarget);
                    }
                }
            }
            // ----------------------------------------------------------------------------------------

            // ----------------------------------------------------------------------------------------
            // Next priority is to see if Q is up and if we have a target in autoattack range
            if (useQ && Q.IsReady() && Player.Distance(wTarget) < Orbwalking.GetRealAutoAttackRange(ObjectManager.Player))
            {
                // Shut off movement via orbwalker so it doesnt interrupt any combos
                Orbwalker.SetMovement(false);
                // See if we can Q + E them for a kill using at least 1/3 of Q damage
                if (useE && E.IsReady() && wTarget.Health < (Player.GetSpellDamage(wTarget, SpellSlot.Q) / 3) + Player.GetSpellDamage(wTarget, SpellSlot.E))
                {
                    Q.Cast();
                    Player.IssueOrder(GameObjectOrder.AttackUnit, wTarget);
                    E.Cast(wTarget.Position);
                }
                // See if we can Q + E + R them for a kill using at least 1/3 of Q damage
                else if (useE && E.IsReady() && useR && R.IsReady() && !MordekaiserHaveSlave && wTarget != null && wTarget.Health < (Player.GetSpellDamage(wTarget, SpellSlot.Q) / 3) + Player.GetSpellDamage(wTarget, SpellSlot.E) + (Player.GetSpellDamage(wTarget, SpellSlot.R) / 2))
                {
                    Q.Cast();
                    Player.IssueOrder(GameObjectOrder.AttackUnit, wTarget);
                    E.Cast(wTarget.Position);
                    R.CastOnUnit(wTarget);
                }
                // Couldn't combo anyone so we just use Q for dps
                else if (wTarget != null)
                {
                    Q.Cast();
                    Player.IssueOrder(GameObjectOrder.AttackUnit, wTarget);
                    // Auto Slave Control
                    if (MordekaiserHaveSlave)
                    {
                        R.Cast(wTarget);
                        SlaveDelay = Environment.TickCount + 1500;
                    }
                }
                // Turn movement via orbwalker since we are done with combos
                Orbwalker.SetMovement(true);
            }
            // ----------------------------------------------------------------------------------------

            // Re-check for targets before final dps alternatives
            wTarget = SimpleTs.GetTarget(W.Range / 2, SimpleTs.DamageType.Magical);
            eTarget = SimpleTs.GetTarget(E.Range, SimpleTs.DamageType.Magical);

            // -----------------------------------------------
            // Couldn't combo anyone so we just use E for dps
            if (useE && eTarget != null)
            {
                E.Cast(eTarget.Position);
                // Auto Slave Control
                if (MordekaiserHaveSlave)
                {
                    R.Cast(eTarget);
                    SlaveDelay = Environment.TickCount + 1500;
                }
            }


            // Use W is we have an enemy player in metal shard range
            if (useW && wTarget != null && Player.Distance(wTarget) < WDamageRange)
            {
                W.CastOnUnit(Player);
                // Auto Slave Control
                if (MordekaiserHaveSlave)
                {
                    R.Cast(wTarget);
                    SlaveDelay = Environment.TickCount + 1500;
                }
            }

            // Turn on autoattack via orbwalker since we are done casting spells
            Orbwalker.SetAttack(true);


            // ----------------------------------------------------------------------------------------
            // -----------------------------------------------
            // ----  MAIN ATTACK LOGIC END
            // -----------------------------------------------
        }
Example #19
0
        /// <summary>
        /// Gets the hero average damage to the opposing team.
        /// </summary>
        /// <param name="player">The player.</param>
        /// <param name="Enemies">The enemies.</param>
        /// <returns></returns>
        public static float GetHeroAvgDamage(Obj_AI_Hero player, List <Obj_AI_Hero> Enemies)
        {
            var totalEnemies = Enemies.Count();

            if (totalEnemies == 0)
            {
                return(-1);
            }
            var AADamage = Enemies.Aggregate(0, (current, s) => (int)(current + player.GetAutoAttackDamage(s) * 2));
            var QDamage  = Enemies.Aggregate(0, (current, s) => (int)(current + (player.GetSpell(SpellSlot.Q).IsReady() ? player.GetSpellDamage(s, SpellSlot.Q) : 0f)));
            var WDamage  = Enemies.Aggregate(0, (current, s) => (int)(current + (player.GetSpell(SpellSlot.W).IsReady() ? player.GetSpellDamage(s, SpellSlot.W) : 0f)));
            var EDamage  = Enemies.Aggregate(0, (current, s) => (int)(current + (player.GetSpell(SpellSlot.E).IsReady() ? player.GetSpellDamage(s, SpellSlot.E) : 0f)));
            var RDamage  = Enemies.Aggregate(0, (current, s) => (int)(current + (player.GetSpell(SpellSlot.R).IsReady() ? player.GetSpellDamage(s, SpellSlot.R) : 0f)));

            var itemsDamage = 0f;

            foreach (var item in player.InventoryItems)
            {
                foreach (var hero in Enemies)
                {
                    var itemID = item.Id;
                    switch (itemID)
                    {
                    case ItemId.Bilgewater_Cutlass:
                        itemsDamage +=
                            (float)player.GetItemDamage(hero, Damage.DamageItems.Bilgewater);
                        break;

                    case ItemId.Blade_of_the_Ruined_King:
                        itemsDamage += (float)player.GetItemDamage(hero, Damage.DamageItems.Botrk);
                        break;

                    case ItemId.Hextech_Gunblade:
                        itemsDamage += (float)player.GetItemDamage(hero, Damage.DamageItems.Hexgun);
                        break;

                    case ItemId.Frost_Queens_Claim:
                        itemsDamage +=
                            (float)player.GetItemDamage(hero, Damage.DamageItems.FrostQueenClaim);
                        break;

                    case ItemId.Tiamat_Melee_Only:
                        itemsDamage += player.IsMelee
                                ? (float)player.GetItemDamage(hero, Damage.DamageItems.Tiamat)
                                : 0f;
                        break;

                    case ItemId.Ravenous_Hydra_Melee_Only:
                        itemsDamage += player.IsMelee
                                ? (float)player.GetItemDamage(hero, Damage.DamageItems.Hydra)
                                : 0f;
                        break;

                    case ItemId.Liandrys_Torment:
                        itemsDamage +=
                            (float)player.GetItemDamage(hero, Damage.DamageItems.LiandrysTorment);
                        break;
                    }
                }
            }

            var totalDamage = AADamage + QDamage + WDamage + EDamage + RDamage + itemsDamage;

            return((float)totalDamage / totalEnemies);
        }