コード例 #1
0
ファイル: Program.cs プロジェクト: lyw1989/LeagueRepo
        public static void CastSpell(Spell QWER, Obj_AI_Base target)
        {
            if (target.Path.Count() > 1)
            {
                return;
            }
            var poutput = QWER.GetPrediction(target);

            if (ColFix && HitChanceNum == 4)
            {
                if (QWER.Collision && OktwCommon.GetCollision(target, QWER, false, true))
                {
                    return;
                }
            }
            else
            {
                var col = poutput.CollisionObjects.Count(ColObj => ColObj.IsEnemy && ColObj.IsMinion && !ColObj.IsDead);
                if (col > 0)
                {
                    return;
                }
            }

            if ((int)poutput.Hitchance > 4 && target.HasBuffOfType(BuffType.Slow))
            {
                QWER.Cast(poutput.CastPosition);
                return;
            }

            if (target.HasBuff("Recall") || poutput.Hitchance == HitChance.Immobile)
            {
                QWER.Cast(poutput.CastPosition);
                return;
            }

            if (poutput.Hitchance == HitChance.Dashing && QWER.Delay < 0.30f)
            {
                QWER.Cast(poutput.CastPosition);
                return;
            }

            if (HitChanceNum == 4)
            {
                if ((int)poutput.Hitchance < 5)
                {
                    return;
                }

                if (NewWay && (int)poutput.Hitchance < 6)
                {
                    return;
                }

                float fixRange;

                if (RangeFix)
                {
                    fixRange = (target.MoveSpeed * (Player.ServerPosition.Distance(target.ServerPosition) / QWER.Speed + QWER.Delay)) / 2;
                }
                else
                {
                    fixRange = 0;
                }

                if (target.IsWindingUp)
                {
                    if (!tryAA)
                    {
                        return;
                    }
                    debug("IsWinding: ");
                    if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange)
                    {
                        if (FastMode)
                        {
                            QWER.Cast(poutput.CastPosition);
                        }
                        else
                        {
                            QWER.Cast(target);
                        }
                    }

                    return;
                }
                else if (target.Path.Count() == 0 && target.Position == target.ServerPosition)
                {
                    if (IgnoreNoMove)
                    {
                        return;
                    }
                    debug("NotMove");
                    if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange)
                    {
                        if (FastMode)
                        {
                            QWER.Cast(poutput.CastPosition);
                        }
                        else
                        {
                            QWER.Cast(target);
                        }
                    }

                    return;
                }

                var LastWaypiont = target.GetWaypoints().Last().To3D();

                if (target.ServerPosition.Distance(Player.ServerPosition) < LastWaypiont.Distance(Player.ServerPosition) - fixRange)
                {
                    if (FastMode)
                    {
                        QWER.Cast(poutput.CastPosition);
                    }
                    else
                    {
                        QWER.Cast(target);
                    }

                    debug("Run");
                }
                else if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange)
                {
                    float BackToFront = ((target.MoveSpeed * QWER.Delay) + (Player.Distance(target.ServerPosition) / QWER.Speed));
                    float SiteToSite  = (BackToFront * 2) - QWER.Width;

                    if ((target.ServerPosition.Distance(LastWaypiont) > SiteToSite ||
                         Math.Abs(Player.Distance(LastWaypiont) - Player.Distance(target.ServerPosition)) > BackToFront) ||
                        Player.Distance(target.ServerPosition) < SiteToSite + target.BoundingRadius * 2 ||
                        Player.Distance(LastWaypiont) < BackToFront)
                    {
                        if (FastMode)
                        {
                            QWER.Cast(poutput.CastPosition);
                        }
                        else
                        {
                            QWER.Cast(target);
                        }

                        debug("good 2");
                    }
                    else
                    {
                        debug("ignore 2");
                    }
                }
                else
                {
                    debug("fixed " + fixRange);
                }
            }
            else if (HitChanceNum == 3)
            {
                if ((int)poutput.Hitchance < 5)
                {
                    return;
                }

                var fixRange = (target.MoveSpeed * (Player.ServerPosition.Distance(target.ServerPosition) / QWER.Speed + QWER.Delay)) / 2;
                if (QWER.Delay < 0.3 && (QWER.Speed > 1500 || QWER.Type == SkillshotType.SkillshotCircle) && (target.IsWindingUp || (int)poutput.Hitchance == 6))
                {
                    if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange)
                    {
                        QWER.CastIfHitchanceEquals(target, HitChance.High, true);
                    }
                    return;
                }

                if (target.Path.Count() == 0 && target.Position == target.ServerPosition && !target.IsWindingUp)
                {
                    if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange)
                    {
                        QWER.CastIfHitchanceEquals(target, HitChance.High, true);
                    }
                    return;
                }
                var waypoints = target.GetWaypoints().Last <Vector2>().To3D();

                float BackToFront = ((target.MoveSpeed * QWER.Delay) + (Player.Distance(target.ServerPosition) / QWER.Speed));
                float SiteToSite  = (BackToFront * 2) - QWER.Width;

                if ((target.ServerPosition.Distance(waypoints) > SiteToSite ||
                     Math.Abs(Player.Distance(waypoints) - Player.Distance(target.Position)) > BackToFront) ||
                    Player.Distance(target.Position) < SiteToSite + target.BoundingRadius * 2 ||
                    Player.Distance(waypoints) < BackToFront
                    )
                {
                    if (waypoints.Distance(Player.Position) <= target.Distance(Player.Position))
                    {
                        if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange)
                        {
                            QWER.CastIfHitchanceEquals(target, HitChance.High, true);
                        }
                    }
                    else
                    {
                        QWER.CastIfHitchanceEquals(target, HitChance.High, true);
                    }
                }
            }
            else if (HitChanceNum == 0)
            {
                QWER.Cast(target, true);
            }
            else if (HitChanceNum == 1)
            {
                if ((int)poutput.Hitchance > 4)
                {
                    QWER.Cast(poutput.CastPosition);
                }
            }
            else if (HitChanceNum == 2)
            {
                List <Vector2> waypoints = target.GetWaypoints();
                if (waypoints.Last <Vector2>().To3D().Distance(poutput.CastPosition) > QWER.Width && (int)poutput.Hitchance > 4)
                {
                    if (waypoints.Last <Vector2>().To3D().Distance(Player.Position) <= target.Distance(Player.Position) || (target.Path.Count() == 0 && target.Position == target.ServerPosition))
                    {
                        if (Player.Distance(target.ServerPosition) < QWER.Range - (poutput.CastPosition.Distance(target.ServerPosition) + target.BoundingRadius))
                        {
                            QWER.Cast(poutput.CastPosition);
                        }
                    }
                    else if ((int)poutput.Hitchance == 5)
                    {
                        QWER.Cast(poutput.CastPosition);
                    }
                }
            }
        }