private static void BardQ(AIHeroClient Target, bool Type, bool Draw = false) { // Type 0: no sturn / 1: only sturn // If Draw is true, return draw /* return * target1, target2, type */ Range1 = new LeagueSharp.Common.Geometry.Polygon.Rectangle(Player.Position, Player.Position.LSExtend(Target.Position, _Q.Range), _Q.Width); Range2 = null; if (Draw) { Range1.Draw(Color.Red); } cnt = 0; BardQTarget1 = Player; BardQTarget2 = Player; foreach (var item in ObjectManager.Get <Obj_AI_Base>().OrderBy(f => f.Distance(f.Position))) { if (item.Distance(Player.Position) < _Q.Range) { if (item is AIHeroClient || item is Obj_AI_Minion) { if (item.IsEnemy && !item.IsDead) { if (cnt == 2) { break; } if (cnt == 0 && Range1.IsInside(item.Position)) { BardQTarget1 = item; Range2 = new LeagueSharp.Common.Geometry.Polygon.Rectangle(Player.Position.Extend(BardQTarget1.Position, Player.Distance(BardQTarget1.Position)), Player.Position.Extend(BardQTarget1.Position, Player.Distance(BardQTarget1.Position) + 450), _Q.Width); if (Draw) { Range2.Draw(Color.Yellow); } cnt++; } if (cnt == 1 && Range2.IsInside(item.Position)) { BardQTarget2 = item; cnt++; } } } } } }
private void Cast_QE(string source, Obj_AI_Base target = null) { var qeTarget = TargetSelector.GetTarget(_qe.Range, TargetSelector.DamageType.Magical); if (qeTarget == null || !Q.IsReady() || !E.IsReady()) { return; } var qTarget = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Magical); if (qTarget.IsValidTarget(E.Range)) { var pred = Q.GetPrediction(qTarget); if (pred.Hitchance >= HitChanceManager.GetQEHitChance(source)) { Q.Cast(pred.CastPosition); W.LastCastAttemptT = Utils.TickCount + 500; _qe.LastCastAttemptT = Utils.TickCount; } } else { var startPos = Player.ServerPosition.To2D().Extend(qeTarget.ServerPosition.To2D(), Q.Range).To3D(); double rangeLeft = 100 + (-0.6 * Player.Distance(startPos) + 950); var endPos = startPos + Vector3.Normalize(startPos - Player.ServerPosition) * (float)rangeLeft; _qe.From = startPos; _qe.Delay = E.Delay + Q.Range / E.Speed; var qePred = _qe.GetPrediction(qeTarget); var poly = new Geometry.Polygon.Rectangle(startPos, endPos, _qe.Width); if (!poly.IsInside(qePred.UnitPosition)) { return; } poly.Draw(Color.LawnGreen); if (qePred.Hitchance >= HitChanceManager.GetQEHitChance(source)) { Q.Cast(startPos); W.LastCastAttemptT = Utils.TickCount + 500; _qe.LastCastAttemptT = Utils.TickCount; } } }
void Drawing_OnEndScene(EventArgs args) { if (_skillshot != null && Game.Time - drawTime <= 2) { _skillshot.Draw(Color.Blue, 2); } if (_skillshotAoe != null && Game.Time - drawTime <= 2) { _skillshotAoe.Draw(Color.Blue, 2); } if (Game.Time - drawTime > 2) { _skillshot = null; _skillshotAoe = null; } if (Config.SubMenu("AutoCombo").Item("Draw").GetValue <bool>()) { Render.Circle.DrawCircle(Player.Position, Config.SubMenu("AutoCombo").Item("Range").GetValue <Slider>().Value, Color.Red); } }
public static void DrawBestLine(Spell spell, Spell spell2, int midPointRange, float extraPrerange = 1, bool wallCheck = true) { //---------------------------------MEC---------------------------- int maxHit = 0; Vector3 start = Vector3.Zero; Vector3 end = Vector3.Zero; //loop one foreach (var target in ObjectManager.Get<Obj_AI_Hero>().Where(x => x.IsValidTarget(spell.Range))) { //loop 2 var target1 = target; var target2 = target; foreach (var enemy in ObjectManager.Get<Obj_AI_Hero>().Where(x => x.IsValidTarget(spell.Range + spell2.Range) && x.NetworkId != target1.NetworkId && x.Distance(target1.Position) < spell2.Range - 100).OrderByDescending(x => x.Distance(target2.Position))) { int hit = 2; var targetPred = Prediction.GetPrediction(target, spell.Delay); var enemyPred = Prediction.GetPrediction(enemy, spell.Delay); var midpoint = (enemyPred.CastPosition + targetPred.CastPosition) / 2; var startpos = midpoint + Vector3.Normalize(enemyPred.CastPosition - targetPred.CastPosition) * midPointRange; var endPos = midpoint - Vector3.Normalize(enemyPred.CastPosition - targetPred.CastPosition) * midPointRange; Geometry.Polygon.Rectangle rec1 = new Geometry.Polygon.Rectangle(startpos, endPos, spell.Width); if (!rec1.Points.Exists(Util.IsWall) && Player.CountEnemiesInRange(spell.Range + spell2.Range) > 2) { //loop 3 var target3 = target; var enemy1 = enemy; foreach (var enemy2 in ObjectManager.Get<Obj_AI_Hero>().Where(x => x.IsValidTarget(spell.Range + spell2.Range) && x.NetworkId != target3.NetworkId && x.NetworkId != enemy1.NetworkId && x.Distance(target3.Position) < spell2.Range)) { var enemy2Pred = Prediction.GetPrediction(enemy2, spell.Delay); Object[] obj = Util.VectorPointProjectionOnLineSegment(startpos.To2D(), endPos.To2D(), enemy2Pred.CastPosition.To2D()); var isOnseg = (bool)obj[2]; var pointLine = (Vector2)obj[1]; if (pointLine.Distance(enemy2Pred.CastPosition.To2D()) < spell.Width && isOnseg) { hit++; } } } if (hit > maxHit && hit > 1 && !rec1.Points.Exists(Util.IsWall)) { maxHit = hit; start = startpos; end = endPos; } } } if (maxHit >= 2) { Vector2 wts = Drawing.WorldToScreen(Player.Position); Drawing.DrawText(wts[0], wts[1], Color.Wheat, "Hit: " + maxHit); Geometry.Polygon.Rectangle rec1 = new Geometry.Polygon.Rectangle(start, end, spell.Width); rec1.Draw(Color.Blue, 4); } else { //-------------------------------Single--------------------------- var target = TargetSelector.GetTarget(spell.Range + spell2.Range, TargetSelector.DamageType.Magical); if (target == null) return; var vector1 = Player.ServerPosition + Vector3.Normalize(target.ServerPosition - Player.ServerPosition) * (spell.Range * extraPrerange); var pred = Prediction.GetPrediction(target, spell.Delay); Geometry.Polygon.Rectangle rec1 = new Geometry.Polygon.Rectangle(vector1, vector1.Extend(pred.CastPosition, spell2.Range), spell.Width); if (Player.ServerPosition.Distance(target.ServerPosition) < spell.Range) { vector1 = pred.CastPosition.Extend(target.ServerPosition, spell2.Range * .3f); Geometry.Polygon.Rectangle rec2 = new Geometry.Polygon.Rectangle(vector1, vector1.Extend(pred.CastPosition, spell2.Range), spell.Width); if ((!rec2.Points.Exists(Util.IsWall) || !wallCheck) && pred.Hitchance >= HitChance.Medium && target.IsMoving) { Vector2 wts = Drawing.WorldToScreen(Player.Position); Drawing.DrawText(wts[0], wts[1], Color.Wheat, "Hit: " + 1); rec2.Draw(Color.Blue, 4); } } else if (!rec1.Points.Exists(Util.IsWall) || !wallCheck) { //wall check if (pred.Hitchance >= HitChance.High) { Vector2 wts = Drawing.WorldToScreen(Player.Position); Drawing.DrawText(wts[0], wts[1], Color.Wheat, "Hit: " + 1); rec1.Draw(Color.Blue, 4); } } } }
protected override void Drawing_OnDraw(EventArgs args) { if (Menu.Item("Draw_Disabled", true).GetValue <bool>()) { return; } if (Menu.Item("Draw_Q", true).GetValue <bool>()) { if (Q.Level > 0) { Render.Circle.DrawCircle(Player.Position, Q.Range, Q.IsReady() ? Color.Green : Color.Red); } } if (Menu.Item("Draw_QE", true).GetValue <bool>()) { if (Q.Level > 0 && E.Level > 0) { Render.Circle.DrawCircle(Player.Position, SpellManager.QE.Range, Q.IsReady() && E.IsReady() ? Color.Green : Color.Red); } } if (Menu.Item("Draw_W", true).GetValue <bool>()) { if (W.Level > 0) { Render.Circle.DrawCircle(Player.Position, W.Range, W.IsReady() ? Color.Green : Color.Red); } } if (Menu.Item("Draw_E", true).GetValue <bool>()) { if (E.Level > 0) { Render.Circle.DrawCircle(Player.Position, E.Range, E.IsReady() ? Color.Green : Color.Red); } } if (Menu.Item("Draw_R", true).GetValue <bool>()) { if (R.Level > 0) { Render.Circle.DrawCircle(Player.Position, R.Range, R.IsReady() ? Color.Green : Color.Red); } } if (Get_Current_Orb() != null) { Render.Circle.DrawCircle(Get_Current_Orb().Position, W.Width, Color.Green); } if (Menu.Item("Draw_QE_Line", true).GetValue <bool>()) { var qeTarget = TargetSelector.GetTarget(SpellManager.QE.Range, TargetSelector.DamageType.Magical); if (qeTarget == null || !Q.IsReady() || !E.IsReady()) { return; } var qTarget = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Magical); if (qTarget.IsValidTarget(E.Range)) { var pred = Q.GetPrediction(qTarget); if (pred.Hitchance >= HitChance.VeryHigh) { var poly = new Geometry.Polygon.Rectangle(pred.CastPosition, Player.ServerPosition.Extend(pred.CastPosition, SpellManager.QE.Range), SpellManager.QE.Width); poly.Draw(Color.LawnGreen); var line = new Geometry.Polygon.Line(Player.Position, Player.ServerPosition.Extend(pred.CastPosition, SpellManager.QE.Range)); line.Draw(Color.LawnGreen); Render.Circle.DrawCircle(pred.CastPosition, Q.Width / 2, Color.Aquamarine); Render.Circle.DrawCircle(Player.ServerPosition.Extend(pred.CastPosition, SpellManager.QE.Range), Q.Width / 2, Color.SpringGreen); } } else { var startPos = Player.ServerPosition.To2D().Extend(qeTarget.ServerPosition.To2D(), Q.Range).To3D(); var rangeLeft = 100 + (-0.6 * Player.Distance(startPos) + 950); var endPos = startPos + Vector3.Normalize(startPos - Player.ServerPosition) * (float)rangeLeft; SpellManager.QE.From = startPos; SpellManager.QE.Delay = E.Delay + Q.Range / E.Speed; var qePred = SpellManager.QE.GetPrediction(qeTarget); var poly = new Geometry.Polygon.Rectangle(startPos, endPos, SpellManager.QE.Width); if (!poly.IsInside(qePred.UnitPosition)) { return; } if (qePred.Hitchance >= HitChance.VeryHigh) { poly.Draw(Color.LawnGreen); var line = new Geometry.Polygon.Line(Player.Position, endPos); line.Draw(Color.LawnGreen); Render.Circle.DrawCircle(startPos, Q.Width / 2, Color.Aquamarine); Render.Circle.DrawCircle(endPos, Q.Width / 2, Color.SpringGreen); } } } if (Menu.Item("Draw_R_Killable", true).GetValue <bool>() && R.IsReady()) { foreach (var wts in from unit in ObjectManager.Get <Obj_AI_Hero>().Where(x => x.IsValidTarget(2000) && !x.IsDead && x.IsEnemy).OrderByDescending(GetComboDamage) let health = unit.Health + unit.HPRegenRate + 10 where Get_Ult_Dmg(unit) > health select Drawing.WorldToScreen(unit.Position)) { Drawing.DrawText(wts[0] - 20, wts[1], Color.White, "KILL!!!"); } } }
public static void DrawBestLine(Spell spell, Spell spell2, int midPointRange, float extraPrerange = 1, bool wallCheck = true) { //---------------------------------MEC---------------------------- int maxHit = 0; Vector3 start = Vector3.Zero; Vector3 end = Vector3.Zero; //loop one foreach (var target in ObjectManager.Get <Obj_AI_Hero>().Where(x => x.IsValidTarget(spell.Range))) { //loop 2 var target1 = target; var target2 = target; foreach (var enemy in ObjectManager.Get <Obj_AI_Hero>().Where(x => x.IsValidTarget(spell.Range + spell2.Range) && x.NetworkId != target1.NetworkId && x.Distance(target1.Position) < spell2.Range - 100).OrderByDescending(x => x.Distance(target2.Position))) { int hit = 2; var targetPred = Prediction.GetPrediction(target, spell.Delay); var enemyPred = Prediction.GetPrediction(enemy, spell.Delay); var midpoint = (enemyPred.CastPosition + targetPred.CastPosition) / 2; var startpos = midpoint + Vector3.Normalize(enemyPred.CastPosition - targetPred.CastPosition) * midPointRange; var endPos = midpoint - Vector3.Normalize(enemyPred.CastPosition - targetPred.CastPosition) * midPointRange; Geometry.Polygon.Rectangle rec1 = new Geometry.Polygon.Rectangle(startpos, endPos, spell.Width); if (!rec1.Points.Exists(Util.IsWall) && Player.CountEnemiesInRange(spell.Range + spell2.Range) > 2) { //loop 3 var target3 = target; var enemy1 = enemy; foreach (var enemy2 in ObjectManager.Get <Obj_AI_Hero>().Where(x => x.IsValidTarget(spell.Range + spell2.Range) && x.NetworkId != target3.NetworkId && x.NetworkId != enemy1.NetworkId && x.Distance(target3.Position) < spell2.Range)) { var enemy2Pred = Prediction.GetPrediction(enemy2, spell.Delay); Object[] obj = Util.VectorPointProjectionOnLineSegment(startpos.To2D(), endPos.To2D(), enemy2Pred.CastPosition.To2D()); var isOnseg = (bool)obj[2]; var pointLine = (Vector2)obj[1]; if (pointLine.Distance(enemy2Pred.CastPosition.To2D()) < spell.Width && isOnseg) { hit++; } } } if (hit > maxHit && hit > 1 && !rec1.Points.Exists(Util.IsWall)) { maxHit = hit; start = startpos; end = endPos; } } } if (maxHit >= 2) { Vector2 wts = Drawing.WorldToScreen(Player.Position); Drawing.DrawText(wts[0], wts[1], Color.Wheat, "Hit: " + maxHit); Geometry.Polygon.Rectangle rec1 = new Geometry.Polygon.Rectangle(start, end, spell.Width); rec1.Draw(Color.Blue, 4); } else { //-------------------------------Single--------------------------- var target = TargetSelector.GetTarget(spell.Range + spell2.Range, TargetSelector.DamageType.Magical); if (target == null) { return; } var vector1 = Player.ServerPosition + Vector3.Normalize(target.ServerPosition - Player.ServerPosition) * (spell.Range * extraPrerange); var pred = Prediction.GetPrediction(target, spell.Delay); Geometry.Polygon.Rectangle rec1 = new Geometry.Polygon.Rectangle(vector1, vector1.Extend(pred.CastPosition, spell2.Range), spell.Width); if (Player.ServerPosition.Distance(target.ServerPosition) < spell.Range) { vector1 = pred.CastPosition.Extend(target.ServerPosition, spell2.Range * .3f); Geometry.Polygon.Rectangle rec2 = new Geometry.Polygon.Rectangle(vector1, vector1.Extend(pred.CastPosition, spell2.Range), spell.Width); if ((!rec2.Points.Exists(Util.IsWall) || !wallCheck) && pred.Hitchance >= HitChance.Medium && target.IsMoving) { Vector2 wts = Drawing.WorldToScreen(Player.Position); Drawing.DrawText(wts[0], wts[1], Color.Wheat, "Hit: " + 1); rec2.Draw(Color.Blue, 4); } } else if (!rec1.Points.Exists(Util.IsWall) || !wallCheck) { //wall check if (pred.Hitchance >= HitChance.High) { Vector2 wts = Drawing.WorldToScreen(Player.Position); Drawing.DrawText(wts[0], wts[1], Color.Wheat, "Hit: " + 1); rec1.Draw(Color.Blue, 4); } } } }
private static void Drawing_OnDraw_ShowEnemyMinionsUnderAllyTurret(EventArgs args) { return; var myTurret = ObjectManager.Get<Obj_AI_Turret>().Find(t => t.IsAlly && !t.IsDead && t.Distance(ObjectManager.Player.Position) < 1500); if (myTurret == null) { return; } Render.Circle.DrawCircle(myTurret.Position, 850, Color.Black); var enemy = HeroManager.Enemies.Find(t => !t.IsDead && t.Distance(myTurret) < 3000); if (enemy == null) { return; } var tt = enemy.ServerPosition.Extend(myTurret.Position, +550); var startpos = enemy.Position; var endpos = tt; var x = new LeagueSharp.Common.Geometry.Polygon.Rectangle(startpos, endpos, 145); x.Draw(Color.Blue, 3); var otherEnemyObjects = ObjectManager.Get<Obj_AI_Base>().Where(o => o.IsEnemy && !o.IsDead && o.Distance(myTurret) < 900 && o.NetworkId != enemy.NetworkId && o.Health < myTurret.TotalAttackDamage * 2); if (otherEnemyObjects.Count() < 2 && tt.Distance(myTurret.Position) < 1550) { Insec(); if (ObjectManager.Player.Position.Distance(InsecJumpPosition) < enemy.Position.Distance(InsecJumpPosition)) { R.CastOnUnit(enemy); } if (ObjectManager.Player.Position.Distance(InsecJumpPosition) < 200) { R.CastOnUnit(enemy); } } /* { Render.Circle.DrawCircle(otherEnemyObjects.Position, otherEnemyObjects.BoundingRadius, Color.Aqua); } foreach (var enemies in ObjectManager.Get<Obj_AI_Base>().Where(o => o.IsEnemy && !o.IsDead)) { } */ //var insecKickWaveDistance = 650; //if (enemy) //var myTurret = ObjectManager.Get<Obj_AI_Turret>().Find(t => t.IsAlly && !t.IsDead && t.Distance(ObjectManager.Player.Position) < 950); //var closesturretEnemy = HeroManager.Enemies.Find(t => !t.IsDead && t.Distance(enemy.Position) > 950); //if (closesturretEnemy != null) //{ // Render.Circle.DrawCircle(closesturretEnemy.Position, 150f, Color.Black); //} //foreach (var turret in ObjectManager.Get<Obj_AI_Turret>()) //{ //} }
private static void BardQ(AIHeroClient Target, bool Type, bool Draw = false) { // Type 0: no sturn / 1: only sturn // If Draw is true, return draw /* return target1, target2, type */ Range1 = new LeagueSharp.Common.Geometry.Polygon.Rectangle(Player.Position, Player.Position.LSExtend(Target.Position, _Q.Range), _Q.Width); Range2 = null; if (Draw) Range1.Draw(Color.Red); cnt = 0; BardQTarget1 = Player; BardQTarget2 = Player; foreach (var item in ObjectManager.Get<Obj_AI_Base>().OrderBy(f => f.LSDistance(f.Position))) { if (item.LSDistance(Player.Position) < _Q.Range) if (item is AIHeroClient || item is Obj_AI_Minion) if (item.IsEnemy && !item.IsDead) { if (cnt == 2) break; if (cnt == 0 && Range1.IsInside(item.Position)) { BardQTarget1 = item; Range2 = new LeagueSharp.Common.Geometry.Polygon.Rectangle(Player.Position.LSExtend(BardQTarget1.Position, Player.LSDistance(BardQTarget1.Position)), Player.Position.LSExtend(BardQTarget1.Position, Player.LSDistance(BardQTarget1.Position) + 450), _Q.Width); if (Draw) Range2.Draw(Color.Yellow); cnt++; } if (cnt == 1 && Range2.IsInside(item.Position)) { BardQTarget2 = item; cnt++; } } } }
protected override void Drawing_OnDraw(EventArgs args) { if (menu.Item("Draw_Disabled", true).GetValue<bool>()) return; if (menu.Item("Draw_Q", true).GetValue<bool>()) if (Q.Level > 0) Render.Circle.DrawCircle(Player.Position, Q.Range, Q.IsReady() ? Color.Green : Color.Red); if (menu.Item("Draw_QE", true).GetValue<bool>()) if (Q.Level > 0 && E.Level > 0) Render.Circle.DrawCircle(Player.Position, _qe.Range, Q.IsReady() && E.IsReady() ? Color.Green : Color.Red); if (menu.Item("Draw_W", true).GetValue<bool>()) if (W.Level > 0) Render.Circle.DrawCircle(Player.Position, W.Range, W.IsReady() ? Color.Green : Color.Red); if (menu.Item("Draw_E", true).GetValue<bool>()) if (E.Level > 0) Render.Circle.DrawCircle(Player.Position, E.Range, E.IsReady() ? Color.Green : Color.Red); if (menu.Item("Draw_R", true).GetValue<bool>()) if (R.Level > 0) Render.Circle.DrawCircle(Player.Position, R.Range, R.IsReady() ? Color.Green : Color.Red); if (Get_Current_Orb() != null) Render.Circle.DrawCircle(Get_Current_Orb().Position, W.Width, Color.Green); //draw EQ if (menu.Item("Draw_QE_Line", true).GetValue<bool>()) { var qeTarget = TargetSelector.GetTarget(_qe.Range, TargetSelector.DamageType.Magical); if (qeTarget == null || !Q.IsReady() || !E.IsReady()) return; var qTarget = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Magical); if (qTarget.IsValidTarget(E.Range)) { var pred = Q.GetPrediction(qTarget); if (pred.Hitchance >= HitChanceManager.GetQEHitChance("Combo")) { var poly = new Geometry.Polygon.Rectangle(pred.CastPosition, Player.ServerPosition.Extend(pred.CastPosition, _qe.Range), _qe.Width); poly.Draw(Color.LawnGreen); var line = new Geometry.Polygon.Line(Player.Position, Player.ServerPosition.Extend(pred.CastPosition, _qe.Range)); line.Draw(Color.LawnGreen); Render.Circle.DrawCircle(pred.CastPosition, Q.Width / 2, Color.Aquamarine); Render.Circle.DrawCircle(Player.ServerPosition.Extend(pred.CastPosition, _qe.Range), Q.Width / 2, Color.SpringGreen); } } else { var startPos = Player.ServerPosition.To2D().Extend(qeTarget.ServerPosition.To2D(), Q.Range).To3D(); double rangeLeft = 100 + (-0.6 * Player.Distance(startPos) + 950); var endPos = startPos + Vector3.Normalize(startPos - Player.ServerPosition) * (float)rangeLeft; _qe.From = startPos; _qe.Delay = E.Delay + Q.Range / E.Speed; var qePred = _qe.GetPrediction(qeTarget); var poly = new Geometry.Polygon.Rectangle(startPos, endPos, _qe.Width); if (!poly.IsInside(qePred.UnitPosition)) return; if (qePred.Hitchance >= HitChanceManager.GetQEHitChance("Combo")) { poly.Draw(Color.LawnGreen); var line = new Geometry.Polygon.Line(Player.Position, endPos); line.Draw(Color.LawnGreen); Render.Circle.DrawCircle(startPos, Q.Width/2, Color.Aquamarine); Render.Circle.DrawCircle(endPos, Q.Width/2, Color.SpringGreen); } } } if (menu.Item("Draw_R_Killable", true).GetValue<bool>() && R.IsReady()) { foreach (var wts in from unit in ObjectManager.Get<Obj_AI_Hero>().Where(x => x.IsValidTarget(2000) && !x.IsDead && x.IsEnemy).OrderByDescending(GetComboDamage) let health = unit.Health + unit.HPRegenRate + 10 where Get_Ult_Dmg(unit) > health select Drawing.WorldToScreen(unit.Position)) { Drawing.DrawText(wts[0] - 20, wts[1], Color.White, "KILL!!!"); } } }
private void Cast_QE(string source, Obj_AI_Base target = null) { var qeTarget = TargetSelector.GetTarget(_qe.Range, TargetSelector.DamageType.Magical); if (qeTarget == null || !Q.IsReady() || !E.IsReady()) return; var qTarget = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Magical); if (qTarget.IsValidTarget(E.Range)) { var pred = Q.GetPrediction(qTarget); if (pred.Hitchance >= HitChanceManager.GetQEHitChance(source)) { Q.Cast(pred.CastPosition); W.LastCastAttemptT = Utils.TickCount + 500; _qe.LastCastAttemptT = Utils.TickCount; } } else { var startPos = Player.ServerPosition.To2D().Extend(qeTarget.ServerPosition.To2D(), Q.Range).To3D(); double rangeLeft = 100 + (-0.6*Player.Distance(startPos) + 950); var endPos = startPos + Vector3.Normalize(startPos - Player.ServerPosition)*(float) rangeLeft; _qe.From = startPos; _qe.Delay = E.Delay + Q.Range / E.Speed; var qePred = _qe.GetPrediction(qeTarget); var poly = new Geometry.Polygon.Rectangle(startPos, endPos, _qe.Width); if (!poly.IsInside(qePred.UnitPosition)) return; poly.Draw(Color.LawnGreen); if (qePred.Hitchance >= HitChanceManager.GetQEHitChance(source)) { Q.Cast(startPos); W.LastCastAttemptT = Utils.TickCount + 500; _qe.LastCastAttemptT = Utils.TickCount; } } }