Пример #1
0
        //private static void OnGapcloser(AIHeroClient target, GapcloserArgs Args)
        //{
        //    if (E.IsReady() && target != null && target.IsValidTarget(E.Range))
        //    {
        //        switch (Args.Type)
        //        {
        //            case SpellType.Melee:
        //                if (target.IsValidTarget(target.AttackRange + target.BoundingRadius + 100))
        //                {
        //                    var ePred = E.GetPrediction(target);
        //                    E.Cast(ePred.UnitPosition);
        //                }
        //                break;
        //            case SpellType.Dash:
        //            case SpellType.SkillShot:
        //            case SpellType.Targeted:
        //                {
        //                    var ePred = E.GetPrediction(target);
        //                    E.Cast(ePred.UnitPosition);
        //                }
        //                break;
        //        }
        //    }
        //}

        private static void QLogic(AIHeroClient target, bool UseQ1 = false)// SFX Challenger MissFortune QLogic (im so lazy, kappa)
        {
            if (target != null)
            {
                if (target.IsValidTarget(Q.Range))
                {
                    Q.CastOnUnit(target);
                }
                else if (UseQ1 && target.IsValidTarget(Q2.Range) && target.DistanceToPlayer() > Q.Range)
                {
                    var heroPositions = (from t in GameObjects.EnemyHeroes
                                         where t.IsValidTarget(Q2.Range)
                                         let prediction = Q.GetPrediction(t)
                                                          select new CPrediction.Position(t, prediction.UnitPosition)).Where(
                        t => t.UnitPosition.Distance(Me.Position) < Q2.Range).ToList();

                    if (heroPositions.Any())
                    {
                        var minions =
                            GameObjects.EnemyMinions.Where(x => x.IsValidTarget(Q2.Range) && (x.GetJungleType() != JungleType.Unknown || x.IsMinion()))
                            .ToList();

                        if (minions.Any(m => m.IsMoving) && !heroPositions.Any(h => h.Hero.HasBuff("missfortunepassive")))
                        {
                            return;
                        }

                        var outerMinions   = minions.Where(m => m.Distance(Me) > Q.Range).ToList();
                        var innerPositions = minions.Where(m => m.Distance(Me) < Q.Range).ToList();

                        foreach (var minion in innerPositions)
                        {
                            var lMinion  = minion;
                            var coneBuff = new Geometry.Sector(
                                minion.Position,
                                Me.Position.Extend(minion.Position, Me.Distance(minion) + Q.Range * 0.5f),
                                (float)(40 * Math.PI / 180), Q2.Range - Q.Range);
                            var coneNormal = new Geometry.Sector(
                                minion.Position,
                                Me.Position.Extend(minion.Position, Me.Distance(minion) + Q.Range * 0.5f),
                                (float)(60 * Math.PI / 180), Q2.Range - Q.Range);

                            foreach (var enemy in
                                     heroPositions.Where(
                                         m => m.UnitPosition.Distance(lMinion.Position) < Q2.Range - Q.Range))
                            {
                                if (coneBuff.IsInside(enemy.Hero) && enemy.Hero.HasBuff("missfortunepassive"))
                                {
                                    Q.CastOnUnit(minion);
                                    return;
                                }
                                if (coneNormal.IsInside(enemy.UnitPosition))
                                {
                                    var insideCone =
                                        outerMinions.Where(m => coneNormal.IsInside(m.Position)).ToList();

                                    if (!insideCone.Any() ||
                                        enemy.UnitPosition.Distance(minion.Position) <
                                        insideCone.Select(
                                            m => m.Position.Distance(minion.Position) - m.BoundingRadius)
                                        .DefaultIfEmpty(float.MaxValue)
                                        .Min())
                                    {
                                        Q.CastOnUnit(minion);
                                        return;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Пример #2
0
        private static void CastQ1()
        {
            var target = TargetSelector.GetTarget(Q.Range, DamageType.Physical);

            if (target != null)
            {
                Q.CastOnUnit(target);
            }
            else if (1 == 1)
            {
                target = TargetSelector.GetTarget(Q1.Range, DamageType.Physical);
                if (target != null)
                {
                    var heroPositions = (from t in GameObjects.EnemyHeroes
                                         where t.IsValidTarget(Q1.Range)
                                         let prediction = Q.GetPrediction(t)
                                                          select new Position(t, prediction.UnitPosition)).Where(
                        t => t.UnitPosition.Distance(GameObjects.Player.Position) < Q1.Range).ToList();
                    if (heroPositions.Any())
                    {
                        var minions = GameObjects.GetMinions(
                            Q1.Range, MinionTypes.All, MinionTeam.Enemy, MinionOrderTypes.None);

                        if (minions.Any(m => m.IsMoving) && !heroPositions.Any(h => HasPassiveDebuff(h.Hero)))
                        {
                            return;
                        }

                        var outerMinions   = minions.Where(m => m.Distance(GameObjects.Player) > Q.Range).ToList();
                        var innerPositions = minions.Where(m => m.Distance(GameObjects.Player) < Q.Range).ToList();
                        foreach (var minion in innerPositions)
                        {
                            var lMinion  = minion;
                            var coneBuff = new Geometry.Sector(minion.Position,
                                                               GameObjects.Player.Position.Extend(minion.Position, GameObjects.Player.Distance(minion) + Q.Range * 0.5f),
                                                               (float)(40 * Math.PI / 180), Q1.Range - Q.Range);

                            var coneNormal = new Geometry.Sector(minion.Position,
                                                                 GameObjects.Player.Position.Extend(minion.Position, GameObjects.Player.Distance(minion) + Q.Range * 0.5f),
                                                                 (float)(60 * Math.PI / 180), Q1.Range - Q.Range);

                            foreach (
                                var enemy in
                                heroPositions.Where(
                                    m => m.UnitPosition.Distance(lMinion.Position) < Q1.Range - Q.Range))
                            {
                                if (coneBuff.IsInside(enemy.Hero) && HasPassiveDebuff(enemy.Hero))
                                {
                                    Q.CastOnUnit(minion);
                                    return;
                                }

                                if (coneNormal.IsInside(enemy.UnitPosition))
                                {
                                    var insideCone =
                                        outerMinions.Where(m => coneNormal.IsInside(m.Position)).ToList();
                                    if (!insideCone.Any() ||
                                        enemy.UnitPosition.Distance(minion.Position) <
                                        insideCone.Select(
                                            m => m.Position.Distance(minion.Position) - m.BoundingRadius)
                                        .DefaultIfEmpty(float.MaxValue)
                                        .Min())
                                    {
                                        Q.CastOnUnit(minion);
                                        return;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }