Kind


SUBMITTED BY: Alerand

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

FORMAT: Text only

SIZE: 12.0 kB

HITS: 10873

  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. using System.Threading;
  14. using Utils = LeagueSharp.Common.Utils;
  15. internal interface IKindred
  16. {
  17. void DeathWalker_AfterAttack(AttackableUnit unit, AttackableUnit target);
  18. void Drawing_OnDraw(EventArgs args);
  19. void Game_OnGameUpdate(EventArgs args);
  20. bool ComboMenu(Menu config);
  21. bool HarassMenu(Menu config);
  22. bool MiscMenu(Menu config);
  23. bool DrawingMenu(Menu config);
  24. bool ExtrasMenu(Menu config);
  25. bool LaneClearMenu(Menu config);
  26. //bool JungleClearMenu(Menu config);
  27. }
  28. internal class Kindred : Champion, IKindred
  29. {
  30. public static Spell Q;
  31. public static Spell E;
  32. public static Spell W;
  33. public static Spell R;
  34. public Kindred()
  35. {
  36. Q = new Spell(SpellSlot.Q, 340);
  37. W = new Spell(SpellSlot.W, 593);
  38. E = new Spell(SpellSlot.E, 640);
  39. R = new Spell(SpellSlot.R, 1100);
  40. R.SetSkillshot(1f, 160f, 2000f, false, SkillshotType.SkillshotCircle);
  41. Marksman.Utils.Utils.PrintMessage("Kindred loaded.");
  42. }
  43. public override void DeathWalker_AfterAttack(AttackableUnit unit, AttackableUnit target)
  44. {
  45. }
  46. public override void Drawing_OnDraw(EventArgs args)
  47. {
  48. Spell[] spellList = { Q, E, R };
  49. foreach (var spell in spellList)
  50. {
  51. var menuItem = this.GetValue<Circle>("Draw" + spell.Slot);
  52. if (menuItem.Active)
  53. {
  54. Render.Circle.DrawCircle(ObjectManager.Player.Position, spell.Range, menuItem.Color);
  55. }
  56. }
  57. if (Program.Config.Item("UseRC").GetValue<bool>())
  58. {
  59. var drawRMin = Program.Config.Item("DrawRMin").GetValue<Circle>();
  60. if (drawRMin.Active)
  61. {
  62. var minRRange = Program.Config.Item("UseRCMinRange").GetValue<Slider>().Value;
  63. Render.Circle.DrawCircle(ObjectManager.Player.Position, minRRange, drawRMin.Color, 2);
  64. }
  65. var drawRMax = Program.Config.Item("DrawRMax").GetValue<Circle>();
  66. if (drawRMax.Active)
  67. {
  68. var maxRRange = Program.Config.Item("UseRCMaxRange").GetValue<Slider>().Value;
  69. Render.Circle.DrawCircle(ObjectManager.Player.Position, maxRRange, drawRMax.Color, 2);
  70. }
  71. }
  72. }
  73. public override void Game_OnGameUpdate(EventArgs args)
  74. {
  75. //if (this.JungleClearActive)
  76. //{
  77. // this.ExecJungleClear();
  78. //}
  79. if (this.LaneClearActive && Q.IsReady())
  80. {
  81. this.ExecLaneClear();
  82. }
  83. var t = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Physical);
  84. if (!t.IsValidTarget())
  85. {
  86. return;
  87. }
  88. if (E.IsReady() && Program.Config.Item("UseETH").GetValue<KeyBind>().Active && ToggleActive)
  89. {
  90. if (ObjectManager.Player.HasBuff("Recall"))
  91. {
  92. return;
  93. }
  94. if (t.IsValidTarget(E.Range - 150)) E.CastOnUnit(t);
  95. }
  96. if (this.ComboActive)
  97. {
  98. var useQ = this.GetValue<bool>("UseQ" + (this.ComboActive ? "C" : "H"));
  99. var useW = this.GetValue<bool>("UseW" + (this.ComboActive ? "C" : "H"));
  100. var useE = this.GetValue<bool>("UseEC");
  101. var useR = this.GetValue<bool>("UseRC");
  102. if (DeathWalker.canMove())
  103. {
  104. if (E.IsReady() && t.IsValidTarget(E.Range))
  105. {
  106. E.CastOnUnit(t);
  107. }
  108. if (W.IsReady() && t.IsValidTarget(W.Range))
  109. {
  110. W.Cast();
  111. }
  112. if (Q.IsReady() && t.IsValidTarget(Q.Range + DeathWalker.getRealAutoAttackRange(null) + 65))
  113. {
  114. Q.Cast(t.Position);
  115. }
  116. if (R.IsReady())
  117. {
  118. R.Cast(ObjectManager.Player.Position);
  119. }
  120. }
  121. }
  122. }
  123. public override bool ComboMenu(Menu config)
  124. {
  125. config.AddItem(new MenuItem("UseQC" + this.Id, "Use Q").SetValue(true));
  126. config.AddItem(new MenuItem("UseWC" + this.Id, "Use W").SetValue(true));
  127. config.AddItem(new MenuItem("UseEC" + this.Id, "Use E").SetValue(new StringList(new[] { "Off", "On", "On: Force focus to marked enemy" }, 2))).ValueChanged +=
  128. (sender, args) =>
  129. {
  130. /*foreach (var item in config.Items.Where(i => i.Tag == 11))
  131. {
  132. item.Show(args.GetNewValue<StringList>().SelectedIndex != 0);
  133. }*/
  134. };
  135. /*foreach (var enemy in HeroManager.Enemies)
  136. {
  137. config.AddItem(
  138. new MenuItem(enemy.ChampionName + "_UseEC" + this.Id, Program.Tab + enemy.ChampionName).SetValue(
  139. new StringList(new[] { "Don't", "Use: If I can kill him", "Use: Everytime" },Marksman.Utils.Utils.GetEnemyPriority(enemy.ChampionName) < 2 ? 1 : 2))).SetTag(11);
  140. }*/
  141. config.AddItem(new MenuItem("UseRC", "Use R").SetValue(true));
  142. return true;
  143. }
  144. public override bool HarassMenu(Menu config)
  145. {
  146. config.AddItem(new MenuItem("UseQH" + this.Id, "Q").SetValue(true));
  147. config.AddItem(new MenuItem("UseWH" + this.Id, "W").SetValue(true));
  148. config.AddItem(new MenuItem("UseEH" + this.Id, "Use E").SetValue(new KeyBind("H".ToCharArray()[0], KeyBindType.Toggle)));
  149. config.AddItem(new MenuItem("UseETH", "E (Toggle)").SetValue(new KeyBind("H".ToCharArray()[0], KeyBindType.Toggle)));
  150. return true;
  151. }
  152. public override bool LaneClearMenu(Menu config)
  153. {
  154. config.AddItem(new MenuItem("UseQL" + this.Id, "Use Q").SetValue(true)).ValueChanged += delegate(object sender, OnValueChangeEventArgs args)
  155. {
  156. // config.Item("UseQLM").Show(args.GetNewValue<bool>());
  157. // Program.CClass.Config.Item("LaneMinMana").Show(args.GetNewValue<bool>());
  158. };
  159. config.AddItem(new MenuItem("UseQLM", "Min. Minion:").SetValue(new Slider(2, 1, 3)));
  160. config.AddItem(new MenuItem("UseWL", "Use W").SetValue(false));
  161. return true;
  162. }
  163. //public override bool JungleClearMenu(Menu config)
  164. //{
  165. // config.AddItem(new MenuItem("UseQJ" + this.Id, "Use Q").SetValue(true)).ValueChanged += delegate(object sender, OnValueChangeEventArgs args)
  166. // {
  167. // config.Item("UseQLM").Show(args.GetNewValue<bool>());
  168. // Program.CClass.Config.Item("JungleMinMana").Show(args.GetNewValue<bool>());
  169. // };
  170. // config.AddItem(new MenuItem("UseQJM", "Min. Minion:").SetValue(new Slider(2, 1, 3)));
  171. // config.AddItem(new MenuItem("UseWJ", "Use W").SetValue(false));
  172. // config.AddItem(new MenuItem("UseEJ", "Use E").SetValue(new StringList(new[] { "Off", "On", "Just big mobs" }, 1)));
  173. // return true;
  174. //}
  175. public override bool DrawingMenu(Menu config)
  176. {
  177. config.AddItem(new MenuItem("DrawQ" + this.Id, "Q range").SetValue(new Circle(true, Color.FromArgb(100, 255, 0, 255))));
  178. config.AddItem(new MenuItem("DrawE" + this.Id, "E range").SetValue(new Circle(false, Color.FromArgb(100, 255, 255, 255))));
  179. var dmgAfterComboItem = new MenuItem("DamageAfterCombo", "Damage After Combo").SetValue(true);
  180. config.AddItem(dmgAfterComboItem);
  181. config.AddItem(
  182. new MenuItem("HarassActiveTPermashow", "Show harass permashow").SetValue(true)).ValueChanged += (s, ar) =>
  183. {
  184. if (ar.GetNewValue<bool>())
  185. {
  186. Program.CClass.Config.Item("UseETH").Permashow(true, "Harass Toggle");
  187. }
  188. else
  189. {
  190. Program.CClass.Config.Item("UseETH").Permashow(false);
  191. }
  192. };
  193. Program.CClass.Config.Item("UseETH").Permashow(config.Item("HarassActiveTPermashow").GetValue<bool>(), "Harass Toggle");
  194. return true;
  195. }
  196. public override bool ExtrasMenu(Menu config)
  197. {
  198. return true;
  199. }
  200. public override bool MiscMenu(Menu config)
  201. {
  202. return false;
  203. }
  204. public void ExecLaneClear()
  205. {
  206. var useQ = Program.Config.Item("UseQL").GetValue<StringList>().SelectedIndex;
  207. var minion =
  208. MinionManager.GetMinions(ObjectManager.Player.Position, Q.Range)
  209. .FirstOrDefault(m => m.Health < ObjectManager.Player.GetSpellDamage(m, SpellSlot.Q));
  210. if (minion != null)
  211. {
  212. switch (useQ)
  213. {
  214. case 1:
  215. minion =
  216. MinionManager.GetMinions(ObjectManager.Player.Position, Q.Range)
  217. .FirstOrDefault(
  218. m =>
  219. m.Health < ObjectManager.Player.GetSpellDamage(m, SpellSlot.Q)
  220. && m.Health > ObjectManager.Player.TotalAttackDamage);
  221. Q.Cast(minion);
  222. break;
  223. case 2:
  224. minion =
  225. MinionManager.GetMinions(ObjectManager.Player.Position, Q.Range)
  226. .FirstOrDefault(
  227. m =>
  228. m.Health < ObjectManager.Player.GetSpellDamage(m, SpellSlot.Q)
  229. && ObjectManager.Player.Distance(m)
  230. > DeathWalker.getRealAutoAttackRange(null) + 65);
  231. Q.Cast(minion);
  232. break;
  233. }
  234. }
  235. }
  236. public void ExecJungleClear()
  237. {
  238. var jungleMobs = Marksman.Utils.Utils.GetMobs(Q.Range, Marksman.Utils.Utils.MobTypes.All);
  239. if (jungleMobs != null)
  240. {
  241. switch (Program.Config.Item("UseQJ").GetValue<StringList>().SelectedIndex)
  242. {
  243. case 1:
  244. {
  245. Q.Cast(jungleMobs);
  246. break;
  247. }
  248. case 2:
  249. {
  250. jungleMobs = Marksman.Utils.Utils.GetMobs(Q.Range, Marksman.Utils.Utils.MobTypes.BigBoys);
  251. if (jungleMobs != null)
  252. {
  253. Q.Cast(jungleMobs);
  254. }
  255. break;
  256. }
  257. }
  258. }
  259. }
  260. }
  261. }

comments powered by Disqus