YIhol


SUBMITTED BY: Alerand

DATE: May 4, 2016, 9:25 a.m.

FORMAT: Text only

SIZE: 18.4 kB

HITS: 18302

  1. using System;
  2. using System.Linq;
  3. using System.Windows.Forms.VisualStyles;
  4. using LeagueSharp;
  5. using LeagueSharp.Common;
  6. using Color = System.Drawing.Color;
  7. using ItemData = LeagueSharp.Common.Data.ItemData;
  8. using SharpDX;
  9. namespace HoolaMasterYi
  10. {
  11. public class Program
  12. {
  13. private static Menu Menu;
  14. private static Orbwalking.Orbwalker Orbwalker;
  15. private static readonly Obj_AI_Hero Player = ObjectManager.Player;
  16. private static readonly HpBarIndicator Indicator = new HpBarIndicator();
  17. private static Spell Q, W, E, R;
  18. private static bool AutoQ => Menu.Item("AutoQ").GetValue<bool>();
  19. private static bool AutoQOnly => Menu.Item("AutoQOnly").GetValue<bool>();
  20. private static bool KsQ => Menu.Item("KsQ").GetValue<bool>();
  21. private static bool KsT => Menu.Item("KsT").GetValue<bool>();
  22. private static bool KsB => Menu.Item("KsB").GetValue<bool>();
  23. private static bool CQ => Menu.Item("CQ").GetValue<bool>();
  24. private static bool CW => Menu.Item("CW").GetValue<bool>();
  25. private static bool CE => Menu.Item("CE").GetValue<bool>();
  26. private static bool CR => Menu.Item("CR").GetValue<bool>();
  27. private static bool CT => Menu.Item("CT").GetValue<bool>();
  28. private static bool CY => Menu.Item("CY").GetValue<bool>();
  29. private static bool CB => Menu.Item("CB").GetValue<bool>();
  30. private static bool HQ => Menu.Item("HQ").GetValue<bool>();
  31. private static bool HW => Menu.Item("HW").GetValue<bool>();
  32. private static bool HE => Menu.Item("HE").GetValue<bool>();
  33. private static bool HT => Menu.Item("HT").GetValue<bool>();
  34. private static bool HY => Menu.Item("HY").GetValue<bool>();
  35. private static bool HB => Menu.Item("HB").GetValue<bool>();
  36. private static bool LW => Menu.Item("LW").GetValue<bool>();
  37. private static bool LE => Menu.Item("LE").GetValue<bool>();
  38. private static bool LI => Menu.Item("LI").GetValue<bool>();
  39. private static bool JQ => Menu.Item("JQ").GetValue<bool>();
  40. private static bool JW => Menu.Item("JW").GetValue<bool>();
  41. private static bool JE => Menu.Item("JE").GetValue<bool>();
  42. private static bool JI => Menu.Item("JI").GetValue<bool>();
  43. private static bool AutoY => Menu.Item("AutoY").GetValue<bool>();
  44. private static bool DQ => Menu.Item("DQ").GetValue<bool>();
  45. private static bool Dind => Menu.Item("Dind").GetValue<bool>();
  46. static void Main()
  47. {
  48. CustomEvents.Game.OnGameLoad += OnGameLoad;
  49. }
  50. static void OnGameLoad(EventArgs args)
  51. {
  52. Game.PrintChat("Hoola Master Yi - Loaded Successfully, Good Luck! :)");
  53. Q = new Spell(SpellSlot.Q, 600);
  54. W = new Spell(SpellSlot.W);
  55. E = new Spell(SpellSlot.E);
  56. R = new Spell(SpellSlot.R);
  57. OnMenuLoad();
  58. Q.SetTargetted(0.25f, float.MaxValue);
  59. Game.OnUpdate += Game_OnUpdate;
  60. Game.OnUpdate += DetectSpell;
  61. Drawing.OnEndScene += Drawing_OnEndScene;
  62. Obj_AI_Base.OnDoCast += OnDoCast;
  63. Obj_AI_Base.OnPlayAnimation += OnPlay;
  64. Spellbook.OnCastSpell += OnCast;
  65. Obj_AI_Base.OnDoCast += OnDoCastJC;
  66. Obj_AI_Base.OnProcessSpellCast += BeforeAttack;
  67. Obj_AI_Base.OnProcessSpellCast += BeforeAttackJC;
  68. Obj_AI_Base.OnProcessSpellCast += DetectBlink;
  69. Drawing.OnDraw += OnDraw;
  70. }
  71. private static void DetectBlink(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
  72. {
  73. if (sender.IsMe || args.SData.IsAutoAttack()) return;
  74. if (Spelldatabase.list.Contains(args.SData.Name.ToLower()) &&
  75. (((Player.Distance(args.End) >= Q.Range) && AutoQOnly) || !AutoQOnly) && Q.IsReady() && AutoQ)
  76. Q.Cast((Obj_AI_Base)args.Target);
  77. }
  78. private static void DetectSpell(EventArgs args)
  79. {
  80. var target = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical);
  81. 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)
  82. Q.Cast(target);
  83. }
  84. static void OnDraw(EventArgs args)
  85. {
  86. if (DQ) Render.Circle.DrawCircle(Player.Position, Q.Range, Q.IsReady() ? Color.LimeGreen : Color.IndianRed);
  87. }
  88. static void BeforeAttack(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
  89. {
  90. if (!sender.IsMe || !args.Target.IsValid || !Orbwalking.IsAutoAttack(args.SData.Name)) return;
  91. if (args.Target is Obj_AI_Hero)
  92. {
  93. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo)
  94. {
  95. if (CR) R.Cast();
  96. if (CY) CastYoumoo();
  97. if (CE) E.Cast();
  98. }
  99. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed)
  100. {
  101. if (HY) CastYoumoo();
  102. if (HE) E.Cast();
  103. }
  104. }
  105. if (args.Target is Obj_AI_Minion)
  106. {
  107. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear)
  108. {
  109. var Minions = MinionManager.GetMinions(ItemData.Ravenous_Hydra_Melee_Only.Range);
  110. if (Minions[0].IsValid && Minions.Count != 0) if (LE) E.Cast();
  111. }
  112. }
  113. }
  114. static void BeforeAttackJC(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
  115. {
  116. if (!sender.IsMe || !args.Target.IsValid || !Orbwalking.IsAutoAttack(args.SData.Name)) return;
  117. if (args.Target is Obj_AI_Minion)
  118. {
  119. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear)
  120. {
  121. var Mobs = MinionManager.GetMinions(ItemData.Ravenous_Hydra_Melee_Only.Range, MinionTypes.All, MinionTeam.Neutral, MinionOrderTypes.MaxHealth);
  122. if (Mobs[0].IsValid && Mobs.Count != 0) if (JE) E.Cast();
  123. }
  124. }
  125. }
  126. private static void OnCast(Spellbook Sender, SpellbookCastSpellEventArgs args)
  127. {
  128. if (args.Slot == SpellSlot.R && AutoY) CastYoumoo();
  129. }
  130. private static void OnPlay(Obj_AI_Base Sender, GameObjectPlayAnimationEventArgs args)
  131. {
  132. if (!Sender.IsMe) return;
  133. if (args.Animation.Contains("Spell2"))
  134. {
  135. Orbwalking.LastAATick = 0;
  136. }
  137. }
  138. static void UseCastItem(int t)
  139. {
  140. for (int i = 0; i < t; i = i + 1)
  141. {
  142. if (HasItem)
  143. Utility.DelayAction.Add(i, CastItem);
  144. }
  145. }
  146. static void CastItem()
  147. {
  148. if (ItemData.Tiamat_Melee_Only.GetItem().IsReady())
  149. ItemData.Tiamat_Melee_Only.GetItem().Cast();
  150. if (ItemData.Ravenous_Hydra_Melee_Only.GetItem().IsReady())
  151. ItemData.Ravenous_Hydra_Melee_Only.GetItem().Cast();
  152. }
  153. static void CastYoumoo()
  154. {
  155. if (ItemData.Youmuus_Ghostblade.GetItem().IsReady())
  156. ItemData.Youmuus_Ghostblade.GetItem().Cast();
  157. }
  158. static void CastBOTRK(Obj_AI_Hero target)
  159. {
  160. if (ItemData.Blade_of_the_Ruined_King.GetItem().IsReady())
  161. ItemData.Blade_of_the_Ruined_King.GetItem().Cast(target);
  162. if (ItemData.Bilgewater_Cutlass.GetItem().IsReady())
  163. ItemData.Bilgewater_Cutlass.GetItem().Cast(target);
  164. }
  165. static bool HasItem => (ItemData.Tiamat_Melee_Only.GetItem().IsReady() || ItemData.Ravenous_Hydra_Melee_Only.GetItem().IsReady());
  166. private static void OnDoCast(Obj_AI_Base Sender, GameObjectProcessSpellCastEventArgs args)
  167. {
  168. if (!Sender.IsMe || !args.Target.IsValid && !Orbwalking.IsAutoAttack(args.SData.Name)) return;
  169. if (args.Target is Obj_AI_Hero && args.Target.IsValid)
  170. {
  171. var target = (Obj_AI_Hero)args.Target;
  172. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo)
  173. {
  174. if (CB) CastBOTRK(target);
  175. if (CT) UseCastItem(300);
  176. if (CW) Utility.DelayAction.Add(1, () => W.Cast());
  177. }
  178. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed)
  179. {
  180. if (HB) CastBOTRK(target);
  181. if (HT) UseCastItem(300);
  182. if (HW) Utility.DelayAction.Add(1, () => W.Cast());
  183. }
  184. }
  185. if (args.Target is Obj_AI_Minion && args.Target.IsValid)
  186. {
  187. var Minions = MinionManager.GetMinions(ItemData.Ravenous_Hydra_Melee_Only.Range);
  188. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear)
  189. {
  190. if (Minions.Count != 0 && Minions[0].IsValid)
  191. {
  192. if (LI) UseCastItem(300);
  193. if (LW) Utility.DelayAction.Add(1, () => W.Cast());
  194. }
  195. }
  196. }
  197. }
  198. private static void OnDoCastJC(Obj_AI_Base Sender, GameObjectProcessSpellCastEventArgs args)
  199. {
  200. if (!Sender.IsMe || !args.Target.IsValid && !Orbwalking.IsAutoAttack(args.SData.Name)) return;
  201. if (args.Target is Obj_AI_Minion && args.Target.IsValid)
  202. {
  203. var Mobs = MinionManager.GetMinions(ItemData.Ravenous_Hydra_Melee_Only.Range, MinionTypes.All, MinionTeam.Neutral);
  204. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear)
  205. {
  206. if (Mobs[0].IsValid && Mobs.Count != 0)
  207. {
  208. if (Q.IsReady() && JQ) Q.Cast(Mobs[0]);
  209. if (!Q.IsReady() || (Q.IsReady() && !JQ))
  210. {
  211. if (JI) UseCastItem(300);
  212. if (JW) Utility.DelayAction.Add(1, () => W.Cast());
  213. }
  214. }
  215. }
  216. }
  217. }
  218. private static void OnMenuLoad()
  219. {
  220. Menu = new Menu("Hoola Master Yi", "hoolamasteryi", true);
  221. Menu.AddSubMenu(new Menu("Orbwalking", "Orbwalking"));
  222. Orbwalker = new Orbwalking.Orbwalker(Menu.SubMenu("Orbwalking"));
  223. var targetSelectorMenu = new Menu("Target Selector", "Target Selector");
  224. TargetSelector.AddToMenu(targetSelectorMenu);
  225. Menu.AddSubMenu(targetSelectorMenu);
  226. var Combo = new Menu("Combo", "Combo");
  227. Combo.AddItem(new MenuItem("CQ", "Use Q").SetValue(false));
  228. Combo.AddItem(new MenuItem("CW", "Use W").SetValue(true));
  229. Combo.AddItem(new MenuItem("CE", "Use E").SetValue(true));
  230. Combo.AddItem(new MenuItem("CR", "Use R").SetValue(false));
  231. Combo.AddItem(new MenuItem("CT", "Use Tiamat/Hydra").SetValue(true));
  232. Combo.AddItem(new MenuItem("CY", "Use Youmoo").SetValue(true));
  233. Combo.AddItem(new MenuItem("CB", "Use BOTRK").SetValue(false));
  234. Menu.AddSubMenu(Combo);
  235. var Harass = new Menu("Harass", "Harass");
  236. Harass.AddItem(new MenuItem("HQ", "Use Q").SetValue(true));
  237. Harass.AddItem(new MenuItem("HW", "Use W").SetValue(true));
  238. Harass.AddItem(new MenuItem("HE", "Use E").SetValue(true));
  239. Harass.AddItem(new MenuItem("HT", "Use Tiamat/Hydra").SetValue(true));
  240. Harass.AddItem(new MenuItem("HY", "Use Youmoo").SetValue(true));
  241. Harass.AddItem(new MenuItem("HB", "Use BOTRK").SetValue(true));
  242. Menu.AddSubMenu(Harass);
  243. var Laneclear = new Menu("Laneclear", "Laneclear");
  244. Laneclear.AddItem(new MenuItem("LW", "Use W").SetValue(false));
  245. Laneclear.AddItem(new MenuItem("LE", "Use E").SetValue(false));
  246. Laneclear.AddItem(new MenuItem("LI", "Use Tiamat/Hydra").SetValue(false));
  247. Menu.AddSubMenu(Laneclear);
  248. var Jungleclear = new Menu("Jungleclear", "Jungleclear");
  249. Jungleclear.AddItem(new MenuItem("JQ", "Use Q").SetValue(true));
  250. Jungleclear.AddItem(new MenuItem("JW", "Use W").SetValue(false));
  251. Jungleclear.AddItem(new MenuItem("JE", "Use E").SetValue(true));
  252. Jungleclear.AddItem(new MenuItem("JI", "Use Tiamat/Hydra").SetValue(true));
  253. Menu.AddSubMenu(Jungleclear);
  254. var killsteal = new Menu("killsteal", "Killsteal");
  255. killsteal.AddItem(new MenuItem("KsQ", "Ks Q").SetValue(false));
  256. killsteal.AddItem(new MenuItem("KsT", "Ks Tiamat/Hydra").SetValue(true));
  257. killsteal.AddItem(new MenuItem("KsB", "Ks BOTRK").SetValue(true));
  258. Menu.AddSubMenu(killsteal);
  259. var Draw = new Menu("Draw", "Draw");
  260. Draw.AddItem(new MenuItem("Dind", "Draw Damage Indicator").SetValue(true));
  261. Draw.AddItem(new MenuItem("DQ", "Draw Q").SetValue(false));
  262. Menu.AddSubMenu(Draw);
  263. var Misc = new Menu("Misc", "Misc");
  264. Misc.AddItem(new MenuItem("AutoQ", "Q Follow Dashing Target").SetValue(true));
  265. Misc.AddItem(new MenuItem("AutoQOnly", "Follow Q If Will Can't Q Only").SetValue(new KeyBind('C', KeyBindType.Press)));
  266. Misc.AddItem(new MenuItem("AutoY", "Use Youmoo While R").SetValue(true));
  267. Menu.AddSubMenu(Misc);
  268. Menu.AddToMainMenu();
  269. }
  270. static void killsteal()
  271. {
  272. if (KsQ && Q.IsReady())
  273. {
  274. var targets = HeroManager.Enemies.Where(x => x.IsValidTarget(Q.Range) && !x.IsZombie);
  275. foreach (var target in targets)
  276. {
  277. if (target.IsValid && target.Health < Q.GetDamage(target) && (!target.HasBuff("kindrednodeathbuff") || !target.HasBuff("Undying Rage") || !target.HasBuff("JudicatorIntervention")) && (!Orbwalking.InAutoAttackRange(target) || !Orbwalking.CanAttack))
  278. Q.Cast(target);
  279. }
  280. }
  281. if (KsB &&
  282. (ItemData.Bilgewater_Cutlass.GetItem().IsReady() ||
  283. ItemData.Blade_of_the_Ruined_King.GetItem().IsReady()))
  284. {
  285. var targets =
  286. HeroManager.Enemies.Where(
  287. x => x.IsValidTarget(ItemData.Blade_of_the_Ruined_King.Range) && !x.IsZombie);
  288. foreach (var target in targets)
  289. {
  290. if (target.Health < Damage.GetItemDamage(Player, target, Damage.DamageItems.Bilgewater)) ItemData.Bilgewater_Cutlass.GetItem().Cast(target);
  291. if (target.Health < Damage.GetItemDamage(Player, target, Damage.DamageItems.Botrk)) ItemData.Blade_of_the_Ruined_King.GetItem().Cast(target);
  292. }
  293. }
  294. if (KsT &&
  295. (ItemData.Tiamat_Melee_Only.GetItem().IsReady() ||
  296. ItemData.Ravenous_Hydra_Melee_Only.GetItem().IsReady()))
  297. {
  298. var targets =
  299. HeroManager.Enemies.Where(
  300. x => x.IsValidTarget(ItemData.Ravenous_Hydra_Melee_Only.Range) && !x.IsZombie);
  301. foreach (var target in targets)
  302. {
  303. if (target.Health < Damage.GetItemDamage(Player, target, Damage.DamageItems.Tiamat)) ItemData.Tiamat_Melee_Only.GetItem().Cast();
  304. if (target.Health < Damage.GetItemDamage(Player, target, Damage.DamageItems.Hydra)) ItemData.Ravenous_Hydra_Melee_Only.GetItem().Cast();
  305. }
  306. }
  307. }
  308. static void Game_OnUpdate(EventArgs args)
  309. {
  310. killsteal();
  311. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo && CQ) Combo();
  312. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed && HQ) Harass();
  313. }
  314. static void Combo()
  315. {
  316. var target = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical);
  317. if (Q.IsReady() && target.IsValid) Q.Cast(target);
  318. }
  319. static void Harass()
  320. {
  321. var target = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical);
  322. if (Q.IsReady() && target.IsValid) Q.Cast(target);
  323. }
  324. static float getComboDamage(Obj_AI_Base enemy)
  325. {
  326. if (enemy != null)
  327. {
  328. float damage = 0;
  329. if (Q.IsReady())
  330. damage += Q.GetDamage(enemy) + (float)Player.GetAutoAttackDamage(enemy, true);
  331. if (E.IsReady())
  332. damage += E.GetDamage(enemy);
  333. if (W.IsReady())
  334. damage += (float)Player.GetAutoAttackDamage(enemy, true);
  335. if (!Player.IsWindingUp)
  336. damage += (float)Player.GetAutoAttackDamage(enemy, true);
  337. return damage;
  338. }
  339. return 0;
  340. }
  341. static void Drawing_OnEndScene(EventArgs args)
  342. {
  343. foreach (
  344. var enemy in
  345. ObjectManager.Get<Obj_AI_Hero>()
  346. .Where(ene => ene.IsValidTarget() && !ene.IsZombie))
  347. {
  348. if (Dind)
  349. {
  350. Indicator.unit = enemy;
  351. Indicator.drawDmg(getComboDamage(enemy), new ColorBGRA(255, 204, 0, 160));
  352. }
  353. }
  354. }
  355. }
  356. }

comments powered by Disqus