Advertisement
Guest User

Untitled

a guest
Feb 25th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 43.30 KB | None | 0 0
  1. using System.Net.Configuration;
  2. using System.Resources;
  3. using System.Security.Authentication.ExtendedProtection;
  4.  
  5. namespace Irelia_By_Kornis
  6. {
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Drawing;
  10. using System.Linq;
  11.  
  12. using Aimtec;
  13. using Aimtec.SDK.Damage;
  14. using Aimtec.SDK.Extensions;
  15. using Aimtec.SDK.Menu;
  16. using Aimtec.SDK.Menu.Components;
  17. using Aimtec.SDK.Orbwalking;
  18. using Aimtec.SDK.TargetSelector;
  19. using Aimtec.SDK.Util.Cache;
  20. using Aimtec.SDK.Prediction.Skillshots;
  21. using Aimtec.SDK.Util;
  22.  
  23.  
  24. using Spell = Aimtec.SDK.Spell;
  25.  
  26. internal class Irelia
  27. {
  28. public static Menu Menu = new Menu("Irelia By Kornis", "Irelia by Kornis", true);
  29.  
  30. public static Orbwalker Orbwalker = new Orbwalker();
  31.  
  32. public static Obj_AI_Hero Player => ObjectManager.GetLocalPlayer();
  33.  
  34. public static Spell Q, W, E, R, Flash;
  35.  
  36. public void LoadSpells()
  37. {
  38. Q = new Spell(SpellSlot.Q, 650);
  39. W = new Spell(SpellSlot.W, 400);
  40. E = new Spell(SpellSlot.E, 325);
  41. R = new Spell(SpellSlot.R, 1000);
  42. R.SetSkillshot(0.5f, 120, 1600, false, SkillshotType.Line);
  43.  
  44. }
  45.  
  46. public Irelia()
  47. {
  48. Orbwalker.Attach(Menu);
  49. var ComboMenu = new Menu("combo", "Combo");
  50. {
  51. ComboMenu.Add(new MenuBool("useq", "Use Q in Combo"));
  52. ComboMenu.Add(new MenuSlider("minq", "^- Min. Q Range", 250, 20, 400));
  53. ComboMenu.Add(new MenuBool("gapq", "Use Q for Gapclose on Minion"));
  54. ComboMenu.Add(new MenuBool("outofq", "^- Only if out of Q Range"));
  55. ComboMenu.Add(new MenuBool("usew", "Use W in Combo"));
  56. ComboMenu.Add(new MenuBool("usee", "Use E in Combo"));
  57. ComboMenu.Add(new MenuBool("stune", "^- Only if Stuns"));
  58. ComboMenu.Add(new MenuBool("user", "Use R in Combo "));
  59. ComboMenu.Add(new MenuList("rusage", "R Usage", new[] {"Always", "Only if Killable"}, 1));
  60. ComboMenu.Add(new MenuBool("gapr", "Use R on Minions for Q Gapclose"));
  61. ComboMenu.Add(new MenuBool("sheen", "Sheen Proc."));
  62. ComboMenu.Add(new MenuBool("items", "Use Items"));
  63. }
  64. Menu.Add(ComboMenu);
  65. var HarassMenu = new Menu("harass", "Harass");
  66. {
  67. HarassMenu.Add(new MenuSlider("mana", "Mana Manager", 50));
  68. HarassMenu.Add(new MenuBool("useq", "Use Q to Harass"));
  69. HarassMenu.Add(new MenuBool("gapq", "^- Use Q for Gapclose on Minion"));
  70. HarassMenu.Add(new MenuBool("usew", "Use W to Harass"));
  71. HarassMenu.Add(new MenuBool("usee", "Use E to Harass"));
  72. HarassMenu.Add(new MenuBool("lastq", "Use Q to Last Hit", false));
  73. HarassMenu.Add(new MenuBool("qaa", "^- Don't use Q in AA Range"));
  74. HarassMenu.Add(new MenuBool("turret", "Don't use Q Under the Turret"));
  75.  
  76. }
  77. Menu.Add(HarassMenu);
  78. var FarmMenu = new Menu("farming", "Farming");
  79. {
  80. FarmMenu.Add(new MenuKeyBind("toggle", "Farm Toggle", KeyCode.Z, KeybindType.Toggle));
  81. FarmMenu.Add(new MenuSlider("mana", "Mana Manager", 50));
  82. FarmMenu.Add(new MenuBool("useq", "Use Q to Farm"));
  83. FarmMenu.Add(new MenuBool("lastq", "^- Only for Last Hit"));
  84. FarmMenu.Add(new MenuBool("turret", "Don't use Q Under the Turret"));
  85. FarmMenu.Add(new MenuBool("usew", "Use W to Farm"));
  86. }
  87. Menu.Add(FarmMenu);
  88. var LastMenu = new Menu("lasthit", "Last Hit");
  89. {
  90. LastMenu.Add(new MenuSlider("mana", "Mana Manager", 30));
  91. LastMenu.Add(new MenuBool("useq", "Use Q to Last Hit"));
  92. LastMenu.Add(new MenuBool("qaa", "^- Don't use Q in AA Range"));
  93. LastMenu.Add(new MenuBool("turret", "Don't use Q Under the Turret"));
  94. }
  95. Menu.Add(LastMenu);
  96. var KSMenu = new Menu("killsteal", "Killsteal");
  97. {
  98. KSMenu.Add(new MenuBool("ksq", "Killsteal with Q"));
  99. KSMenu.Add(new MenuBool("kse", "Killsteal with E"));
  100. KSMenu.Add(new MenuBool("ksr", "Killsteal with R"));
  101. }
  102. Menu.Add(KSMenu);
  103. var DrawMenu = new Menu("drawings", "Drawings");
  104. {
  105. DrawMenu.Add(new MenuBool("drawq", "Draw Q Range"));
  106. DrawMenu.Add(new MenuBool("drawe", "Draw E Range"));
  107. DrawMenu.Add(new MenuBool("drawr", "Draw R Range"));
  108. DrawMenu.Add(new MenuBool("drawdamage", "Draw Damage"));
  109. DrawMenu.Add(new MenuBool("drawkill", "Draw Minions Killable with Q"));
  110. }
  111. Menu.Add(DrawMenu);
  112. Menu.Attach();
  113. Gapcloser.Attach(Menu, "E Anti-GapClose");
  114. Render.OnPresent += Render_OnPresent;
  115. Game.OnUpdate += Game_OnUpdate;
  116. Orbwalker.PostAttack += OnPostAttack;
  117. Gapcloser.OnGapcloser += OnGapcloser;
  118. LoadSpells();
  119. Console.WriteLine("Irelia by Kornis - Loaded");
  120. }
  121.  
  122. private void OnGapcloser(Obj_AI_Hero target, GapcloserArgs Args)
  123. {
  124. if (target != null && Args.EndPosition.Distance(Player) < E.Range && E.Ready)
  125. {
  126.  
  127. E.CastOnUnit(target);
  128.  
  129.  
  130. }
  131.  
  132. }
  133.  
  134. public void OnPostAttack(object sender, PostAttackEventArgs args)
  135. {
  136. var heroTarget = args.Target as Obj_AI_Hero;
  137. if (Orbwalker.Mode.Equals(OrbwalkingMode.Combo))
  138. {
  139. if (!Menu["combo"]["items"].Enabled)
  140. {
  141. return;
  142. }
  143. Obj_AI_Hero hero = args.Target as Obj_AI_Hero;
  144. if (hero == null || !hero.IsValid || !hero.IsEnemy)
  145. {
  146. return;
  147. }
  148.  
  149.  
  150. if (Player.HasItem(ItemId.TitanicHydra) || Player.HasItem(ItemId.Tiamat) ||
  151. Player.HasItem(ItemId.RavenousHydra))
  152. {
  153. var items = new[] {ItemId.TitanicHydra, ItemId.Tiamat, ItemId.RavenousHydra};
  154. var slot = Player.Inventory.Slots.First(s => items.Contains(s.ItemId));
  155. if (slot != null)
  156. {
  157. var spellslot = slot.SpellSlot;
  158. if (spellslot != SpellSlot.Unknown &&
  159. Player.SpellBook.GetSpell(spellslot).State == SpellState.Ready)
  160. {
  161. Player.SpellBook.CastSpell(spellslot);
  162. }
  163. }
  164. }
  165. }
  166.  
  167.  
  168.  
  169. if (Orbwalker.Mode.Equals(OrbwalkingMode.Mixed))
  170. {
  171. if (!Menu["combo"]["items"].Enabled)
  172. {
  173. return;
  174. }
  175. Obj_AI_Hero hero = args.Target as Obj_AI_Hero;
  176. if (hero == null || !hero.IsValid || !hero.IsEnemy)
  177. {
  178. return;
  179. }
  180.  
  181.  
  182. if (Player.HasItem(ItemId.TitanicHydra) || Player.HasItem(ItemId.Tiamat) ||
  183. Player.HasItem(ItemId.RavenousHydra))
  184. {
  185. var items = new[] {ItemId.TitanicHydra, ItemId.Tiamat, ItemId.RavenousHydra};
  186. var slot = Player.Inventory.Slots.First(s => items.Contains(s.ItemId));
  187. if (slot != null)
  188. {
  189. var spellslot = slot.SpellSlot;
  190. if (spellslot != SpellSlot.Unknown &&
  191. Player.SpellBook.GetSpell(spellslot).State == SpellState.Ready)
  192. {
  193. Player.SpellBook.CastSpell(spellslot);
  194. }
  195. }
  196. }
  197. }
  198.  
  199.  
  200.  
  201. if (Orbwalker.Mode.Equals(OrbwalkingMode.Laneclear))
  202. {
  203. if (!Menu["combo"]["items"].Enabled)
  204. {
  205. return;
  206. }
  207. Obj_AI_Minion hero = args.Target as Obj_AI_Minion;
  208. if (hero == null || !hero.IsValid || !hero.IsEnemy)
  209. {
  210. return;
  211. }
  212. if (Player.HasItem(ItemId.TitanicHydra) || Player.HasItem(ItemId.Tiamat) ||
  213. Player.HasItem(ItemId.RavenousHydra))
  214. {
  215. var items = new[] {ItemId.TitanicHydra, ItemId.Tiamat, ItemId.RavenousHydra};
  216. var slot = Player.Inventory.Slots.First(s => items.Contains(s.ItemId));
  217. if (slot != null)
  218. {
  219. var spellslot = slot.SpellSlot;
  220. if (spellslot != SpellSlot.Unknown &&
  221. Player.SpellBook.GetSpell(spellslot).State == SpellState.Ready)
  222. {
  223. Player.SpellBook.CastSpell(spellslot);
  224. }
  225. }
  226. }
  227. }
  228.  
  229.  
  230. }
  231.  
  232. public static readonly List<string> SpecialChampions = new List<string> {"Annie", "Jhin"};
  233.  
  234. public static int SxOffset(Obj_AI_Hero target)
  235. {
  236. return SpecialChampions.Contains(target.ChampionName) ? 1 : 10;
  237. }
  238.  
  239. public static int SyOffset(Obj_AI_Hero target)
  240. {
  241. return SpecialChampions.Contains(target.ChampionName) ? 3 : 20;
  242. }
  243.  
  244. static double GetQ(Obj_AI_Base target)
  245. {
  246. double meow = 0;
  247.  
  248. if (Player.SpellBook.GetSpell(SpellSlot.Q).Level == 1)
  249. {
  250. meow = 20;
  251. }
  252. if (Player.SpellBook.GetSpell(SpellSlot.Q).Level == 2)
  253. {
  254. meow = 50;
  255. }
  256. if (Player.SpellBook.GetSpell(SpellSlot.Q).Level == 3)
  257. {
  258. meow = 80;
  259. }
  260. if (Player.SpellBook.GetSpell(SpellSlot.Q).Level == 4)
  261. {
  262. meow = 110;
  263. }
  264. if (Player.SpellBook.GetSpell(SpellSlot.Q).Level == 5)
  265. {
  266. meow = 140;
  267. }
  268. double ad = Player.TotalAttackDamage * 1.2;
  269. double full = ad + meow;
  270. double damage = Player.CalculateDamage(target, DamageType.Physical, full);
  271. return damage;
  272.  
  273. }
  274.  
  275. private void Render_OnPresent()
  276. {
  277. Vector2 maybeworks;
  278. var heropos = Render.WorldToScreen(Player.Position, out maybeworks);
  279. var xaOffset = (int) maybeworks.X;
  280. var yaOffset = (int) maybeworks.Y;
  281. if (Menu["drawings"]["drawq"].Enabled)
  282. {
  283. Render.Circle(Player.Position, Q.Range, 40, Color.Crimson);
  284. }
  285. if (Menu["drawings"]["drawe"].Enabled)
  286. {
  287. Render.Circle(Player.Position, E.Range, 40, Color.CornflowerBlue);
  288. }
  289. if (Menu["drawings"]["drawr"].Enabled)
  290. {
  291. Render.Circle(Player.Position, R.Range, 40, Color.Crimson);
  292. }
  293. if (Menu["drawings"]["drawkill"].Enabled)
  294. {
  295. var minion = GameObjects.EnemyMinions.Where(x => x.IsValidTarget(Q.Range));
  296. foreach (var m in minion)
  297. {
  298. if (m.IsValidTarget() && !m.IsDead)
  299. {
  300.  
  301. if (Q.Ready)
  302. {
  303. if (GetQ(m) >= m.Health)
  304. {
  305. Render.Circle(m.Position, 100, 40, Color.GreenYellow);
  306. }
  307. }
  308. }
  309.  
  310. }
  311. }
  312. if (Menu["farming"]["toggle"].Enabled)
  313. {
  314. Render.Text(xaOffset - 50, yaOffset + 40, Color.GreenYellow, "Farm: ON",
  315. RenderTextFlags.VerticalCenter);
  316. }
  317. if (!Menu["farming"]["toggle"].Enabled)
  318. {
  319. Render.Text(xaOffset - 50, yaOffset + 40, Color.Red, "Farm: OFF",
  320. RenderTextFlags.VerticalCenter);
  321. }
  322. if (Menu["drawings"]["drawdamage"].Enabled)
  323. {
  324.  
  325. ObjectManager.Get<Obj_AI_Base>()
  326. .Where(h => h is Obj_AI_Hero && h.IsValidTarget() && h.IsValidTarget(Q.Range * 2))
  327. .ToList()
  328. .ForEach(
  329. unit =>
  330. {
  331.  
  332.  
  333. var heroUnit = unit as Obj_AI_Hero;
  334. int width = 103;
  335. int height = 8;
  336. int xOffset = SxOffset(heroUnit);
  337. int yOffset = SyOffset(heroUnit);
  338. var barPos = unit.FloatingHealthBarPosition;
  339. barPos.X += xOffset;
  340. barPos.Y += yOffset;
  341. var drawEndXPos = barPos.X + width * (unit.HealthPercent() / 100);
  342. var drawStartXPos =
  343. (float) (barPos.X + (unit.Health >
  344. Player.GetSpellDamage(unit, SpellSlot.Q) +
  345. Player.GetSpellDamage(unit, SpellSlot.E) +
  346. Player.GetSpellDamage(unit, SpellSlot.W) +
  347. Player.GetSpellDamage(unit, SpellSlot.R) * 3
  348. ? width * ((unit.Health - (Player.GetSpellDamage(unit, SpellSlot.Q) +
  349. Player.GetSpellDamage(unit, SpellSlot.E) +
  350. Player.GetSpellDamage(unit, SpellSlot.W) +
  351. Player.GetSpellDamage(unit, SpellSlot.R) * 3)) /
  352. unit.MaxHealth * 100 / 100)
  353. : 0));
  354.  
  355. Render.Line(drawStartXPos, barPos.Y, drawEndXPos, barPos.Y, 8, true,
  356. unit.Health < Player.GetSpellDamage(unit, SpellSlot.Q) +
  357. Player.GetSpellDamage(unit, SpellSlot.W) +
  358. Player.GetSpellDamage(unit, SpellSlot.E) +
  359. Player.GetSpellDamage(unit, SpellSlot.R) * 3
  360. ? Color.GreenYellow
  361. : Color.Orange);
  362.  
  363. });
  364. }
  365. }
  366.  
  367. private void Game_OnUpdate()
  368. {
  369.  
  370. if (Player.IsDead || MenuGUI.IsChatOpen())
  371. {
  372. return;
  373. }
  374. switch (Orbwalker.Mode)
  375. {
  376. case OrbwalkingMode.Combo:
  377. OnCombo();
  378. break;
  379. case OrbwalkingMode.Mixed:
  380. OnHarass();
  381. break;
  382. case OrbwalkingMode.Lasthit:
  383. Lasthit();
  384. break;
  385. case OrbwalkingMode.Laneclear:
  386. Clearing();
  387. Jungle();
  388. break;
  389.  
  390. }
  391. Killsteal();
  392. }
  393.  
  394.  
  395.  
  396.  
  397. public static List<Obj_AI_Minion> GetAllGenericMinionsTargets()
  398. {
  399. return GetAllGenericMinionsTargetsInRange(float.MaxValue);
  400. }
  401.  
  402. public static List<Obj_AI_Minion> GetAllGenericMinionsTargetsInRange(float range)
  403. {
  404. return GetEnemyLaneMinionsTargetsInRange(range).Concat(GetGenericJungleMinionsTargetsInRange(range))
  405. .ToList();
  406. }
  407.  
  408. public static List<Obj_AI_Base> GetAllGenericUnitTargets()
  409. {
  410. return GetAllGenericUnitTargetsInRange(float.MaxValue);
  411. }
  412.  
  413. public static List<Obj_AI_Base> GetAllGenericUnitTargetsInRange(float range)
  414. {
  415. return GameObjects.EnemyHeroes.Where(h => h.IsValidTarget(range))
  416. .Concat<Obj_AI_Base>(GetAllGenericMinionsTargetsInRange(range)).ToList();
  417. }
  418.  
  419. public static List<Obj_AI_Minion> GetEnemyLaneMinionsTargets()
  420. {
  421. return GetEnemyLaneMinionsTargetsInRange(float.MaxValue);
  422. }
  423.  
  424. public static List<Obj_AI_Minion> GetEnemyLaneMinionsTargetsInRange(float range)
  425. {
  426. return GameObjects.EnemyMinions.Where(m => m.IsValidTarget(range)).ToList();
  427. }
  428.  
  429.  
  430. private void Lasthit()
  431. {
  432. float manapercent = Menu["lasthit"]["mana"].As<MenuSlider>().Value;
  433. if (manapercent < Player.ManaPercent())
  434. {
  435. if (Menu["lasthit"]["useq"].Enabled)
  436. {
  437.  
  438. foreach (var minion in GetEnemyLaneMinionsTargetsInRange(Q.Range))
  439. {
  440.  
  441. if (minion.Health <= GetQ(minion))
  442. {
  443. if (!Menu["lasthit"]["qaa"].Enabled)
  444. {
  445. if (Menu["lasthit"]["turret"].Enabled)
  446. {
  447. if (!minion.IsUnderEnemyTurret())
  448. {
  449. Q.CastOnUnit(minion);
  450. }
  451.  
  452. }
  453. if (!Menu["lasthit"]["turret"].Enabled)
  454. {
  455.  
  456. Q.CastOnUnit(minion);
  457.  
  458.  
  459. }
  460. }
  461. if (Menu["lasthit"]["qaa"].Enabled && minion.Distance(Player) > 200)
  462. {
  463. if (Menu["lasthit"]["turret"].Enabled)
  464. {
  465. if (!minion.IsUnderEnemyTurret())
  466. {
  467. Q.CastOnUnit(minion);
  468. }
  469.  
  470. }
  471. if (!Menu["lasthit"]["turret"].Enabled)
  472. {
  473.  
  474. Q.CastOnUnit(minion);
  475.  
  476.  
  477. }
  478. }
  479. }
  480.  
  481. }
  482. }
  483. }
  484. }
  485.  
  486. private void Clearing()
  487. {
  488. bool useQ = Menu["farming"]["useq"].Enabled;
  489. bool useW = Menu["farming"]["usew"].Enabled;
  490. if (Menu["farming"]["toggle"].Enabled)
  491. {
  492. float manapercent = Menu["farming"]["mana"].As<MenuSlider>().Value;
  493. if (manapercent < Player.ManaPercent())
  494. {
  495. if (useQ)
  496. {
  497. foreach (var minion in GetEnemyLaneMinionsTargetsInRange(Q.Range))
  498. {
  499.  
  500. if (minion.IsValidTarget(Q.Range) && minion != null)
  501. {
  502. if (!Menu["farming"]["turret"].Enabled)
  503. {
  504. if (!Menu["farming"]["lastq"].Enabled)
  505. {
  506. Q.Cast(minion);
  507. }
  508. if (Menu["farming"]["lastq"].Enabled)
  509. {
  510. if (minion.Health <= GetQ(minion))
  511. {
  512. Q.Cast(minion);
  513. }
  514. }
  515.  
  516. }
  517. if (Menu["farming"]["turret"].Enabled && !minion.IsUnderEnemyTurret())
  518. {
  519. if (!Menu["farming"]["lastq"].Enabled)
  520. {
  521. Q.Cast(minion);
  522. }
  523. if (Menu["farming"]["lastq"].Enabled)
  524. {
  525. if (minion.Health <= GetQ(minion))
  526. {
  527. Q.Cast(minion);
  528. }
  529. }
  530.  
  531. }
  532. }
  533. }
  534. }
  535.  
  536. if (useW)
  537. {
  538. foreach (var minion in GetEnemyLaneMinionsTargetsInRange(W.Range))
  539. {
  540.  
  541. if (minion.IsValidTarget(W.Range) && minion != null)
  542. {
  543. W.Cast();
  544. }
  545. }
  546. }
  547. }
  548. }
  549. }
  550.  
  551. public static List<Obj_AI_Minion> GetGenericJungleMinionsTargets()
  552. {
  553. return GetGenericJungleMinionsTargetsInRange(float.MaxValue);
  554. }
  555.  
  556. public static List<Obj_AI_Minion> GetGenericJungleMinionsTargetsInRange(float range)
  557. {
  558. return GameObjects.Jungle.Where(m => !GameObjects.JungleSmall.Contains(m) && m.IsValidTarget(range))
  559. .ToList();
  560. }
  561.  
  562. private void Jungle()
  563. {
  564. if (Menu["farming"]["toggle"].Enabled)
  565. {
  566. foreach (var jungleTarget in GetGenericJungleMinionsTargetsInRange(Q.Range))
  567. {
  568. bool useQ = Menu["farming"]["useq"].Enabled;
  569. bool useW = Menu["farming"]["usew"].Enabled;
  570. float manapercent = Menu["farming"]["mana"].As<MenuSlider>().Value;
  571. if (manapercent < Player.ManaPercent())
  572. {
  573. if (useQ && jungleTarget.IsValidTarget(Q.Range))
  574. {
  575. Q.Cast(jungleTarget);
  576. }
  577. if (useW && jungleTarget.IsValidTarget(W.Range))
  578. {
  579. W.Cast();
  580. }
  581. }
  582.  
  583. }
  584. }
  585. }
  586.  
  587. public static Obj_AI_Hero GetBestKillableHero(Spell spell, DamageType damageType = DamageType.True,
  588. bool ignoreShields = false)
  589. {
  590. return TargetSelector.Implementation.GetOrderedTargets(spell.Range).FirstOrDefault(t => t.IsValidTarget());
  591. }
  592.  
  593. private void Killsteal()
  594. {
  595. if (Q.Ready &&
  596. Menu["killsteal"]["ksq"].Enabled)
  597. {
  598. var bestTarget = GetBestKillableHero(Q, DamageType.Physical, false);
  599. if (bestTarget != null &&
  600. GetQ(bestTarget) >= bestTarget.Health &&
  601. bestTarget.IsValidTarget(Q.Range))
  602. {
  603. Q.CastOnUnit(bestTarget);
  604. }
  605. }
  606. if (E.Ready &&
  607. Menu["killsteal"]["kse"].Enabled)
  608. {
  609. var bestTarget = GetBestKillableHero(E, DamageType.Physical, false);
  610. if (bestTarget != null &&
  611. Player.GetSpellDamage(bestTarget, SpellSlot.E) >= bestTarget.Health &&
  612. bestTarget.IsValidTarget(E.Range))
  613. {
  614. E.CastOnUnit(bestTarget);
  615. }
  616. }
  617. if (R.Ready &&
  618. Menu["killsteal"]["ksr"].Enabled)
  619. {
  620. var bestTarget = GetBestKillableHero(R, DamageType.Physical, false);
  621. if (bestTarget != null &&
  622. Player.GetSpellDamage(bestTarget, SpellSlot.R) >= bestTarget.Health &&
  623. bestTarget.IsValidTarget(R.Range))
  624. {
  625. R.Cast(bestTarget);
  626. }
  627. }
  628. }
  629.  
  630.  
  631.  
  632. public static Obj_AI_Hero GetBestEnemyHeroTarget()
  633. {
  634. return GetBestEnemyHeroTargetInRange(float.MaxValue);
  635. }
  636.  
  637. public static Obj_AI_Hero GetBestEnemyHeroTargetInRange(float range)
  638. {
  639. var ts = TargetSelector.Implementation;
  640. var target = ts.GetTarget(range);
  641. if (target != null && target.IsValidTarget() && !Invulnerable.Check(target))
  642. {
  643. return target;
  644. }
  645.  
  646. var firstTarget = ts.GetOrderedTargets(range)
  647. .FirstOrDefault(t => t.IsValidTarget() && !Invulnerable.Check(t));
  648. if (firstTarget != null)
  649. {
  650. return firstTarget;
  651. }
  652.  
  653. return null;
  654. }
  655.  
  656. public static bool AnyWallInBetween(Vector3 startPos, Vector2 endPos)
  657. {
  658. for (var i = 0; i < startPos.Distance(endPos); i++)
  659. {
  660. var point = NavMesh.WorldToCell(startPos.Extend(endPos, i));
  661. if (point.Flags.HasFlag(NavCellFlags.Wall | NavCellFlags.Building))
  662. {
  663. return true;
  664. }
  665. }
  666.  
  667. return false;
  668. }
  669.  
  670. private void OnCombo()
  671. {
  672.  
  673. bool useQ = Menu["combo"]["useq"].Enabled;
  674. bool useW = Menu["combo"]["usew"].Enabled;
  675. bool useE = Menu["combo"]["usee"].Enabled;
  676. bool stunE = Menu["combo"]["stune"].Enabled;
  677. bool useR = Menu["combo"]["user"].Enabled;
  678.  
  679. bool gapQ = Menu["combo"]["gapq"].Enabled;
  680. bool gapR = Menu["combo"]["gapr"].Enabled;
  681.  
  682. float minq = Menu["combo"]["minq"].As<MenuSlider>().Value;
  683. var target = GetBestEnemyHeroTargetInRange(Q.Range * 2);
  684.  
  685. if (!target.IsValidTarget())
  686. {
  687. return;
  688. }
  689. if (Player.HasItem(ItemId.BladeoftheRuinedKing) || Player.HasItem(ItemId.BilgewaterCutlass))
  690. {
  691. var items = new[] {ItemId.BladeoftheRuinedKing, ItemId.BilgewaterCutlass};
  692. var slot = Player.Inventory.Slots.First(s => items.Contains(s.ItemId));
  693. if (slot != null)
  694. {
  695. var spellslot = slot.SpellSlot;
  696. if (spellslot != SpellSlot.Unknown &&
  697. Player.SpellBook.GetSpell(spellslot).State == SpellState.Ready)
  698. {
  699. Player.SpellBook.CastSpell(spellslot, target);
  700. }
  701. }
  702. }
  703.  
  704. if (gapQ)
  705. {
  706. if (target != null)
  707. {
  708. if (Menu["combo"]["outofq"].Enabled)
  709. {
  710. if (target.Distance(Player) > Q.Range)
  711. {
  712.  
  713. foreach (var minion in GetEnemyLaneMinionsTargetsInRange(Q.Range))
  714. {
  715.  
  716. if (minion.IsValidTarget(Q.Range) && minion != null)
  717. {
  718. if (Player.Mana > Player.SpellBook.GetSpell(SpellSlot.Q).Cost * 2 &&
  719. GetQ(minion) >= minion.Health &&
  720. minion.Distance(Player) <= Q.Range && minion.Distance(target) <= Q.Range &&
  721. target.Distance(Player) > Q.Range)
  722. {
  723. Q.CastOnUnit(minion);
  724. }
  725. }
  726.  
  727. if (gapR)
  728. {
  729.  
  730. var minionR =
  731. ObjectManager.Get<Obj_AI_Minion>()
  732. .Where(
  733. x =>
  734. x.IsValidTarget() && x.Distance(Player) < Q.Range - 50 &&
  735. x.CountEnemyHeroesInRange(Q.Range) >= 1)
  736. .FirstOrDefault(
  737. x =>
  738. x.Health - Player.GetSpellDamage(x, SpellSlot.R) * 2 <
  739. Player.GetSpellDamage(x, SpellSlot.Q));
  740. if (minionR != null)
  741. {
  742. switch (Menu["combo"]["rusage"].As<MenuList>().Value)
  743. {
  744. case 0:
  745. if (minionR.Health > GetQ(minionR) &&
  746. Player.Mana > Player.SpellBook.GetSpell(SpellSlot.Q).Cost * 2 +
  747. Player.SpellBook.GetSpell(SpellSlot.R).Cost &&
  748. Player.Distance(target) > Q.Range &&
  749. minionR.Distance(Player) <= Q.Range &&
  750. minionR.Distance(target) <= Q.Range)
  751. {
  752. R.CastOnUnit(minionR);
  753.  
  754. }
  755. break;
  756. case 1:
  757. if (Player.GetSpellDamage(target, SpellSlot.R) * 3 +
  758. Player.GetSpellDamage(target, SpellSlot.E)
  759. + GetQ(target) > target.Health)
  760. {
  761. if (minionR.Distance(Player) <= Q.Range &&
  762. minionR.Distance(target) <= Q.Range &&
  763. target.Distance(Player) > Q.Range)
  764. {
  765. if (minionR.Health > GetQ(minionR) &&
  766. Player.Mana > Player.SpellBook.GetSpell(SpellSlot.Q).Cost *
  767. 2 +
  768. Player.SpellBook.GetSpell(SpellSlot.R).Cost &&
  769. Player.Distance(target) > Q.Range)
  770. {
  771.  
  772. R.CastOnUnit(minionR);
  773.  
  774. }
  775.  
  776. }
  777. }
  778. break;
  779.  
  780. }
  781.  
  782. }
  783. }
  784. }
  785. }
  786. }
  787.  
  788. if (!Menu["combo"]["outofq"].Enabled)
  789. {
  790.  
  791. var minions = GetEnemyLaneMinionsTargetsInRange(Q.Range).Where(x =>
  792. x.Distance(Player) < Q.Range && GetQ(x) >= x.Health &&
  793. x.Distance(target) < Player.Distance(target))
  794. .OrderBy(x => x.Distance(target)).FirstOrDefault();
  795. if (minions != null)
  796. {
  797.  
  798. if (minions.IsValidTarget(Q.Range))
  799. {
  800.  
  801. if (Player.Mana > Player.SpellBook.GetSpell(SpellSlot.Q).Cost * 2 &&
  802.  
  803. minions.Distance(Player) <= Q.Range && minions.Distance(target) <= Q.Range)
  804. {
  805.  
  806. Q.CastOnUnit(minions);
  807. if (Q.Ready && useQ && target.IsValidTarget(Q.Range))
  808. {
  809.  
  810. if (target != null && minq < target.Distance(Player))
  811. {
  812.  
  813. Q.Cast(target);
  814. }
  815. }
  816. }
  817. }
  818. }
  819.  
  820. if (gapR)
  821. {
  822.  
  823. var minionR = GetEnemyLaneMinionsTargetsInRange(Q.Range).Where(x =>
  824.  
  825. x.Health > Player.GetSpellDamage(x, SpellSlot.R) &&
  826. x.Health > Player.GetSpellDamage(x, SpellSlot.Q) &&
  827. x.Distance(target) < Player.Distance(target) && x.Distance(target) < Q.Range &&
  828. Player.Mana > Player.SpellBook.GetSpell(SpellSlot.Q).Cost * 2 +
  829. Player.SpellBook.GetSpell(SpellSlot.R).Cost &&
  830. x.Health - Player.GetSpellDamage(x, SpellSlot.R) * 2 < GetQ(x)).OrderBy(x =>
  831. x.Distance(target)).ThenBy(x => x.Health).FirstOrDefault();
  832.  
  833.  
  834. if (minionR != null)
  835. {
  836. switch (Menu["combo"]["rusage"].As<MenuList>().Value)
  837. {
  838. case 0:
  839.  
  840. if (minionR.Health > GetQ(minionR) &&
  841. Player.Mana > Player.SpellBook.GetSpell(SpellSlot.Q).Cost * 2 +
  842. Player.SpellBook.GetSpell(SpellSlot.R).Cost &&
  843. Player.Distance(target) > Q.Range &&
  844. minionR.Distance(Player) <= Q.Range &&
  845. minionR.Distance(target) <= Q.Range)
  846. {
  847. R.CastOnUnit(minionR);
  848.  
  849. }
  850. break;
  851. case 1:
  852. if (Player.GetSpellDamage(target, SpellSlot.R) * 3 +
  853. Player.GetSpellDamage(target, SpellSlot.E)
  854. + GetQ(target) > target.Health)
  855. {
  856. if (minionR.Distance(Player) <= Q.Range &&
  857. minionR.Distance(target) <= Q.Range &&
  858. target.Distance(Player) > Q.Range)
  859. {
  860. if (minionR.Health > GetQ(minionR) &&
  861.  
  862. Player.Distance(target) > Q.Range)
  863. {
  864.  
  865. R.CastOnUnit(minionR);
  866.  
  867. }
  868. }
  869. }
  870. break;
  871.  
  872.  
  873.  
  874. }
  875. }
  876. }
  877. }
  878.  
  879. }
  880. }
  881.  
  882.  
  883. if (Q.Ready && useQ && target.IsValidTarget(Q.Range))
  884. {
  885.  
  886. if (target != null && minq < target.Distance(Player))
  887. {
  888.  
  889. Q.Cast(target);
  890. }
  891. }
  892. if (W.Ready && useW && target.IsValidTarget(W.Range))
  893. {
  894.  
  895. if (target != null)
  896. {
  897. W.Cast();
  898. }
  899. }
  900. if (E.Ready && useE && target.IsValidTarget(E.Range))
  901. {
  902.  
  903. if (target != null)
  904. {
  905. if (!stunE)
  906. {
  907. E.Cast(target);
  908. }
  909. if (stunE && target.HealthPercent() > Player.HealthPercent())
  910. {
  911. E.Cast(target);
  912. }
  913. }
  914. }
  915. if (R.Ready && useR && target.IsValidTarget(R.Range - 50))
  916. {
  917.  
  918. if (target != null)
  919. {
  920. switch (Menu["combo"]["rusage"].As<MenuList>().Value)
  921. {
  922. case 0:
  923. if (Menu["combo"]["sheen"].Enabled)
  924. {
  925. if (!Player.HasBuff("Sheen") && Player.Distance(target) < 250)
  926. {
  927. R.Cast(target);
  928. }
  929. }
  930. if (!Menu["combo"]["sheen"].Enabled)
  931. {
  932.  
  933. R.Cast(target);
  934. }
  935. break;
  936. case 1:
  937. if (Player.GetSpellDamage(target, SpellSlot.R) * 3 +
  938. Player.GetSpellDamage(target, SpellSlot.E)
  939. + GetQ(target) > target.Health)
  940. {
  941. if (Menu["combo"]["sheen"].Enabled)
  942. {
  943. if (!Player.HasBuff("Sheen") && Player.Distance(target) < 250)
  944. {
  945. R.Cast(target);
  946. }
  947. }
  948. if (!Menu["combo"]["sheen"].Enabled)
  949. {
  950.  
  951. R.Cast(target);
  952. }
  953.  
  954.  
  955. }
  956. break;
  957. }
  958. }
  959. }
  960. }
  961.  
  962. private void OnHarass()
  963. {
  964. bool useQ = Menu["harass"]["useq"].Enabled;
  965. bool gapQ = Menu["harass"]["gapq"].Enabled;
  966. bool useW = Menu["harass"]["usew"].Enabled;
  967. bool useE = Menu["harass"]["usee"].Enabled;
  968. var target = GetBestEnemyHeroTargetInRange(Q.Range * 2);
  969. float manapercent = Menu["harass"]["mana"].As<MenuSlider>().Value;
  970. if (manapercent < Player.ManaPercent())
  971. {
  972. if (Menu["harass"]["lastq"].Enabled)
  973. {
  974.  
  975. foreach (var minion in GetEnemyLaneMinionsTargetsInRange(Q.Range))
  976. {
  977. if (minion != null)
  978. {
  979. if (minion.Health <= GetQ(minion))
  980. {
  981. if (!Menu["lasthit"]["qaa"].Enabled)
  982. {
  983. if (Menu["lasthit"]["turret"].Enabled)
  984. {
  985. if (!minion.IsUnderEnemyTurret())
  986. {
  987. Q.CastOnUnit(minion);
  988. }
  989.  
  990. }
  991. if (!Menu["lasthit"]["turret"].Enabled)
  992. {
  993.  
  994. Q.CastOnUnit(minion);
  995.  
  996.  
  997. }
  998. }
  999. if (Menu["lasthit"]["qaa"].Enabled && minion.Distance(Player) > 200)
  1000. {
  1001. if (Menu["lasthit"]["turret"].Enabled)
  1002. {
  1003. if (!minion.IsUnderEnemyTurret())
  1004. {
  1005. Q.CastOnUnit(minion);
  1006. }
  1007.  
  1008. }
  1009. if (!Menu["lasthit"]["turret"].Enabled)
  1010. {
  1011.  
  1012. Q.CastOnUnit(minion);
  1013.  
  1014.  
  1015. }
  1016. }
  1017. }
  1018. }
  1019.  
  1020. }
  1021. }
  1022. if (!target.IsValidTarget())
  1023. {
  1024. return;
  1025. }
  1026.  
  1027. if (Q.Ready && useQ && target.IsValidTarget(Q.Range))
  1028. {
  1029.  
  1030. if (target != null)
  1031. {
  1032. Q.Cast(target);
  1033. }
  1034. }
  1035. if (gapQ)
  1036. {
  1037. if (target != null)
  1038. {
  1039. if (target.Distance(Player) > Q.Range)
  1040. {
  1041. foreach (var minion in GetEnemyLaneMinionsTargetsInRange(Q.Range))
  1042. {
  1043.  
  1044. if (minion.IsValidTarget(Q.Range) && minion != null)
  1045. {
  1046. if (Player.Mana > Player.SpellBook.GetSpell(SpellSlot.Q).Cost * 2 &&
  1047. GetQ(minion) >= minion.Health &&
  1048. minion.Distance(Player) <= Q.Range && minion.Distance(target) <= Q.Range &&
  1049. target.Distance(Player) > Q.Range)
  1050. {
  1051. Q.CastOnUnit(minion);
  1052. }
  1053.  
  1054. }
  1055. }
  1056. }
  1057. }
  1058. }
  1059. if (E.Ready && useE && target.IsValidTarget(E.Range))
  1060. {
  1061. if (target != null)
  1062. {
  1063. E.Cast(target);
  1064. }
  1065. }
  1066. if (W.Ready && useW && target.IsValidTarget(W.Range - 100))
  1067.  
  1068. {
  1069. if (target != null)
  1070. {
  1071. W.Cast();
  1072. }
  1073. }
  1074.  
  1075. }
  1076. }
  1077. }
  1078. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement