Grv


SUBMITTED BY: Alerand

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

FORMAT: Text only

SIZE: 7.0 kB

HITS: 11243

  1. #region
  2. using System;
  3. using System.Drawing;
  4. using System.Linq;
  5. using DetuksSharp;
  6. using LeagueSharp;
  7. using LeagueSharp.Common;
  8. #endregion
  9. namespace Marksman.Champions
  10. {
  11. internal class Graves : Champion
  12. {
  13. public Spell Q;
  14. public Spell R;
  15. public Spell W;
  16. public Graves()
  17. {
  18. Q = new Spell(SpellSlot.Q, 900f); // Q likes to shoot a bit too far away, so moving the range inward.
  19. Q.SetSkillshot(0.26f, 10f*2*(float) Math.PI/180, 1950, false, SkillshotType.SkillshotCone);
  20. W = new Spell(SpellSlot.W, 1100f);
  21. W.SetSkillshot(0.30f, 250f, 1650f, false, SkillshotType.SkillshotCircle);
  22. R = new Spell(SpellSlot.R, 1100f);
  23. R.SetSkillshot(0.22f, 150f, 2100, true, SkillshotType.SkillshotLine);
  24. Utility.HpBarDamageIndicator.DamageToUnit = GetComboDamage;
  25. Utility.HpBarDamageIndicator.Enabled = true;
  26. Utils.Utils.PrintMessage("Graves loaded.");
  27. }
  28. private float GetComboDamage(Obj_AI_Hero t)
  29. {
  30. var fComboDamage = 0f;
  31. if (Q.IsReady())
  32. fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.Q);
  33. if (W.IsReady())
  34. fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.W);
  35. if (R.IsReady())
  36. fComboDamage += (float) ObjectManager.Player.GetSpellDamage(t, SpellSlot.R);
  37. if (ObjectManager.Player.GetSpellSlot("summonerdot") != SpellSlot.Unknown &&
  38. ObjectManager.Player.Spellbook.CanUseSpell(ObjectManager.Player.GetSpellSlot("summonerdot")) ==
  39. SpellState.Ready && ObjectManager.Player.Distance(t) < 550)
  40. fComboDamage += (float) ObjectManager.Player.GetSummonerSpellDamage(t, Damage.SummonerSpell.Ignite);
  41. if (Items.CanUseItem(3144) && ObjectManager.Player.Distance(t) < 550)
  42. fComboDamage += (float) ObjectManager.Player.GetItemDamage(t, Damage.DamageItems.Bilgewater);
  43. if (Items.CanUseItem(3153) && ObjectManager.Player.Distance(t) < 550)
  44. fComboDamage += (float) ObjectManager.Player.GetItemDamage(t, Damage.DamageItems.Botrk);
  45. return fComboDamage;
  46. }
  47. public override void Game_OnGameUpdate(EventArgs args)
  48. {
  49. if (Q.IsReady() && GetValue<KeyBind>("UseQTH").Active)
  50. {
  51. if (ObjectManager.Player.HasBuff("Recall"))
  52. return;
  53. var t = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical);
  54. if (t != null)
  55. Q.Cast(t, false, true);
  56. }
  57. if ((!ComboActive && !HarassActive) || !DeathWalker.canMove()) return;
  58. var useQ = GetValue<bool>("UseQ" + (ComboActive ? "C" : "H"));
  59. var useW = GetValue<bool>("UseW" + (ComboActive ? "C" : "H"));
  60. var useR = GetValue<bool>("UseR" + (ComboActive ? "C" : "H"));
  61. if (Q.IsReady() && useQ)
  62. {
  63. var t = TargetSelector.GetTarget(Q.Range, TargetSelector.DamageType.Physical);
  64. if (t != null)
  65. Q.Cast(t, false, true);
  66. }
  67. if (W.IsReady() && useW)
  68. {
  69. var t = TargetSelector.GetTarget(W.Range, TargetSelector.DamageType.Physical);
  70. if (t.IsValidTarget(W.Range) &&
  71. (t.HasBuffOfType(BuffType.Stun) || t.HasBuffOfType(BuffType.Snare) ||
  72. t.HasBuffOfType(BuffType.Taunt) || t.HasBuff("zhonyasringshield") ||
  73. t.HasBuff("Recall")))
  74. W.Cast(t, false, true);
  75. }
  76. if (R.IsReady() && useR)
  77. {
  78. foreach (
  79. var hero in
  80. ObjectManager.Get<Obj_AI_Hero>()
  81. .Where(
  82. hero =>
  83. hero.IsValidTarget(R.Range) &&
  84. ObjectManager.Player.GetSpellDamage(hero, SpellSlot.R, 1) - 20 > hero.Health))
  85. R.Cast(hero, false, true);
  86. }
  87. }
  88. public override void DeathWalker_AfterAttack(AttackableUnit unit, AttackableUnit target)
  89. {
  90. var t = target as Obj_AI_Hero;
  91. if (t != null && (ComboActive || HarassActive) && unit.IsMe)
  92. {
  93. var useQ = GetValue<bool>("UseQ" + (ComboActive ? "C" : "H"));
  94. var useW = GetValue<bool>("UseW" + (ComboActive ? "C" : "H"));
  95. if (Q.IsReady() && useQ)
  96. Q.Cast(t);
  97. if (W.IsReady() && useW)
  98. {
  99. if (t.IsValidTarget(W.Range) &&
  100. (t.HasBuffOfType(BuffType.Stun) || t.HasBuffOfType(BuffType.Snare) ||
  101. t.HasBuffOfType(BuffType.Taunt) || t.HasBuff("zhonyasringshield") ||
  102. t.HasBuff("Recall")))
  103. W.Cast(t);
  104. }
  105. }
  106. }
  107. public override void Drawing_OnDraw(EventArgs args)
  108. {
  109. Spell[] spellList = {Q};
  110. foreach (var spell in spellList)
  111. {
  112. var menuItem = GetValue<Circle>("Draw" + spell.Slot);
  113. if (menuItem.Active)
  114. Render.Circle.DrawCircle(ObjectManager.Player.Position, spell.Range, menuItem.Color);
  115. }
  116. }
  117. public override bool ComboMenu(Menu config)
  118. {
  119. config.AddItem(new MenuItem("UseQC" + Id, "Use Q").SetValue(true));
  120. config.AddItem(new MenuItem("UseWC" + Id, "Use W").SetValue(true));
  121. config.AddItem(new MenuItem("UseRC" + Id, "Use R").SetValue(true));
  122. return true;
  123. }
  124. public override bool HarassMenu(Menu config)
  125. {
  126. config.AddItem(new MenuItem("UseQH" + Id, "Use Q").SetValue(true));
  127. config.AddItem(new MenuItem("UseWH" + Id, "Use W").SetValue(false));
  128. config.AddItem(
  129. new MenuItem("UseQTH" + Id, "Use Q (Toggle)").SetValue(new KeyBind("H".ToCharArray()[0],
  130. KeyBindType.Toggle)));
  131. return true;
  132. }
  133. public override bool DrawingMenu(Menu config)
  134. {
  135. config.AddItem(
  136. new MenuItem("DrawQ" + Id, "Q range").SetValue(new Circle(true,
  137. Color.FromArgb(100, 255, 0, 255))));
  138. return true;
  139. }
  140. public override bool ExtrasMenu(Menu config)
  141. {
  142. return true;
  143. }
  144. public override bool LaneClearMenu(Menu config)
  145. {
  146. return true;
  147. }
  148. }
  149. }

comments powered by Disqus