示例#1
0
            public EvadeResult(EvadePlus evade, Vector2 evadePoint, Vector2 anchorPoint, int totalTimeAvailable,
                               int timeAvailable,
                               bool enoughTime)
            {
                Evade     = evade;
                PlayerPos = Player.Instance.Position.To2D();
                Time      = Environment.TickCount;

                EvadePoint         = evadePoint.Extend(PlayerPos, -70); //adjust evade range;
                AnchorPoint        = anchorPoint;
                TotalTimeAvailable = totalTimeAvailable;
                TimeAvailable      = timeAvailable;
                EnoughTime         = enoughTime;

                // fix evade pos
                //if (evadePoint.IsInLineSegment(PlayerPos, anchorPoint, 40))
                //{
                //    EvadePoint = anchorPoint;
                //}

                // extra evade range
                if (Evade.ExtraEvadeRange > 0)
                {
                    var newPoint = EvadePoint.Extend(PlayerPos,
                                                     -(Evade.RandomizeExtraEvadeRange
                            ? Utils.Random.Next(Evade.ExtraEvadeRange / 3, Evade.ExtraEvadeRange)
                            : Evade.ExtraEvadeRange));
                    if (Evade.IsPointSafe(newPoint))
                    {
                        EvadePoint = newPoint;
                    }
                }
            }
示例#2
0
 private static void Main(string[] args)
 {
     Loading.OnLoadingComplete += delegate
     {
         _skillshotDetector = new SkillshotDetector();
         _evade = new EvadePlus(_skillshotDetector);
         EvadeMenu.CreateMenu();
     };
 }
示例#3
0
 private static void Main(string[] args)
 {
     Loading.OnLoadingComplete += delegate
     {
         _skillshotDetector = new SkillshotDetector();
         _evade             = new EvadePlus(_skillshotDetector);
         EvadeMenu.CreateMenu();
     };
 }
示例#4
0
 private static void Main(string[] args)
 {
     Loading.OnLoadingComplete += delegate
     {
         Detector = new SkillshotDetector(DetectionTeam.EnemyTeam);
         Evade = new EvadePlus(Detector);
         EvadeMenu.CreateMenu();
     };
 }
示例#5
0
 private static void Main(string[] args)
 {
     Loading.OnLoadingComplete += delegate
     {
         _skillshotDetector = new SkillshotDetector(DeveloperMode ? DetectionTeam.AnyTeam : DetectionTeam.EnemyTeam);
         _evade             = new EvadePlus(_skillshotDetector);
         EvadeMenu.CreateMenu();
     };
 }
示例#6
0
        public Main()
        {
            Chat.Print("MoonyDiana loaded!");

            config.InitMenu();
            var skillshotDetector = new SkillshotDetector(DetectionTeam.EnemyTeam);

            evadePlus = new EvadePlus.EvadePlus(skillshotDetector);

            me                                = ObjectManager.Player;
            Game.OnUpdate                    += GameOnUpdate;
            Drawing.OnDraw                   += DrawingOnDraw;
            Gapcloser.OnGapcloser            += GapcloserOnOnGapcloser;
            Interrupter.OnInterruptableSpell += InterrupterOnOnInterruptableSpell;
            Player.OnSpellCast               += PlayerOnOnSpellCast;
            Player.OnProcessSpellCast        += PlayerOnOnProcessSpellCast;
        }
示例#7
0
        public static bool ProcessFlash(EvadePlus evade)
        {
            var dangerValue      = evade.GetDangerValue();
            var flashDangerValue = EvadeMenu.SpellMenu["flash"].Cast <Slider>().CurrentValue;

            if (flashDangerValue > 0 && flashDangerValue <= dangerValue)
            {
                var castPos = GetBlinkCastPos(evade, Player.Instance.ServerPosition.To2D(), 425);
                var slot    = GetFlashSpellSlot();

                if (!castPos.IsZero && slot != SpellSlot.Unknown && Player.CanUseSpell(slot) == SpellState.Ready)
                {
                    //Player.IssueOrder(GameObjectOrder.Stop, Player.Instance.Position, true);
                    Player.CastSpell(slot, castPos.To3DWorld());
                    return(true);
                }
            }

            return(false);
        }
