Miss


SUBMITTED BY: Alerand

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

FORMAT: Text only

SIZE: 6.9 kB

HITS: 10513

  1. #region
  2. using System;
  3. using System.Drawing;
  4. using System.Linq;
  5. using System.Resources;
  6. using DetuksSharp;
  7. using LeagueSharp;
  8. using LeagueSharp.Common;
  9. #endregion
  10. namespace Marksman.Champions
  11. {
  12. internal class MissFortune : Champion
  13. {
  14. public static Spell Q, W, E;
  15. private static float UltiCastedTime = 0;
  16. public MissFortune()
  17. {
  18. Q = new Spell(SpellSlot.Q, 650);
  19. Q.SetTargetted(0.29f, 1400f);
  20. W = new Spell(SpellSlot.W);
  21. E = new Spell(SpellSlot.E, 800);
  22. E.SetSkillshot(0.5f, 100f, float.MaxValue, false, SkillshotType.SkillshotCircle);
  23. Obj_AI_Base.OnProcessSpellCast += Obj_AI_Base_OnProcessSpellCast;
  24. Utils.Utils.PrintMessage("MissFortune loaded.");
  25. }
  26. private void Obj_AI_Base_OnProcessSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
  27. {
  28. if (sender.IsMe && args.SData.Name == "MissFortuneBulletTime")
  29. UltiCastedTime = Game.Time;
  30. }
  31. public override void DeathWalker_AfterAttack(AttackableUnit unit, AttackableUnit vTarget)
  32. {
  33. var t = vTarget as Obj_AI_Hero;
  34. if (t != null && (ComboActive || HarassActive) && unit.IsMe)
  35. {
  36. var useQ = GetValue<bool>("UseQ" + (ComboActive ? "C" : "H"));
  37. var useW = GetValue<bool>("UseW" + (ComboActive ? "C" : "H"));
  38. if (useQ)
  39. Q.CastOnUnit(t);
  40. if (useW && W.IsReady())
  41. W.CastOnUnit(ObjectManager.Player);
  42. }
  43. }
  44. public override void Drawing_OnDraw(EventArgs args)
  45. {
  46. Spell[] spellList = {Q, E};
  47. foreach (var spell in spellList)
  48. {
  49. var menuItem = GetValue<Circle>("Draw" + spell.Slot);
  50. if (menuItem.Active && spell.Level > 0)
  51. {
  52. Render.Circle.DrawCircle(ObjectManager.Player.Position, spell.Range, menuItem.Color);
  53. }
  54. }
  55. }
  56. private static void CastQ()
  57. {
  58. if (!Q.IsReady())
  59. return;
  60. var t = TargetSelector.GetTarget(Q.Range + 450, TargetSelector.DamageType.Physical);
  61. if (t.IsValidTarget(Q.Range))
  62. {
  63. Q.CastOnUnit(t);
  64. }
  65. }
  66. public override void Game_OnGameUpdate(EventArgs args)
  67. {
  68. var ultCasting = Game.Time - UltiCastedTime < 0.2 || ObjectManager.Player.IsChannelingImportantSpell();
  69. DeathWalker.setAttack(!ultCasting);
  70. if (Q.IsReady() && GetValue<KeyBind>("UseQTH").Active)
  71. {
  72. if (ObjectManager.Player.HasBuff("Recall"))
  73. return;
  74. CastQ();
  75. }
  76. if (E.IsReady() && GetValue<KeyBind>("UseETH").Active)
  77. {
  78. var t = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Physical);
  79. if (t.IsValidTarget() && (t.HasBuffOfType(BuffType.Stun) || t.HasBuffOfType(BuffType.Snare) ||
  80. t.HasBuffOfType(BuffType.Charm) || t.HasBuffOfType(BuffType.Fear) ||
  81. t.HasBuffOfType(BuffType.Taunt) || t.HasBuff("zhonyasringshield") ||
  82. t.HasBuff("Recall")))
  83. {
  84. E.CastIfHitchanceEquals(t, HitChance.Low);
  85. }
  86. }
  87. if (ComboActive || HarassActive)
  88. {
  89. var useQ = GetValue<bool>("UseQ" + (ComboActive ? "C" : "H"));
  90. var useE = GetValue<bool>("UseE" + (ComboActive ? "C" : "H"));
  91. if (Q.IsReady() && useQ)
  92. {
  93. CastQ();
  94. }
  95. if (E.IsReady() && useE)
  96. {
  97. var t = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Physical);
  98. if (ObjectManager.Player.Distance(t) > 600)
  99. E.CastIfHitchanceEquals(t, t.Path.Count() > 1 ? HitChance.High : HitChance.Medium);
  100. else
  101. E.CastIfHitchanceEquals(t, HitChance.Low);
  102. }
  103. }
  104. if (LaneClearActive)
  105. {
  106. var useQ = GetValue<bool>("UseQL");
  107. if (Q.IsReady() && useQ)
  108. {
  109. var vMinions = MinionManager.GetMinions(ObjectManager.Player.Position, Q.Range);
  110. foreach (
  111. var minions in
  112. vMinions.Where(
  113. minions =>
  114. minions.Health < ObjectManager.Player.GetSpellDamage(minions, SpellSlot.Q) - 20))
  115. Q.Cast(minions);
  116. }
  117. }
  118. }
  119. public override bool ComboMenu(Menu config)
  120. {
  121. config.AddItem(new MenuItem("UseQC" + Id, "Use Q").SetValue(true));
  122. config.AddItem(new MenuItem("UseWC" + Id, "Use W").SetValue(true));
  123. config.AddItem(new MenuItem("UseEC" + Id, "Use E").SetValue(true));
  124. return true;
  125. }
  126. public override bool HarassMenu(Menu config)
  127. {
  128. config.AddItem(new MenuItem("UseQH" + Id, "Use Q").SetValue(true));
  129. config.AddItem(new MenuItem("UseWH" + Id, "Use W").SetValue(true));
  130. config.AddItem(new MenuItem("UseEH" + Id, "Use E").SetValue(true));
  131. config.AddItem(
  132. new MenuItem("UseQTH" + Id, "Use Q (Toggle)").SetValue(new KeyBind("H".ToCharArray()[0],
  133. KeyBindType.Toggle)));
  134. config.AddItem(
  135. new MenuItem("UseETH" + Id, "Use E (Toggle)").SetValue(new KeyBind("T".ToCharArray()[0],
  136. KeyBindType.Toggle)));
  137. return true;
  138. }
  139. public override bool DrawingMenu(Menu config)
  140. {
  141. config.AddItem(
  142. new MenuItem("DrawQ" + Id, "Q range").SetValue(
  143. new Circle(true, Color.FromArgb(100, 255, 0, 255))));
  144. config.AddItem(
  145. new MenuItem("DrawE" + Id, "E range").SetValue(
  146. new Circle(false, Color.FromArgb(100, 255, 255, 255))));
  147. return true;
  148. }
  149. public override bool ExtrasMenu(Menu config)
  150. {
  151. return true;
  152. }
  153. public override bool LaneClearMenu(Menu config)
  154. {
  155. config.AddItem(new MenuItem("UseQL" + Id, "Use Q").SetValue(true));
  156. return true;
  157. }
  158. }
  159. }

comments powered by Disqus