//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; } } } } } } } }
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; } } } } } } } }