using System; using System.Linq; using System.Windows.Forms.VisualStyles; using LeagueSharp; using LeagueSharp.Common; using Color = System.Drawing.Color; using ItemData = LeagueSharp.Common.Data.ItemData; using SharpDX; namespace HoolaMasterYi { public class Program { private static Menu Menu; private static Orbwalking.Orbwalker Orbwalker; private static readonly Obj_AI_Hero Player = ObjectManager.Player; private static readonly HpBarIndicator Indicator = new HpBarIndicator(); private static Spell Q, W, E, R; private static bool AutoQ => Menu.Item("AutoQ").GetValue(); private static bool AutoQOnly => Menu.Item("AutoQOnly").GetValue(); private static bool KsQ => Menu.Item("KsQ").GetValue(); private static bool KsT => Menu.Item("KsT").GetValue(); private static bool KsB => Menu.Item("KsB").GetValue(); private static bool CQ => Menu.Item("CQ").GetValue(); private static bool CW => Menu.Item("CW").GetValue(); private static bool CE => Menu.Item("CE").GetValue(); private static bool CR => Menu.Item("CR").GetValue(); private static bool CT => Menu.Item("CT").GetValue(); private static bool CY => Menu.Item("CY").GetValue(); private static bool CB => Menu.Item("CB").GetValue(); private static bool HQ => Menu.Item("HQ").GetValue(); private static bool HW => Menu.Item("HW").GetValue(); private static bool HE => Menu.Item("HE").GetValue(); private static bool HT => Menu.Item("HT").GetValue(); private static bool HY => Menu.Item("HY").GetValue(); private static bool HB => Menu.Item("HB").GetValue(); private static bool LW => Menu.Item("LW").GetValue(); private static bool LE => Menu.Item("LE").GetValue(); private static bool LI => Menu.Item("LI").GetValue(); private static bool JQ => Menu.Item("JQ").GetValue(); private static bool JW => Menu.Item("JW").GetValue(); private static bool JE => Menu.Item("JE").GetValue(); private static bool JI => Menu.Item("JI").GetValue(); private static bool AutoY => Menu.Item("AutoY").GetValue(); private static bool DQ => Menu.Item("DQ").GetValue(); private static bool Dind => Menu.Item("Dind").GetValue(); static void Main() { CustomEvents.Game.OnGameLoad += OnGameLoad; } static void OnGameLoad(EventArgs args) { Game.PrintChat("Hoola Master Yi - Loaded Successfully, Good Luck! :)"); Q = new Spell(SpellSlot.Q, 600); W = new Spell(SpellSlot.W); E = new Spell(SpellSlot.E); R = new Spell(SpellSlot.R); OnMenuLoad(); Q.SetTargetted(0.25f, float.MaxValue); Game.OnUpdate += Game_OnUpdate; Game.OnUpdate += DetectSpell; Drawing.OnEndScene += Drawing_OnEndScene; Obj_AI_Base.OnDoCast += OnDoCast; Obj_AI_Base.OnPlayAnimation += OnPlay; Spellbook.OnCastSpell += OnCast; Obj_AI_Base.OnDoCast += OnDoCastJC; Obj_AI_Base.OnProcessSpellCast += BeforeAttack; Obj_AI_Base.OnProcessSpellCast += BeforeAttackJC; Obj_AI_Base.OnProcessSpellCast += DetectBlink; Drawing.OnDraw += OnDraw; } private static void DetectBlink(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (sender.IsMe || args.SData.IsAutoAttack()) return; if (Spelldatabase.list.Contains(args.SData.Name.ToLower()) && (((Player.Distance(args.End) >= Q.Range) && AutoQOnly) || !AutoQOnly) && Q.IsReady() && AutoQ) Q.Cast((Obj_AI_Base)args.Target); } private static void DetectSpell(EventArgs args) { var target = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical); if (target.IsDashing() && (((Player.Distance(target.GetWaypoints().Last()) >= Q.Range) && AutoQOnly) || !AutoQOnly) && Q.IsReady() && AutoQ && Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo || Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed) Q.Cast(target); } static void OnDraw(EventArgs args) { if (DQ) Render.Circle.DrawCircle(Player.Position, Q.Range, Q.IsReady() ? Color.LimeGreen : Color.IndianRed); } static void BeforeAttack(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (!sender.IsMe || !args.Target.IsValid || !Orbwalking.IsAutoAttack(args.SData.Name)) return; if (args.Target is Obj_AI_Hero) { if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo) { if (CR) R.Cast(); if (CY) CastYoumoo(); if (CE) E.Cast(); } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed) { if (HY) CastYoumoo(); if (HE) E.Cast(); } } if (args.Target is Obj_AI_Minion) { if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) { var Minions = MinionManager.GetMinions(ItemData.Ravenous_Hydra_Melee_Only.Range); if (Minions[0].IsValid && Minions.Count != 0) if (LE) E.Cast(); } } } static void BeforeAttackJC(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (!sender.IsMe || !args.Target.IsValid || !Orbwalking.IsAutoAttack(args.SData.Name)) return; if (args.Target is Obj_AI_Minion) { if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) { var Mobs = MinionManager.GetMinions(ItemData.Ravenous_Hydra_Melee_Only.Range, MinionTypes.All, MinionTeam.Neutral, MinionOrderTypes.MaxHealth); if (Mobs[0].IsValid && Mobs.Count != 0) if (JE) E.Cast(); } } } private static void OnCast(Spellbook Sender, SpellbookCastSpellEventArgs args) { if (args.Slot == SpellSlot.R && AutoY) CastYoumoo(); } private static void OnPlay(Obj_AI_Base Sender, GameObjectPlayAnimationEventArgs args) { if (!Sender.IsMe) return; if (args.Animation.Contains("Spell2")) { Orbwalking.LastAATick = 0; } } static void UseCastItem(int t) { for (int i = 0; i < t; i = i + 1) { if (HasItem) Utility.DelayAction.Add(i, CastItem); } } static void CastItem() { if (ItemData.Tiamat_Melee_Only.GetItem().IsReady()) ItemData.Tiamat_Melee_Only.GetItem().Cast(); if (ItemData.Ravenous_Hydra_Melee_Only.GetItem().IsReady()) ItemData.Ravenous_Hydra_Melee_Only.GetItem().Cast(); } static void CastYoumoo() { if (ItemData.Youmuus_Ghostblade.GetItem().IsReady()) ItemData.Youmuus_Ghostblade.GetItem().Cast(); } static void CastBOTRK(Obj_AI_Hero target) { if (ItemData.Blade_of_the_Ruined_King.GetItem().IsReady()) ItemData.Blade_of_the_Ruined_King.GetItem().Cast(target); if (ItemData.Bilgewater_Cutlass.GetItem().IsReady()) ItemData.Bilgewater_Cutlass.GetItem().Cast(target); } static bool HasItem => (ItemData.Tiamat_Melee_Only.GetItem().IsReady() || ItemData.Ravenous_Hydra_Melee_Only.GetItem().IsReady()); private static void OnDoCast(Obj_AI_Base Sender, GameObjectProcessSpellCastEventArgs args) { if (!Sender.IsMe || !args.Target.IsValid && !Orbwalking.IsAutoAttack(args.SData.Name)) return; if (args.Target is Obj_AI_Hero && args.Target.IsValid) { var target = (Obj_AI_Hero)args.Target; if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo) { if (CB) CastBOTRK(target); if (CT) UseCastItem(300); if (CW) Utility.DelayAction.Add(1, () => W.Cast()); } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed) { if (HB) CastBOTRK(target); if (HT) UseCastItem(300); if (HW) Utility.DelayAction.Add(1, () => W.Cast()); } } if (args.Target is Obj_AI_Minion && args.Target.IsValid) { var Minions = MinionManager.GetMinions(ItemData.Ravenous_Hydra_Melee_Only.Range); if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) { if (Minions.Count != 0 && Minions[0].IsValid) { if (LI) UseCastItem(300); if (LW) Utility.DelayAction.Add(1, () => W.Cast()); } } } } private static void OnDoCastJC(Obj_AI_Base Sender, GameObjectProcessSpellCastEventArgs args) { if (!Sender.IsMe || !args.Target.IsValid && !Orbwalking.IsAutoAttack(args.SData.Name)) return; if (args.Target is Obj_AI_Minion && args.Target.IsValid) { var Mobs = MinionManager.GetMinions(ItemData.Ravenous_Hydra_Melee_Only.Range, MinionTypes.All, MinionTeam.Neutral); if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) { if (Mobs[0].IsValid && Mobs.Count != 0) { if (Q.IsReady() && JQ) Q.Cast(Mobs[0]); if (!Q.IsReady() || (Q.IsReady() && !JQ)) { if (JI) UseCastItem(300); if (JW) Utility.DelayAction.Add(1, () => W.Cast()); } } } } } private static void OnMenuLoad() { Menu = new Menu("Hoola Master Yi", "hoolamasteryi", true); Menu.AddSubMenu(new Menu("Orbwalking", "Orbwalking")); Orbwalker = new Orbwalking.Orbwalker(Menu.SubMenu("Orbwalking")); var targetSelectorMenu = new Menu("Target Selector", "Target Selector"); TargetSelector.AddToMenu(targetSelectorMenu); Menu.AddSubMenu(targetSelectorMenu); var Combo = new Menu("Combo", "Combo"); Combo.AddItem(new MenuItem("CQ", "Use Q").SetValue(false)); Combo.AddItem(new MenuItem("CW", "Use W").SetValue(true)); Combo.AddItem(new MenuItem("CE", "Use E").SetValue(true)); Combo.AddItem(new MenuItem("CR", "Use R").SetValue(false)); Combo.AddItem(new MenuItem("CT", "Use Tiamat/Hydra").SetValue(true)); Combo.AddItem(new MenuItem("CY", "Use Youmoo").SetValue(true)); Combo.AddItem(new MenuItem("CB", "Use BOTRK").SetValue(false)); Menu.AddSubMenu(Combo); var Harass = new Menu("Harass", "Harass"); Harass.AddItem(new MenuItem("HQ", "Use Q").SetValue(true)); Harass.AddItem(new MenuItem("HW", "Use W").SetValue(true)); Harass.AddItem(new MenuItem("HE", "Use E").SetValue(true)); Harass.AddItem(new MenuItem("HT", "Use Tiamat/Hydra").SetValue(true)); Harass.AddItem(new MenuItem("HY", "Use Youmoo").SetValue(true)); Harass.AddItem(new MenuItem("HB", "Use BOTRK").SetValue(true)); Menu.AddSubMenu(Harass); var Laneclear = new Menu("Laneclear", "Laneclear"); Laneclear.AddItem(new MenuItem("LW", "Use W").SetValue(false)); Laneclear.AddItem(new MenuItem("LE", "Use E").SetValue(false)); Laneclear.AddItem(new MenuItem("LI", "Use Tiamat/Hydra").SetValue(false)); Menu.AddSubMenu(Laneclear); var Jungleclear = new Menu("Jungleclear", "Jungleclear"); Jungleclear.AddItem(new MenuItem("JQ", "Use Q").SetValue(true)); Jungleclear.AddItem(new MenuItem("JW", "Use W").SetValue(false)); Jungleclear.AddItem(new MenuItem("JE", "Use E").SetValue(true)); Jungleclear.AddItem(new MenuItem("JI", "Use Tiamat/Hydra").SetValue(true)); Menu.AddSubMenu(Jungleclear); var killsteal = new Menu("killsteal", "Killsteal"); killsteal.AddItem(new MenuItem("KsQ", "Ks Q").SetValue(false)); killsteal.AddItem(new MenuItem("KsT", "Ks Tiamat/Hydra").SetValue(true)); killsteal.AddItem(new MenuItem("KsB", "Ks BOTRK").SetValue(true)); Menu.AddSubMenu(killsteal); var Draw = new Menu("Draw", "Draw"); Draw.AddItem(new MenuItem("Dind", "Draw Damage Indicator").SetValue(true)); Draw.AddItem(new MenuItem("DQ", "Draw Q").SetValue(false)); Menu.AddSubMenu(Draw); var Misc = new Menu("Misc", "Misc"); Misc.AddItem(new MenuItem("AutoQ", "Q Follow Dashing Target").SetValue(true)); Misc.AddItem(new MenuItem("AutoQOnly", "Follow Q If Will Can't Q Only").SetValue(new KeyBind('C', KeyBindType.Press))); Misc.AddItem(new MenuItem("AutoY", "Use Youmoo While R").SetValue(true)); Menu.AddSubMenu(Misc); Menu.AddToMainMenu(); } static void killsteal() { if (KsQ && Q.IsReady()) { var targets = HeroManager.Enemies.Where(x => x.IsValidTarget(Q.Range) && !x.IsZombie); foreach (var target in targets) { if (target.IsValid && target.Health < Q.GetDamage(target) && (!target.HasBuff("kindrednodeathbuff") || !target.HasBuff("Undying Rage") || !target.HasBuff("JudicatorIntervention")) && (!Orbwalking.InAutoAttackRange(target) || !Orbwalking.CanAttack)) Q.Cast(target); } } if (KsB && (ItemData.Bilgewater_Cutlass.GetItem().IsReady() || ItemData.Blade_of_the_Ruined_King.GetItem().IsReady())) { var targets = HeroManager.Enemies.Where( x => x.IsValidTarget(ItemData.Blade_of_the_Ruined_King.Range) && !x.IsZombie); foreach (var target in targets) { if (target.Health < Damage.GetItemDamage(Player, target, Damage.DamageItems.Bilgewater)) ItemData.Bilgewater_Cutlass.GetItem().Cast(target); if (target.Health < Damage.GetItemDamage(Player, target, Damage.DamageItems.Botrk)) ItemData.Blade_of_the_Ruined_King.GetItem().Cast(target); } } if (KsT && (ItemData.Tiamat_Melee_Only.GetItem().IsReady() || ItemData.Ravenous_Hydra_Melee_Only.GetItem().IsReady())) { var targets = HeroManager.Enemies.Where( x => x.IsValidTarget(ItemData.Ravenous_Hydra_Melee_Only.Range) && !x.IsZombie); foreach (var target in targets) { if (target.Health < Damage.GetItemDamage(Player, target, Damage.DamageItems.Tiamat)) ItemData.Tiamat_Melee_Only.GetItem().Cast(); if (target.Health < Damage.GetItemDamage(Player, target, Damage.DamageItems.Hydra)) ItemData.Ravenous_Hydra_Melee_Only.GetItem().Cast(); } } } static void Game_OnUpdate(EventArgs args) { killsteal(); if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo && CQ) Combo(); if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed && HQ) Harass(); } static void Combo() { var target = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical); if (Q.IsReady() && target.IsValid) Q.Cast(target); } static void Harass() { var target = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical); if (Q.IsReady() && target.IsValid) Q.Cast(target); } static float getComboDamage(Obj_AI_Base enemy) { if (enemy != null) { float damage = 0; if (Q.IsReady()) damage += Q.GetDamage(enemy) + (float)Player.GetAutoAttackDamage(enemy, true); if (E.IsReady()) damage += E.GetDamage(enemy); if (W.IsReady()) damage += (float)Player.GetAutoAttackDamage(enemy, true); if (!Player.IsWindingUp) damage += (float)Player.GetAutoAttackDamage(enemy, true); return damage; } return 0; } static void Drawing_OnEndScene(EventArgs args) { foreach ( var enemy in ObjectManager.Get() .Where(ene => ene.IsValidTarget() && !ene.IsZombie)) { if (Dind) { Indicator.unit = enemy; Indicator.drawDmg(getComboDamage(enemy), new ColorBGRA(255, 204, 0, 160)); } } } } }