public override void LaneClear() { var useQ = LaneClearMenu.checkbox("Q") && Q.IsReady() && Q.Mana(LaneClearMenu); var useW = LaneClearMenu.checkbox("W") && W.IsReady() && W.Mana(LaneClearMenu); var useE = LaneClearMenu.checkbox("E") && E.IsReady() && E.Mana(LaneClearMenu); var allMinionsQ = EntityManager.MinionsAndMonsters.EnemyMinions.Where(m => m != null && m.IsKillable(Q.MaximumRange)); var allMinionsW = EntityManager.MinionsAndMonsters.EnemyMinions.Where(m => m != null && m.IsKillable(W.Range)); var objAiMinionsQ = allMinionsQ as Obj_AI_Minion[] ?? allMinionsQ.ToArray(); if (useQ && allMinionsQ != null) { var Qpos = EntityManager.MinionsAndMonsters.GetLineFarmLocation(objAiMinionsQ.ToArray(), Q.Width, (int)Q.MaximumRange); var useQi = LaneClearMenu.combobox(Q.Slot + "mode"); if (useQi == 0 || useQi == 2) { if (Q.IsCharging) { var locQ = Qpos.CastPosition; if (Qpos.HitNumber >= 1) { Q.Cast(locQ); } } else if (Qpos.HitNumber > 0) { Q.StartCharging(); } } if (useQi == 1 || useQi == 2) { var minion = objAiMinionsQ.FirstOrDefault(m => Q.GetDamage(m) >= Prediction.Health.GetPrediction(m, Q.CastDelay)); if (Q.IsCharging && minion != null) { Q.Cast(minion); } else if (minion != null) { Q.StartCharging(); } } } if (useW && allMinionsW != null) { var objAiMinions = allMinionsW as Obj_AI_Minion[] ?? allMinionsW.ToArray(); var Wpos = EntityManager.MinionsAndMonsters.GetCircularFarmLocation(objAiMinions.ToArray(), W.Width, (int)W.Range, W.CastDelay, W.Speed); var useWi = LaneClearMenu.combobox(W.Slot + "mode"); if (useWi == 0 || useWi == 2) { var locW = Wpos.CastPosition; if (Wpos.HitNumber >= 1) { W.Cast(locW); } } if (useWi == 1 || useWi == 2) { var minion = objAiMinions.FirstOrDefault(m => W.GetDamage(m) >= Prediction.Health.GetPrediction(m, W.CastDelay)); if (minion != null) { W.Cast(minion); } } } if (useE) { var useEi = LaneClearMenu.combobox(E.Slot + "mode"); foreach (var minion in EntityManager.MinionsAndMonsters.EnemyMinions.Where(m => m != null && m.IsKillable(E.Range))) { if (minion != null && (useEi == 0 || useEi == 2)) { E.Cast(minion); } if (minion != null && (useEi == 1 || useEi == 2)) { if (E.GetDamage(minion) >= Prediction.Health.GetPrediction(minion, E.CastDelay)) { E.Cast(minion); } } } } }