public void update() { enemyChampIn = null; enemyTowerIn = null; containsAlly = false; containsAllyMinion = false; containsEnemy = false; dangerPolig = false; containsAllyChamp = false; containsEnemyChamp = false; enem = null; int dangLVL = 0; foreach (var obj in ObjectManager.Get <AttackableUnit>()) { if (obj.IsDead || obj.Health == 0 || !obj.IsValid || !obj.IsVisible || obj.IsInvulnerable || obj.IsMe) { continue; } if ((!containsAlly || !containsAllyMinion) && obj.IsAlly && !obj.IsDead) { if (polig.pointInside(obj.Position.To2D())) { containsAlly = true; if (obj is Obj_AI_Minion) { containsAllyMinion = true; } } } if (!containsEnemy && obj.IsEnemy && obj is Obj_AI_Minion && !MapControl.fightIsClose() && !ARAMTargetSelector.IsInvulnerable(ObjectManager.Player) && !Aggresivity.getIgnoreMinions()) { if (!obj.IsDead && ((Obj_AI_Minion)obj).SkinName != "GangplankBarrel" && obj.Health > 0 && obj.IsValidTarget() && polig.pointInside(obj.Position.To2D())) { containsEnemy = true; enem = obj; } } if (containsEnemy && containsAlly) { break; } } foreach (var en_chemp in MapControl.enemy_champions) { en_chemp.getReach(); //Console.WriteLine(en_chemp.reach); if (!en_chemp.hero.IsDead && (en_chemp.hero.IsVisible || ARAMSimulator.deepestAlly.IsMe || NavMesh.GetCollisionFlags(en_chemp.hero.Position) == CollisionFlags.Grass) && (sectorInside(en_chemp.hero.Position.To2D(), en_chemp.hero.AttackRange + 120) || sectorInside(en_chemp.hero.Position.To2D(), en_chemp.reach))) { dangLVL++; containsEnemyChamp = true; if (enemyChampIn == null || (enemyChampIn.Health > en_chemp.hero.Health && !enemyChampIn.IsZombie && !ARAMTargetSelector.IsInvulnerable(enemyChampIn))) { enemyChampIn = en_chemp.hero; } } } foreach (var al_chemp in MapControl.ally_champions) { if (al_chemp.hero.IsValidTarget() && !al_chemp.hero.IsDead && polig.pointInside(al_chemp.hero.Position.To2D())) { dangLVL--; containsAllyChamp = true; } } if (dangLVL > 0) { dangerPolig = true; } foreach (var turret in ObjectManager.Get <Obj_AI_Turret>()) { if (turret.IsEnemy && !turret.IsDead && turret.IsValid && sectorInside(turret.Position.To2D(), 1050)) { if (polig.pointInside(turret.Position.To2D())) { enemyTowerIn = turret; dangerPolig = true; break; } if (!towerContainsAlly(turret)) { dangerPolig = true; break; } } } }
public static AttackableUnit GetPossibleTarget(bool onlyChamps = false) { if (ForcedTarget != null) { if (InAutoAttackRange(ForcedTarget)) { return(ForcedTarget); } ForcedTarget = null; } var camp = GetBestHeroTarget(); if (camp != null) { return(camp); } CurrentMode = (Aggresivity.getIgnoreMinions() || onlyChamps) ? Mode.Lasthit : Mode.LaneClear; Obj_AI_Base tempTarget = null; //Well fuk it we need win the game not kda!!! /*turrets*/ if (CurrentMode == Mode.LaneClear || CurrentMode == Mode.Lasthit || true) { foreach (var turret in EnemyTowers.Where(t => t.IsValidTarget() && InAutoAttackRange(t))) { return(turret); } } /*inhibitor*/ if (CurrentMode == Mode.LaneClear || CurrentMode == Mode.Lasthit || true) { foreach (var turret in EnemyBarracs .Where(t => t.IsValidTarget() && !t.IsInvulnerable && InAutoAttackRange(t))) { return(turret); } } /*nexus*/ if (CurrentMode == Mode.LaneClear || CurrentMode == Mode.Lasthit || true) { foreach (var nexus in EnemyHQ .Where(t => t.IsValidTarget() && InAutoAttackRange(t))) { return(nexus); } } if ((CurrentMode == Mode.Harass || CurrentMode == Mode.LaneClear)) { tempTarget = GetBestHeroTarget(); if (tempTarget != null) { return(tempTarget); } } if (ARAMSimulator.towerAttackedMe) { return(null); } /* dont aa if enemy close */ var closestenemy = HeroManager.Enemies.Where(ene => !ene.IsDead) .OrderBy(ene => ene.Distance(MyHero, true)) .FirstOrDefault(); var aaRangeext = GetAutoAttackRange(MyHero, closestenemy) + 120; if (closestenemy != null && closestenemy.Distance(MyHero, true) < aaRangeext * aaRangeext) { return(null); } enemiesMinionsAround = ObjectManager.Get <Obj_AI_Base>() .Where(targ => targ.IsValidTarget(farmRange) && !targ.IsDead && targ.IsTargetable && targ.IsEnemy).ToList(); if (CurrentMode == Mode.Harass || CurrentMode == Mode.Lasthit || CurrentMode == Mode.LaneClear || CurrentMode == Mode.LaneFreeze) { foreach ( var minion in from minion in enemiesMinionsAround.Where(minion => minion != null && minion.IsValidTarget() && InAutoAttackRange(minion)) let t = (int)(MyHero.AttackCastDelay * 1000) - 100 + Game.Ping / 2 + 1000 * (int)MyHero.Distance(minion) / (int)MyProjectileSpeed() let predHealth = HealthPrediction.GetHealthPrediction(minion, t, FarmDelay()) where minion != null && minion.Team != GameObjectTeam.Neutral && predHealth > 0 && minion.SkinName != "GangplankBarrel" && predHealth <= MyHero.GetAutoAttackDamage(minion, true) select minion) { return(minion); } } if (CurrentMode == Mode.Harass || CurrentMode == Mode.LaneClear || CurrentMode == Mode.LaneFreeze) { foreach ( var turret in EnemyTowers.Where(turret => turret.IsValidTarget(GetAutoAttackRange(MyHero, turret)))) { return(turret); } } if (CurrentMode != Mode.Lasthit) { tempTarget = GetBestHeroTarget(); if (tempTarget != null) { return(tempTarget); } } float[] maxhealth; if (CurrentMode == Mode.LaneClear || CurrentMode == Mode.Harass || CurrentMode == Mode.LaneFreeze) { maxhealth = new float[] { 0 }; var maxhealth1 = maxhealth; foreach (var minion in enemiesMinionsAround.Where(minion => minion.IsValidTarget(GetAutoAttackRange(MyHero, minion)) && minion.SkinName != "GangplankBarrel" && minion.Team == GameObjectTeam.Neutral).Where(minion => minion.MaxHealth >= maxhealth1[0] || Math.Abs(maxhealth1[0] - float.MaxValue) < float.Epsilon)) { tempTarget = minion; maxhealth[0] = minion.MaxHealth; } if (tempTarget != null) { return(tempTarget); } } if (CurrentMode != Mode.LaneClear || ShouldWait()) { return(null); } maxhealth = new float[] { 0 }; foreach (var minion in from minion in enemiesMinionsAround .Where(minion => minion != null && minion.IsValidTarget(GetAutoAttackRange(MyHero, minion)) && minion.SkinName != "GangplankBarrel") let predHealth = HealthPrediction.LaneClearHealthPrediction(minion, (int)((MyHero.AttackDelay * 1000) * LaneClearWaitTimeMod), FarmDelay()) where predHealth >= 2 * MyHero.GetAutoAttackDamage(minion, true) || Math.Abs(predHealth - minion.Health) < float.Epsilon where minion.Health >= maxhealth[0] || Math.Abs(maxhealth[0] - float.MaxValue) < float.Epsilon select minion) { tempTarget = minion; maxhealth[0] = minion.MaxHealth; } return(tempTarget); }