/// <summary> /// Performs the orbwalking process on another <see cref="AttackableUnit" /> /// </summary> /// <param name="mode"><see cref="OrbwalkerMode" /> mode</param> /// <param name="target"><see cref="AttackableUnit" /> target</param> public void PerformMode(OrbwalkerMode mode, AttackableUnit target = null) { if (CanAttack()) { switch (mode) { case OrbwalkerMode.Combo: PerformModeCombo(target); return; case OrbwalkerMode.LaneClear: PerformModeLaneClear(target); return; case OrbwalkerMode.LaneFreeze: PerformModeLaneFreeze(); return; case OrbwalkerMode.LastHit: PerformModeLastHit(); return; case OrbwalkerMode.Mixed: PerformModeMixed(); return; } } if (mode != OrbwalkerMode.None && CanMove()) { MoveTo(Cursor.Position.ToVector3()); } }
/// <summary> /// The is the spell active method. /// </summary> /// <param name="spellSlot"> /// The spell slot. /// </param> /// <param name="orbwalkingMode"> /// The orbwalking mode. /// </param> /// <returns> /// <see cref="bool" /> /// </returns> private static bool IsSpellActive(SpellSlot spellSlot, OrbwalkerMode orbwalkingMode) { if (Orbwalker.Implementation.GetActiveMode() != orbwalkingMode) //slot { return(false); } try { var orbwalkerModeLower = Orbwalker.ModeName.ToLower(); var spellSlotNameLower = spellSlot.ToString().ToLower(); if (orbwalkerModeLower.Equals("lasthit") && !spellSlotNameLower.Equals("q") || orbwalkerModeLower.Equals("mixed") && spellSlotNameLower.Equals("e") || orbwalkerModeLower.Equals("combo") && spellSlotNameLower.Equals("e")) { return(false); } return(MyMenu.RootMenu[orbwalkerModeLower + spellSlotNameLower + "use"].Enabled && MyMenu.RootMenu[orbwalkerModeLower + spellSlotNameLower + "mana"].As <MenuSlider>().Value <= ObjectManager.GetLocalPlayer().ManaPercent()); } catch (Exception e) { Logging.AddEntry(LoggingEntryType.Error, "@SpellManager.cs: Can not get spell active state for slot {0} - {1}", spellSlot.ToString(), e); throw; } }
private static void PreliminaryQCheck(Obj_AI_Base target, OrbwalkerMode mode) { ////TODO Try to reset AA faster by doing Q against a wall if possible if (spells[SpellSlot.Q].IsEnabledAndReady(mode)) { if (VHRMenu["dz191.vhr.misc"]["dz191.vhr.misc.tumble"]["smartq"].GetValue <MenuBool>().Value&& GetQEPosition() != Vector3.Zero) { UseTumble(GetQEPosition(), target); DelayAction.Add( (int)(Game.Ping / 2f + spells[SpellSlot.Q].Delay * 1000 + 300f / 1200f + 50f), () => { if (!spells[SpellSlot.Q].IsReady()) { spells[SpellSlot.E].Cast(target); } }); } else { var QWallPosition = GetQWallPosition((Obj_AI_Hero)target); if (QWallPosition != Vector3.Zero) { Tumble(QWallPosition, target); } else { UseTumble(target); } } } }
public static bool IsEnabledAndReady(this Spell spell, OrbwalkerMode mode) { var modeString = mode.ToString().ToLowerInvariant(); var EnabledInMenu = VHR.VHRMenu[string.Format("dz191.vhr.{0}", modeString)][ string.Format("Use{0}", spell.Slot.GetStringFromSlot())].GetValue <MenuBool>().Value; var Ready = spell.IsReady(); var ManaManagerCheck = ObjectManager.Player.ManaPercent >= VHR.VHRMenu[string.Format("dz191.vhr.{0}", modeString)][ string.Format("{0}Mana", spell.Slot.GetStringFromSlot())].GetValue <MenuSlider>().Value; return(EnabledInMenu && Ready && ManaManagerCheck); }
/// <summary> /// Returns the attackable target that came out prioritized. /// </summary> /// <returns> /// <see cref="AttackableUnit" /> /// </returns> public static AttackableUnit GetTarget(OrbwalkerMode mode, float distance = -1f) { Obj_AI_Minion[] minions = null; Obj_AI_Minion cannon = null; distance = (System.Math.Abs(distance - (-1f)) < float.Epsilon) ? _player.GetRealAutoAttackRange() : distance; if (mode == OrbwalkerMode.LaneClear || mode == OrbwalkerMode.LaneFreeze || mode == OrbwalkerMode.LastHit || mode == OrbwalkerMode.Mixed) { minions = ObjectManager.Get <Obj_AI_Minion>().Where(m => m.IsValidTarget(distance)).ToArray(); cannon = minions.FirstOrDefault(m => m.SkinName.Contains("Siege") || m.SkinName.Contains("Super")); } if (mode == OrbwalkerMode.Combo) { var target = ObjectHandler.GetFast <Obj_AI_Hero>().OrderBy(t => t.Distance(_player.Position)).FirstOrDefault(); if (target.IsValidTarget(_player.GetRealAutoAttackRange())) { return(target); // TODO: Replace with target selector } } if (mode == OrbwalkerMode.LaneClear || mode == OrbwalkerMode.LastHit || mode == OrbwalkerMode.LaneFreeze || mode == OrbwalkerMode.Mixed) { // TODO: Add last hit here } if (mode == OrbwalkerMode.LaneClear) { if (minions != null) { if (!ShouldWait()) { if (cannon.IsValidTarget() && Health.GetHealthPrediction(cannon, (int)(_player.AttackDelay * 1000)) <= _player.TotalAttackDamage) { return(cannon); } return(minions.OrderBy(m => m.Health).FirstOrDefault()); } } } return(null); }
public MenuConfig() { var mainMenu = new Menu(string.Empty, $"Adept AIO - {Global.Player.ChampionName}", true); mainMenu.Attach(); Global.Orbwalker.Attach(mainMenu); FleeOrbwalkerMode = new OrbwalkerMode("Flee", KeyCode.A, null, Flee.OnKeyPressed); Global.Orbwalker.AddMode(FleeOrbwalkerMode); CondemnFlashOrbwalkerMode = new OrbwalkerMode("Condemn Flash", KeyCode.T, null, CondemnFlash.OnKeyPressed); Global.Orbwalker.AddMode(CondemnFlashOrbwalkerMode); Gapcloser.Attach(mainMenu, "Anti Gapcloser"); Combo = new Menu("VayneCombo", "Combo") { new MenuList("Q", "Q Mode", new[] { "After Auto", "Engage" }, 0), new MenuList("Mode", "Q To:", new[] { "Cursor", "Side" }, 1), new MenuBool("ToE", "Force Q To E Pos"), new MenuBool("Flash", "Flash E To Ally Turret"), new MenuBool("W", "Focus Targets With W Stacks"), new MenuBool("E", "Use E"), new MenuBool("R", "Use R"), new MenuBool("Killable", "Only Use R When Killable"), new MenuSlider("Count", "Use R If >= X Enemies Count", 2, 1, 5), new MenuSeperator("Whitelist") }; foreach (var enemy in GameObjects.EnemyHeroes) { Combo.Add(new MenuBool(enemy.ChampionName, $"Use E On: {enemy.ChampionName}")); } Harass = new Menu("VayneHarass", "Harass") { new MenuList("Q", "Q Mode", new[] { "After Auto", "Engage" }, 0), new MenuList("Mode", "Q To:", new[] { "Cursor", "Side" }, 1), new MenuBool("E", "Use E"), new MenuSeperator("Whitelist") }; foreach (var enemy in GameObjects.EnemyHeroes) { Harass.Add(new MenuBool(enemy.ChampionName, $"Use E On: {enemy.ChampionName}")); } LaneClear = new Menu("VayneLaneClear", "Lane") { new MenuList("Q", "Q Mode", new[] { "After Auto", "Engage", "Disabled" }, 0), new MenuList("QMode", "Q To:", new[] { "Cursor", "Side" }, 0), new MenuBool("Turret", "Q After AA Turret", false) }; JungleClear = new Menu("VayneJungle", "Jungle") { new MenuList("Q", "Q Mode", new[] { "After Auto", "Engage" }, 0), new MenuList("Mode", "Q To:", new[] { "Cursor", "Side" }, 0), new MenuBool("E", "Use E") }; Lasthit = new Menu("VayneLasthit", "Lasthit") { new MenuBool("Q", "Use Q After AA") }; Killsteal = new Menu("VayneKillsteal", "Killsteal") { new MenuBool("Q", "Q -> AA"), new MenuBool("E", "Use E") }; Misc = new Menu("VayneMisc", "Miscellaneous") { new MenuBool("Q", "Anti Gapcloser | Q"), new MenuBool("E", "Anti Gapcloser | E") }; Drawings = new Menu("VayneDrawManager", "DrawManager") { new MenuSlider("Segments", "Segments", 100, 10, 150).SetToolTip("Smoothness of the circles"), new MenuBool("Dmg", "Damage"), new MenuBool("Q", "Draw Q Range"), new MenuBool("Pred", "Draw E Prediction") }; foreach (var menu in new List <Menu> { Combo, Harass, LaneClear, JungleClear, Lasthit, Killsteal, Misc, Drawings, MenuShortcut.Credits }) { mainMenu.Add(menu); } }
private void Orbwalker_OnAction(object sender, LeagueSharp.SDK.Core.Orbwalker.OrbwalkerActionArgs e) { if (!Enable) { return; } if (e.Type == OrbwalkerType.AfterAttack && e.Target.IsValidTarget()) { if (Variables.TickCount - yellowtick <= 1500) { return; } if (Orb.ActiveMode == OrbwalkerMode.Orbwalk && comboqafterattack) { if (e.Target.IsValidTarget() && !e.Target.IsZombie) { var target = TargetSelector.GetTarget(Q.Range, DamageType.Magical); if (target.IsValidTarget() && !target.IsZombie) { Q.Cast(Q.GetPrediction(target).CastPosition); } } } if (Orb.ActiveMode == OrbwalkerMode.Hybrid && harassqafterattack && Player.ManaPercent >= harassmana) { if (e.Target.IsValidTarget() && !e.Target.IsZombie) { var target = TargetSelector.GetTarget(Q.Range, DamageType.Magical); if (target.IsValidTarget() && !target.IsZombie) { Q.Cast(Q.GetPrediction(target).CastPosition); } } } } var mode = new OrbwalkerMode[] { OrbwalkerMode.Hybrid, OrbwalkerMode.Orbwalk }; if (e.Type == OrbwalkerType.BeforeAttack) { if (IsPickingCard && mode.Contains(Orb.ActiveMode)) { e.Process = false; } else if (HasACard != "none" && !GameObjects.EnemyHeroes.Contains(e.Target) && Orb.ActiveMode == OrbwalkerMode.Hybrid) { e.Process = false; var target = TargetSelector.GetTarget(Player.GetRealAutoAttackRange(), DamageType.Magical); if (target.IsValidTarget() && !target.IsZombie) { Player.IssueOrder(GameObjectOrder.AttackUnit, target); } } else if (HasACard != "none" && HasRed && Orb.ActiveMode == OrbwalkerMode.LaneClear) { e.Process = false; IDictionary <Obj_AI_Minion, int> creeps = new Dictionary <Obj_AI_Minion, int>(); foreach (var x in GameObjects.EnemyMinions.Where(x => x.InAutoAttackRange())) { creeps.Add(x, GameObjects.EnemyMinions.Count(y => y.IsValidTarget() && y.Distance(x.Position) <= 300)); } foreach (var x in GameObjects.Jungle.Where(x => x.InAutoAttackRange())) { creeps.Add(x, GameObjects.Jungle.Count(y => y.IsValidTarget() && y.Distance(x.Position) <= 300)); } var minion = creeps.OrderByDescending(x => x.Value).FirstOrDefault(); Player.IssueOrder(GameObjectOrder.AttackUnit, minion.Key); } } if (e.Type == OrbwalkerType.OnAttack) { if (HasGold) { yellowtick = Variables.TickCount; } } }
public static void CastSpell(SpellSlot slot, OrbwalkerMode mode) { if (slot == SpellSlot.Unknown || ObjectManager.Player.Spellbook.CanUseSpell(slot) != SpellState.Ready) { return; } if (mode == OrbwalkerMode.LastHit || mode == OrbwalkerMode.None) { return; } var castType = GetSpellType(slot); if (castType == CastType.Unknow) { return; } if (slot == SpellSlot.Q) { if (mode == OrbwalkerMode.Combo) { if (MenuWrapper.Q.Combo.Enabled) { var target = TargetSelector.GetTarget(Q.Range); if (target != null && target.IsValidTarget(Q.Range)) { if (castType == CastType.SelfCast) { Q.Cast(); } else if (castType == CastType.Circle) { Q.CastIfHitchanceEquals(target, Q.MinHitChance); } else if (castType == CastType.Linear) { Q.CastIfHitchanceEquals(target, Q.MinHitChance); } } } } else if (mode == OrbwalkerMode.Harass) { if (MenuWrapper.Q.Harass.Enabled) { var target = TargetSelector.GetTarget(Q.Range); if (target != null && target.IsValidTarget(Q.Range)) { if (castType == CastType.SelfCast) { Q.Cast(); } else if (castType == CastType.Circle) { Q.CastIfHitchanceEquals(target, Q.MinHitChance); } else if (castType == CastType.Linear) { Q.CastIfHitchanceEquals(target, Q.MinHitChance); } } } } else if (mode == OrbwalkerMode.LaneClear) { if (MenuWrapper.Q.JungleClear.Enabled) { var target = GameObjects.Jungle.Where(x => x.IsValidTarget(Q.Range) && x.IsJungle()) .OrderByDescending(x => x.MaxHealth).FirstOrDefault(); if (target != null && target.IsValidTarget(Q.Range)) { if (castType == CastType.SelfCast) { Q.Cast(); } else if (castType == CastType.Circle) { Q.CastIfHitchanceEquals(target, HitChance.Medium); } else if (castType == CastType.Linear) { Q.CastIfHitchanceEquals(target, HitChance.Medium); } } } } } else if (slot == SpellSlot.W) { if (mode == OrbwalkerMode.Combo) { if (MenuWrapper.W.Combo.Enabled) { var target = TargetSelector.GetTarget(W.Range); if (target != null && target.IsValidTarget(W.Range)) { if (castType == CastType.SelfCast) { W.Cast(); } else if (castType == CastType.Circle) { W.CastIfHitchanceEquals(target, W.MinHitChance); } else if (castType == CastType.Linear) { W.CastIfHitchanceEquals(target, W.MinHitChance); } } } } else if (mode == OrbwalkerMode.Harass) { if (MenuWrapper.W.Harass.Enabled) { var target = TargetSelector.GetTarget(W.Range); if (target != null && target.IsValidTarget(W.Range)) { if (castType == CastType.SelfCast) { W.Cast(); } else if (castType == CastType.Circle) { W.CastIfHitchanceEquals(target, W.MinHitChance); } else if (castType == CastType.Linear) { W.CastIfHitchanceEquals(target, W.MinHitChance); } } } } else if (mode == OrbwalkerMode.LaneClear) { if (MenuWrapper.W.JungleClear.Enabled) { var target = GameObjects.Jungle.Where(x => x.IsValidTarget(W.Range) && x.IsJungle()) .OrderByDescending(x => x.MaxHealth).FirstOrDefault(); if (target != null && target.IsValidTarget(W.Range)) { if (castType == CastType.SelfCast) { W.Cast(); } else if (castType == CastType.Circle) { W.CastIfHitchanceEquals(target, HitChance.Medium); } else if (castType == CastType.Linear) { W.CastIfHitchanceEquals(target, HitChance.Medium); } } } } } else if (slot == SpellSlot.E) { if (mode == OrbwalkerMode.Combo) { if (MenuWrapper.E.Combo.Enabled) { var target = TargetSelector.GetTarget(E.Range); if (target != null && target.IsValidTarget(E.Range)) { if (castType == CastType.SelfCast) { E.Cast(); } else if (castType == CastType.Circle) { E.CastIfHitchanceEquals(target, E.MinHitChance); } else if (castType == CastType.Linear) { E.CastIfHitchanceEquals(target, E.MinHitChance); } } } } else if (mode == OrbwalkerMode.Harass) { if (MenuWrapper.E.Harass.Enabled) { var target = TargetSelector.GetTarget(E.Range); if (target != null && target.IsValidTarget(E.Range)) { if (castType == CastType.SelfCast) { E.Cast(); } else if (castType == CastType.Circle) { E.CastIfHitchanceEquals(target, E.MinHitChance); } else if (castType == CastType.Linear) { E.CastIfHitchanceEquals(target, E.MinHitChance); } } } } else if (mode == OrbwalkerMode.LaneClear) { if (MenuWrapper.E.JungleClear.Enabled) { var target = GameObjects.Jungle.Where(x => x.IsValidTarget(E.Range) && x.IsJungle()) .OrderByDescending(x => x.MaxHealth).FirstOrDefault(); if (target != null && target.IsValidTarget(E.Range)) { if (castType == CastType.SelfCast) { E.Cast(); } else if (castType == CastType.Circle) { E.CastIfHitchanceEquals(target, HitChance.Medium); } else if (castType == CastType.Linear) { E.CastIfHitchanceEquals(target, HitChance.Medium); } } } } } else if (slot == SpellSlot.R) { if (mode == OrbwalkerMode.Combo) { if (MenuWrapper.R.Combo.Enabled) { var target = TargetSelector.GetTarget(R.Range); if (target != null && target.IsValidTarget(R.Range)) { if (castType == CastType.SelfCast) { R.Cast(); } else if (castType == CastType.Circle) { R.CastIfHitchanceEquals(target, R.MinHitChance); } else if (castType == CastType.Linear) { R.CastIfHitchanceEquals(target, R.MinHitChance); } } } } else if (mode == OrbwalkerMode.Harass) { if (MenuWrapper.R.Harass.Enabled) { var target = TargetSelector.GetTarget(R.Range); if (target != null && target.IsValidTarget(R.Range)) { if (castType == CastType.SelfCast) { R.Cast(); } else if (castType == CastType.Circle) { R.CastIfHitchanceEquals(target, R.MinHitChance); } else if (castType == CastType.Linear) { R.CastIfHitchanceEquals(target, R.MinHitChance); } } } } else if (mode == OrbwalkerMode.LaneClear) { if (MenuWrapper.R.JungleClear.Enabled) { var target = GameObjects.Jungle.Where(x => x.IsValidTarget(R.Range) && x.IsJungle()) .OrderByDescending(x => x.MaxHealth).FirstOrDefault(); if (target != null && target.IsValidTarget(R.Range)) { if (castType == CastType.SelfCast) { R.Cast(); } else if (castType == CastType.Circle) { R.CastIfHitchanceEquals(target, HitChance.Medium); } else if (castType == CastType.Linear) { R.CastIfHitchanceEquals(target, HitChance.Medium); } } } } } }
private static void CastFlayPull(Obj_AI_Hero target, OrbwalkerMode Mode) { if (target.IsValidTarget(spells[Spells.E].Range) && RootMenu[MenuPrefix + Mode.ToString().ToLowerInvariant()]["useE"].GetValue<MenuBool>().Value) { var targetPrediction = Movement.GetPrediction(target, 0.25f); var finalPosition = targetPrediction.UnitPosition.Extend( ObjectManager.Player.ServerPosition, ObjectManager.Player.Distance(targetPrediction.UnitPosition) + 100f ); spells[Spells.E].Cast(finalPosition); } }
public MenuConfig() { var mainMenu = new Menu(string.Empty, $"Adept AIO - {Global.Player.ChampionName}", true); mainMenu.Attach(); FleeMode = new OrbwalkerMode("Flee", KeyCode.A, null, Flee.OnKeyPressed); BurstMode = new OrbwalkerMode("Burst", KeyCode.T, () => Global.TargetSelector.GetSelectedTarget(), Burst.OnUpdate); BurstMode.ModeBehaviour.Invoke(); BurstMode.GetTargetImplementation.Invoke(); Orbwalker.Implementation.AddMode(BurstMode); Orbwalker.Implementation.AddMode(FleeMode); Orbwalker.Implementation.Attach(mainMenu); Gapcloser.Attach(mainMenu, "Anti Gapcloser"); Combo = new Menu("RivenCombo", "Combo") { //new MenuList("Mode", "Combo Mode: ", new[] {"Automatic", "Max Damage", "Fast"}, 0), new MenuSlider("Change", "Fast Combo When DMG% (target) >= ", 70), new MenuList("Chase", "Chase Mode", new[] { "Disabled", "Q", "Q & E" }, 0), new MenuBool("Flash", "Flash").SetToolTip("Will flash when an target is safely killable."), new MenuSliderBool("Check", "Don't Use R1 If X (% HP) <=", true, 20), new MenuList("R", "R1 Mode: ", new[] { "Never", "Always", "Killable" }, 2), new MenuBool("R2", "Use R2") }; BurstMenu = new Menu("RivenBurst", "Burst") { new MenuSeperator("Note", "Select Target To Burst"), new MenuList("Mode", "Burst Mode:", new[] { "Automatic", "The Shy", "Execution" }, 0), new MenuSeperator("endmylife") }; foreach (var hero in GameObjects.EnemyHeroes) { BurstMenu.Add(new MenuBool(hero.ChampionName, "Burst: " + hero.ChampionName)); } Harass = new Menu("RivenHarass", "Harass") { new MenuList("Mode", "Mode: ", new[] { "Automatic", "Semi Combo", "Q3 To Safety", "Q3 To Target" }, 0), new MenuList("Dodge", "Dodge: ", new[] { "Turret", "Cursor", "Away From Target" }, 0), new MenuSeperator("Whitelist", "Whitelist") }; foreach (var hero in GameObjects.EnemyHeroes) { Harass.Add(new MenuBool(hero.ChampionName, "Harass: " + hero.ChampionName)); } Lane = new Menu("RivenLane", "Lane") { new MenuBool("Check", "Safe Clear").SetToolTip("Wont clear when enemies are nearby"), new MenuBool("Q", "Q"), new MenuBool("W", "W"), new MenuBool("E", "E") }; Jungle = new Menu("RivenJungle", "Jungle") { new MenuBool("Check", "Safe Clear").SetToolTip("Wont clear when enemies are nearby"), new MenuBool("Q", "Q"), new MenuBool("W", "W"), new MenuBool("E", "E") }; Killsteal = new Menu("RivenKillsteal", "Killsteal") { new MenuBool("Ignite", "Ignite"), new MenuBool("Q", "Q"), new MenuBool("W", "W"), new MenuBool("R2", "R2") }; Miscellaneous = new Menu("RivenMiscellaneous", "Miscellaneous") { new MenuBool("Walljump", "Walljump During Flee"), new MenuBool("Force", "Spam Q1, Q2 During Flee"), new MenuBool("Active", "Keep Q Active"), new MenuBool("Interrupt", "Dodge Certain Spells") }; Drawings = new Menu("RivenDrawManager", "DrawManager") { new MenuSlider("Segments", "Segments", 100, 10, 150).SetToolTip("Smoothness of the circles"), new MenuBool("Dmg", "Damage"), new MenuBool("Mouse", "Mouse Helper").SetToolTip("Shows where to put mouse to properly Q AA chase the target"), new MenuBool("Target", "Draw Line At Target"), new MenuBool("Engage", "Engage Range"), new MenuBool("R2", "R2 Range", false), new MenuBool("Pattern", "Current Pattern") }; foreach (var menu in new List <Menu> { Combo, BurstMenu, Harass, Lane, Jungle, Killsteal, Drawings, Miscellaneous, MenuShortcut.Credits }) { mainMenu.Add(menu); } }
public static bool CanUseSkill(OrbwalkerMode mode) { return Orbwalker.CanMove && (!Orbwalker.CanAttack || Orbwalker.GetTarget(mode) == null); }
public void Init() { var spellConfig = new SpellConfig(); spellConfig.Load(); var insecManager = new InsecManager(spellConfig); var wardtracker = new WardTracker(spellConfig); var wardmanager = new WardManager(wardtracker); var wardjump = new WardJump(wardtracker, wardmanager, spellConfig); var insec = new Insec(wardtracker, wardmanager, spellConfig, insecManager); var kickFlash = new KickFlash(spellConfig, insecManager); var combo = new Combo(wardmanager, spellConfig, wardtracker); var harass = new Harass(wardmanager, spellConfig); var jungle = new JungleClear(wardmanager, spellConfig); var lane = new LaneClear(spellConfig); var lasthit = new Lasthit(spellConfig); var killsteal = new Killsteal(spellConfig); var drawManager = new DrawManager(spellConfig, insecManager, new Dmg(spellConfig)); var mainmenu = new Menu("main", "Adept AIO", true); mainmenu.Attach(); var insecMode = new OrbwalkerMode("Insec", KeyCode.T, null, insec.OnKeyPressed); var wardjumpMode = new OrbwalkerMode("Wardjump", KeyCode.G, null, wardjump.OnKeyPressed); var kickFlashMode = new OrbwalkerMode("Kick Flash", KeyCode.A, null, kickFlash.OnKeyPressed); insecMode.MenuItem.OnValueChanged += (sender, args) => insec.Enabled = args.GetNewValue <MenuKeyBind>().Value; wardjumpMode.MenuItem.OnValueChanged += (sender, args) => wardjump.Enabled = args.GetNewValue <MenuKeyBind>().Value; kickFlashMode.MenuItem.OnValueChanged += (sender, args) => kickFlash.Enabled = args.GetNewValue <MenuKeyBind>().Value; Global.Orbwalker.AddMode(insecMode); Global.Orbwalker.AddMode(wardjumpMode); Global.Orbwalker.AddMode(kickFlashMode); Global.Orbwalker.Attach(mainmenu); var insecMenu = new Menu("Insec", "Insec"); var insecBk = new MenuKeyBind("BK", "Bubba Kush Toggle", KeyCode.L, KeybindType.Toggle); var insecF = new MenuBool("Flash", "Enable Flash"); var insecObject = new MenuBool("Object", "Use Q On Minions").SetToolTip("Uses Q to gapclose to every minion"); var insecQLast = new MenuBool("Last", "Use Q After Insec").SetToolTip("Only possible if no minions near target"); var insecPosition = new MenuList("Position", "Insec Position", new[] { "Ally Turret", "Ally Hero" }, 0); var insecKick = new MenuList("Kick", "Kick Type: ", new[] { "Flash R", "R Flash" }, 1); insecMenu.Add(insecBk); insecMenu.Add(insecF); insecMenu.Add(insecObject); insecMenu.Add(insecQLast); insecMenu.Add(insecPosition); insecMenu.Add(insecKick); mainmenu.Add(insecMenu); Temp.IsBubbaKush = insec.Bk = insecMenu["BK"].Enabled; insec.FlashEnabled = insecMenu["Flash"].Enabled; insec.ObjectEnabled = insecMenu["Object"].Enabled; insec.QLast = insecMenu["Last"].Enabled; insecManager.InsecPositionValue = insecMenu["Position"].Value; insecManager.InsecKickValue = insecMenu["Kick"].Value; insecBk.OnValueChanged += (sender, args) => { insec.Bk = args.GetNewValue <MenuKeyBind>().Value; Temp.IsBubbaKush = args.GetNewValue <MenuKeyBind>().Value; }; insecF.OnValueChanged += (sender, args) => insec.FlashEnabled = args.GetNewValue <MenuBool>().Value; insecObject.OnValueChanged += (sender, args) => insec.ObjectEnabled = args.GetNewValue <MenuBool>().Value; insecQLast.OnValueChanged += (sender, args) => insec.QLast = args.GetNewValue <MenuBool>().Value; insecPosition.OnValueChanged += (sender, args) => insecManager.InsecPositionValue = args.GetNewValue <MenuList>().Value; insecKick.OnValueChanged += (sender, args) => insecManager.InsecKickValue = args.GetNewValue <MenuList>().Value; var comboMenu = new Menu("Combo", "Combo"); var comboTurret = new MenuBool("Turret", "Don't Q2 Into Turret"); var comboQ = new MenuBool("Q", "Use Q"); var comboQ2 = new MenuBool("Q2", "Use Q2"); var comboW = new MenuBool("W", "Use W"); var comboWard = new MenuBool("Ward", "Use Wards"); var comboE = new MenuBool("E", "Use E"); foreach (var b in new List <MenuBool> { comboTurret, comboQ, comboQ2, comboW, comboWard, comboE }) { comboMenu.Add(b); } mainmenu.Add(comboMenu); combo.TurretCheckEnabled = comboMenu["Turret"].Enabled; combo.Q1Enabled = comboMenu["Q"].Enabled; combo.Q2Enabled = comboMenu["Q2"].Enabled; combo.WEnabled = comboMenu["W"].Enabled; combo.WardEnabled = comboMenu["Ward"].Enabled; combo.EEnabled = comboMenu["E"].Enabled; comboTurret.OnValueChanged += (sender, args) => combo.TurretCheckEnabled = args.GetNewValue <MenuBool>().Value; comboQ.OnValueChanged += (sender, args) => combo.Q1Enabled = args.GetNewValue <MenuBool>().Value; comboQ2.OnValueChanged += (sender, args) => combo.Q2Enabled = args.GetNewValue <MenuBool>().Value; comboW.OnValueChanged += (sender, args) => combo.WEnabled = args.GetNewValue <MenuBool>().Value; comboWard.OnValueChanged += (sender, args) => combo.WardEnabled = args.GetNewValue <MenuBool>().Value; comboE.OnValueChanged += (sender, args) => combo.EEnabled = args.GetNewValue <MenuBool>().Value; var harassMenu = new Menu("Harass", "Harass"); var harassQ = new MenuBool("Q", "Use Q"); var harassQ2 = new MenuBool("Q2", "Use Q2"); var harassMode = new MenuList("Mode", "W Mode: ", new[] { "Away", "W Self" }, 0); var harassE = new MenuBool("E", "Use E"); var harassE2 = new MenuBool("E2", "Use E2"); harassMenu.Add(harassQ); harassMenu.Add(harassQ2); harassMenu.Add(harassMode); harassMenu.Add(harassE); harassMenu.Add(harassE2); mainmenu.Add(harassMenu); harass.Q1Enabled = harassMenu["Q"].Enabled; harass.Q2Enabled = harassMenu["Q2"].Enabled; harass.Mode = harassMenu["Mode"].Value; harass.EEnabled = harassMenu["E"].Enabled; harass.E2Enabled = harassMenu["E2"].Enabled; harassQ.OnValueChanged += (sender, args) => harass.Q1Enabled = args.GetNewValue <MenuBool>().Value; harassQ2.OnValueChanged += (sender, args) => harass.Q2Enabled = args.GetNewValue <MenuBool>().Value; harassMode.OnValueChanged += (sender, args) => harass.Mode = args.GetNewValue <MenuList>().Value; harassE.OnValueChanged += (sender, args) => harass.EEnabled = args.GetNewValue <MenuBool>().Value; harassE2.OnValueChanged += (sender, args) => harass.E2Enabled = args.GetNewValue <MenuBool>().Value; var jungleMenu = new Menu("Jungle", "Jungle"); var jungleSteal = new MenuBool("Steal", "Steal Legendary"); var jungleSmite = new MenuBool("Smite", "Smite Big Mobs"); var jungleBlue = new MenuBool("Blue", "Smite Blue Buff"); var jungleQ = new MenuBool("Q", "Q"); var jungleW = new MenuBool("W", "W"); var jungleE = new MenuBool("E", "E"); foreach (var b in new List <MenuBool> { jungleSteal, jungleSmite, jungleBlue, jungleQ, jungleW, jungleE }) { jungleMenu.Add(b); } mainmenu.Add(jungleMenu); jungle.StealEnabled = jungleMenu["Steal"].Enabled; jungle.SmiteEnabled = jungleMenu["Smite"].Enabled; jungle.BlueEnabled = jungleMenu["Blue"].Enabled; jungle.Q1Enabled = jungleMenu["Q"].Enabled; jungle.WEnabled = jungleMenu["W"].Enabled; jungle.EEnabled = jungleMenu["E"].Enabled; jungleSteal.OnValueChanged += (sender, args) => jungle.StealEnabled = args.GetNewValue <MenuBool>().Value; jungleSmite.OnValueChanged += (sender, args) => jungle.Q1Enabled = args.GetNewValue <MenuBool>().Value; jungleBlue.OnValueChanged += (sender, args) => jungle.BlueEnabled = args.GetNewValue <MenuBool>().Value; jungleQ.OnValueChanged += (sender, args) => jungle.Q1Enabled = args.GetNewValue <MenuBool>().Value; jungleW.OnValueChanged += (sender, args) => jungle.WEnabled = args.GetNewValue <MenuBool>().Value; jungleE.OnValueChanged += (sender, args) => jungle.EEnabled = args.GetNewValue <MenuBool>().Value; var laneMenu = new Menu("Lane", "Lane"); var laneCheck = new MenuBool("Check", "Don't Clear When Enemies Nearby"); var laneQ = new MenuBool("Q", "Q"); var laneW = new MenuBool("W", "W"); var laneE = new MenuBool("E", "E"); foreach (var b in new List <MenuBool> { laneCheck, laneQ, laneW, laneE }) { laneMenu.Add(b); } mainmenu.Add(laneMenu); lane.CheckEnabled = laneMenu["Check"].Enabled; lane.Q1Enabled = laneMenu["Q"].Enabled; lane.WEnabled = laneMenu["W"].Enabled; lane.EEnabled = laneMenu["E"].Enabled; laneCheck.OnValueChanged += (sender, args) => lane.CheckEnabled = args.GetNewValue <MenuBool>().Value; laneQ.OnValueChanged += (sender, args) => lane.Q1Enabled = args.GetNewValue <MenuBool>().Value; laneW.OnValueChanged += (sender, args) => lane.WEnabled = args.GetNewValue <MenuBool>().Value; laneE.OnValueChanged += (sender, args) => lane.EEnabled = args.GetNewValue <MenuBool>().Value; var lasthitMenu = new Menu("Lasthit", "Lasthit"); var lasthitEnabled = new MenuBool("Enabled", "Enabled"); lasthitMenu.Add(lasthitEnabled); mainmenu.Add(lasthitMenu); lasthit.Enabled = lasthitMenu["Enabled"].Enabled; lasthitEnabled.OnValueChanged += (sender, args) => lasthit.Enabled = args.GetNewValue <MenuBool>().Value; var ksMenu = new Menu("Killsteal", "Killsteal"); var ksIgnite = new MenuBool("Ignite", "Ignite"); var ksSmite = new MenuBool("Smite", "Smite"); var ksQ = new MenuBool("Q", "Q"); var ksE = new MenuBool("E", "E"); var ksR = new MenuBool("R", "R"); foreach (var b in new List <MenuBool> { ksIgnite, ksSmite, ksQ, ksE, ksR }) { ksMenu.Add(b); } mainmenu.Add(ksMenu); killsteal.IgniteEnabled = ksMenu["Ignite"].Enabled; killsteal.SmiteEnabled = ksMenu["Smite"].Enabled; killsteal.QEnabled = ksMenu["Q"].Enabled; killsteal.EEnabled = ksMenu["E"].Enabled; killsteal.REnabled = ksMenu["R"].Enabled; ksIgnite.OnValueChanged += (sender, args) => killsteal.IgniteEnabled = args.GetNewValue <MenuBool>().Value; ksSmite.OnValueChanged += (sender, args) => killsteal.SmiteEnabled = args.GetNewValue <MenuBool>().Value; ksQ.OnValueChanged += (sender, args) => killsteal.QEnabled = args.GetNewValue <MenuBool>().Value; ksE.OnValueChanged += (sender, args) => killsteal.EEnabled = args.GetNewValue <MenuBool>().Value; ksR.OnValueChanged += (sender, args) => killsteal.REnabled = args.GetNewValue <MenuBool>().Value; var drawMenu = new Menu("Draw", "Drawings"); var drawSegments = new MenuSlider("Segments", "Segments", 100, 100, 200).SetToolTip("Smoothness of the circles"); var drawPosition = new MenuBool("Position", "Insec Position"); var drawQ = new MenuBool("Q", "Q Range"); drawMenu.Add(drawSegments); drawMenu.Add(drawPosition); drawMenu.Add(drawQ); mainmenu.Add(drawMenu); drawManager.QEnabled = drawMenu["Q"].Enabled; drawManager.SegmentsValue = drawMenu["Segments"].Value; drawManager.PositionEnabled = drawMenu["Position"].Enabled; drawSegments.OnValueChanged += (sender, args) => drawManager.SegmentsValue = args.GetNewValue <MenuSlider>().Value; drawPosition.OnValueChanged += (sender, args) => drawManager.PositionEnabled = args.GetNewValue <MenuBool>().Value; drawQ.OnValueChanged += (sender, args) => drawManager.QEnabled = args.GetNewValue <MenuBool>().Value; Gapcloser.Attach(mainmenu, "Gapcloser"); var gapcloser = new AntiGapcloser(spellConfig, wardmanager, wardtracker); Gapcloser.OnGapcloser += gapcloser.OnGapcloser; var manager = new Manager(combo, harass, jungle, lane, lasthit); Game.OnUpdate += manager.OnUpdate; Game.OnUpdate += killsteal.OnUpdate; Global.Orbwalker.PostAttack += manager.PostAttack; Render.OnRender += drawManager.OnRender; Render.OnPresent += drawManager.RenerDamage; Obj_AI_Base.OnProcessSpellCast += insec.OnProcessSpellCast; Obj_AI_Base.OnProcessSpellCast += kickFlash.OnProcessSpellCast; Obj_AI_Base.OnProcessSpellCast += spellConfig.OnProcessSpellCast; GameObject.OnCreate += wardtracker.OnCreate; }
/// <summary> /// Initializes a new instance of the <see cref="Orbwalker" /> class. /// </summary> public Orbwalker() { #region Menu _menu = new Menu("CommonEx.Orbwalker", "Orbwalker"); var drawingMenu = new Menu("Drawings", "Drawings"); drawingMenu.Add(new MenuItem <MenuBool>("HoldZone", "Draw Hold Zone") { Value = new MenuBool() }); drawingMenu.Add(new MenuItem <MenuBool>("AttackedMinion", "Draw Attacked Minion") { Value = new MenuBool(true) // thats redundant :S }); drawingMenu.Add(new MenuItem <MenuBool>("AutoAttackRange", "Draw AA Range") { Value = new MenuBool(true) }); _menu.Add(drawingMenu); _menu.Add(new MenuItem <MenuKeyBind>("Combo", "Combo") { Value = new MenuKeyBind(Keys.Space, KeyBindType.Press) }); _menu.Add(new MenuItem <MenuKeyBind>("Harass", "Harass") { Value = new MenuKeyBind(Keys.C, KeyBindType.Press) }); _menu.Add(new MenuItem <MenuKeyBind>("WaveClear", "Wave Clear") { Value = new MenuKeyBind(Keys.V, KeyBindType.Press) }); _menu.Add(new MenuItem <MenuKeyBind>("LastHit", "Last Hit") { Value = new MenuKeyBind(Keys.X, KeyBindType.Press) }); _menu.Add(new MenuItem <MenuKeyBind>("Freeze", "Freeze") { Value = new MenuKeyBind(Keys.F1, KeyBindType.Toggle) }); Variables.LeagueSharpMenu.Add(_menu); _menu["Combo"].GetValue <MenuKeyBind>().ValueChanged += (sender, args) => { if (args.GetValue <MenuKeyBind>().Active) { _activeMode = OrbwalkerMode.Combo; } }; _menu["Harass"].GetValue <MenuKeyBind>().ValueChanged += (sender, args) => { if (args.GetValue <MenuKeyBind>().Active) { _activeMode = OrbwalkerMode.Mixed; } }; _menu["WaveClear"].GetValue <MenuKeyBind>().ValueChanged += (sender, args) => { if (args.GetValue <MenuKeyBind>().Active) { _activeMode = OrbwalkerMode.LaneClear; } }; _menu["LastHit"].GetValue <MenuKeyBind>().ValueChanged += (sender, args) => { if (args.GetValue <MenuKeyBind>().Active) { _activeMode = OrbwalkerMode.LastHit; } }; _menu["Freeze"].GetValue <MenuKeyBind>().ValueChanged += (sender, args) => { _activeFreeze = args.GetValue <MenuKeyBind>().Active; }; #endregion }
public static bool IsEnabledAndReady(this Spell spell, OrbwalkerMode mode) { var modeString = mode.ToString().ToLowerInvariant(); var EnabledInMenu = VHR.VHRMenu[string.Format("dz191.vhr.{0}", modeString)][ string.Format("Use{0}", spell.Slot.GetStringFromSlot())].GetValue<MenuBool>().Value; var Ready = spell.IsReady(); var ManaManagerCheck = ObjectManager.Player.ManaPercent >= VHR.VHRMenu[string.Format("dz191.vhr.{0}", modeString)][ string.Format("{0}Mana", spell.Slot.GetStringFromSlot())].GetValue<MenuSlider>().Value; return EnabledInMenu && Ready && ManaManagerCheck; }
private void Orbwalker_OnAction(object sender, LeagueSharp.SDK.Core.Orbwalker.OrbwalkerActionArgs e) { if (!Enable) return; if (e.Type == OrbwalkerType.AfterAttack && e.Target.IsValidTarget()) { if (Variables.TickCount - yellowtick <= 1500) return; if (Orb.ActiveMode == OrbwalkerMode.Orbwalk && comboqafterattack) { if (e.Target.IsValidTarget() && !e.Target.IsZombie) { var target = TargetSelector.GetTarget(Q.Range, DamageType.Magical); if (target.IsValidTarget() && !target.IsZombie) Q.Cast(Q.GetPrediction(target).CastPosition); } } if (Orb.ActiveMode == OrbwalkerMode.Hybrid && harassqafterattack && Player.ManaPercent >= harassmana) { if (e.Target.IsValidTarget() && !e.Target.IsZombie) { var target = TargetSelector.GetTarget(Q.Range, DamageType.Magical); if (target.IsValidTarget() && !target.IsZombie) Q.Cast(Q.GetPrediction(target).CastPosition); } } } var mode = new OrbwalkerMode[] { OrbwalkerMode.Hybrid, OrbwalkerMode.Orbwalk }; if (e.Type == OrbwalkerType.BeforeAttack) { if (IsPickingCard && mode.Contains(Orb.ActiveMode)) e.Process = false; else if (HasACard != "none" && !GameObjects.EnemyHeroes.Contains(e.Target) && Orb.ActiveMode == OrbwalkerMode.Hybrid) { e.Process = false; var target = TargetSelector.GetTarget(Player.GetRealAutoAttackRange(), DamageType.Magical); if (target.IsValidTarget() && !target.IsZombie) Player.IssueOrder(GameObjectOrder.AttackUnit, target); } else if (HasACard != "none" && HasRed && Orb.ActiveMode == OrbwalkerMode.LaneClear) { e.Process = false; IDictionary<Obj_AI_Minion, int> creeps = new Dictionary<Obj_AI_Minion, int>(); foreach (var x in GameObjects.EnemyMinions.Where(x => x.InAutoAttackRange())) { creeps.Add(x, GameObjects.EnemyMinions.Count(y => y.IsValidTarget() && y.Distance(x.Position) <= 300)); } foreach (var x in GameObjects.Jungle.Where(x => x.InAutoAttackRange())) { creeps.Add(x, GameObjects.Jungle.Count(y => y.IsValidTarget() && y.Distance(x.Position) <= 300)); } var minion = creeps.OrderByDescending(x => x.Value).FirstOrDefault(); Player.IssueOrder(GameObjectOrder.AttackUnit, minion.Key); } } if (e.Type == OrbwalkerType.OnAttack) { if (HasGold) yellowtick = Variables.TickCount; } }
private static void PreliminaryQCheck(Obj_AI_Base target, OrbwalkerMode mode) { ////TODO Try to reset AA faster by doing Q against a wall if possible if (spells[SpellSlot.Q].IsEnabledAndReady(mode)) { if (VHRMenu["dz191.vhr.misc"]["dz191.vhr.misc.tumble"]["smartq"].GetValue<MenuBool>().Value && GetQEPosition() != Vector3.Zero) { UseTumble(GetQEPosition(), target); DelayAction.Add( (int) (Game.Ping / 2f + spells[SpellSlot.Q].Delay * 1000 + 300f / 1200f + 50f), () => { if (!spells[SpellSlot.Q].IsReady()) { spells[SpellSlot.E].Cast(target); } }); } else { var QWallPosition = GetQWallPosition((Obj_AI_Hero)target); if (QWallPosition != Vector3.Zero) { Tumble(QWallPosition, target); } else { UseTumble(target); } } } }
public static void Attach() { _mainMenu = new Menu(string.Empty, $"Adept AIO - {Global.Player.ChampionName}", true); _mainMenu.Attach(); FleeOrbwalkerMode = new OrbwalkerMode("Flee", KeyCode.A, null, Flee.OnKeyPressed); Global.Orbwalker.AddMode(FleeOrbwalkerMode); Global.Orbwalker.Attach(_mainMenu); Combo = new Menu("Combo", "Combo") { new MenuBool("Q", "Use Q"), new MenuBool("W", "Use W"), new MenuBool("E", "Use E"), new MenuBool("R", "Use R"), new MenuList("Style", "Shadow Style", new [] { "Triangle", "Line", "Cursor" }, 0), new MenuBool("Killable", "Only Use R When Killable"), new MenuSeperator("Whitelist") }; foreach (var enemy in GameObjects.EnemyHeroes) { Combo.Add(new MenuBool(enemy.ChampionName, $"Use R On: {enemy.ChampionName}")); } Harass = new Menu("Harass", "Harass") { new MenuBool("Q", "Use Q"), new MenuBool("W", "Use W"), new MenuSliderBool("W2", "Use W Twice | Not If >= X Enemies", true, 2, 1, 5).SetToolTip("Max Range W, will try to W AA "), new MenuSlider("Health", "Don't Use W2 if % HP is Below", 30), new MenuBool("E", "Use E"), new MenuSlider("Energy", "Min. Energy %", 40) }; LaneClear = new Menu("Lane", "LaneClear") { new MenuBool("Check", "Don't Clear When Enemies Nearby"), new MenuBool("TurretFarm", "Smart Under Turret Farm"), new MenuSliderBool("Q", "Use Q | Min. Minions Hit", true, 3, 1, 6), new MenuBool("W", "Use W"), new MenuSliderBool("E", "Use E | Min. Minions Hit", true, 3, 1, 6), new MenuSlider("Energy", "Min. Energy %", 40) }; JungleClear = new Menu("Jungle", "JungleClear") { new MenuBool("Q", "Use Q"), new MenuBool("E", "Use E"), new MenuSlider("Energy", "Min. Energy %", 40) }; Lasthit = new Menu("Lasthit", "Lasthit") { new MenuBool("Q", "Use Q"), new MenuBool("E", "Use E"), new MenuSlider("Energy", "Min. Energy %", 40) }; Killsteal = new Menu("Killsteal", "Killsteal") { new MenuBool("Q", "Use Q"), new MenuBool("E", "Use E") }; Misc = new Menu("Misc", "Miscellaneous") { new MenuBool("Q", "Always Use Q On Enemies", false), new MenuBool("E", "Use E To Slow Enemies"), new MenuBool("R", "Use R To Dodge Enemy Spells"), new MenuSlider("Health", "Dodge if % Health is below", 20), new MenuBool("W", "Anti-Gapclose with W") }; Drawings = new Menu("DrawManager", "DrawManager") { new MenuSlider("Segments", "Segments", 100, 10, 150).SetToolTip("Smoothness of the circles"), new MenuBool("Dmg", "Damage"), new MenuBool("Range", "Draw Engage Range"), new MenuBool("Q", "Draw Q Range"), new MenuBool("Pred", "Draw Q Prediction") }; Gapcloser.Attach(_mainMenu, "Anti Gapcloser"); foreach (var menu in new List <Menu> { Combo, Harass, LaneClear, JungleClear, Lasthit, Killsteal, Misc, Drawings, MenuShortcut.Credits }) { _mainMenu.Add(menu); } }
/// <summary> /// Returns the best target candidate. /// </summary> /// <param name="modeArg"> /// The requested mode /// </param> /// <returns> /// The <see cref="AttackableUnit" />. /// </returns> public static AttackableUnit GetTarget(OrbwalkerMode? modeArg) { var mode = modeArg ?? ActiveMode; if (mode == OrbwalkerMode.Orbwalk || mode == OrbwalkerMode.None || (mode == OrbwalkerMode.Hybrid && !Menu["advanced"]["miscPriorizeFarm"].GetValue<MenuBool>().Value)) { var target = TargetSelector.GetTarget(); if (target != null) { return target; } } if (mode == OrbwalkerMode.LaneClear || mode == OrbwalkerMode.Hybrid || mode == OrbwalkerMode.LastHit) { foreach (var minion in GameObjects.EnemyMinions.Where( m => m.IsValidTarget(m.GetRealAutoAttackRange()) && m.Health < 2 * GameObjects.Player.TotalAttackDamage).OrderByDescending(m => m.MaxHealth)) { var time = (int) ((GameObjects.Player.AttackCastDelay * 1000) + (GameObjects.Player.Distance(minion) / GameObjects.Player.GetProjectileSpeed() * 1000) + (Game.Ping / 2f)); var healthPrediction = Health.GetPrediction(minion, time, 100); if (healthPrediction <= 0) { InvokeAction( new OrbwalkerActionArgs { Position = minion.Position, Target = minion, Process = true, Type = OrbwalkerType.NonKillableMinion }); } if (healthPrediction > 0 && healthPrediction <= GameObjects.Player.GetAutoAttackDamage(minion, true)) { return minion; } } } if (mode == OrbwalkerMode.LaneClear) { foreach (var turret in GameObjects.EnemyTurrets.Where(t => t.IsValidTarget(t.GetRealAutoAttackRange()))) { return turret; } foreach ( var inhibitor in GameObjects.EnemyInhibitors.Where(i => i.IsValidTarget(i.GetRealAutoAttackRange())) ) { return inhibitor; } if (GameObjects.EnemyNexus.IsValidTarget(GameObjects.EnemyNexus.GetRealAutoAttackRange())) { return GameObjects.EnemyNexus; } } if (mode != OrbwalkerMode.LastHit) { var target = TargetSelector.GetTarget(); if (target != null) { return target; } } if (ActiveMode == OrbwalkerMode.LaneClear) { var shouldWait = GameObjects.EnemyMinions.Any( m => m.IsValidTarget(m.GetRealAutoAttackRange()) && Health.GetPrediction(m, (int)((GameObjects.Player.AttackDelay * 1000) * 2f), 100) <= GameObjects.Player.GetAutoAttackDamage(m, true)); if (!shouldWait) { var mob = (GameObjects.JungleLegendary.FirstOrDefault(j => j.IsValidTarget(j.GetRealAutoAttackRange())) ?? GameObjects.JungleSmall.FirstOrDefault( j => j.IsValidTarget(j.GetRealAutoAttackRange()) && j.Name.Contains("Mini") && j.Name.Contains("SRU_Razorbeak")) ?? GameObjects.JungleLarge.FirstOrDefault(j => j.IsValidTarget(j.GetRealAutoAttackRange()))) ?? GameObjects.JungleSmall.FirstOrDefault(j => j.IsValidTarget(j.GetRealAutoAttackRange())); if (mob != null) { return mob; } var minion = (from m in GameObjects.EnemyMinions.Where(m => m.IsValidTarget(m.GetRealAutoAttackRange())) let predictedHealth = Health.GetPrediction(m, (int)((GameObjects.Player.AttackDelay * 1000) * 2f), 100) where predictedHealth >= 2 * GameObjects.Player.GetAutoAttackDamage(m, true) || System.Math.Abs(predictedHealth - m.Health) < float.Epsilon select m).MaxOrDefault(m => m.Health); if (minion != null) { return minion; } return GameObjects.AttackableUnits.OrderBy(a => a.MaxHealth) .FirstOrDefault(a => a.IsValidTarget(a.GetRealAutoAttackRange())); } } return null; }
internal static AttackableUnit GetTarget(OrbwalkerMode? modeArg) { var mode = modeArg ?? ActiveMode; if ((mode == OrbwalkerMode.LaneClear || mode == OrbwalkerMode.Hybrid) && !Program.MainMenu["Orbwalker"]["Advanced"]["PriorizeFarm"]) { var target = TargetSelector.GetTarget(); if (target != null) { return target; } } if (mode == OrbwalkerMode.LaneClear || mode == OrbwalkerMode.Hybrid || mode == OrbwalkerMode.LastHit) { foreach (var minion in GameObjects.EnemyMinions.Where(m => m.InAutoAttackRange() && Minion.IsMinion(m)) .OrderByDescending(m => m.GetMinionType() == MinionTypes.Siege) .ThenBy(m => m.GetMinionType() == MinionTypes.Super) .ThenBy(m => m.Health) .ThenByDescending(m => m.MaxHealth)) { var time = (int) (Program.Player.AttackCastDelay * 1000 + Math.Max(0, Program.Player.Distance(minion) - Program.Player.BoundingRadius) / Program.Player.GetProjectileSpeed() * 1000 - 100 + Game.Ping / 2f); var healthPrediction = Health.GetPrediction(minion, time, FarmDelay); if (healthPrediction <= 0) { InvokeAction( new OrbwalkerActionArgs { Position = minion.Position, Target = minion, Process = true, Type = OrbwalkerType.NonKillableMinion }); } if (healthPrediction > 0 && healthPrediction <= Program.Player.GetAutoAttackDamage(minion, true)) { return minion; } } } if (mode == OrbwalkerMode.LaneClear) { foreach (var turret in GameObjects.EnemyTurrets.Where(t => t.InAutoAttackRange())) { return turret; } foreach (var inhibitor in GameObjects.EnemyInhibitors.Where(i => i.InAutoAttackRange())) { return inhibitor; } if (GameObjects.EnemyNexus.InAutoAttackRange()) { return GameObjects.EnemyNexus; } } if (mode != OrbwalkerMode.LastHit) { var target = TargetSelector.GetTarget(); if (target != null) { return target; } } if (ActiveMode == OrbwalkerMode.LaneClear) { var shouldWait = GameObjects.EnemyMinions.Any( m => m.InAutoAttackRange() && Minion.IsMinion(m) && Health.GetPrediction(m, (int)(Program.Player.AttackDelay * 1000 * 2f), FarmDelay) <= Program.Player.GetAutoAttackDamage(m, true)); if (!shouldWait) { foreach (var specialMinion in GameObjects.EnemyMinions.Where( m => m.InAutoAttackRange() && SpecialMinions.Any(i => i.Equals(m.CharData.BaseSkinName)))) { return specialMinion; } var mob = GameObjects.JungleLegendary.FirstOrDefault(j => j.InAutoAttackRange()) ?? GameObjects.JungleSmall.FirstOrDefault( j => j.InAutoAttackRange() && j.Name.Contains("Mini") && j.Name.Contains("SRU_Razorbeak")) ?? GameObjects.JungleLarge.FirstOrDefault(j => j.InAutoAttackRange()) ?? GameObjects.JungleSmall.FirstOrDefault(j => j.InAutoAttackRange()); if (mob != null) { return mob; } foreach (var sentinel in GameObjects.EnemyMinions.Where( m => m.InAutoAttackRange() && m.CharData.BaseSkinName == "kalistaspawn")) { return sentinel; } if (LastMinion.InAutoAttackRange()) { var predHealth = Health.GetPrediction( LastMinion, (int)(Program.Player.AttackDelay * 1000 * 2f), FarmDelay); if (predHealth >= 2 * Program.Player.GetAutoAttackDamage(LastMinion, true) || Math.Abs(predHealth - LastMinion.Health) < float.Epsilon) { return LastMinion; } } var minion = (from m in GameObjects.EnemyMinions.Where(m => m.InAutoAttackRange() && Minion.IsMinion(m)) let predictedHealth = Health.GetPrediction(m, (int)(Program.Player.AttackDelay * 1000 * 2f), FarmDelay) where predictedHealth >= 2 * Program.Player.GetAutoAttackDamage(m, true) || Math.Abs(predictedHealth - m.Health) < float.Epsilon select m).MaxOrDefault(m => m.Health); if (minion != null) { return LastMinion = minion; } return GameObjects.EnemyMinions.FirstOrDefault( m => m.InAutoAttackRange() && (m.CharData.BaseSkinName == "elisespiderling" || m.CharData.BaseSkinName == "teemomushroom")); } } return null; }