AhScript


SUBMITTED BY: Alerand

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

UPDATED: May 7, 2016, 10:47 a.m.

FORMAT: Text only

SIZE: 11.6 kB

HITS: 12240

  1. using System;
  2. using System.Linq;
  3. using DetuksSharp;
  4. using LeagueSharp;
  5. using LeagueSharp.Common;
  6. using SharpDX;
  7. using SharpDX.Direct3D9;
  8. #endregion
  9. namespace Marksman.Champions
  10. {
  11. internal class Ashe : Champion
  12. {
  13. public static Spell Q;
  14. public static Spell W;
  15. public static Spell E;
  16. public static Spell R;
  17. public Ashe()
  18. {
  19. Q = new Spell(SpellSlot.Q);
  20. W = new Spell(SpellSlot.W, 1200);
  21. E = new Spell(SpellSlot.E);
  22. R = new Spell(SpellSlot.R, 20000);
  23. W.SetSkillshot(250f, (float) (24.32f*Math.PI/180), 902f, true, SkillshotType.SkillshotCone);
  24. E.SetSkillshot(377f, 299f, 1400f, false, SkillshotType.SkillshotLine);
  25. R.SetSkillshot(250f, 130f, 1600f, false, SkillshotType.SkillshotLine);
  26. Obj_AI_Base.OnProcessSpellCast += Game_OnProcessSpell;
  27. Interrupter2.OnInterruptableTarget += Interrupter2_OnInterruptableTarget;
  28. Utility.HpBarDamageIndicator.DamageToUnit = GetComboDamage;
  29. Utility.HpBarDamageIndicator.Enabled = true;
  30. Utils.Utils.PrintMessage("Ashe loaded.");
  31. }
  32. private static bool AsheQCastReady
  33. {
  34. get { return ObjectManager.Player.HasBuff("AsheQCastReady", true); }
  35. }
  36. public bool IsQActive
  37. {
  38. get { return ObjectManager.Player.HasBuff("FrostShot"); }
  39. }
  40. private void Interrupter2_OnInterruptableTarget(Obj_AI_Hero unit, Interrupter2.InterruptableTargetEventArgs args)
  41. {
  42. if (R.IsReady() && Config.Item("RInterruptable" + Id).GetValue<bool>() && unit.IsValidTarget(1500))
  43. {
  44. R.Cast(unit);
  45. }
  46. }
  47. private static float GetComboDamage(Obj_AI_Hero t)
  48. {
  49. var fComboDamage = 0f;
  50. if (W.IsReady())
  51. fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.W);
  52. if (R.IsReady())
  53. fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.R);
  54. if (ObjectManager.Player.GetSpellSlot("summonerdot") != SpellSlot.Unknown &&
  55. ObjectManager.Player.Spellbook.CanUseSpell(ObjectManager.Player.GetSpellSlot("summonerdot")) ==
  56. SpellState.Ready && ObjectManager.Player.Distance(t) < 550)
  57. fComboDamage += (float) ObjectManager.Player.GetSummonerSpellDamage(t, Damage.SummonerSpell.Ignite);
  58. if (Items.CanUseItem(3144) && ObjectManager.Player.Distance(t) < 550)
  59. fComboDamage += (float) ObjectManager.Player.GetItemDamage(t, Damage.DamageItems.Bilgewater);
  60. if (Items.CanUseItem(3153) && ObjectManager.Player.Distance(t) < 550)
  61. fComboDamage += (float) ObjectManager.Player.GetItemDamage(t, Damage.DamageItems.Botrk);
  62. return fComboDamage;
  63. }
  64. public void Game_OnProcessSpell(Obj_AI_Base unit, GameObjectProcessSpellCastEventArgs spell)
  65. {
  66. if (!Config.Item("EFlash" + Id).GetValue<bool>() || unit.Team == ObjectManager.Player.Team)
  67. return;
  68. if (spell.SData.Name.ToLower() == "summonerflash")
  69. E.Cast(spell.End);
  70. }
  71. public override void Game_OnGameUpdate(EventArgs args)
  72. {
  73. if (LaneClearActive)
  74. {
  75. if (Program.Config.Item("UseQForBigBoys").GetValue<bool>())
  76. JungleFarm();
  77. }
  78. else if (!ComboActive)
  79. {
  80. var t = TargetSelector.GetTarget(W.Range, TargetSelector.DamageType.Physical);
  81. if (!t.IsValidTarget() || !W.IsReady())
  82. return;
  83. if (Program.Config.Item("UseWTH").GetValue<KeyBind>().Active)
  84. {
  85. if (ObjectManager.Player.HasBuff("Recall"))
  86. return;
  87. W.Cast(t);
  88. }
  89. if (t.HasBuffOfType(BuffType.Stun) || t.HasBuffOfType(BuffType.Snare) ||
  90. t.HasBuffOfType(BuffType.Charm) || t.HasBuffOfType(BuffType.Fear) ||
  91. t.HasBuffOfType(BuffType.Taunt) || t.HasBuff("zhonyasringshield") ||
  92. t.HasBuff("Recall"))
  93. {
  94. W.Cast(t.Position);
  95. }
  96. }
  97. /* [ Combo ] */
  98. if (ComboActive)
  99. {
  100. var useQ = Config.Item("UseQC" + Id).GetValue<bool>();
  101. var useW = Config.Item("UseWC" + Id).GetValue<bool>();
  102. var t = TargetSelector.GetTarget(W.Range, TargetSelector.DamageType.Physical);
  103. if (useQ && Q.IsReady() && AsheQCastReady)
  104. {
  105. if (t.IsValidTarget(DeathWalker.getRealAutoAttackRange(null) + 90))
  106. {
  107. Q.Cast();
  108. }
  109. }
  110. if (useW && W.IsReady() && t.IsValidTarget())
  111. {
  112. W.Cast(t);
  113. }
  114. var useR = Program.Config.SubMenu("Combo").Item("UseRC").GetValue<bool>();
  115. if (useR && R.IsReady())
  116. {
  117. var minRRange = Program.Config.SubMenu("Combo").Item("UseRCMinRange").GetValue<Slider>().Value;
  118. var maxRRange = Program.Config.SubMenu("Combo").Item("UseRCMaxRange").GetValue<Slider>().Value;
  119. t = TargetSelector.GetTarget(maxRRange, TargetSelector.DamageType.Physical);
  120. if (!t.IsValidTarget())
  121. return;
  122. var aaDamage = DeathWalker.inAutoAttackRange(t)
  123. ? ObjectManager.Player.GetAutoAttackDamage(t, true)
  124. : 0;
  125. if (t.Health > aaDamage && t.Health <= ObjectManager.Player.GetSpellDamage(t, SpellSlot.R) &&
  126. ObjectManager.Player.Distance(t) >= minRRange)
  127. {
  128. R.Cast(t);
  129. }
  130. }
  131. }
  132. //Harass
  133. if (HarassActive)
  134. {
  135. var target = TargetSelector.GetTarget(1200, TargetSelector.DamageType.Physical);
  136. if (target == null)
  137. return;
  138. if (Config.Item("UseWH" + Id).GetValue<bool>() && W.IsReady())
  139. W.Cast(target);
  140. }
  141. //Manual cast R
  142. if (Config.Item("RManualCast" + Id).GetValue<KeyBind>().Active)
  143. {
  144. var rTarget = TargetSelector.GetTarget(2000, TargetSelector.DamageType.Physical);
  145. R.Cast(rTarget);
  146. }
  147. }
  148. public override bool ComboMenu(Menu config)
  149. {
  150. config.AddItem(new MenuItem("UseQC" + Id, "Q").SetValue(true));
  151. config.AddItem(new MenuItem("UseWC" + Id, "W").SetValue(true));
  152. var xRMenu = new Menu("R", "ComboR");
  153. {
  154. xRMenu.AddItem(new MenuItem("UseRC", "Use").SetValue(true));
  155. xRMenu.AddItem(new MenuItem("UseRCMinRange", "Min. Range").SetValue(new Slider(200, 200, 1000)));
  156. xRMenu.AddItem(new MenuItem("UseRCMaxRange", "Max. Range").SetValue(new Slider(500, 500, 2000)));
  157. xRMenu.AddItem(
  158. new MenuItem("DrawRMin", "Draw Min. R Range").SetValue(
  159. new Circle(true, System.Drawing.Color.DarkRed)));
  160. xRMenu.AddItem(
  161. new MenuItem("DrawRMax", "Draw Max. R Range").SetValue(
  162. new Circle(true, System.Drawing.Color.DarkMagenta)));
  163. config.AddSubMenu(xRMenu);
  164. }
  165. return true;
  166. }
  167. public override bool HarassMenu(Menu config)
  168. {
  169. config.AddItem(new MenuItem("UseWH" + Id, "W").SetValue(true));
  170. config.AddItem(
  171. new MenuItem("UseWTH", "Use W (Toggle)").SetValue(new KeyBind("H".ToCharArray()[0], KeyBindType.Toggle)));
  172. return true;
  173. }
  174. public override bool LaneClearMenu(Menu config)
  175. {
  176. config.AddItem(new MenuItem("UseQForBigBoys", "Use Q For Baron/Dragon/Red/Blue").SetValue(true));
  177. return true;
  178. }
  179. public override bool DrawingMenu(Menu config)
  180. {
  181. config.AddItem(
  182. new MenuItem("DrawW" + Id, "W range").SetValue(new Circle(true, System.Drawing.Color.CornflowerBlue)));
  183. config.AddItem(
  184. new MenuItem("DrawE" + Id, "E range").SetValue(new Circle(true,
  185. System.Drawing.Color.FromArgb(100, 255, 0, 255))));
  186. return true;
  187. }
  188. public override bool MiscMenu(Menu config)
  189. {
  190. config.AddItem(new MenuItem("RInterruptable" + Id, "Auto R Interruptable Spells").SetValue(true));
  191. config.AddItem(new MenuItem("EFlash" + Id, "Use E against Flashes").SetValue(true));
  192. config.AddItem(new MenuItem("RManualCast" + Id, "Cast R Manually(2000 range)"))
  193. .SetValue(new KeyBind('T', KeyBindType.Press));
  194. return true;
  195. }
  196. public override void Drawing_OnDraw(EventArgs args)
  197. {
  198. var drawW = Config.Item("DrawW" + Id).GetValue<Circle>();
  199. if (drawW.Active)
  200. {
  201. Render.Circle.DrawCircle(ObjectManager.Player.Position, W.Range, drawW.Color);
  202. }
  203. var drawE = Config.Item("DrawE" + Id).GetValue<Circle>();
  204. if (drawE.Active)
  205. {
  206. Render.Circle.DrawCircle(ObjectManager.Player.Position, E.Range, drawE.Color);
  207. }
  208. var drawRMin = Program.Config.SubMenu("Combo").Item("DrawRMin").GetValue<Circle>();
  209. if (drawRMin.Active)
  210. {
  211. var minRRange = Program.Config.SubMenu("Combo").Item("UseRCMinRange").GetValue<Slider>().Value;
  212. Render.Circle.DrawCircle(ObjectManager.Player.Position, minRRange, drawRMin.Color, 2);
  213. }
  214. var drawRMax = Program.Config.SubMenu("Combo").Item("DrawRMax").GetValue<Circle>();
  215. if (drawRMax.Active)
  216. {
  217. var maxRRange = Program.Config.SubMenu("Combo").Item("UseRCMaxRange").GetValue<Slider>().Value;
  218. Render.Circle.DrawCircle(ObjectManager.Player.Position, maxRRange, drawRMax.Color, 2);
  219. }
  220. }
  221. private static void JungleFarm()
  222. {
  223. var mobs = MinionManager.GetMinions(ObjectManager.Player.ServerPosition,
  224. DeathWalker.getRealAutoAttackRange(null) + 65, MinionTypes.All,
  225. MinionTeam.Neutral, MinionOrderTypes.MaxHealth);
  226. if (mobs == null)
  227. return;
  228. var mob = mobs[0];
  229. string[] bigBoys = {"Baron", "Dragon", "Red", "Blue"};
  230. foreach (
  231. var xbigBoys in
  232. bigBoys.Where(xbigBoys => mob.Name.Contains(xbigBoys))
  233. .Where(xbigBoys => Q.IsReady() && AsheQCastReady))
  234. {
  235. Q.Cast();
  236. }
  237. }
  238. public override bool ExtrasMenu(Menu config)
  239. {
  240. return true;
  241. }
  242. }
  243. }

comments powered by Disqus