Aka_s_Vayne.Logic.AJSProvider.AkaQPosition C# (CSharp) Method

AkaQPosition() public method

public AkaQPosition ( ) : System.Vector3
return System.Vector3
        public Vector3 AkaQPosition()
        {
            #region Variables
            var positions = GetRotatedQPositions();
            var enemyPositions = GetEnemyPoints();
            var safePositions = positions.Where(pos => !enemyPositions.Contains(pos.To2D()));
            var BestPosition = Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f);
            var AverageDistanceWeight = .60f;
            var ClosestDistanceWeight = .40f;

            var bestWeightedAvg = 0f;

            var enemiesNear =
            EntityManager.Heroes.Enemies.Where(
            m => m.IsValidTarget(Variables._Player.GetAutoAttackRange(m) + 300f + 65f));
            var highHealthEnemiesNear =
            EntityManager.Heroes.Enemies.Where(m => !m.IsMelee && m.IsValidTarget(1300f) && m.HealthPercent > 7)
            ;
            var closeNonMeleeEnemy = GetClosestEnemy((Vector3)Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f));
            #endregion

            if (Variables._Player.CountEnemiesInRange(1500f) <= 1)
            {
                //Logic for 1 enemy near
                var position = (Vector3)Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f);
                return IsSafeCheck(position) ? position : Vector3.Zero;
            }

            if (
            enemiesNear.Any(
            t =>
                t.Health + 15 <
                ObjectManager.Player.GetAutoAttackDamage(t) * 2 + Variables._Player.GetSpellDamage(t, SpellSlot.Q)
                && t.Distance(ObjectManager.Player) < Variables._Player.GetAutoAttackRange(t) + 80f))
            {
                var QPosition =
                    ObjectManager.Player.ServerPosition.Extend(
                        enemiesNear.OrderBy(t => t.Health).First().ServerPosition, 300f);

                if (!Variables.UnderEnemyTower(QPosition))
                {
                    return (Vector3)QPosition;
                }
            }

            if (enemiesNear.Count() <= 2)
            {
                if (
                    enemiesNear.Any(
                        t =>
                            t.Health + 15 <
                            Variables._Player.GetAutoAttackDamage(t) +
                            Variables._Player.GetSpellDamage(t, SpellSlot.Q)
                            && t.Distance(Variables._Player) < Variables._Player.GetAutoAttackRange(t) + 80f))
                {
                    var QPosition =
                        Variables._Player.ServerPosition.Extend(
                            highHealthEnemiesNear.OrderBy(t => t.Health).FirstOrDefault().ServerPosition, 300f);

                    if (!Variables.UnderEnemyTower(QPosition))
                    {
                        return (Vector3)QPosition;
                    }
                }
            }

            if (closeNonMeleeEnemy != null
                && Variables._Player.Distance(closeNonMeleeEnemy) <= closeNonMeleeEnemy.AttackRange - 85
                && !closeNonMeleeEnemy.IsMelee)
            {
                return IsSafeCheck(((Vector3)Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f)))
                    ? Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f).To3D()
                    : Vector3.Zero;
            }

            foreach (var position in safePositions)
            {
                var enemy = GetClosestEnemy(position);
                if (!enemy.IsValidTarget())
                {
                    continue;
                }

                var avgDist = GetAvgDistance(position);

                if (avgDist > -1)
                {
                    var closestDist = Variables._Player.ServerPosition.Distance(enemy.ServerPosition);
                    var weightedAvg = closestDist * ClosestDistanceWeight + avgDist * AverageDistanceWeight;
                    if (weightedAvg > bestWeightedAvg && IsSafeCheck(position))
                    {
                        bestWeightedAvg = weightedAvg;
                        BestPosition = position.To2D();
                    }
                }
            }
            var endPosition = (IsSafeCheck(BestPosition.To3D())) ? BestPosition.To3D() : Vector3.Zero;

            if (endPosition == Vector3.Zero)
            {
                //Try to find another suitable position. This usually means we are already near too much enemies turrets so just gtfo and tumble
                //to the closest ally ordered by most health.
                var alliesClose =
                    EntityManager.Heroes.Allies.Where(ally => !ally.IsMe && ally.IsValidTarget(1500, false));
                if (alliesClose.Any() && enemiesNear.Any())
                {
                    var closestMostHealth =
                        alliesClose.OrderBy(m => m.Distance(Variables._Player))
                            .ThenByDescending(m => m.Health)
                            .FirstOrDefault();

                    if (closestMostHealth != null
                        &&
                        closestMostHealth.Distance(
                            enemiesNear.OrderBy(m => m.Distance(Variables._Player)).FirstOrDefault())
                        >
                        Variables._Player.Distance(
                            enemiesNear.OrderBy(m => m.Distance(Variables._Player)).FirstOrDefault()))
                    {
                        var tempPosition = (Vector3)Variables._Player.ServerPosition.Extend(closestMostHealth.ServerPosition,
                            300f);
                        if (IsSafeCheck(tempPosition))
                        {
                            endPosition = tempPosition;
                        }
                    }

                }

            }

            if (endPosition == Vector3.Zero)
            {
                var mousePosition = Variables._Player.ServerPosition.Extend(Game.CursorPos, 300f);
                if (IsSafeCheck(mousePosition.To3D()))
                {
                    endPosition = mousePosition.To3D();
                }
            }

            return endPosition;
        }