示例#8
0
        public static bool ProcessFlash(EvadePlus evade)
        {
            var dangerValue = evade.GetDangerValue();
            var flashDangerValue = EvadeMenu.SpellMenu["flash"].Cast<Slider>().CurrentValue;

            if (flashDangerValue > 0 && flashDangerValue <= dangerValue)
            {
                var castPos = GetBlinkCastPos(evade, Player.Instance.ServerPosition.To2D(), 425);
                var slot = GetFlashSpellSlot();

                if (!castPos.IsZero && slot != SpellSlot.Unknown && Player.CanUseSpell(slot) == SpellState.Ready)
                {
                    //Player.IssueOrder(GameObjectOrder.Stop, Player.Instance.Position, true);
                    Player.CastSpell(slot, castPos.To3DWorld());
                    return true;
                }
            }

            return false;
        }
示例#9
0
        public EvadeResult(EvadePlus.EvadePlus evade, Vector2 evadePoint, Vector2 anchorPoint, int totalTimeAvailable,
            int timeAvailable,
            bool enoughTime)
        {
            Evade = evade;
            PlayerPos = Player.Instance.Position.To2D();
            Time = Environment.TickCount;

            EvadePoint = evadePoint;
            AnchorPoint = anchorPoint;
            TotalTimeAvailable = totalTimeAvailable;
            TimeAvailable = timeAvailable;
            EnoughTime = enoughTime;

            // extra evade range
            if (Evade.ExtraEvadeRange > 0)
            {
                ExtraRange = (Evade.RandomizeExtraEvadeRange
                    ? Utils.Random.Next(Evade.ExtraEvadeRange / 3, Evade.ExtraEvadeRange)
                    : Evade.ExtraEvadeRange);
            }
        }
示例#10
0
            public EvadeResult(EvadePlus evade, Vector2 evadePoint, Vector2 anchorPoint, int totalTimeAvailable,
                               int timeAvailable,
                               bool enoughTime)
            {
                Evade     = evade;
                PlayerPos = Player.Instance.Position.To2D();
                Time      = Environment.TickCount;

                EvadePoint         = evadePoint;
                AnchorPoint        = anchorPoint;
                TotalTimeAvailable = totalTimeAvailable;
                TimeAvailable      = timeAvailable;
                EnoughTime         = enoughTime;

                // extra evade range
                if (Evade.ExtraEvadeRange > 0)
                {
                    ExtraRange = (Evade.RandomizeExtraEvadeRange
                        ? Utils.Random.Next(Evade.ExtraEvadeRange / 3, Evade.ExtraEvadeRange)
                        : Evade.ExtraEvadeRange);
                }
            }
示例#11
0
            public EvadeResult(EvadePlus evade, Vector2 evadePoint, Vector2 anchorPoint, int totalTimeAvailable,
                int timeAvailable,
                bool enoughTime)
            {
                Evade = evade;
                PlayerPos = Player.Instance.Position.To2D();
                Time = Environment.TickCount;

                EvadePoint = evadePoint.Extend(PlayerPos, -70); //adjust evade range;
                AnchorPoint = anchorPoint;
                TotalTimeAvailable = totalTimeAvailable;
                TimeAvailable = timeAvailable;
                EnoughTime = enoughTime;

                // fix evade pos
                //if (evadePoint.IsInLineSegment(PlayerPos, anchorPoint, 40))
                //{
                //    EvadePoint = anchorPoint;
                //}

                // extra evade range
                if (Evade.ExtraEvadeRange > 0)
                {
                    var newPoint = EvadePoint.Extend(PlayerPos,
                        -(Evade.RandomizeExtraEvadeRange
                            ? Utils.Random.Next(Evade.ExtraEvadeRange/3, Evade.ExtraEvadeRange)
                            : Evade.ExtraEvadeRange));
                    if (Evade.IsPointSafe(newPoint))
                    {
                        EvadePoint = newPoint;
                    }
                }
            }
