private void RLogicSingle(UltimateModeType mode) { try { if (Ultimate.ShouldSingle(mode)) { foreach (var target in GameObjects.EnemyHeroes.Where( t => Ultimate.CheckSingle(mode, t) && (R.GetDamage(t) * 0.95f > t.Health || t.Distance(Player) + 300 < Orbwalking.GetRealAutoAttackRange(t) * 0.8f))) { var hits = GetRHits(target); if (hits.Item1 > 0) { R.Cast(hits.Item3); break; } } } } catch (Exception ex) { Global.Logger.AddItem(new LogItem(ex)); } }
private void OnCoreBoot(EventArgs args) { try { OnLoad(); SetupSpells(); SetupMenu(); _minionSearchRange = Math.Min( 2000, Math.Max( ObjectManager.Player.AttackRange + ObjectManager.Player.BoundingRadius * 2, Spells.Select(spell => spell.IsChargedSpell ? spell.ChargedMaxRange : spell.Range) .Concat(new[] { _minionSearchRange }) .Max())); TargetSelector.Weights.Range = Math.Max( TargetSelector.Weights.Range, Spells.Select(e => e.Range).DefaultIfEmpty(Orbwalking.GetRealAutoAttackRange(null) * 1.2f).Max()); Core.OnPreUpdate += OnCorePreUpdate; Core.OnPostUpdate += OnCorePostUpdate; Orbwalking.BeforeAttack += OnOrbwalkingBeforeAttack; Orbwalking.AfterAttack += OnOrbwalkingAfterAttack; Obj_AI_Base.OnProcessSpellCast += OnObjAiBaseProcessSpellCast; Drawing.OnDraw += OnDrawingDraw; } catch (Exception ex) { Global.Logger.AddItem(new LogItem(ex)); } }
private float CalcComboDamage(Obj_AI_Hero target, float resMulti, bool rangeCheck, bool q, bool r) { try { if (target == null) { return(0); } var damage = 0f; var totalMana = 0f; var didR = false; if (r && R.IsReady() && (!rangeCheck || R.IsInRange(target, R.Range + R2.Range))) { var rMana = R.ManaCost * resMulti; if (totalMana + rMana <= Player.Mana) { totalMana += rMana; damage += R.GetDamage(target); didR = true; } } if (q && Q.IsReady() && (!rangeCheck || target.Distance(Player) < Q.Range - (didR ? 200 : 0))) { var qMana = Q.ManaCost * resMulti; if (totalMana + qMana <= Player.Mana) { damage += Q.GetDamage(target); } } if (!rangeCheck || target.Distance(Player) <= Orbwalking.GetRealAutoAttackRange(target) * (didR ? 0.65 : 0.85f)) { damage += 2 * (float)Player.GetAutoAttackDamage(target, true); } damage += ItemManager.CalculateComboDamage(target, rangeCheck); damage += SummonerManager.CalculateComboDamage(target, rangeCheck); return(damage); } catch (Exception ex) { Global.Logger.AddItem(new LogItem(ex)); } return(0); }
private bool RLogic(UltimateModeType mode, Obj_AI_Hero target) { try { if (Ultimate.IsActive(mode)) { var hits = GetRHits(target); if (Ultimate.Check(mode, hits.Item2) && (hits.Item2.Any(h => R.GetDamage(h) * 0.95f > h.Health) || hits.Item2.Any(h => h.Distance(Player) + 300 < Orbwalking.GetRealAutoAttackRange(h) * 0.9f))) { R.Cast(hits.Item3); return(true); } } } catch (Exception ex) { Global.Logger.AddItem(new LogItem(ex)); } return(false); }
public static void Muramana(Obj_AI_Hero target, bool activate, float overrideRange = -1f) { try { var muramana = ObjectManager.Player.GetSpellSlot("Muramana"); if (muramana == SpellSlot.Unknown || !muramana.IsReady()) { return; } var hasBuff = ObjectManager.Player.HasBuff("Muramana"); if ((activate && !hasBuff && (_menu == null || _menu.Item(_menu.Name + ".muramana.combo").GetValue <bool>() && ObjectManager.Player.CountEnemiesInRange( overrideRange > 0 ? overrideRange : Orbwalking.GetRealAutoAttackRange(ObjectManager.Player)) >= _menu.Item(_menu.Name + ".muramana.min-enemies-range").GetValue <Slider>().Value&& ObjectManager.Player.ManaPercent >= _menu.Item(_menu.Name + ".muramana.player-mana-above").GetValue <Slider>().Value&& ObjectManager.Player.HealthPercent <= _menu.Item(_menu.Name + ".muramana.player-health-below").GetValue <Slider>().Value&& ObjectManager.Player.HealthPercent >= _menu.Item(_menu.Name + ".muramana.player-health-above").GetValue <Slider>().Value&& (target == null || target.HealthPercent <= _menu.Item(_menu.Name + ".muramana.target-health-below").GetValue <Slider>().Value&& target.HealthPercent >= _menu.Item(_menu.Name + ".muramana.target-health-above").GetValue <Slider>().Value))) || !activate && hasBuff) { ObjectManager.Player.Spellbook.CastSpell(muramana); } } catch (Exception ex) { Global.Logger.AddItem(new LogItem(ex)); } }
static ItemManager() { try { // Speed + Atk Speed Youmuu = new CustomItem { Name = "youmuus-ghostblade", DisplayName = "Youmuu's Ghostblade", Item = ItemData.Youmuus_Ghostblade.GetItem(), Flags = ItemFlags.Offensive | ItemFlags.Flee, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, EffectFlags = EffectFlags.AttackSpeed | EffectFlags.MovementSpeed, CastType = CastType.None, Range = ObjectManager.Player.IsMelee ? ObjectManager.Player.AttackRange * 3 : Orbwalking.GetRealAutoAttackRange(ObjectManager.Player) }; // AOE damage, only melee Hydra = new CustomItem { Name = "hydra", DisplayName = "Hydra", Item = ItemData.Ravenous_Hydra_Melee_Only.GetItem(), Flags = ItemFlags.Offensive, CombatFlags = CombatFlags.Melee, EffectFlags = EffectFlags.Damage, CastType = CastType.None, Damage = Damage.DamageItems.Hydra, Range = ItemData.Ravenous_Hydra_Melee_Only.GetItem().Range }; // Slow + Damage BilgewaterCutlass = new CustomItem { Name = "bilgewater-cutlass", DisplayName = "Bilgewater Cutlass", Item = ItemData.Bilgewater_Cutlass.GetItem(), Flags = ItemFlags.Offensive | ItemFlags.Flee, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, EffectFlags = EffectFlags.Damage | EffectFlags.MovementSlow, CastType = CastType.Target, Damage = Damage.DamageItems.Bilgewater, Range = ItemData.Bilgewater_Cutlass.GetItem().Range }; // Slow + Damage BladeRuinedKing = new CustomItem { Name = "blade-ruined-king", DisplayName = "Blade of the Ruined King", Item = ItemData.Blade_of_the_Ruined_King.GetItem(), Flags = ItemFlags.Offensive | ItemFlags.Flee, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, EffectFlags = EffectFlags.Damage | EffectFlags.MovementSlow, CastType = CastType.Target, Damage = Damage.DamageItems.Botrk, Range = ItemData.Blade_of_the_Ruined_King.GetItem().Range }; // Damage + Slow HextechGunblade = new CustomItem { Name = "hextech-gunblade", DisplayName = "Hextech Gunblade", Item = ItemData.Hextech_Gunblade.GetItem(), Flags = ItemFlags.Offensive | ItemFlags.Flee, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, EffectFlags = EffectFlags.Damage | EffectFlags.MovementSlow, CastType = CastType.Target, Damage = Damage.DamageItems.Hexgun, Range = ItemData.Hextech_Gunblade.GetItem().Range }; // AOE Shield LocketIronSolari = new CustomItem { Name = "locket-iron-solari", DisplayName = "Locket of the Iron Solari", Item = ItemData.Locket_of_the_Iron_Solari.GetItem(), Flags = ItemFlags.Supportive | ItemFlags.Defensive, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, EffectFlags = EffectFlags.Shield, CastType = CastType.None, Range = ItemData.Locket_of_the_Iron_Solari.GetItem().Range }; // Remove stun + heal MikaelsCrucible = new CustomItem { Name = "mikaels-crucible", DisplayName = "Mikael's Crucible", Item = ItemData.Mikaels_Crucible.GetItem(), Flags = ItemFlags.Supportive, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, EffectFlags = EffectFlags.RemoveStun | EffectFlags.Heal, CastType = CastType.Target, Range = ItemData.Mikaels_Crucible.GetItem().Range }; // Slow FrostQueensClaim = new CustomItem { Name = "frost-queens-claim", DisplayName = "Frost Queen's Claim", Item = ItemData.Frost_Queens_Claim.GetItem(), Flags = ItemFlags.Supportive | ItemFlags.Flee, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, EffectFlags = EffectFlags.MovementSlow, CastType = CastType.None, Range = ItemData.Frost_Queens_Claim.GetItem().Range }; // Speed TalismanOfAscension = new CustomItem { Name = "talisman-of-ascension", DisplayName = "Talisman of Ascension", Item = ItemData.Talisman_of_Ascension.GetItem(), Flags = ItemFlags.Supportive | ItemFlags.Flee, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, EffectFlags = EffectFlags.MovementSpeed, CastType = CastType.None, Range = ItemData.Talisman_of_Ascension.GetItem().Range }; // Shield FaceOfTheMountain = new CustomItem { Name = "face-of-the-mountain", DisplayName = "Face of the Mountain", Item = ItemData.Face_of_the_Mountain.GetItem(), Flags = ItemFlags.Supportive | ItemFlags.Flee | ItemFlags.Defensive, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, EffectFlags = EffectFlags.Shield, CastType = CastType.Self, Range = ItemData.Face_of_the_Mountain.GetItem().Range }; // Place wards Sightstone = new CustomItem { Name = "sightstone", DisplayName = "Sightstone", Item = ItemData.Sightstone.GetItem(), Flags = ItemFlags.Supportive, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, CastType = CastType.Position, Range = ItemData.Sightstone.GetItem().Range }; // Place wards RubySightstone = new CustomItem { Name = "ruby-sightstone", DisplayName = "Ruby Sightstone", Item = ItemData.Ruby_Sightstone.GetItem(), Flags = ItemFlags.Supportive, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, CastType = CastType.Position, Range = ItemData.Ruby_Sightstone.GetItem().Range }; // Place wards EyeOfTheWatchers = new CustomItem { Name = "eye-of-the-watchers", DisplayName = "Eye of the Watchers", Item = ItemData.Eye_of_the_Watchers.GetItem(), Flags = ItemFlags.Supportive, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, CastType = CastType.Position, Range = ItemData.Eye_of_the_Watchers.GetItem().Range }; // Place wards EyeOfTheEquinox = new CustomItem { Name = "eye-of-the-equinox", DisplayName = "Eye of the Equinox", Item = ItemData.Eye_of_the_Equinox.GetItem(), Flags = ItemFlags.Supportive, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, CastType = CastType.Position, Range = ItemData.Eye_of_the_Equinox.GetItem().Range }; // Place wards EyeOfTheOasis = new CustomItem { Name = "eye-of-the-oasis", DisplayName = "Eye of the Oasis", Item = ItemData.Eye_of_the_Oasis.GetItem(), Flags = ItemFlags.Supportive, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, CastType = CastType.Position, Range = ItemData.Eye_of_the_Oasis.GetItem().Range }; // Place wards TrackersKnife = new CustomItem { Name = "trackers-knife", DisplayName = "Tracker's Knife", Item = ItemData.Trackers_Knife.GetItem(), Flags = ItemFlags.Supportive, CombatFlags = CombatFlags.Melee | CombatFlags.Ranged, CastType = CastType.Position, Range = ItemData.Trackers_Knife.GetItem().Range }; Items = new List <CustomItem> { Youmuu, Hydra, BilgewaterCutlass, BladeRuinedKing, HextechGunblade, MikaelsCrucible, LocketIronSolari, FrostQueensClaim, TalismanOfAscension, FaceOfTheMountain, Sightstone, RubySightstone, EyeOfTheWatchers, EyeOfTheEquinox, EyeOfTheOasis, TrackersKnife }; MaxRange = Items.Max(s => s.Range); } catch (Exception ex) { Global.Logger.AddItem(new LogItem(ex)); } }
protected override void Combo() { var useQ = Menu.Item(Menu.Name + ".combo.q").GetValue <bool>() && Q.IsReady(); var useW = Menu.Item(Menu.Name + ".combo.w").GetValue <bool>() && W.IsReady(); var useE = Menu.Item(Menu.Name + ".combo.e").GetValue <bool>() && E.IsReady(); var useR = Ultimate.IsActive(UltimateModeType.Combo) && R.IsReady(); if (useR) { var target = TargetSelector.GetTarget(R.Range, R.DamageType); if (target != null) { if (!RLogic(UltimateModeType.Combo, target)) { RLogicSingle(UltimateModeType.Combo); } } } if (useE && !Player.IsWindingUp && !IsReloading()) { var target = TargetSelector.GetTarget( E.Range + Player.AttackRange + Player.BoundingRadius, E.DamageType); if (target != null) { var pos = Menu.Item(Menu.Name + ".combo.e-mode").GetValue <StringList>().SelectedIndex == 0 ? Utils.GetDashPosition( E, target, Menu.Item(Menu.Name + ".combo.e-safety").GetValue <Slider>().Value) : Player.Position.Extend( Game.CursorPos, Math.Min(E.Range, Player.Position.Distance(Game.CursorPos))); if (!pos.Equals(Vector3.Zero)) { if (GetAmmoCount() == 1 && !pos.IsUnderTurret(false) || (!GameObjects.EnemyHeroes.Any(e => e.IsValidTarget() && Orbwalking.InAutoAttackRange(e)) && GameObjects.EnemyHeroes.Any( e => e.IsValidTarget() && pos.Distance(e.Position) < Orbwalking.GetRealAutoAttackRange(e)) && target.Health < Player.GetAutoAttackDamage(target) * 2)) { E.Cast(pos); } } } } if (useQ) { QLogic(Q.GetHitChance("combo")); } if (useW) { var target = TargetSelector.GetTarget(W); if (target != null) { var best = CPrediction.Circle(W, target, W.GetHitChance("combo")); if (best.TotalHits > 0 && !best.CastPosition.Equals(Vector3.Zero)) { W.Cast(best.CastPosition); } } } }