Usage Example

Esempio n. 1
0
        public static void OnCastTumble(Obj_AI_Base target, Vector3 position)
        {
            var mode = Manager.MenuManager.UseQMode;
            var afterTumblePosition = Variables._Player.ServerPosition.Extend(position, 300f);
            var distanceToTarget    = afterTumblePosition.Distance(target.ServerPosition, true);

            if ((distanceToTarget < Math.Pow(Variables._Player.AttackRange + 65, 2) && distanceToTarget > 110 * 110) ||
                Manager.MenuManager.SpamQ)
            {
                switch (mode)
                {
                case 0:
                    //To mouse
                    DefaultQCast(position, target);
                    break;

                case 1:
                    //smart logic!
                    var smartQPosition = QECombo();
                    var smartQCheck    = smartQPosition != Vector3.Zero;
                    var QPosition      = smartQCheck ? smartQPosition : Game.CursorPos;
                    var QPosition2     = Provider.AkaQPosition() != Vector3.Zero ? Provider.AkaQPosition() : QPosition;

                    if (!Variables.UnderEnemyTower((Vector2)QPosition2) || (Variables.UnderEnemyTower((Vector2)QPosition2) && Variables.UnderEnemyTower((Vector2)Variables._Player.Position)))
                    {
                        CastQ(QPosition2);
                    }
                    break;

                case 2:
                    //Away from melee enemies
                    if (Variables.MeleeEnemiesTowardsMe.Any() &&
                        !Variables.MeleeEnemiesTowardsMe.All(m => m.HealthPercent <= 15))
                    {
                        var Closest =
                            Variables.MeleeEnemiesTowardsMe.OrderBy(m => m.Distance(Variables._Player)).First();
                        var whereToQ = (Vector3)Closest.ServerPosition.Extend(
                            Variables._Player.ServerPosition, Closest.Distance(Variables._Player) + 300f);

                        if (whereToQ.IsTotallySafe())
                        {
                            CastQ(whereToQ);
                        }
                    }
                    else
                    {
                        DefaultQCast(position, target);
                    }
                    break;

                case 3:
                    //Prada
                    var Target = TargetSelector.GetTarget((int)Variables._Player.GetAutoAttackRange(), DamageType.Physical);
                    if (Target == null)
                    {
                        return;
                    }
                    var tumblePosition = Target.GetTumblePos();
                    CastQ(tumblePosition);
                    break;

                case 4:
                    //Sebby
                    CastDash();
                    break;
                }
            }
        }