示例#12
0
        public static Vector2 GetBlinkCastPos(EvadePlus evade, Vector2 center, float maxRange)
        {
            var polygons = evade.ClippedPolygons.Where(p => p.IsInside(center)).ToArray();
            var segments = new List <Vector2[]>();

            foreach (var pol in polygons)
            {
                for (var i = 0; i < pol.Points.Count; i++)
                {
                    var start = pol.Points[i];
                    var end   = i == pol.Points.Count - 1 ? pol.Points[0] : pol.Points[i + 1];

                    var intersections =
                        Utils.GetLineCircleIntersectionPoints(center, maxRange, start, end)
                        .Where(p => p.IsInLineSegment(start, end))
                        .ToList();

                    if (intersections.Count == 0)
                    {
                        if (start.Distance(center, true) < maxRange.Pow() &&
                            end.Distance(center, true) < maxRange.Pow())
                        {
                            intersections = new[] { start, end }.ToList();
                        }
                        else
                        {
                            continue;
                        }
                    }
                    else if (intersections.Count == 1)
                    {
                        intersections.Add(center.Distance(start, true) > center.Distance(end, true)
                            ? end
                            : start);
                    }

                    segments.Add(intersections.ToArray());
                }
            }

            if (!segments.Any())
            {
                return(Vector2.Zero);
            }

            const int maxdist  = 2000;
            const int division = 30;
            var       points   = new List <Vector2>();

            foreach (var segment in segments)
            {
                var dist = segment[0].Distance(segment[1]);
                if (dist > maxdist)
                {
                    segment[0] = segment[0].Extend(segment[1], dist / 2 - maxdist / 2);
                    segment[1] = segment[1].Extend(segment[1], dist / 2 - maxdist / 2);
                    dist       = maxdist;
                }

                var step  = maxdist / division;
                var count = dist / step;

                for (var i = 0; i < count; i++)
                {
                    var point = segment[0].Extend(segment[1], i * step);
                    if (!point.IsWall())
                    {
                        points.Add(point);
                    }
                }
            }

            if (!points.Any())
            {
                return(Vector2.Zero);
            }

            var evadePoint =
                points.OrderByDescending(p => p.Distance(evade.LastIssueOrderPos) + p.Distance(center)).Last();

            return(evadePoint);
        }
示例#13
0
 public PathFinding(EvadePlus evade)
 {
     Evade = evade;
 }
示例#14
0
        public Janna()
        {
            frostQueensClaim = new Item(ItemId.Frost_Queens_Claim);

            conf = MainMenu.AddMenu("MoonyJanna", "moonyJanna");

            comboConf = conf.AddSubMenu("ComboMode", "moonyJannaComboConf");
            comboConf.Add("qCombo", new CheckBox("Use Q"));
            comboConf.Add("itemCombo", new CheckBox("Use Frost Queen's Claim"));
            comboConf.Add("wCombo", new CheckBox("Use W"));

            fleeConf = conf.AddSubMenu("FleeMode", "moonyJannaFleeConf");
            fleeConf.Add("qFlee", new CheckBox("Use Q"));
            fleeConf.Add("itemFlee", new CheckBox("Use Frost Queen's Claim"));
            fleeConf.Add("wFlee", new CheckBox("Use W"));

            miscConf = conf.AddSubMenu("Misc", "moonyJannaMiscConf");
            miscConf.Add("qGeneral", new Slider("Use Q if hit at least X targets in general", 2, 0, 5));
            miscConf.AddLabel("0 = disabled");
            miscConf.Add("qInterrupt", new CheckBox("Use Q to interrupt"));
            miscConf.AddStringList("qInterruptDangerLvL", "Q Interruption danger lvl", new [] { "High", "Medium", "Low"}, 1);
            miscConf.Add("qAntiGap", new CheckBox("Use Q against gapclosers"));


            eConf = conf.AddSubMenu("Shielding", "moonyJannaEConf");
            eConf.Add("eSkillShots", new CheckBox("E for skillshots"));
            eConf.Add("eDangerLvl", new Slider("If at dangerlevel", 2, 1, 5));
            eConf.Add("eTargeted", new CheckBox("E for targeted spells"));
            eConf.Add("eDmgProc", new Slider("If % dmg", 15));

            rConf = conf.AddSubMenu("Ultimate", "moonyJannaRConf");
            rConf.Add("rInterrupt", new CheckBox("Use R to interrupt dangerous spells"));
            rConf.Add("rInsec", new KeyBind("Insec to ally", false, KeyBind.BindTypes.HoldActive));
            rConf.AddLabel("Target has to be selected");
            rConf.Add("flashRange", new Slider("Flash Range", 450, 425, 600));
            rConf.Add("extraDist", new Slider("Extra Insec Dist", 150, 50, 300));
            rConf.Add("maxOwnDistToEnemy", new Slider("Max own dist to enemy", 500, 100, 800));

            prioConf = conf.AddSubMenu("AllyPriorities", "moonyJannaPrioConf");
            foreach (AIHeroClient ally in EntityManager.Heroes.Allies)
            {
                prioConf.Add(ally.ChampionName, 
                    new Slider(ally.ChampionName, ally.IsMe ? 1 : TargetSelector.GetPriority(ally), 1, 5));
            }


            skillShotConfig.InitMenu(ref conf);

            var skillshotDetector = new SkillshotDetector(DetectionTeam.EnemyTeam);
            evadePlus = new EvadePlus.EvadePlus(skillshotDetector);

            Game.OnUpdate += GameOnOnUpdate;
            Obj_AI_Base.OnProcessSpellCast += AiHeroClientOnOnProcessSpellCast;
            Interrupter.OnInterruptableSpell += InterrupterOnOnInterruptableSpell;
            Gapcloser.OnGapcloser += GapcloserOnOnGapcloser;
            Drawing.OnDraw += DrawingOnOnDraw;
        }
