public static void CastSpell(Spell QWER, Obj_AI_Base target) { if (target.Path.Count() > 1) { return; } var poutput = QWER.GetPrediction(target); if (ColFix && HitChanceNum == 4) { if (QWER.Collision && OktwCommon.GetCollision(target, QWER, false, true)) { return; } } else { var col = poutput.CollisionObjects.Count(ColObj => ColObj.IsEnemy && ColObj.IsMinion && !ColObj.IsDead); if (col > 0) { return; } } if ((int)poutput.Hitchance > 4 && target.HasBuffOfType(BuffType.Slow)) { QWER.Cast(poutput.CastPosition); return; } if (target.HasBuff("Recall") || poutput.Hitchance == HitChance.Immobile) { QWER.Cast(poutput.CastPosition); return; } if (poutput.Hitchance == HitChance.Dashing && QWER.Delay < 0.30f) { QWER.Cast(poutput.CastPosition); return; } if (HitChanceNum == 4) { if ((int)poutput.Hitchance < 5) { return; } if (NewWay && (int)poutput.Hitchance < 6) { return; } float fixRange; if (RangeFix) { fixRange = (target.MoveSpeed * (Player.ServerPosition.Distance(target.ServerPosition) / QWER.Speed + QWER.Delay)) / 2; } else { fixRange = 0; } if (target.IsWindingUp) { if (!tryAA) { return; } debug("IsWinding: "); if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange) { if (FastMode) { QWER.Cast(poutput.CastPosition); } else { QWER.Cast(target); } } return; } else if (target.Path.Count() == 0 && target.Position == target.ServerPosition) { if (IgnoreNoMove) { return; } debug("NotMove"); if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange) { if (FastMode) { QWER.Cast(poutput.CastPosition); } else { QWER.Cast(target); } } return; } var LastWaypiont = target.GetWaypoints().Last().To3D(); if (target.ServerPosition.Distance(Player.ServerPosition) < LastWaypiont.Distance(Player.ServerPosition) - fixRange) { if (FastMode) { QWER.Cast(poutput.CastPosition); } else { QWER.Cast(target); } debug("Run"); } else if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange) { float BackToFront = ((target.MoveSpeed * QWER.Delay) + (Player.Distance(target.ServerPosition) / QWER.Speed)); float SiteToSite = (BackToFront * 2) - QWER.Width; if ((target.ServerPosition.Distance(LastWaypiont) > SiteToSite || Math.Abs(Player.Distance(LastWaypiont) - Player.Distance(target.ServerPosition)) > BackToFront) || Player.Distance(target.ServerPosition) < SiteToSite + target.BoundingRadius * 2 || Player.Distance(LastWaypiont) < BackToFront) { if (FastMode) { QWER.Cast(poutput.CastPosition); } else { QWER.Cast(target); } debug("good 2"); } else { debug("ignore 2"); } } else { debug("fixed " + fixRange); } } else if (HitChanceNum == 3) { if ((int)poutput.Hitchance < 5) { return; } var fixRange = (target.MoveSpeed * (Player.ServerPosition.Distance(target.ServerPosition) / QWER.Speed + QWER.Delay)) / 2; if (QWER.Delay < 0.3 && (QWER.Speed > 1500 || QWER.Type == SkillshotType.SkillshotCircle) && (target.IsWindingUp || (int)poutput.Hitchance == 6)) { if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange) { QWER.CastIfHitchanceEquals(target, HitChance.High, true); } return; } if (target.Path.Count() == 0 && target.Position == target.ServerPosition && !target.IsWindingUp) { if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange) { QWER.CastIfHitchanceEquals(target, HitChance.High, true); } return; } var waypoints = target.GetWaypoints().Last <Vector2>().To3D(); float BackToFront = ((target.MoveSpeed * QWER.Delay) + (Player.Distance(target.ServerPosition) / QWER.Speed)); float SiteToSite = (BackToFront * 2) - QWER.Width; if ((target.ServerPosition.Distance(waypoints) > SiteToSite || Math.Abs(Player.Distance(waypoints) - Player.Distance(target.Position)) > BackToFront) || Player.Distance(target.Position) < SiteToSite + target.BoundingRadius * 2 || Player.Distance(waypoints) < BackToFront ) { if (waypoints.Distance(Player.Position) <= target.Distance(Player.Position)) { if (Player.Distance(target.ServerPosition) < QWER.Range - fixRange) { QWER.CastIfHitchanceEquals(target, HitChance.High, true); } } else { QWER.CastIfHitchanceEquals(target, HitChance.High, true); } } } else if (HitChanceNum == 0) { QWER.Cast(target, true); } 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 <Vector2>().To3D().Distance(poutput.CastPosition) > QWER.Width && (int)poutput.Hitchance > 4) { if (waypoints.Last <Vector2>().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); } } } }