Ezr


SUBMITTED BY: Alerand

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

FORMAT: Text only

SIZE: 13.0 kB

HITS: 11429

  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.Direct3D9;
  9. using Font = SharpDX.Direct3D9.Font;
  10. #endregion
  11. namespace Marksman.Champions
  12. {
  13. internal class Ezreal : Champion
  14. {
  15. public static Spell Q;
  16. public static Spell E;
  17. public static Spell W;
  18. public static Spell R;
  19. public Ezreal()
  20. {
  21. Q = new Spell(SpellSlot.Q, 1190);
  22. Q.SetSkillshot(0.25f, 60f, 2000f, true, SkillshotType.SkillshotLine);
  23. W = new Spell(SpellSlot.W, 800);
  24. W.SetSkillshot(0.25f, 80f, 1600f, false, SkillshotType.SkillshotLine);
  25. E = new Spell(SpellSlot.E);
  26. R = new Spell(SpellSlot.R, 2500);
  27. R.SetSkillshot(1f, 160f, 2000f, false, SkillshotType.SkillshotLine);
  28. Utility.HpBarDamageIndicator.DamageToUnit = GetComboDamage;
  29. Utility.HpBarDamageIndicator.Enabled = true;
  30. Utils.Utils.PrintMessage("Ezreal loaded.");
  31. }
  32. public override void DeathWalker_AfterAttack(AttackableUnit unit, AttackableUnit target)
  33. {
  34. /*
  35. var t = target as Obj_AI_Hero;
  36. if (t != null && (ComboActive || HarassActive) && unit.IsMe)
  37. {
  38. var useQ = GetValue<bool>("UseQ" + (ComboActive ? "C" : "H"));
  39. var useW = GetValue<bool>("UseW" + (ComboActive ? "C" : "H"));
  40. if (Q.IsReady() && useQ)
  41. {
  42. CastQ();
  43. }
  44. else if (W.IsReady() && useW)
  45. {
  46. W.Cast(t);
  47. }
  48. }
  49. */
  50. }
  51. private static void CastQ()
  52. {
  53. var t = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical);
  54. if (t.IsValidTarget() && Q.IsReady() &&
  55. ObjectManager.Player.Distance(t.ServerPosition) <= Q.Range)
  56. {
  57. var Qpredict = Q.GetPrediction(t);
  58. var hithere = Qpredict.CastPosition.Extend(ObjectManager.Player.Position, -140);
  59. if (Qpredict.Hitchance >= HitChance.High)
  60. Q.Cast(hithere);
  61. }
  62. }
  63. public override void Drawing_OnDraw(EventArgs args)
  64. {
  65. Spell[] spellList = {Q, W};
  66. foreach (var spell in spellList)
  67. {
  68. var menuItem = GetValue<Circle>("Draw" + spell.Slot);
  69. if (menuItem.Active)
  70. Render.Circle.DrawCircle(ObjectManager.Player.Position, spell.Range, menuItem.Color);
  71. }
  72. var drawRMin = Program.Config.SubMenu("Combo").Item("DrawRMin").GetValue<Circle>();
  73. if (drawRMin.Active)
  74. {
  75. var minRRange = Program.Config.SubMenu("Combo").Item("UseRCMinRange").GetValue<Slider>().Value;
  76. Render.Circle.DrawCircle(ObjectManager.Player.Position, minRRange, drawRMin.Color, 2);
  77. }
  78. var drawRMax = Program.Config.SubMenu("Combo").Item("DrawRMax").GetValue<Circle>();
  79. if (drawRMax.Active)
  80. {
  81. var maxRRange = Program.Config.SubMenu("Combo").Item("UseRCMaxRange").GetValue<Slider>().Value;
  82. Render.Circle.DrawCircle(ObjectManager.Player.Position, maxRRange, drawRMax.Color, 2);
  83. }
  84. }
  85. public override void Game_OnGameUpdate(EventArgs args)
  86. {
  87. if (LaneClearActive)
  88. {
  89. var useQ = GetValue<bool>("UseQL");
  90. if (Q.IsReady() && useQ)
  91. {
  92. var vMinions = MinionManager.GetMinions(ObjectManager.Player.Position, Q.Range);
  93. foreach (var minions in
  94. vMinions.Where(
  95. minions => minions.Health < ObjectManager.Player.GetSpellDamage(minions, SpellSlot.Q)))
  96. {
  97. var qP = Q.GetPrediction(minions);
  98. var hit = qP.CastPosition.Extend(ObjectManager.Player.Position, -140);
  99. if (qP.Hitchance >= HitChance.High)
  100. Q.Cast(hit);
  101. }
  102. }
  103. }
  104. Obj_AI_Hero t;
  105. if (Q.IsReady() && Program.Config.Item("UseQTH").GetValue<KeyBind>().Active && ToggleActive)
  106. {
  107. if (ObjectManager.Player.HasBuff("Recall"))
  108. return;
  109. t = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical);
  110. var useQt = (Program.Config.Item("DontQToggleHarass" + t.ChampionName) != null &&
  111. Program.Config.Item("DontQToggleHarass" + t.ChampionName).GetValue<bool>() == false);
  112. if (useQt)
  113. CastQ();
  114. }
  115. if (W.IsReady() && Program.Config.Item("UseWTH").GetValue<KeyBind>().Active && ToggleActive)
  116. {
  117. if (ObjectManager.Player.HasBuff("Recall"))
  118. return;
  119. t = TargetSelector.GetTarget(W.Range, TargetSelector.DamageType.Physical);
  120. var useWt = (Program.Config.Item("DontWToggleHarass" + t.ChampionName) != null &&
  121. Program.Config.Item("DontWToggleHarass" + t.ChampionName).GetValue<bool>() == false);
  122. if (useWt)
  123. W.Cast(t);
  124. }
  125. if (ComboActive || HarassActive)
  126. {
  127. var useQ = GetValue<bool>("UseQ" + (ComboActive ? "C" : "H"));
  128. var useW = GetValue<bool>("UseW" + (ComboActive ? "C" : "H"));
  129. var useR = Program.Config.SubMenu("Combo").Item("UseRC").GetValue<bool>();
  130. if (DeathWalker.canMove())
  131. {
  132. if (Q.IsReady() && useQ)
  133. {
  134. t = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical);
  135. if (t != null)
  136. CastQ();
  137. }
  138. if (W.IsReady() && useW)
  139. {
  140. t = TargetSelector.GetTarget(W.Range, TargetSelector.DamageType.Physical);
  141. if (t != null)
  142. W.Cast(t);
  143. }
  144. if (R.IsReady() && useR)
  145. {
  146. var minRRange = Program.Config.SubMenu("Combo").Item("UseRCMinRange").GetValue<Slider>().Value;
  147. var maxRRange = Program.Config.SubMenu("Combo").Item("UseRCMaxRange").GetValue<Slider>().Value;
  148. t = TargetSelector.GetTarget(maxRRange, TargetSelector.DamageType.Physical);
  149. if (Q.IsReady() && t.IsValidTarget(Q.Range) && Q.GetPrediction(t).CollisionObjects.Count == 0 &&
  150. t.Health < ObjectManager.Player.GetSpellDamage(t, SpellSlot.Q))
  151. return;
  152. if (t.IsValidTarget() && ObjectManager.Player.Distance(t) >= minRRange &&
  153. t.Health <= ObjectManager.Player.GetSpellDamage(t, SpellSlot.R))
  154. {
  155. R.Cast(t);
  156. }
  157. }
  158. }
  159. }
  160. if (R.IsReady() && GetValue<KeyBind>("CastR").Active)
  161. {
  162. t = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Physical);
  163. if (t.IsValidTarget())
  164. R.Cast(t);
  165. }
  166. }
  167. private static float GetComboDamage(Obj_AI_Hero t)
  168. {
  169. var fComboDamage = 0f;
  170. if (Q.IsReady())
  171. fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.Q);
  172. if (W.IsReady())
  173. fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.W);
  174. if (E.IsReady())
  175. fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.E);
  176. if (R.IsReady())
  177. fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.R);
  178. if (ObjectManager.Player.GetSpellSlot("summonerdot") != SpellSlot.Unknown &&
  179. ObjectManager.Player.Spellbook.CanUseSpell(ObjectManager.Player.GetSpellSlot("summonerdot")) ==
  180. SpellState.Ready && ObjectManager.Player.Distance(t) < 550)
  181. fComboDamage += (float) ObjectManager.Player.GetSummonerSpellDamage(t, Damage.SummonerSpell.Ignite);
  182. if (Items.CanUseItem(3144) && ObjectManager.Player.Distance(t) < 550)
  183. fComboDamage += (float) ObjectManager.Player.GetItemDamage(t, Damage.DamageItems.Bilgewater);
  184. if (Items.CanUseItem(3153) && ObjectManager.Player.Distance(t) < 550)
  185. fComboDamage += (float) ObjectManager.Player.GetItemDamage(t, Damage.DamageItems.Botrk);
  186. return fComboDamage;
  187. }
  188. public override bool ComboMenu(Menu config)
  189. {
  190. config.AddItem(new MenuItem("UseQC" + Id, "Q").SetValue(true));
  191. config.AddItem(new MenuItem("UseWC" + Id, "W").SetValue(true));
  192. var xRMenu = new Menu("R", "ComboR");
  193. {
  194. xRMenu.AddItem(new MenuItem("UseRC", "Use").SetValue(true));
  195. xRMenu.AddItem(new MenuItem("UseRCMinRange", "Min. Range").SetValue(new Slider(200, 200, 1000)));
  196. xRMenu.AddItem(new MenuItem("UseRCMaxRange", "Max. Range").SetValue(new Slider(500, 500, 2000)));
  197. xRMenu.AddItem(
  198. new MenuItem("DrawRMin", "Draw Min. R Range").SetValue(
  199. new Circle(true, Color.DarkRed)));
  200. xRMenu.AddItem(
  201. new MenuItem("DrawRMax", "Draw Max. R Range").SetValue(
  202. new Circle(true, Color.DarkMagenta)));
  203. config.AddSubMenu(xRMenu);
  204. }
  205. return true;
  206. }
  207. public override bool HarassMenu(Menu config)
  208. {
  209. config.AddItem(new MenuItem("UseQH" + Id, "Q").SetValue(true));
  210. config.AddItem(new MenuItem("UseWH" + Id, "W").SetValue(true));
  211. config.AddSubMenu(new Menu("Don't Q Toggle to", "DontQToggleHarass"));
  212. config.AddSubMenu(new Menu("Don't W Toggle to", "DontWToggleHarass"));
  213. {
  214. foreach (var enemy in
  215. ObjectManager.Get<Obj_AI_Hero>().Where(enemy => enemy.Team != ObjectManager.Player.Team))
  216. {
  217. config.SubMenu("DontQToggleHarass")
  218. .AddItem(
  219. new MenuItem("DontQToggleHarass" + enemy.ChampionName, enemy.ChampionName).SetValue(false));
  220. config.SubMenu("DontWToggleHarass")
  221. .AddItem(
  222. new MenuItem("DontWToggleHarass" + enemy.ChampionName, enemy.ChampionName).SetValue(false));
  223. }
  224. }
  225. config.AddItem(
  226. new MenuItem("UseQTH", "Q (Toggle)").SetValue(new KeyBind("H".ToCharArray()[0], KeyBindType.Toggle)));
  227. config.AddItem(
  228. new MenuItem("UseWTH", "W (Toggle)").SetValue(new KeyBind("J".ToCharArray()[0], KeyBindType.Toggle)));
  229. //config.AddItem(new MenuItem("DrawHarassToggleStatus", "Draw Toggle Status").SetValue(true));
  230. return true;
  231. }
  232. public override bool MiscMenu(Menu config)
  233. {
  234. config.AddItem(
  235. new MenuItem("CastR" + Id, "Cast R (2000 Range)").SetValue(
  236. new KeyBind("T".ToCharArray()[0], KeyBindType.Press)));
  237. return true;
  238. }
  239. public override bool DrawingMenu(Menu config)
  240. {
  241. config.AddItem(
  242. new MenuItem("DrawQ" + Id, "Q range").SetValue(
  243. new Circle(true, Color.FromArgb(100, 255, 0, 255))));
  244. config.AddItem(
  245. new MenuItem("DrawW" + Id, "W range").SetValue(
  246. new Circle(false, Color.FromArgb(100, 255, 255, 255))));
  247. var dmgAfterComboItem = new MenuItem("DamageAfterCombo", "Damage After Combo").SetValue(true);
  248. Config.AddItem(dmgAfterComboItem);
  249. return true;
  250. }
  251. public override bool ExtrasMenu(Menu config)
  252. {
  253. return true;
  254. }
  255. public override bool LaneClearMenu(Menu config)
  256. {
  257. config.AddItem(new MenuItem("UseQL" + Id, "Use Q").SetValue(true));
  258. return true;
  259. }
  260. }
  261. }

comments powered by Disqus