예제 #1
0
        public static Obj_AI_Hero GetTarget(float range,
            TargetSelector.DamageType damageType,
            bool ignoreShield = true,
            IEnumerable<Obj_AI_Hero> ignoredChamps = null,
            Vector3? rangeCheckFrom = null)
        {
            if (_lastTarget == null || !_lastTarget.IsValidTarget() || _lastDamageType != damageType)
            {
                var newTarget = TargetSelector.GetTarget(range, damageType, ignoreShield, ignoredChamps, rangeCheckFrom);

                _lastTarget = newTarget;
                _lastDamageType = damageType;

                return newTarget;
            }

            if (_lastTarget.IsValidTarget(range) && damageType == _lastDamageType)
            {
                return _lastTarget;
            }

            var newTarget2 = TargetSelector.GetTarget(range, damageType, ignoreShield, ignoredChamps, rangeCheckFrom);

            _lastTarget = newTarget2;
            _lastDamageType = damageType;

            return newTarget2;
        }
예제 #2
0
        public Smite(TargetSelector.DamageType dmgtype, Menu activator)
        {
            DamageType = dmgtype;
            SetSlot();
            if (Slot != SpellSlot.Unknown)
            {
                Range = 700f;
                CanCastOnEnemy = Blue.Any(i => Items.HasItem(i)) || Red.Any(i => Items.HasItem(i));
                #region jungle minions
                if (LeagueSharp.Common.Utility.Map.GetMap().Type.Equals(LeagueSharp.Common.Utility.Map.MapType.TwistedTreeline))
                {
                    JungleMinions = new string[] { "TT_Spiderboss", "TT_NWraith", "TT_NGolem", "TT_NWolf" };
                }
                else
                {
                    JungleMinions = new string[]
                {
                    "SRU_Blue", "SRU_Gromp", "SRU_Murkwolf", "SRU_Razorbeak", "SRU_Red", "SRU_Krug", "SRU_Dragon",
                    "SRU_Baron", "Sru_Crab"
                };
                }
                #endregion

                summoners = new Menu("Smite", "summonersmite");
                summoners.AddItem(new MenuItem("SMITEENEMY", "Auto Smite Enemy")).SetValue(true)
                            .ValueChanged += (s, ar) =>
                            {
                                bool newVal = ar.GetNewValue<bool>();
                                ((MenuItem)s).Permashow(ar.GetNewValue<bool>(), newVal ? "Auto Smite Enemy" : null);
                            };
                summoners.AddItem(new MenuItem("SMITEJUNGLE", "Auto Smite Monster")).SetValue(true)
                            .ValueChanged += (s, ar) =>
                            {
                                bool newVal = ar.GetNewValue<bool>();
                                ((MenuItem)s).Permashow(ar.GetNewValue<bool>(), newVal ? "Auto Smite Monster" : null);
                            };
                summoners.AddItem(new MenuItem("SMITEENABLE", "Enabled").SetValue<KeyBind>(new KeyBind(32, KeyBindType.Press)));

                summoners.Item("SMITEENEMY").Permashow(true, "Auto Smite Enemy");
                summoners.Item("SMITEJUNGLE").Permashow(true, "Auto Smite Monster");

                activator.AddSubMenu(summoners);
            }
        }
예제 #3
0
        public Ignite(TargetSelector.DamageType dmgtype, Menu activator)
        {
            DamageType = dmgtype;
            SetSlot();
            if (Slot != SpellSlot.Unknown)
            {
                Range = 550f;
                summoners = new Menu("Ignite", "summonerignite");
                summoners.AddItem(new MenuItem("IGNITEENEMY", "Use Ignite")).SetValue(true);

                summoners.AddItem(new MenuItem("IGNITEKS", "Use Ignite to KS")).SetValue(true)
                            .ValueChanged += (s, ar) =>
                            {
                                bool newVal = ar.GetNewValue<bool>();
                                ((MenuItem)s).Permashow(ar.GetNewValue<bool>(), newVal ? "Ignite Kill Steal" : null);
                            };

                summoners.AddItem(new MenuItem("IGNITEENABLE", "Enabled").SetValue<KeyBind>(new KeyBind(32, KeyBindType.Press)));
                summoners.Item("IGNITEKS").Permashow(true, "Ignite Killsteal");
                activator.AddSubMenu(summoners);
            }
        }
