vay


SUBMITTED BY: Alerand

DATE: May 7, 2016, 11:02 a.m.

FORMAT: Text only

SIZE: 9.2 kB

HITS: 9960

  1. #region
  2. using System;
  3. using System.Drawing;
  4. using System.Linq;
  5. using DetuksSharp;
  6. using LeagueSharp;
  7. using LeagueSharp.Common;
  8. using SharpDX;
  9. #endregion
  10. namespace Marksman.Champions
  11. {
  12. internal class Vayne : Champion
  13. {
  14. public static Spell Q;
  15. public static Spell E;
  16. public Vayne()
  17. {
  18. Q = new Spell(SpellSlot.Q, 300f);
  19. E = new Spell(SpellSlot.E, 650f);
  20. E.SetTargetted(0.25f, 2200f);
  21. AntiGapcloser.OnEnemyGapcloser += AntiGapcloser_OnEnemyGapcloser;
  22. Interrupter2.OnInterruptableTarget += Interrupter2_OnInterruptableTarget;
  23. Utils.Utils.PrintMessage("Vayne loaded");
  24. }
  25. public void AntiGapcloser_OnEnemyGapcloser(ActiveGapcloser gapcloser)
  26. {
  27. if (GetValue<bool>("UseEGapcloser") && E.IsReady() && gapcloser.Sender.IsValidTarget(E.Range))
  28. E.CastOnUnit(gapcloser.Sender);
  29. }
  30. private void Interrupter2_OnInterruptableTarget(Obj_AI_Hero unit, Interrupter2.InterruptableTargetEventArgs args)
  31. {
  32. if (GetValue<bool>("UseEInterrupt") && unit.IsValidTarget(550f))
  33. E.Cast(unit);
  34. }
  35. public override void Game_OnGameUpdate(EventArgs args)
  36. {
  37. if ((!ComboActive && !HarassActive) || !DeathWalker.canMove())
  38. {
  39. if (GetValue<bool>("FocusW"))
  40. {
  41. var silverBuffMarkedEnemy = VayneData.GetSilverBuffMarkedEnemy;
  42. if (silverBuffMarkedEnemy != null)
  43. {
  44. TargetSelector.SetTarget(silverBuffMarkedEnemy);
  45. }
  46. else
  47. {
  48. var attackRange = DeathWalker.getRealAutoAttackRange(ObjectManager.Player);
  49. TargetSelector.SetTarget(
  50. TargetSelector.GetTarget(attackRange, TargetSelector.DamageType.Physical));
  51. }
  52. }
  53. var useE = GetValue<bool>("UseE" + (ComboActive ? "C" : "H"));
  54. if (Q.IsReady() && GetValue<bool>("CompleteSilverBuff"))
  55. {
  56. if (VayneData.GetSilverBuffMarkedEnemy != null && VayneData.GetSilverBuffMarkedCount == 2)
  57. {
  58. Q.Cast(Game.CursorPos);
  59. }
  60. }
  61. if (E.IsReady() && useE)
  62. {
  63. var t = TargetSelector.GetTarget(E.Range + Q.Range, TargetSelector.DamageType.Physical);
  64. if(t != null)
  65. for (var i = 1; i < 8; i++)
  66. {
  67. var targetBehind = t.Position
  68. + Vector3.Normalize(t.ServerPosition - ObjectManager.Player.Position) * i
  69. * 50;
  70. if (targetBehind.IsWall() && t.IsValidTarget(E.Range))
  71. {
  72. E.CastOnUnit(t);
  73. return;
  74. }
  75. }
  76. /*
  77. foreach (var hero in
  78. from hero in ObjectManager.Get<Obj_AI_Hero>().Where(hero => hero.IsValidTarget(550f))
  79. let prediction = E.GetPrediction(hero)
  80. where
  81. NavMesh.GetCollisionFlags(
  82. prediction.UnitPosition.To2D()
  83. .Extend(
  84. ObjectManager.Player.ServerPosition.To2D(),
  85. -GetValue<Slider>("PushDistance").Value)
  86. .To3D()).HasFlag(CollisionFlags.Wall) ||
  87. NavMesh.GetCollisionFlags(
  88. prediction.UnitPosition.To2D()
  89. .Extend(
  90. ObjectManager.Player.ServerPosition.To2D(),
  91. -(GetValue<Slider>("PushDistance").Value/2))
  92. .To3D()).HasFlag(CollisionFlags.Wall)
  93. select hero)
  94. {
  95. E.Cast(hero);
  96. }
  97. */
  98. }
  99. }
  100. if (LaneClearActive)
  101. {
  102. var useQ = GetValue<bool>("UseQL");
  103. if (Q.IsReady() && useQ)
  104. {
  105. var vMinions = MinionManager.GetMinions(ObjectManager.Player.Position, Q.Range);
  106. foreach (var minions in
  107. vMinions.Where(
  108. minions => minions.Health < ObjectManager.Player.GetSpellDamage(minions, SpellSlot.Q)))
  109. Q.Cast(minions);
  110. }
  111. }
  112. }
  113. public override void DeathWalker_AfterAttack(AttackableUnit unit, AttackableUnit target)
  114. {
  115. var useQ =
  116. GetValue<bool>(
  117. "UseQ" +
  118. (ComboActive
  119. ? DeathWalker.CurrentMode == DeathWalker.Mode.Combo ? "C" : ""
  120. : DeathWalker.CurrentMode == DeathWalker.Mode.LaneClear ? "H" : ""));
  121. if (unit.IsMe && useQ)
  122. Q.Cast(Game.CursorPos);
  123. }
  124. public override bool ComboMenu(Menu config)
  125. {
  126. config.AddItem(new MenuItem("UseQC" + Id, "Use Q").SetValue(true));
  127. config.AddItem(new MenuItem("UseEC" + Id, "Use E").SetValue(true));
  128. config.AddItem(new MenuItem("FocusW" + Id, "Force Focus Marked Enemy").SetValue(true));
  129. return true;
  130. }
  131. public override bool HarassMenu(Menu config)
  132. {
  133. config.AddItem(new MenuItem("UseQH" + Id, "Use Q").SetValue(true));
  134. config.AddItem(new MenuItem("UseEH" + Id, "Use E").SetValue(true));
  135. return true;
  136. }
  137. public override bool MiscMenu(Menu config)
  138. {
  139. config.AddItem(
  140. new MenuItem("UseET" + Id, "Use E (Toggle)").SetValue(new KeyBind("T".ToCharArray()[0],
  141. KeyBindType.Toggle)));
  142. config.AddItem(new MenuItem("UseEInterrupt" + Id, "Use E To Interrupt").SetValue(true));
  143. config.AddItem(new MenuItem("UseEGapcloser" + Id, "Use E To Gapcloser").SetValue(true));
  144. config.AddItem(new MenuItem("PushDistance" + Id, "E Push Distance").SetValue(new Slider(425, 475, 300)));
  145. config.AddItem(new MenuItem("CompleteSilverBuff" + Id, "Complete Silver Buff With Q").SetValue(true));
  146. return true;
  147. }
  148. public override bool ExtrasMenu(Menu config)
  149. {
  150. return true;
  151. }
  152. public override bool LaneClearMenu(Menu config)
  153. {
  154. config.AddItem(new MenuItem("UseQL" + Id, "Use Q").SetValue(true));
  155. return true;
  156. }
  157. public override bool DrawingMenu(Menu config)
  158. {
  159. config.AddItem(
  160. new MenuItem("DrawE" + Id, "E range").SetValue(
  161. new Circle(true, System.Drawing.Color.FromArgb(100, 255, 0, 255))));
  162. return true;
  163. }
  164. public override void Drawing_OnDraw(EventArgs args)
  165. {
  166. var menuItem = GetValue<Circle>("DrawE");
  167. if (menuItem.Active)
  168. {
  169. Render.Circle.DrawCircle(ObjectManager.Player.Position, E.Range, menuItem.Color, 1);
  170. }
  171. }
  172. public class VayneData
  173. {
  174. public static int GetSilverBuffMarkedCount
  175. {
  176. get
  177. {
  178. if (GetSilverBuffMarkedEnemy == null)
  179. return 0;
  180. return
  181. GetSilverBuffMarkedEnemy.Buffs.Where(buff => buff.Name == "vaynesilvereddebuff")
  182. .Select(xBuff => xBuff.Count)
  183. .FirstOrDefault();
  184. }
  185. }
  186. public static Obj_AI_Hero GetSilverBuffMarkedEnemy
  187. {
  188. get
  189. {
  190. return
  191. ObjectManager.Get<Obj_AI_Hero>()
  192. .Where(
  193. enemy =>
  194. !enemy.IsDead &&
  195. enemy.IsValidTarget(
  196. (Q.IsReady() ? Q.Range : 0) +
  197. DeathWalker.getRealAutoAttackRange(ObjectManager.Player)))
  198. .FirstOrDefault(
  199. enemy => enemy.Buffs.Any(buff => buff.Name == "vaynesilvereddebuff" && buff.Count > 0));
  200. }
  201. }
  202. }
  203. }
  204. }

comments powered by Disqus