Erg


SUBMITTED BY: Alerand

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

FORMAT: Text only

SIZE: 11.7 kB

HITS: 10035

  1. #region
  2. using System;
  3. using System.Linq;
  4. using LeagueSharp;
  5. using LeagueSharp.Common;
  6. using SharpDX;
  7. using Color = System.Drawing.Color;
  8. #endregion
  9. namespace Marksman.Champions
  10. {
  11. internal class Urgot : Champion
  12. {
  13. private const string vSpace = " ";
  14. public static Spell Q, QEx, W, E, R;
  15. public Urgot()
  16. {
  17. Utils.Utils.PrintMessage("Urgot loaded.");
  18. Q = new Spell(SpellSlot.Q, 1000);
  19. QEx = new Spell(SpellSlot.Q, 1200);
  20. W = new Spell(SpellSlot.W);
  21. E = new Spell(SpellSlot.E, 900);
  22. R = new Spell(SpellSlot.R, 700);
  23. Q.SetSkillshot(0.10f, 100f, 1600f, true, SkillshotType.SkillshotLine);
  24. QEx.SetSkillshot(0.10f, 60f, 1600f, false, SkillshotType.SkillshotLine);
  25. E.SetSkillshot(0.25f, 120f, 1500f, false, SkillshotType.SkillshotCircle);
  26. R.SetTargetted(1f, 100f);
  27. }
  28. public static int UnderTurretEnemyMinion
  29. {
  30. get
  31. {
  32. return ObjectManager.Get<Obj_AI_Minion>().Count(xMinion => xMinion.IsEnemy && UnderAllyTurret(xMinion));
  33. }
  34. }
  35. private static Obj_AI_Hero getInfectedEnemy
  36. {
  37. get
  38. {
  39. return
  40. (from enemy in
  41. ObjectManager.Get<Obj_AI_Hero>()
  42. .Where(
  43. enemy =>
  44. enemy.IsEnemy && ObjectManager.Player.Distance(enemy) <= QEx.Range &&
  45. enemy.HasBuff("urgotcorrosivedebuff", true))
  46. select enemy).FirstOrDefault();
  47. }
  48. }
  49. public void AntiGapcloser_OnEnemyGapcloser(ActiveGapcloser gapcloser)
  50. {
  51. if (W.IsReady() && gapcloser.Sender.IsValidTarget(250f))
  52. W.Cast();
  53. }
  54. public static bool UnderAllyTurret(Obj_AI_Base unit)
  55. {
  56. return ObjectManager.Get<Obj_AI_Turret>().Where<Obj_AI_Turret>(turret =>
  57. {
  58. if (turret == null || !turret.IsValid || turret.Health <= 0f)
  59. {
  60. return false;
  61. }
  62. if (!turret.IsEnemy)
  63. {
  64. return true;
  65. }
  66. return false;
  67. })
  68. .Any<Obj_AI_Turret>(
  69. turret =>
  70. Vector2.Distance(unit.Position.To2D(), turret.Position.To2D()) < 900f && turret.IsAlly);
  71. }
  72. public static bool TeleportTurret(Obj_AI_Hero vTarget)
  73. {
  74. return
  75. ObjectManager.Get<Obj_AI_Hero>()
  76. .Any(player => !player.IsDead && player.IsMe && UnderAllyTurret(ObjectManager.Player));
  77. }
  78. public override void Drawing_OnDraw(EventArgs args)
  79. {
  80. Spell[] spellList = {Q, E, R};
  81. foreach (var spell in spellList)
  82. {
  83. var menuItem = GetValue<Circle>("Draw" + spell.Slot);
  84. if (menuItem.Active)
  85. Render.Circle.DrawCircle(ObjectManager.Player.Position, spell.Range, menuItem.Color);
  86. }
  87. var drawQEx = GetValue<Circle>("DrawQEx");
  88. if (drawQEx.Active)
  89. {
  90. if (getInfectedEnemy != null)
  91. {
  92. Render.Circle.DrawCircle(ObjectManager.Player.Position, QEx.Range, Color.GreenYellow);
  93. Render.Circle.DrawCircle(getInfectedEnemy.Position, 125f, Color.GreenYellow);
  94. }
  95. }
  96. }
  97. private static void UseSpells(bool useQ, bool useW, bool useE)
  98. {
  99. Obj_AI_Hero t;
  100. if (W.IsReady() && useW)
  101. {
  102. t = TargetSelector.GetTarget(ObjectManager.Player.AttackRange - 30, TargetSelector.DamageType.Physical);
  103. if (t != null)
  104. W.Cast();
  105. }
  106. }
  107. private static void UltUnderTurret()
  108. {
  109. ObjectManager.Player.IssueOrder(GameObjectOrder.MoveTo, Game.CursorPos);
  110. Drawing.DrawText(Drawing.Width*0.41f, Drawing.Height*0.80f, Color.GreenYellow,
  111. "Teleport enemy to under ally turret active!");
  112. if (R.IsReady() && Program.CClass.GetValue<bool>("UseRC"))
  113. {
  114. var t = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Physical);
  115. if (t != null && UnderAllyTurret(ObjectManager.Player) && !UnderAllyTurret(t) &&
  116. ObjectManager.Player.Distance(t) > 200)
  117. {
  118. R.CastOnUnit(t);
  119. }
  120. }
  121. UseSpells(Program.CClass.GetValue<bool>("UseQC"), Program.CClass.GetValue<bool>("UseWC"),
  122. Program.CClass.GetValue<bool>("UseEC"));
  123. }
  124. private static void UltInMyTeam()
  125. {
  126. ObjectManager.Player.IssueOrder(GameObjectOrder.MoveTo, Game.CursorPos);
  127. Drawing.DrawText(Drawing.Width*0.42f, Drawing.Height*0.80f, Color.GreenYellow,
  128. "Teleport enemy to my team active!");
  129. var t = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Physical);
  130. if (R.IsReady() && t != null)
  131. {
  132. var Ally =
  133. ObjectManager.Get<Obj_AI_Hero>()
  134. .Where(
  135. ally =>
  136. ally.IsAlly && !ally.IsDead && ObjectManager.Player.Distance(ally) <= R.Range &&
  137. t.Distance(ally) > t.Distance(ObjectManager.Player));
  138. if (Ally.Count() >= Program.CClass.GetValue<Slider>("UltOp2Count").Value)
  139. R.CastOnUnit(t);
  140. }
  141. UseSpells(Program.CClass.GetValue<bool>("UseQC"), Program.CClass.GetValue<bool>("UseWC"),
  142. Program.CClass.GetValue<bool>("UseEC"));
  143. }
  144. private static void CastQ(Obj_AI_Hero t)
  145. {
  146. var Qpredict = Q.GetPrediction(t);
  147. var hithere = Qpredict.CastPosition.Extend(ObjectManager.Player.Position, -20);
  148. if (Qpredict.Hitchance >= HitChance.High)
  149. {
  150. if (W.IsReady())
  151. W.Cast();
  152. Q.Cast(hithere);
  153. }
  154. }
  155. public override void Game_OnGameUpdate(EventArgs args)
  156. {
  157. if (R.Level > 0)
  158. R.Range = 150*R.Level + 400;
  159. if (GetValue<KeyBind>("UltOp1").Active)
  160. {
  161. UltUnderTurret();
  162. }
  163. if (GetValue<KeyBind>("UltOp2").Active)
  164. {
  165. UltInMyTeam();
  166. }
  167. if (!ComboActive)
  168. {
  169. var t = TargetSelector.GetTarget(QEx.Range, TargetSelector.DamageType.Physical);
  170. if (!t.IsValidTarget())
  171. return;
  172. if (HarassActive && GetValue<bool>("UseQH"))
  173. CastQ(t);
  174. if (GetValue<KeyBind>("UseQTH").Active)
  175. CastQ(t);
  176. }
  177. if (ComboActive)
  178. {
  179. var t = TargetSelector.GetTarget(QEx.Range, TargetSelector.DamageType.Physical);
  180. if (E.IsReady() && GetValue<bool>("UseEC"))
  181. {
  182. if (t.IsValidTarget(E.Range))
  183. {
  184. E.CastIfHitchanceEquals(t, HitChance.Medium);
  185. }
  186. }
  187. if (Q.IsReady() && GetValue<bool>("UseQC"))
  188. {
  189. if (getInfectedEnemy != null)
  190. {
  191. if (W.IsReady())
  192. W.Cast();
  193. QEx.Cast(getInfectedEnemy);
  194. }
  195. else
  196. {
  197. if (t.IsValidTarget(Q.Range))
  198. CastQ(t);
  199. }
  200. }
  201. }
  202. if (LaneClearActive)
  203. {
  204. var useQ = GetValue<bool>("UseQL");
  205. if (Q.IsReady() && useQ)
  206. {
  207. var vMinions = MinionManager.GetMinions(ObjectManager.Player.Position, Q.Range);
  208. foreach (
  209. var minions in
  210. vMinions.Where(
  211. minions => minions.Health < ObjectManager.Player.GetSpellDamage(minions, SpellSlot.Q)))
  212. Q.Cast(minions);
  213. }
  214. }
  215. }
  216. public override bool ComboMenu(Menu config)
  217. {
  218. config.AddItem(new MenuItem("UseQC" + Id, "Use Q").SetValue(true));
  219. config.AddItem(new MenuItem("UseWC" + Id, "Use W").SetValue(true));
  220. config.AddItem(new MenuItem("UseEC" + Id, "Use E").SetValue(true));
  221. config.AddItem(new MenuItem("UseRC" + Id, "Use R").SetValue(true));
  222. config.AddItem(new MenuItem("UltOpt1", "Ult Option 1"));
  223. config.AddItem(
  224. new MenuItem("UltOp1" + Id, vSpace + "Teleport Ally Turrent").SetValue(new KeyBind(
  225. "T".ToCharArray()[0], KeyBindType.Press)));
  226. config.AddItem(new MenuItem("UltOpt2", "Ult Option 2"));
  227. config.AddItem(
  228. new MenuItem("UltOp2" + Id, vSpace + "Teleport My Team").SetValue(new KeyBind("G".ToCharArray()[0],
  229. KeyBindType.Press)));
  230. config.AddItem(new MenuItem("UltOp2Count" + Id, vSpace + "Min. Ally Count").SetValue(new Slider(1, 1, 5)));
  231. config.AddSubMenu(new Menu("Don't Use Ult on", "DontUlt"));
  232. foreach (
  233. var enemy in ObjectManager.Get<Obj_AI_Hero>().Where(enemy => enemy.Team != ObjectManager.Player.Team))
  234. {
  235. config.SubMenu("DontUlt")
  236. .AddItem(
  237. new MenuItem(string.Format("DontUlt{0}", enemy.CharData.BaseSkinName), enemy.CharData.BaseSkinName).SetValue(false));
  238. }
  239. return true;
  240. }
  241. public override bool HarassMenu(Menu config)
  242. {
  243. config.AddItem(new MenuItem("UseQH" + Id, "Use Q").SetValue(true));
  244. config.AddItem(
  245. new MenuItem("UseQTH" + Id, "Use Q (Toggle)").SetValue(new KeyBind("H".ToCharArray()[0],
  246. KeyBindType.Toggle)));
  247. return true;
  248. }
  249. public override bool DrawingMenu(Menu config)
  250. {
  251. config.AddItem(new MenuItem("DrawQ" + Id, "Q range").SetValue(new Circle(true, Color.LightGray)));
  252. config.AddItem(new MenuItem("DrawE" + Id, "E range").SetValue(new Circle(false, Color.LightGray)));
  253. config.AddItem(new MenuItem("DrawR" + Id, "R range").SetValue(new Circle(false, Color.LightGray)));
  254. config.AddItem(new MenuItem("DrawQEx" + Id, "Corrosive Charge").SetValue(new Circle(true, Color.LightGray)));
  255. return true;
  256. }
  257. public override bool MiscMenu(Menu config)
  258. {
  259. return true;
  260. }
  261. public override bool LaneClearMenu(Menu config)
  262. {
  263. config.AddItem(new MenuItem("UseQL" + Id, "Use Q").SetValue(true));
  264. return true;
  265. }
  266. }
  267. }

comments powered by Disqus