예제 #4
0
        internal static bool isKillableAndValidTarget(this AIHeroClient Target, double CalculatedDamage, TargetSelector.DamageType damageType, float distance = float.MaxValue)
        {
            if (Target == null || !Target.IsValidTarget(distance) || Target.Health <= 0 || Target.CharData.BaseSkinName == "gangplankbarrel")
            {
                return(false);
            }

            if (Target.HasBuff("kindredrnodeathbuff"))
            {
                return(false);
            }

            // Tryndamere's Undying Rage (R)
            if (Target.HasBuff("Undying Rage") && Target.Health <= Target.MaxHealth * 0.10f)
            {
                return(false);
            }

            // Kayle's Intervention (R)
            if (Target.HasBuff("JudicatorIntervention"))
            {
                return(false);
            }

            // Poppy's Diplomatic Immunity (R)
            if (Target.HasBuff("DiplomaticImmunity") && !ObjectManager.Player.HasBuff("poppyulttargetmark"))
            {
                //TODO: Get the actual target mark buff name
                return(false);
            }

            // Banshee's Veil (PASSIVE)
            if (Target.HasBuff("BansheesVeil"))
            {
                // TODO: Get exact Banshee's Veil buff name.
                return(false);
            }

            // Sivir's Spell Shield (E)
            if (Target.HasBuff("SivirShield"))
            {
                // TODO: Get exact Sivir's Spell Shield buff name
                return(false);
            }

            // Nocturne's Shroud of Darkness (W)
            if (Target.HasBuff("ShroudofDarkness"))
            {
                // TODO: Get exact Nocturne's Shourd of Darkness buff name
                return(false);
            }

            if (ObjectManager.Player.HasBuff("summonerexhaust"))
            {
                CalculatedDamage *= 0.6;
            }

            if (Target.ChampionName == "Blitzcrank")
            {
                if (!Target.HasBuff("manabarriercooldown"))
                {
                    if (Target.Health + Target.HPRegenRate + (damageType == TargetSelector.DamageType.Physical ? Target.AttackShield : Target.MagicShield) + (Target.Mana * 0.6) + Target.PARRegenRate < CalculatedDamage)
                    {
                        return(true);
                    }
                }
            }

            if (Target.ChampionName == "Garen")
            {
                if (Target.HasBuff("GarenW"))
                {
                    CalculatedDamage *= 0.7;
                }
            }

            if (Target.HasBuff("FerociousHowl"))
            {
                CalculatedDamage *= 0.3;
            }

            return(Target.Health + Target.HPRegenRate + (damageType == TargetSelector.DamageType.Physical ? Target.AttackShield : Target.MagicShield) < CalculatedDamage - 2);
        }
예제 #5
0
        internal static bool isKillableAndValidTarget(this Obj_AI_Minion Target, double CalculatedDamage, TargetSelector.DamageType damageType, float distance = float.MaxValue)
        {
            if (Target == null || !Target.IsValidTarget(distance) || Target.Health <= 0 || Target.HasBuffOfType(BuffType.SpellImmunity) || Target.HasBuffOfType(BuffType.SpellShield) || Target.CharData.BaseSkinName == "gangplankbarrel")
            {
                return(false);
            }

            if (ObjectManager.Player.HasBuff("summonerexhaust"))
            {
                CalculatedDamage *= 0.6;
            }

            BuffInstance dragonSlayerBuff = ObjectManager.Player.GetBuff("s5test_dragonslayerbuff");

            if (dragonSlayerBuff != null)
            {
                if (dragonSlayerBuff.Count >= 4)
                {
                    CalculatedDamage += dragonSlayerBuff.Count == 5 ? CalculatedDamage * 0.30 : CalculatedDamage * 0.15;
                }

                if (Target.CharData.BaseSkinName.ToLowerInvariant().Contains("dragon"))
                {
                    CalculatedDamage *= 1 - (dragonSlayerBuff.Count * 0.07);
                }
            }

            if (Target.CharData.BaseSkinName.ToLowerInvariant().Contains("baron") && ObjectManager.Player.HasBuff("barontarget"))
            {
                CalculatedDamage *= 0.5;
            }

            return(Target.Health + Target.HPRegenRate + (damageType == TargetSelector.DamageType.Physical ? Target.AttackShield : Target.MagicShield) < CalculatedDamage - 2);
        }
