private void CastSpell(SpellBase QWER, AIHeroClient target, int HitChanceNum) { QWER.CastIfHitchanceEquals(target, (EloBuddy.SDK.Enumerations.HitChance)HitChanceNum, true); return; //HitChance 0 - 2 // example CastSpell(Q, ts, 2); var poutput = QWER.GetPrediction(target); var col = poutput.CollisionObjects.Count(ColObj => ColObj.IsEnemy && ColObj.IsMinion && !ColObj.IsDead); if (target.IsDead || col > 0 || target.Path.Count() > 1) { return; } if ((target.Path.Count() == 0 && target.Position == target.ServerPosition) || target.HasBuff("Recall")) { QWER.Cast(poutput.CastPosition); return; } if (HitChanceNum == 0) { QWER.Cast(target); } else if (HitChanceNum == 1) { if ((int)poutput.HitChance > 4) { QWER.Cast(poutput.CastPosition); } } else if (HitChanceNum == 2) { List <Vector2> waypoints = target.GetWaypoints(); if (waypoints.Last().To3D().Distance(poutput.CastPosition) > QWER.Width() && (int)poutput.HitChance == 5) { if (waypoints.Last().To3D().Distance(player.Position) <= target.Distance(player.Position) || (target.Path.Count() == 0 && target.Position == target.ServerPosition)) { if (player.Distance(target.ServerPosition) < QWER.Range - (poutput.CastPosition.Distance(target.ServerPosition) + target.BoundingRadius)) { QWER.Cast(poutput.CastPosition); } } else if ((int)poutput.HitChance == 5) { QWER.Cast(poutput.CastPosition); } } } else if (HitChanceNum == 3) { List <Vector2> waypoints = target.GetWaypoints(); float SiteToSite = ((target.MoveSpeed * QWER.CastDelay) + (player.Distance(target.ServerPosition) / QWER.Speed()) - QWER.Width()) * 6; float BackToFront = ((target.MoveSpeed * QWER.CastDelay) + (player.Distance(target.ServerPosition) / QWER.Speed())); if (player.Distance(waypoints.Last().To3D()) < SiteToSite || player.Distance(target.Position) < SiteToSite) { QWER.CastIfHitchanceEquals(target, EloBuddy.SDK.Enumerations.HitChance.High, true); } else if ((target.ServerPosition.Distance(waypoints.Last().To3D()) > SiteToSite || Math.Abs(player.Distance(waypoints.Last().To3D()) - player.Distance(target.Position)) > BackToFront)) { if (waypoints.Last().To3D().Distance(player.Position) <= target.Distance(player.Position)) { if (player.Distance(target.ServerPosition) < QWER.Range - (poutput.CastPosition.Distance(target.ServerPosition))) { QWER.Cast(poutput.CastPosition); } } else { QWER.Cast(poutput.CastPosition); } } } else if (HitChanceNum == 4 && (int)poutput.HitChance > 4) { List <Vector2> waypoints = target.GetWaypoints(); float SiteToSite = ((target.MoveSpeed * QWER.CastDelay) + (player.Distance(target.ServerPosition) / QWER.Speed()) - QWER.Width()) * 6; float BackToFront = ((target.MoveSpeed * QWER.CastDelay) + (player.Distance(target.ServerPosition) / QWER.Speed())); if (player.Distance(waypoints.Last().To3D()) < SiteToSite || player.Distance(target.Position) < SiteToSite) { QWER.CastIfHitchanceEquals(target, EloBuddy.SDK.Enumerations.HitChance.High, true); } else if ((target.ServerPosition.Distance(waypoints.Last().To3D()) > SiteToSite || Math.Abs(player.Distance(waypoints.Last().To3D()) - player.Distance(target.Position)) > BackToFront)) { if (waypoints.Last().To3D().Distance(player.Position) <= target.Distance(player.Position)) { if (player.Distance(target.ServerPosition) < QWER.Range - (poutput.CastPosition.Distance(target.ServerPosition))) { QWER.Cast(poutput.CastPosition); } } else { QWER.Cast(poutput.CastPosition); } } } }