Advertisement
Guest User

Untitled

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