예제 #6
0
 public Obj_AI_Hero GetTarget(
     float vRange = 0,
     TargetSelector.DamageType vDamageType = TargetSelector.DamageType.Physical)
 {
     return(TsEnemy);
 }
예제 #7
0
파일: Program.cs 프로젝트: ElGuri84/Anni
 public static void GTarget(Spell spell, TargetSelector.DamageType dmgtype)
 {
     TargetSelector.GetTarget(spell.Range, dmgtype);
 }
예제 #8
0
        /// <summary>
        /// Represents a "combo" and it's logic. Manages skill logic.
        /// </summary>
        public ComboProvider(float targetSelectorRange, IEnumerable <Skill> skills, Orbwalking.Orbwalker orbwalker)
        {
            Skills     = skills as List <Skill> ?? skills.ToList();
            DamageType = Skills.Count(spell => spell.DamageType == TargetSelector.DamageType.Magical) > Skills.Count(spell => spell.DamageType == TargetSelector.DamageType.Physical) ?
                         TargetSelector.DamageType.Magical : TargetSelector.DamageType.Physical;
            TargetRange = targetSelectorRange;
            Orbwalker   = orbwalker;

            LeagueSharp.Common.AntiGapcloser.Spells.ForEach(spell =>
            {
                var champ = HeroManager.Enemies.FirstOrDefault(enemy => enemy.ChampionName.Equals(spell.ChampionName, StringComparison.InvariantCultureIgnoreCase));
                if (champ != null && !GapcloserCancel.ContainsKey(champ.ChampionName))
                {
                    GapcloserCancel.Add(champ.ChampionName, true);
                }
            });
            LeagueSharp.Common.AntiGapcloser.OnEnemyGapcloser += OnGapcloser;
            InitInterruptable();
            Interrupter2.OnInterruptableTarget += OnInterrupter;
            Drawing.OnDraw += _ =>
            {
                foreach (var skill in Skills)
                {
                    skill.Draw();
                }

                if (!_drawingsEnabled)
                {
                    return;
                }

                if (_targetDrawing.Active && Target.IsValidTarget())
                {
                    Render.Circle.DrawCircle(Target.Position, 100, _targetDrawing.Color);
                }

                if (_deadDrawing.Active)
                {
                    foreach (var enemy in HeroManager.Enemies)
                    {
                        if (enemy.IsValidTarget(TargetRange) && ShouldBeDead(enemy))
                        {
                            Render.Circle.DrawCircle(enemy.Position, 200, _deadDrawing.Color);
                        }
                    }
                }

                //foreach (var enemy in ObjectManager.Get<Obj_AI_Base>())
                //    if (enemy.IsValidTarget() && ShouldBeDead(enemy))
                //        Render.Circle.DrawCircle(enemy.Position, 200, _deadDrawing.Color);
            };

            Spellbook.OnCastSpell += (sender, args) =>
            {
                if (!sender.Owner.IsMe)
                {
                    return;
                }

                for (int i = 0; i < _queuedCasts.Count; i++)
                {
                    if (_queuedCasts[i].Item1.Slot == args.Slot)
                    {
                        _queuedCasts.RemoveAt(i);
                        break;
                    }
                }
            };

            foreach (var mode in Enum.GetValues(typeof(Orbwalking.OrbwalkingMode)).Cast <Orbwalking.OrbwalkingMode>())
            {
                ManaManager[mode] = 0;
            }

            Orbwalking.AfterAttack += (s, a) => IsAfterAttack = true;
        }
예제 #9
0
파일: AiMPlugin.cs 프로젝트: imsosharp/AIM
 public static Obj_AI_Base GetTarget(float range, TargetSelector.DamageType damageType)
 {
     return(TargetSelector.GetTarget(range, damageType));
 }
예제 #10
0
 static void InitSpell(SpellSlot slot, float range, TargetSelector.DamageType type)
 {
     Spell = new Spell(slot, range, type);
 }
예제 #11
0
 public Obj_AI_Hero GetTarget(float vRange = 0,
                              TargetSelector.DamageType vDamageType = TargetSelector.DamageType.Physical)
 {
     return(Math.Abs(vRange) < 0.00001 ? null : TsEnemy);
 }
예제 #12
0
 public SpellEx(SpellSlot slot, float range = 3.402823E+38f, TargetSelector.DamageType damageType = TargetSelector.DamageType.Physical)
     : base(slot, range, damageType)
 {
     Obj_AI_Base.OnProcessSpellCast += ProcessSpell;
 }
예제 #13
0
파일: Program.cs 프로젝트: wade1990/PortAIO
        private static AIHeroClient GetTarget(float range, TargetSelector.DamageType damageType = TargetSelector.DamageType.Physical)
        {
            var currTarget = TargetSelector.GetTarget(range, damageType);

            return(currTarget != null && currTarget.IsValid ? currTarget : null);
        }
예제 #14
0
 public KalistaQ(SpellSlot slot, float range, TargetSelector.DamageType damageType)
     : base(slot, range, damageType)
 {
 }
예제 #15
0
        public _TargetSelector(Menu subMenu, TargetSelector.DamageType damageType, Mode mode, bool includeShields = true)
        {
            menu = subMenu.AddSubMenu("Target Selector");
            menu.DropDown("TSMode", "Targetting Mode", new string[] { "Auto Priority", "Lowest HP", "LessCast", "Most AD", "Most AP", "Closest", "Closest Mouse", "LessCast" }, (int)mode);
            menu.Boolean("selected", "Priority Selected Target");
            if (Enemies.Count == 0)
            {
                menu.AddSeparator("- No Enemy Avaliable -");
            }
            else
            {
                menu.AddSeparator("Settings Enemies's Priority");
                foreach (var enemy in Enemies)
                {
                    menu.Slider(enemy.ChampionName, enemy.ChampionName, 1, 5, GetPriority(enemy));
                }
            }

            if (damageType == TargetSelector.DamageType.Magical)
            {
                IsValid = (unit) =>
                {
                    foreach (var buff in unit.Buffs)
                    {
                        if (buff.IsActive)
                        {
                            if (!ShouldAttack(unit, buff.DisplayName))
                            {
                                return(false);
                            }
                            switch (buff.DisplayName)
                            {
                            case "SivirShield":
                            {
                                return(false);
                            }

                            case "ShroudofDarkness":
                            {
                                return(false);
                            }

                            default:
                                break;
                            }
                        }
                    }
                    return(true);
                };
            }
            else
            {
                IsValid = (unit) =>
                {
                    foreach (var buff in unit.Buffs)
                    {
                        if (buff.IsActive && !ShouldAttack(unit, buff.DisplayName))
                        {
                            return(false);
                        }
                    }
                    return(true);
                };
            }
        }
예제 #16
0
 /// <summary>
 /// Call to initialize all stuffs. If skills access the menu, this should be called after the menu creation
 /// </summary>
 public virtual void Initialize(TargetSelector.DamageType damageType)
 {
     DamageType = damageType;
     Initialize();
 }
예제 #17
0
        public static bool isKillableAndValidTarget(this Obj_AI_Base Target, double CalculatedDamage, TargetSelector.DamageType damageType, float distance = float.MaxValue)
        {
            if (Target == null || !Target.IsValidTarget(distance) || Target.IsDead || Target.CharData.BaseSkinName == "GangPlankBarrel")
            {
                return(false);
            }

            if (Target.HasBuff("KindredRNoDeathBuff") && Target.Health <= Target.MaxHealth * 0.10f)
            {
                return(false);
            }

            if (Target.HasBuff("Undying Rage") && Target.Health <= Target.MaxHealth * 0.05f)
            {
                return(false);
            }

            if (Target.HasBuff("JudicatorIntervention"))
            {
                return(false);
            }

            if (Target.HasBuff("BansheesVeil"))
            {
                return(false);
            }

            if (Target.HasBuff("SivirShield"))
            {
                return(false);
            }

            if (Target.HasBuff("ShroudofDarkness"))
            {
                return(false);
            }

            if (ObjectManager.Player.HasBuff("SummonerExhaust"))
            {
                CalculatedDamage *= 0.6;
            }

            if (Target.CharData.BaseSkinName == "Blitzcrank")
            {
                if (!Target.HasBuff("ManaBarrierCoolDown"))
                {
                    if (Target.Health + Target.HPRegenRate + (damageType == TargetSelector.DamageType.Physical ? Target.PhysicalShield : Target.MagicalShield) + (Target.Mana * 0.6) + Target.PARRegenRate < CalculatedDamage)
                    {
                        return(true);
                    }
                }
            }

            if (Target.CharData.BaseSkinName == "Garen")
            {
                if (Target.HasBuff("GarenW"))
                {
                    CalculatedDamage *= 0.7;
                }
            }


            if (Target.HasBuff("FerociousHowl"))
            {
                CalculatedDamage *= 0.3;
            }

            BuffInstance dragonSlayerBuff = ObjectManager.Player.GetBuff("s5test_dragonslayerbuff");

            if (dragonSlayerBuff != null)
            {
                if (Target.IsMinion)
                {
                    if (dragonSlayerBuff.Count >= 4)
                    {
                        CalculatedDamage += dragonSlayerBuff.Count == 5 ? CalculatedDamage * 0.30 : CalculatedDamage * 0.15;
                    }

                    if (Target.CharData.BaseSkinName.ToLowerInvariant().Contains("dragon"))
                    {
                        CalculatedDamage *= 1 - (dragonSlayerBuff.Count * 0.07);
                    }
                }
            }

            if (Target.CharData.BaseSkinName.ToLowerInvariant().Contains("baron") && ObjectManager.Player.HasBuff("barontarget"))
            {
                CalculatedDamage *= 0.5;
            }

            return(Target.Health + Target.HPRegenRate + (damageType == TargetSelector.DamageType.Physical ? Target.PhysicalShield : Target.MagicalShield) < CalculatedDamage - 2);
        }
