public static void CastW(Obj_AI_Base target) { if (SpellSlot.W.IsReady() && target.IsValidTarget(W.Range) && !Util.MyHero.HasBuff("dravenfurybuff")) { var pred = E.GetPrediction(target); var damageI = target.GetBestCombo(); if (pred.HitChancePercent >= 20f && ((damageI.IsKillable && Extensions.Distance(Util.MyHero, target, true) < Extensions.Distance(Util.MyHero, pred.CastPosition, true)) || Extensions.Distance(Util.MyHero, target) >= 500f)) { Util.MyHero.Spellbook.CastSpell(SpellSlot.W); } } }
public static DamageResult GetBestCombo(this Obj_AI_Base target) { var q = new[] { true }; var w = SpellSlot.W.IsReady() ? new[] { false, true } : new[] { false }; var e = SpellSlot.E.IsReady() ? new[] { false, true } : new[] { false }; var r = SpellSlot.R.IsReady() ? new[] { false, true } : new[] { false }; if (target != null) { DamageResult damageI2; if (PredictedDamage.ContainsKey(target.NetworkId)) { var damageI = PredictedDamage[target.NetworkId]; if (Game.Time - damageI.Time <= RefreshTime) { return(PredictedDamage[target.NetworkId]); } bool[] best = { false, false, false, false }; var bestdmg = 0f; var bestmana = 0f; foreach (var r1 in r) { foreach (var q1 in q) { foreach (var w1 in w) { foreach (var e1 in e) { damageI2 = target.GetComboDamage(q1, w1, e1, r1); var d = damageI2.Damage; var m = damageI2.Mana; if (Util.MyHero.Mana >= m) { if (bestdmg >= target.TotalShieldHealth()) { if (d >= target.TotalShieldHealth() && (d < bestdmg || m < bestmana)) { bestdmg = d; bestmana = m; best = new[] { q1, w1, e1, r1 }; } } else { if (d >= bestdmg) { bestdmg = d; bestmana = m; best = new[] { q1, w1, e1, r1 }; } } } } } } } PredictedDamage[target.NetworkId] = new DamageResult(target, bestdmg, bestmana, best[0], best[1], best[2], best[3], Game.Time); return(PredictedDamage[target.NetworkId]); } damageI2 = target.GetComboDamage(SpellSlot.Q.IsReady(), SpellSlot.W.IsReady(), SpellSlot.E.IsReady(), SpellSlot.R.IsReady()); PredictedDamage[target.NetworkId] = new DamageResult(target, damageI2.Damage, damageI2.Mana, false, false, false, false, Game.Time - (Game.Ping * 2f) / 2000f); return(target.GetBestCombo()); } return(new DamageResult(null, 0, 0, false, false, false, false, 0)); }
public static DamageResult GetBestCombo(this Obj_AI_Base target) { var q = SpellSlot.Q.IsReady() ? new bool[] { false, true } : new bool[] { false }; var w = SpellSlot.W.IsReady() ? new bool[] { false, true } : new bool[] { false }; var e = SpellSlot.E.IsReady() ? new bool[] { false, true } : new bool[] { false }; var r = SpellSlot.R.IsReady() ? new bool[] { false, true } : new bool[] { false }; if (target.IsValidTarget()) { if (PredictedDamage.ContainsKey(target.NetworkId)) { var damageI = PredictedDamage[target.NetworkId]; if (Game.Time - damageI.Time <= RefreshTime) { return(PredictedDamage[target.NetworkId]); } else { bool[] best = new bool[] { SpellSlot.Q.IsReady(), SpellSlot.W.IsReady(), SpellSlot.E.IsReady(), SpellSlot.R.IsReady() }; var bestdmg = 0f; var bestmana = 0f; foreach (bool r1 in r) { foreach (bool q1 in q) { foreach (bool w1 in w) { foreach (bool e1 in e) { DamageResult damageI2 = target.GetComboDamage(q1, w1, e1, r1); float d = damageI2.Damage; float m = damageI2.Mana; if (Util.MyHero.Mana >= m) { if (bestdmg >= target.Health) { if (d >= target.Health && (d < bestdmg || m < bestmana)) { bestdmg = d; bestmana = m; best = new bool[] { q1, w1, e1, r1 }; } } else { if (d >= bestdmg) { bestdmg = d; bestmana = m; best = new bool[] { q1, w1, e1, r1 }; } } } } } } } PredictedDamage[target.NetworkId] = new DamageResult(target, bestdmg, bestmana, best[0], best[1], best[2], best[3], Game.Time); return(PredictedDamage[target.NetworkId]); } } else { var damageI2 = target.GetComboDamage(SpellSlot.Q.IsReady(), SpellSlot.W.IsReady(), SpellSlot.R.IsReady(), SpellSlot.R.IsReady()); PredictedDamage[target.NetworkId] = new DamageResult(target, damageI2.Damage, damageI2.Mana, false, false, false, false, Game.Time - (Game.Ping * 2) / 2000); return(target.GetBestCombo()); } } return(new DamageResult(target, 0, 0, false, false, false, false, 0)); }
public static void CastW(Obj_AI_Base target) { if (SpellSlot.W.IsReady() && target.IsValidTarget(W.Range) && !Util.MyHero.HasBuff("dravenfurybuff")) { var pred = E.GetPrediction(target); var damageI = target.GetBestCombo(); if (pred.HitChancePercent >= 20f && ((damageI.IsKillable && Util.MyHero.Distance(target, true) < Util.MyHero.Distance(pred.CastPosition, true)) || Util.MyHero.Distance(target) >= 500f)) { Util.MyHero.Spellbook.CastSpell(SpellSlot.W); } } }