示例#1
0
        private static bool AutoKill()
        {
            if (!getCheckBoxItem(ksMenu, "KSEnabled"))
            {
                return(false);
            }

            var minHealth  = getSliderItem(ksMenu, "KSHealth");
            var channeling = Player.IsChannelingImportantSpell();

            if (channeling && !getCheckBoxItem(ksMenu, "KSRCancel"))
            {
                return(false);
            }

            var delay = (int)(150 + Game.Ping / 2f + Random.Next(150));

            if (Q.LastCastedDelay(delay) || E.LastCastedDelay(delay) || R.LastCastedDelay(delay))
            {
                return(false);
            }

            if (KSTarget != null && !KSTarget.IsValidTarget(E.Range))
            {
                KSTarget = null;
            }

            foreach (
                var enemy in
                Enemies.Where(
                    h =>
                    h.IsValidTarget(E.Range + Q.Range) && !h.IsZombie &&
                    (KSTarget == null || KSTarget.NetworkId == h.NetworkId)).OrderBy(h => h.Health))
            {
                if (E.IsInRange(enemy))
                {
                    if (W.IsCastable(enemy, true) && W.Cast())
                    {
                        KSTarget = enemy;
                        return(true);
                    }

                    if (Q.IsCastable(enemy, true) && Q.CastOnUnit(enemy))
                    {
                        KSTarget = enemy;
                        return(true);
                    }

                    if (Q.IsCastable(enemy, true, false) && W.IsCastable(enemy, true, false) &&
                        enemy.GetComboDamage(Q, W) > enemy.Health && Q.CastOnUnit(enemy))
                    {
                        KSTarget = enemy;
                        return(true);
                    }

                    if (Player.HealthPercent < minHealth)
                    {
                        continue;
                    }

                    if (E.IsCastable(enemy, true) && E.CastOnUnit(enemy))
                    {
                        KSTarget = enemy;
                        return(true);
                    }

                    if (enemy.GetKSDamage() > enemy.Health && Combo(enemy))
                    {
                        KSTarget = enemy;
                        return(true);
                    }

                    continue;
                }

                // doing some gapclosers and hops here
                if (!E.IsActive(true) || !E.IsReady())
                {
                    continue;
                }

                var closestTarget = Utility.GetClosestETarget(enemy);
                if (getCheckBoxItem(ksMenu, "KSGapclose") && closestTarget != null)
                {
                    var gapcloseDmg = enemy.GetGapcloseDamage(closestTarget);
                    if (enemy.Health < gapcloseDmg &&
                        enemy.CountEnemiesInRange(300) <= getSliderItem(ksMenu, "KSEnemies") &&
                        (!getCheckBoxItem(ksMenu, "KSTurret") || !closestTarget.UnderTurret(true)) &&
                        E.CastOnUnit(closestTarget))
                    {
                        return(true);
                    }
                }
                if (!getCheckBoxItem(ksMenu, "KSWardJump"))
                {
                    continue;
                }

                var wardSlot = Utility.GetReadyWard();

                if (wardSlot.Equals(SpellSlot.Unknown) || !LastWardPlacement.HasTimePassed(2000))
                {
                    continue;
                }

                var range = Player.Spellbook.GetSpell(wardSlot).SData.CastRange;

                if (!enemy.IsValidTarget(Q.Range + range))
                {
                    continue;
                }

                var pos = Player.ServerPosition.LSExtend(enemy.ServerPosition, range);

                if (getCheckBoxItem(ksMenu, "KSTurret") && pos.UnderTurret(true))
                {
                    continue;
                }

                if (pos.CountEnemiesInRange(300) - 1 > 2)
                {
                    continue;
                }

                if (enemy.Health < enemy.GetGapcloseDamage(pos) && Player.Spellbook.CastSpell(wardSlot, pos))
                {
                    LastWardPlacement = Utils.TickCount;
                    WardJumping       = true;
                    return(true);
                }
            }
            return(false);
        }