Dr


SUBMITTED BY: Alerand

DATE: May 7, 2016, 10:48 a.m.

FORMAT: Text only

SIZE: 14.2 kB

HITS: 11584

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using DetuksSharp;
  5. using LeagueSharp;
  6. using LeagueSharp.Common;
  7. using SharpDX;
  8. using Color = System.Drawing.Color;
  9. namespace Marksman.Champions
  10. {
  11. internal class Reticles
  12. {
  13. public GameObject Object { get; set; }
  14. public float NetworkId { get; set; }
  15. public Vector3 ReticlePos { get; set; }
  16. public double ExpireTime { get; set; }
  17. }
  18. internal class Draven : Champion
  19. {
  20. private static readonly List<Reticles> ExistingReticles = new List<Reticles>();
  21. public static Spell Q, W, E, R;
  22. public int QStacks = 0;
  23. private static string Tab
  24. {
  25. get { return " "; }
  26. }
  27. public Draven()
  28. {
  29. Q = new Spell(SpellSlot.Q);
  30. W = new Spell(SpellSlot.W);
  31. E = new Spell(SpellSlot.E, 1100);
  32. R = new Spell(SpellSlot.R, 20000);
  33. E.SetSkillshot(250f, 130f, 1400f, false, SkillshotType.SkillshotLine);
  34. R.SetSkillshot(400f, 160f, 2000f, false, SkillshotType.SkillshotLine);
  35. GameObject.OnCreate += OnCreateObject;
  36. GameObject.OnDelete += OnDeleteObject;
  37. AntiGapcloser.OnEnemyGapcloser += OnEnemyGapcloser;
  38. Interrupter2.OnInterruptableTarget += Interrupter2_OnInterruptableTarget;
  39. Drawing.OnEndScene += DrawingOnOnEndScene;
  40. Utils.Utils.PrintMessage("Draven loaded.");
  41. }
  42. public void OnEnemyGapcloser(ActiveGapcloser gapcloser)
  43. {
  44. if (E.IsReady() && Config.Item("EGapCloser").GetValue<bool>() && gapcloser.Sender.IsValidTarget(E.Range))
  45. {
  46. E.Cast(gapcloser.Sender);
  47. }
  48. }
  49. private void Interrupter2_OnInterruptableTarget(Obj_AI_Hero unit, Interrupter2.InterruptableTargetEventArgs args)
  50. {
  51. if (E.IsReady() && Config.Item("EInterruptable").GetValue<bool>() && unit.IsValidTarget(E.Range))
  52. {
  53. E.Cast(unit);
  54. }
  55. }
  56. private static void OnDeleteObject(GameObject sender, EventArgs args)
  57. {
  58. if ((sender.Name.Contains("Q_reticle_self")))
  59. {
  60. for (var i = 0; i < ExistingReticles.Count; i++)
  61. {
  62. if (ExistingReticles[i].NetworkId == sender.NetworkId)
  63. {
  64. ExistingReticles.RemoveAt(i);
  65. return;
  66. }
  67. }
  68. }
  69. }
  70. private static void OnCreateObject(GameObject sender, EventArgs args)
  71. {
  72. if ((sender.Name.Contains("Q_reticle_self")))
  73. {
  74. ExistingReticles.Add(
  75. new Reticles
  76. {
  77. Object = sender,
  78. NetworkId = sender.NetworkId,
  79. ReticlePos = sender.Position,
  80. ExpireTime = Game.Time + 1.20
  81. });
  82. }
  83. }
  84. private void DrawingOnOnEndScene(EventArgs args)
  85. {
  86. var rCircle = Config.Item("DrawRMini").GetValue<bool>();
  87. if (rCircle)
  88. {
  89. var maxRRange = Config.Item("UseRCMaxR").GetValue<Slider>().Value;
  90. var rMax = Config.Item("DrawRMax").GetValue<Circle>();
  91. Utility.DrawCircle(ObjectManager.Player.Position, maxRRange, rMax.Color, 1, 23, true);
  92. }
  93. }
  94. public override void Drawing_OnDraw(EventArgs args)
  95. {
  96. var drawOrbwalk = Config.Item("DrawOrbwalk").GetValue<Circle>();
  97. var drawReticles = Config.Item("DrawReticles").GetValue<Circle>();
  98. var drawCatchRadius = Config.Item("DrawCatchRadius").GetValue<Circle>();
  99. if (drawOrbwalk.Active)
  100. {
  101. Render.Circle.DrawCircle(GetOrbwalkPos(), 100, drawOrbwalk.Color);
  102. }
  103. if (drawReticles.Active)
  104. {
  105. foreach (var existingReticle in ExistingReticles)
  106. {
  107. Render.Circle.DrawCircle(existingReticle.ReticlePos, 100, drawReticles.Color);
  108. }
  109. }
  110. if (drawCatchRadius.Active)
  111. {
  112. if (GetOrbwalkPos() != Game.CursorPos &&
  113. (ComboActive || LaneClearActive || DeathWalker.CurrentMode == DeathWalker.Mode.LaneClear))
  114. {
  115. Render.Circle.DrawCircle(Game.CursorPos, Config.Item("CatchRadius").GetValue<Slider>().Value,
  116. Color.Red);
  117. }
  118. else
  119. {
  120. Render.Circle.DrawCircle(
  121. Game.CursorPos, Config.Item("CatchRadius").GetValue<Slider>().Value, Color.CornflowerBlue);
  122. }
  123. }
  124. var drawE = Config.Item("DrawE").GetValue<Circle>();
  125. if (drawE.Active)
  126. {
  127. Render.Circle.DrawCircle(ObjectManager.Player.Position, E.Range, drawE.Color);
  128. }
  129. var drawRMin = Config.Item("DrawRMin").GetValue<Circle>();
  130. if (drawRMin.Active)
  131. {
  132. var minRRange = Config.Item("UseRCMinR").GetValue<Slider>().Value;
  133. Render.Circle.DrawCircle(ObjectManager.Player.Position, minRRange, drawRMin.Color, 2);
  134. }
  135. var drawRMax = Config.Item("DrawRMax").GetValue<Circle>();
  136. if (drawRMax.Active)
  137. {
  138. var maxRRange = Config.Item("UseRCMaxR").GetValue<Slider>().Value;
  139. Render.Circle.DrawCircle(ObjectManager.Player.Position, maxRRange, drawRMax.Color, 2);
  140. }
  141. }
  142. public override void Game_OnGameUpdate(EventArgs args)
  143. {
  144. var orbwalkPos = GetOrbwalkPos();
  145. var cursor = Game.CursorPos;
  146. if (orbwalkPos != cursor &&
  147. (ComboActive || LaneClearActive || DeathWalker.CurrentMode == DeathWalker.Mode.Lasthit))
  148. {
  149. //DeathWalker.(orbwalkPos);
  150. }
  151. else
  152. {
  153. // Orbwalker.SetDeathWalkerPoint(cursor);
  154. }
  155. Obj_AI_Hero t;
  156. //Combo
  157. if (ComboActive)
  158. {
  159. var minRRange = Config.Item("UseRCMinR").GetValue<Slider>().Value;
  160. var maxRRange = Config.Item("UseRCMaxR").GetValue<Slider>().Value;
  161. t = TargetSelector.GetTarget(maxRRange, TargetSelector.DamageType.Physical);
  162. if (!t.IsValidTarget())
  163. {
  164. return;
  165. }
  166. if (W.IsReady() && Config.Item("UseWC").GetValue<bool>() && t.IsValidTarget(DeathWalker.getRealAutoAttackRange(null) + 65) &&
  167. ObjectManager.Player.Buffs.FirstOrDefault(
  168. buff => buff.Name == "dravenfurybuff" || buff.Name == "DravenFury") == null)
  169. {
  170. W.Cast();
  171. }
  172. if (IsFleeing(t) && Config.Item("UseEC").GetValue<bool>() && t.IsValidTarget(E.Range))
  173. {
  174. E.Cast(t);
  175. }
  176. if (Config.Item("UseRC").GetValue<bool>() && R.IsReady())
  177. {
  178. t = TargetSelector.GetTarget(maxRRange, TargetSelector.DamageType.Physical);
  179. if (t.Distance(ObjectManager.Player) >= minRRange && t.Distance(ObjectManager.Player) <= maxRRange &&
  180. t.Health < ObjectManager.Player.GetSpellDamage(t, SpellSlot.R) * 2)
  181. //R.GetHealthPrediction(target) <= 0)
  182. {
  183. R.Cast(t);
  184. }
  185. }
  186. }
  187. //Peel from melees
  188. if (Config.Item("EPeel").GetValue<bool>()) //Taken from ziggs(by pq/esk0r)
  189. {
  190. foreach (var pos in from enemy in ObjectManager.Get<Obj_AI_Hero>()
  191. where
  192. enemy.IsValidTarget() &&
  193. enemy.Distance(ObjectManager.Player) <=
  194. enemy.BoundingRadius + enemy.AttackRange + ObjectManager.Player.BoundingRadius &&
  195. enemy.IsMelee()
  196. let direction =
  197. (enemy.ServerPosition.To2D() - ObjectManager.Player.ServerPosition.To2D()).Normalized()
  198. let pos = ObjectManager.Player.ServerPosition.To2D()
  199. select pos + Math.Min(200, Math.Max(50, enemy.Distance(ObjectManager.Player) / 2)) * direction)
  200. {
  201. E.Cast(pos.To3D());
  202. }
  203. }
  204. }
  205. public override void DeathWalker_AfterAttack(AttackableUnit unit, AttackableUnit target)
  206. {
  207. if (!unit.IsMe)
  208. {
  209. return;
  210. }
  211. Console.WriteLine("Hai");
  212. Console.WriteLine(Config.Item("maxqamount").GetValue<Slider>().Value);
  213. var qOnHero = QBuffCount();
  214. if (unit.IsMe &&
  215. ((ComboActive && Config.Item("UseQC").GetValue<bool>()) ||
  216. (HarassActive && Config.Item("UseQC").GetValue<bool>())) && qOnHero < 2 &&
  217. qOnHero + ExistingReticles.Count < Config.Item("maxqamount").GetValue<Slider>().Value)
  218. {
  219. Q.Cast();
  220. Console.WriteLine("Casted Q");
  221. }
  222. }
  223. public override bool ComboMenu(Menu config)
  224. {
  225. config.AddItem(new MenuItem("UseQC", "Use Q").SetValue(true));
  226. config.AddItem(new MenuItem("UseWC", "Use W").SetValue(true));
  227. config.AddItem(new MenuItem("UseEC", "Use E").SetValue(true));
  228. config.AddItem(new MenuItem("UseRC", "Use R").SetValue(true));
  229. config.AddItem(new MenuItem("UseRCMinR", Tab + "Min. R Range").SetValue(new Slider(350, 200, 750)));
  230. config.AddItem(new MenuItem("UseRCMaxR", Tab + "Max. R Range").SetValue(new Slider(1000, 750, 3000)));
  231. config.AddItem(new MenuItem("DrawRMin", Tab + "Draw Min. R Range").SetValue(new Circle(true, Color.DarkRed)));
  232. config.AddItem(new MenuItem("DrawRMax", Tab + "Draw Max. R Range").SetValue(new Circle(true, Color.DarkMagenta)));
  233. config.AddItem(new MenuItem("DrawRMini", Tab + "Draw R on Mini Map").SetValue(true));
  234. return true;
  235. }
  236. public override bool HarassMenu(Menu config)
  237. {
  238. config.AddItem(new MenuItem("UseQH", "Use Q").SetValue(true));
  239. return true;
  240. }
  241. public override bool DrawingMenu(Menu config)
  242. {
  243. config.AddItem(
  244. new MenuItem("DrawE", "E range").SetValue(new Circle(true, Color.FromArgb(100, 255, 0, 255))));
  245. config.AddItem(
  246. new MenuItem("DrawOrbwalk", "Draw orbwalk position").SetValue(new Circle(true, Color.Yellow)));
  247. config.AddItem(new MenuItem("DrawReticles", "Draw on reticles").SetValue(new Circle(true, Color.Green)));
  248. config.AddItem(new MenuItem("DrawCatchRadius", "Draw Catch Radius").SetValue(new Circle(true, Color.Green)));
  249. return true;
  250. }
  251. public override bool MiscMenu(Menu config)
  252. {
  253. config.AddItem(new MenuItem("maxqamount", "Max Qs to use simultaneous").SetValue(new Slider(2, 4, 1)));
  254. config.AddItem(new MenuItem("EGapCloser", "Auto E Gap closers").SetValue(true));
  255. config.AddItem(new MenuItem("EInterruptable", "Auto E interruptable spells").SetValue(true));
  256. //config.AddItem(new MenuItem("RManualCast", "Cast R Manually(2000 range)")).SetValue(new KeyBind("T".ToCharArray()[0], KeyBindType.Press));
  257. config.AddItem(new MenuItem("Epeel", "Peel self with E").SetValue(true));
  258. config.AddItem(new MenuItem("CatchRadius", "Axe catch radius").SetValue(new Slider(600, 200, 1000)));
  259. return true;
  260. }
  261. public static int QBuffCount()
  262. {
  263. var buff =
  264. ObjectManager.Player.Buffs.FirstOrDefault(buff1 => buff1.Name.Equals("dravenspinningattack"));
  265. return ExistingReticles.Count + (buff != null ? buff.Count : 0);
  266. }
  267. public Vector3 GetOrbwalkPos()
  268. {
  269. if (ExistingReticles.Count <= 0)
  270. {
  271. return Game.CursorPos;
  272. }
  273. var myHero = ObjectManager.Player;
  274. var cursor = Game.CursorPos;
  275. var reticles =
  276. ExistingReticles.OrderBy(reticle => reticle.ExpireTime)
  277. .FirstOrDefault(
  278. reticle =>
  279. reticle.ReticlePos.Distance(cursor) <= Config.Item("CatchRadius").GetValue<Slider>().Value &&
  280. reticle.Object.IsValid &&
  281. myHero.GetPath(reticle.ReticlePos).ToList().To2D().PathLength() / myHero.MoveSpeed + Game.Time <
  282. reticle.ExpireTime);
  283. return reticles != null && myHero.Distance(reticles.ReticlePos) >= 100 ? reticles.ReticlePos : cursor;
  284. }
  285. public static bool IsFleeing(Obj_AI_Hero hero)
  286. {
  287. var position = E.GetPrediction(hero);
  288. return position != null &&
  289. Vector3.DistanceSquared(ObjectManager.Player.Position, position.CastPosition) >
  290. Vector3.DistanceSquared(hero.Position, position.CastPosition);
  291. }
  292. public override bool ExtrasMenu(Menu config)
  293. {
  294. return true;
  295. }
  296. public override bool LaneClearMenu(Menu config)
  297. {
  298. return true;
  299. }
  300. }
  301. }

comments powered by Disqus