private static bool CastQKill(Spell spell, Obj_AI_Base target) { var pred = spell.VPrediction(target, true, CollisionableObjects.YasuoWall); if (pred.Hitchance < Q.MinHitChance) { return false; } var col = pred.VCollision(CollisionableObjects.Heroes | CollisionableObjects.Minions); if (col.Count == 0 && Q.Cast(pred.CastPosition)) { return true; } return col.Count > 0 && (target.Type == GameObjectType.obj_AI_Hero ? target.Health + target.PhysicalShield : spell.GetHealthPrediction(target)) <= Q.GetDamage(target, Damage.DamageStage.SecondForm) && Q.Cast(pred.CastPosition); }
private static void KillSteal() { if (MainMenu["KillSteal"]["Q"] && Q.IsReady()) { var targets = Variables.TargetSelector.GetTargets(float.MaxValue, Q.DamageType) .Where(i => !IsKillByMark(i) && IsInRangeQ(i) && i.Health + i.PhysicalShield <= Q.GetDamage(i)) .ToList(); if (targets.Count > 0) { var spellQ = new Spell(Q.Slot, Q.Range).SetSkillshot(Q.Delay, Q.Width, Q.Speed, true, Q.Type); foreach (var target in targets) { spellQ.UpdateSourcePosition(); var pPred = spellQ.VPrediction(target, true, QColObjects); Prediction.PredictionOutput wPred = null; if (WShadowCanQ) { spellQ.UpdateSourcePosition(wShadow.ServerPosition, wShadow.ServerPosition); wPred = spellQ.VPrediction(target, true, QColObjects); } Prediction.PredictionOutput rPred = null; if (RShadowCanQ) { spellQ.UpdateSourcePosition(rShadow.ServerPosition, rShadow.ServerPosition); rPred = spellQ.VPrediction(target, true, QColObjects); } var pHitChance = pPred.Hitchance; var wHitChance = wPred?.Hitchance ?? HitChance.None; var rHitChance = rPred?.Hitchance ?? HitChance.None; var maxHit = (HitChance)Math.Max(Math.Max((int)wHitChance, (int)rHitChance), (int)pHitChance); if (maxHit >= Q.MinHitChance) { if (wPred != null && maxHit == wHitChance) { Q.Cast(wPred.CastPosition); } else if (rPred != null && maxHit == rHitChance) { Q.Cast(rPred.CastPosition); } else if (maxHit == pHitChance) { Q.Cast(pPred.CastPosition); } break; } if (target.Health + target.PhysicalShield > Q.GetDamage(target, Damage.DamageStage.SecondForm)) { continue; } if (wPred != null && wHitChance == HitChance.Collision && !wPred.CollisionObjects.Any(i => i.IsMe)) { Q.Cast(wPred.CastPosition); } else if (rPred != null && rHitChance == HitChance.Collision && !rPred.CollisionObjects.Any(i => i.IsMe)) { Q.Cast(rPred.CastPosition); } else if (pHitChance == HitChance.Collision && !pPred.CollisionObjects.Any(i => i.IsMe)) { Q.Cast(pPred.CastPosition); } } } } if (MainMenu["KillSteal"]["E"] && E.IsReady() && Variables.TargetSelector.GetTargets(float.MaxValue, E.DamageType) .Where(i => !IsKillByMark(i) && IsInRangeE(i)) .Any(i => i.Health + i.PhysicalShield <= E.GetDamage(i))) { E.Cast(); } }