Advertisement
Guest User

Untitled

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