private static float TotalDmg(Obj_AI_Base enemy, bool useQ, bool useE, bool useR, bool qRange) { var qaaDmg = new Double[] { 20, 40, 60, 80, 100 }; var damage = 0d; var rTicks = RMenu["rTicks"].GetValue <MenuSlider>(); bool inQRange = ((qRange && AutoAttack.InAutoAttackRange(enemy)) || qRange == false); //Base Q damage if (useQ && Q.IsReady() && inQRange) { damage += player.GetSpellDamage(enemy, SpellSlot.Q); damage += Damage.CalculateDamage(player, enemy, DamageType.Magical, qaaDmg[Q.Level - 1] + 0.5 * player.TotalMagicalDamage + player.TotalAttackDamage); } // Q damage on AA if (useQ && !Q.IsReady() && player.HasBuff("viktorpowertransferreturn") && inQRange) { damage += Damage.CalculateDamage(player, enemy, DamageType.Magical, qaaDmg[Q.Level - 1] + 0.5 * player.TotalMagicalDamage + player.TotalAttackDamage); } //E damage if (useE && E.IsReady()) { if (player.HasBuff("viktoreaug") || player.HasBuff("viktorqeaug") || player.HasBuff("viktorqweaug")) { damage += player.GetSpellDamage(enemy, SpellSlot.E, LeagueSharp.Data.Enumerations.DamageStage.Detonation); } else { damage += player.GetSpellDamage(enemy, SpellSlot.E); } } //R damage + 2 ticks if (useR && R.Level > 0 && R.IsReady() && R.Instance.Name == "ViktorChaosStorm") { damage += Damage.GetSpellDamage(player, enemy, SpellSlot.R, LeagueSharp.Data.Enumerations.DamageStage.DamagePerSecond) * rTicks; damage += Damage.GetSpellDamage(player, enemy, SpellSlot.R); } // Ludens Echo damage if (Items.HasItem(3285)) { damage += Damage.CalculateDamage(player, enemy, DamageType.Magical, 100 + player.FlatMagicDamageMod * 0.1); } //sheen damage if (Items.HasItem(3057)) { damage += Damage.CalculateDamage(player, enemy, DamageType.Physical, 0.5 * player.BaseAttackDamage); } //lich bane dmg if (Items.HasItem(3100)) { damage += Damage.CalculateDamage(player, enemy, DamageType.Magical, 0.5 * player.FlatMagicDamageMod + 0.75 * player.BaseAttackDamage); } return((float)damage); }
private static void HarassLogic() { var QTarget = GetTarget(bonusRange() + 60, DamageType.Physical); var WTarget = GetTarget(W.Range, W.DamageType); if (CheckTarget(QTarget) && Q.IsReady() && Menu["Q"]["HarassQ"].GetValue <MenuSliderButton>().BValue) { if (!JinxQ && (!AutoAttack.InAutoAttackRange(QTarget) || QTarget.CountEnemyHeroesInRange(250) > 2) && Variables.Orbwalker.GetTarget() == null) { var Distance = GetRealDistance(QTarget); if (Player.ManaPercent >= Menu["Q"]["HarassQ"].GetValue <MenuSliderButton>().SValue || Player.GetAutoAttackDamage(QTarget) * 3 > QTarget.Health) { Q.Cast(); } else if (!Player.IsWindingUp && Variables.Orbwalker.CanAttack && !Player.IsUnderEnemyTurret() && Distance < bonusRange() + QTarget.BoundingRadius + Player.BoundingRadius) { Q.Cast(); } } } if (!JinxQ && !Player.IsWindingUp && Variables.Orbwalker.GetTarget() == null && Q.IsReady()) { if (Variables.Orbwalker.CanAttack && Menu["Q"]["FarmQout"] && Player.Mana > R.Instance.ManaCost + W.Instance.ManaCost + E.Instance.ManaCost + 10) { foreach (var minion in GetMinions(Player.Position, bonusRange() + 30).Where(minion => !AutoAttack.InAutoAttackRange(minion) && GetRealPowPowRange(minion) < GetRealDistance(minion) && bonusRange() < GetRealDistance(minion))) { var hpPred = GetHealthPrediction(minion, 400, 70); if (hpPred < Player.GetAutoAttackDamage(minion) * 1.1 && hpPred > 4) { Variables.Orbwalker.ForceTarget.Distance(minion); Q.Cast(); return; } } } } if (Player.CountEnemyHeroesInRange(bonusRange()) == 0) { if (Menu["W"]["HarassW"].GetValue <MenuSliderButton>().BValue&& !Player.IsWindingUp && CanHarras()) { if (CheckTarget(WTarget) && W.IsReady()) { foreach (var enemy in GameObjects.EnemyHeroes.Where(enemy => enemy.IsValidTarget(W.Range) && Menu["W"]["WList"][enemy.ChampionName.ToLower()].GetValue <MenuBool>())) { if (Player.ManaPercent >= Menu["W"]["HarassW"].GetValue <MenuSliderButton>().SValue) { CastSpell(W, enemy); } } } } } }
private static void LaneclearLogic() { var QTarget = GetTarget(bonusRange() + 60, DamageType.Physical); if (!JinxQ && !Player.IsWindingUp && Variables.Orbwalker.GetTarget() == null && Variables.Orbwalker.CanAttack) { if (Menu["Q"]["FarmQout"] && Player.Mana > R.Instance.ManaCost + W.Instance.ManaCost + E.Instance.ManaCost + 10) { foreach (var minion in GetMinions(Player.Position, bonusRange() + 30).Where(minion => !AutoAttack.InAutoAttackRange(minion) && GetRealPowPowRange(minion) < GetRealDistance(minion) && bonusRange() < GetRealDistance(minion))) { var hpPred = GetHealthPrediction(minion, 400, 70); if (hpPred < Player.GetAutoAttackDamage(minion) * 1.1 && hpPred > 4) { Q.Cast(minion); return; } } } } if (QTarget.IsValidTarget()) { if (!JinxQ && (!AutoAttack.InAutoAttackRange(QTarget) || QTarget.CountEnemyHeroesInRange(250) > 2) && Variables.Orbwalker.GetTarget() == null) { var Distance = GetRealDistance(QTarget); if (!Player.IsWindingUp && Variables.Orbwalker.CanAttack && Q.IsReady() && Menu["Q"]["LaneClearQ"].GetValue <MenuSliderButton>().BValue) { if (Player.ManaPercent >= Menu["Q"]["LaneClearQ"].GetValue <MenuSliderButton>().SValue&& !Player.IsUnderEnemyTurret() && Distance < bonusRange() + QTarget.BoundingRadius + Player.BoundingRadius) { Q.Cast(); } } } } }
private static void ComboLogic() { var QTarget = GetTarget(bonusRange() + 60, DamageType.Physical); var WTarget = GetTarget(W.Range, W.DamageType); var ETarget = GetTarget(E.Range, E.DamageType); if (QTarget.IsValidTarget() && Menu["Q"]["ComboQ"] && Q.IsReady()) { if (!JinxQ && (!AutoAttack.InAutoAttackRange(QTarget) || QTarget.CountEnemyHeroesInRange(250) > 2) && Variables.Orbwalker.GetTarget() == null) { var distance = GetRealDistance(QTarget); if (Player.Mana > R.Instance.ManaCost + W.Instance.ManaCost + 10 || Player.GetAutoAttackDamage(QTarget) * 3 > QTarget.Health) { Q.Cast(); } } } else if (!JinxQ && Player.Mana > R.Instance.ManaCost + W.Instance.ManaCost + 20 && Player.CountEnemyHeroesInRange(2000) > 0) { Q.Cast(); } else if (JinxQ && Player.Mana < R.Instance.ManaCost + W.Instance.ManaCost + 20) { Q.Cast(); } else if (JinxQ && Player.CountEnemyHeroesInRange(2000) == 0) { Q.Cast(); } if (Player.CountEnemyHeroesInRange(bonusRange()) == 0) { if (Menu["W"]["ComboW"] && W.IsReady()) { if (Player.Mana > R.Instance.ManaCost + W.Instance.ManaCost + 10) { foreach (var enemy in GameObjects.EnemyHeroes.Where(enemy => enemy.IsValidTarget(W.Range) && GetRealDistance(enemy) > bonusRange()).OrderBy(enemy => enemy.Health)) { CastSpell(W, enemy); } } } } if (Player.IsMoving && Menu["E"]["ComboE"] && Player.Mana > R.Instance.ManaCost + E.Instance.ManaCost + W.Instance.ManaCost) { if (CheckTarget(ETarget) && E.GetPrediction(ETarget).CastPosition.Distance(ETarget.Position) > 200) { E.CastIfWillHit(ETarget, 2); if (ETarget.HasBuffOfType(BuffType.Slow) && Menu["E"]["SlowE"]) { CastSpell(E, ETarget); } if (IsMovingInSameDirection(Player, ETarget)) { CastSpell(E, ETarget); } } } }
private static void OnUpdate(EventArgs args) { if (Player.IsDead && !Player.IsWindingUp) { return; } Killsteal(); JungleclearLogic(); ELogic(); switch (Variables.Orbwalker.ActiveMode) { case OrbwalkingMode.Combo: ComboLogic(); break; case OrbwalkingMode.Hybrid: HarassLogic(); break; case OrbwalkingMode.LaneClear: LaneclearLogic(); break; case OrbwalkingMode.LastHit: if (Menu["Q"]["LastHit"].GetValue <MenuSliderButton>().BValue&& Q.IsReady()) { var QTarget = GetMinions(Player.Position, bonusRange() + 30).Where(minion => !AutoAttack.InAutoAttackRange(minion) && GetRealPowPowRange(minion) < GetRealDistance(minion) && bonusRange() < GetRealDistance(minion)); foreach (var minion in QTarget) { var hpPred = GetHealthPrediction(minion, 400, 70); if (hpPred < Player.GetAutoAttackDamage(minion) * 1.1 && hpPred > 4 || Player.ManaPercent >= Menu["Q"]["LastHit"].GetValue <MenuSliderButton>().SValue) { Q.Cast(minion); } } } break; } }