示例#15
0
            public EvadeResult(EvadePlus evade, Vector2 evadePoint, Vector2 anchorPoint, int totalTimeAvailable,
                int timeAvailable,
                bool enoughTime)
            {
                Evade = evade;
                PlayerPos = Player.Instance.Position.To2D();
                Time = Environment.TickCount;

                EvadePoint = evadePoint.Extend(PlayerPos, -40);
                AnchorPoint = anchorPoint;
                TotalTimeAvailable = totalTimeAvailable;
                TimeAvailable = timeAvailable;
                EnoughTime = enoughTime;

                if (Evade.ExtraEvadeRange > 0)
                {
                    var newPoint = EvadePoint.Extend(PlayerPos,
                        -(Evade.RandomizeExtraEvadeRange
                            ? Utils.Random.Next(Evade.ExtraEvadeRange/3, Evade.ExtraEvadeRange)
                            : Evade.ExtraEvadeRange));
                    if (Evade.IsPointSafe(newPoint))
                    {
                        EvadePoint = newPoint;
                    }
                }
            }
        public static Vector2 GetBlinkCastPos(EvadePlus evade, Vector2 center, float maxRange)
        {
            var polygons = evade.ClippedPolygons.Where(p => p.IsInside(center)).ToArray();
            var segments = new List<Vector2[]>();

            foreach (var pol in polygons)
            {
                for (var i = 0; i < pol.Points.Count; i++)
                {
                    var start = pol.Points[i];
                    var end = i == pol.Points.Count - 1 ? pol.Points[0] : pol.Points[i + 1];

                    var intersections =
                        Utils.GetLineCircleIntersectionPoints(center, maxRange, start, end)
                            .Where(p => p.IsInLineSegment(start, end))
                            .ToList();

                    if (intersections.Count == 0)
                    {
                        if (start.Distance(center, true) < maxRange.Pow() &&
                            end.Distance(center, true) < maxRange.Pow())
                        {
                            intersections = new[] {start, end}.ToList();
                        }
                        else
                        {
                            continue;
                        }
                    }
                    else if (intersections.Count == 1)
                    {
                        intersections.Add(center.Distance(start, true) > center.Distance(end, true)
                            ? end
                            : start);
                    }

                    segments.Add(intersections.ToArray());
                }
            }

            if (!segments.Any())
            {
                return Vector2.Zero;
            }

            const int maxdist = 2000;
            const int division = 30;
            var points = new List<Vector2>();

            foreach (var segment in segments)
            {
                var dist = segment[0].Distance(segment[1]);
                if (dist > maxdist)
                {
                    segment[0] = segment[0].Extend(segment[1], dist/2 - maxdist/2);
                    segment[1] = segment[1].Extend(segment[1], dist/2 - maxdist/2);
                    dist = maxdist;
                }

                var step = maxdist/division;
                var count = dist/step;

                for (var i = 0; i < count; i++)
                {
                    var point = segment[0].Extend(segment[1], i*step);
                    if (!point.IsWall())
                    {
                        points.Add(point);
                    }
                }
            }

            if (!points.Any())
            {
                return Vector2.Zero;
            }

            var evadePoint =
                points.OrderByDescending(p => p.Distance(evade.LastIssueOrderPos) + p.Distance(center)).Last();
            return evadePoint;
        }
 public PathFinding(EvadePlus evade)
 {
     Evade = evade;
 }