예제 #18
0
        public static Obj_AI_Hero GetNearlyKillableTarget(Spell Spell, SpellSlot[] slots, TargetSelector.DamageType DamageType)
        {
            var targetSelectorTarget           = TargetSelector.GetTarget(Spell.Range, TargetSelector.DamageType.Magical);
            var targetSelectorTargetIsKillable = Spell.GetDamage(targetSelectorTarget) > targetSelectorTarget.Health + 5;

            foreach (var target in HeroManager.Enemies.Where(n => n.IsValidTarget(Spell.Range)))
            {
                var SpellDamage = Spell.GetDamage(target);
                if (target.Health + 5 > SpellDamage &&
                    target.Health + 5 < SpellDamage
                    + ObjectManager.Player.GetAutoAttackDamage(target)
                    + ObjectManager.Player.GetComboDamage(target, slots
                                                          .Except(new List <SpellSlot>()
                {
                    Spell.Slot
                }).ToList()))
                {
                    return(target);
                }
            }

            return(targetSelectorTargetIsKillable ? targetSelectorTarget : null);
        }
예제 #19
0
        internal static bool IsKillableAndValidTarget(this Obj_AI_Base target, double calculatedDamage,
                                                      TargetSelector.DamageType damageType, float distance = float.MaxValue)
        {
            if (target == null || !target.IsValidTarget(distance) || target.CharData.BaseSkinName == "gangplankbarrel")
            {
                return(false);
            }

            if (target.HasBuff("kindredrnodeathbuff"))
            {
                return(false);
            }

            // Tryndamere's Undying Rage (R)
            if (target.HasBuff("Undying Rage"))
            {
                return(false);
            }

            // Kayle's Intervention (R)
            if (target.HasBuff("JudicatorIntervention"))
            {
                return(false);
            }

            // Poppy's Diplomatic Immunity (R)
            if (target.HasBuff("DiplomaticImmunity") && !ObjectManager.Player.HasBuff("poppyulttargetmark"))
            {
                //TODO: Get the actual target mark buff name
                return(false);
            }

            // Banshee's Veil (PASSIVE)
            if (target.HasBuff("BansheesVeil"))
            {
                // TODO: Get exact Banshee's Veil buff name.
                return(false);
            }

            // Sivir's Spell Shield (E)
            if (target.HasBuff("SivirShield"))
            {
                // TODO: Get exact Sivir's Spell Shield buff name
                return(false);
            }

            // Nocturne's Shroud of Darkness (W)
            if (target.HasBuff("ShroudofDarkness"))
            {
                // TODO: Get exact Nocturne's Shourd of Darkness buff name
                return(false);
            }

            if (ObjectManager.Player.HasBuff("summonerexhaust"))
            {
                calculatedDamage *= 0.6;
            }

            if (target.CharData.BaseSkinName == "Blitzcrank")
            {
                if (!target.HasBuff("manabarriercooldown"))
                {
                    if (target.Health + target.HPRegenRate +
                        (damageType == TargetSelector.DamageType.Physical ? target.PhysicalShield : target.MagicalShield) +
                        target.Mana * 0.6 + target.PARRegenRate < calculatedDamage)
                    {
                        return(true);
                    }
                }
            }

            if (target.CharData.BaseSkinName == "Garen")
            {
                if (target.HasBuff("GarenW"))
                {
                    calculatedDamage *= 0.7;
                }
            }


            if (target.HasBuff("FerociousHowl"))
            {
                calculatedDamage *= 0.3;
            }

            var dragonSlayerBuff = ObjectManager.Player.GetBuff("s5test_dragonslayerbuff");

            if (dragonSlayerBuff != null)
            {
                if (target.IsMinion)
                {
                    if (dragonSlayerBuff.Count >= 4)
                    {
                        calculatedDamage += dragonSlayerBuff.Count == 5 ? calculatedDamage * 0.30 : calculatedDamage * 0.15;
                    }

                    if (target.CharData.BaseSkinName.ToLowerInvariant().Contains("dragon"))
                    {
                        calculatedDamage *= 1 - dragonSlayerBuff.Count * 0.07;
                    }
                }
            }

            if (target.CharData.BaseSkinName.ToLowerInvariant().Contains("baron") &&
                ObjectManager.Player.HasBuff("barontarget"))
            {
                calculatedDamage *= 0.5;
            }

            return(target.Health + target.HPRegenRate +
                   (damageType == TargetSelector.DamageType.Physical ? target.PhysicalShield : target.MagicalShield) <
                   calculatedDamage - 2);
        }
예제 #20
0
파일: BrandR.cs 프로젝트: wade1990/PortAIO
        }                                                                                                                                  //TODO: check if TotalMagicDamage is really AP


        public BrandR(SpellSlot slot, float range = 3.402823E+38f, TargetSelector.DamageType damageType = TargetSelector.DamageType.Physical)
            : base(slot, range, damageType)
        {
            OnlyUpdateIfTargetValid = true;
        }
예제 #21
0
        // As I gain more experience/knowledge with programming ill expand this class with more useful functions as well as improve them.
        public static Vector3 BestPosition(Spell spell, float spellRadius, TargetSelector.DamageType damageType)
        {
            float x           = 0;
            float y           = 0;
            float z           = 0;
            var   playercount = 0;

            List <Vector3> lstEnemyPosition  = new List <Vector3>();
            List <int>     lstEnemiesitCount = new List <int>();
            List <Vector3> lstBestPositions  = new List <Vector3>();

            foreach (
                var enemy in
                ObjectManager.Get <Obj_AI_Hero>()
                .Where(enemy => enemy.IsValidTarget(spell.Range + spellRadius / 2)))
            {
                lstEnemyPosition.Add(enemy.Position);
                x += enemy.Position.X;
                y += enemy.Position.Y;
                z += enemy.Position.Z;
                playercount++;
            }
            Vector3 centroid = new Vector3(x / playercount, y / playercount, z / playercount);

            if (playercount >= 2)
            {
                for (int i = 0; i <= playercount - 1; i++)
                {
                    Vector3 newPosition = new Vector3((lstEnemyPosition[i].X + centroid.X) / 2,
                                                      (lstEnemyPosition[i].Y + centroid.Y) / 2, (lstEnemyPosition[i].Z + centroid.Z) / 2);
                    lstEnemiesitCount.Add(newPosition.CountEnemiesInRange(spellRadius));
                    lstBestPositions.Add(newPosition);
                }

                for (int j = 0; j < lstEnemiesitCount.Count - 1; j++)
                {
                    int minKey = j;

                    for (int k = j + 1; k < lstEnemiesitCount.Count - 1; k++)
                    {
                        if (lstEnemiesitCount[k] > lstEnemiesitCount[minKey])
                        {
                            minKey = k;
                        }
                    }
                    Vector3 temp = lstBestPositions[minKey];
                    int     tmp  = lstEnemiesitCount[minKey];
                    lstEnemiesitCount[minKey] = lstEnemiesitCount[j];
                    lstBestPositions[minKey]  = lstBestPositions[j];
                    lstEnemiesitCount[j]      = tmp;
                    lstBestPositions[j]       = temp;
                }

                if (centroid.CountEnemiesInRange(spellRadius) >= lstBestPositions[0].CountEnemiesInRange(spellRadius))
                {
                    return(centroid);
                }
                return(lstBestPositions[0]);
            }
            return(TargetSelector.GetTarget(spell.Range, damageType).Position);
        }