ROrb


SUBMITTED BY: Alerand

DATE: May 4, 2016, 9:22 a.m.

FORMAT: Text only

SIZE: 49.0 kB

HITS: 18647

  1. using System;
  2. using System.Linq;
  3. using LeagueSharp;
  4. using LeagueSharp.Common;
  5. using SharpDX;
  6. using ItemData = LeagueSharp.Common.Data.ItemData;
  7. namespace HoolaRiven
  8. {
  9. public class Program
  10. {
  11. public static Menu Menu;
  12. private static Orbwalking.Orbwalker Orbwalker;
  13. private static readonly Obj_AI_Hero Player = ObjectManager.Player;
  14. private static readonly HpBarIndicator Indicator = new HpBarIndicator();
  15. private const string IsFirstR = "RivenFengShuiEngine";
  16. private const string IsSecondR = "RivenIzunaBlade";
  17. private static readonly SpellSlot Flash = Player.GetSpellSlot("summonerFlash");
  18. private static Spell Q, Q1, W, E, R;
  19. private static int QStack = 1;
  20. public static Render.Text Timer, Timer2;
  21. private static bool forceQ;
  22. private static bool forceW;
  23. private static bool forceR;
  24. private static bool forceR2;
  25. private static bool forceItem;
  26. private static float LastQ;
  27. private static float LastR;
  28. private static AttackableUnit QTarget;
  29. private static bool Dind => Menu.Item("Dind").GetValue<bool>();
  30. private static bool DrawCB => Menu.Item("DrawCB").GetValue<bool>();
  31. private static bool KillstealW => Menu.Item("killstealw").GetValue<bool>();
  32. private static bool KillstealR => Menu.Item("killstealr").GetValue<bool>();
  33. private static bool DrawAlwaysR => Menu.Item("DrawAlwaysR").GetValue<bool>();
  34. private static bool DrawUseHoola => Menu.Item("DrawUseHoola").GetValue <bool>();
  35. private static bool DrawFH => Menu.Item("DrawFH").GetValue<bool>();
  36. private static bool DrawTimer1 => Menu.Item("DrawTimer1").GetValue<bool>();
  37. private static bool DrawTimer2 => Menu.Item("DrawTimer2").GetValue<bool>();
  38. private static bool DrawHS => Menu.Item("DrawHS").GetValue<bool>();
  39. private static bool DrawBT => Menu.Item("DrawBT").GetValue<bool>();
  40. private static bool UseHoola => Menu.Item("UseHoola").GetValue<KeyBind>().Active;
  41. private static bool AlwaysR => Menu.Item("AlwaysR").GetValue<KeyBind>().Active;
  42. private static bool AutoShield => Menu.Item("AutoShield").GetValue<bool>();
  43. private static bool Shield => Menu.Item("Shield").GetValue<bool>();
  44. private static bool KeepQ => Menu.Item("KeepQ").GetValue<bool>();
  45. private static int QD => Menu.Item("QD").GetValue<Slider>().Value;
  46. private static int QLD => Menu.Item("QLD").GetValue<Slider>().Value;
  47. private static int AutoW => Menu.Item("AutoW").GetValue<Slider>().Value;
  48. private static bool ComboW => Menu.Item("ComboW").GetValue<bool>();
  49. private static bool RMaxDam => Menu.Item("RMaxDam").GetValue<bool>();
  50. private static bool RKillable => Menu.Item("RKillable").GetValue<bool>();
  51. private static int LaneW => Menu.Item("LaneW").GetValue<Slider>().Value;
  52. private static bool LaneE => Menu.Item("LaneE").GetValue<bool>();
  53. private static bool WInterrupt => Menu.Item("WInterrupt").GetValue<bool>();
  54. private static bool Qstrange => Menu.Item("Qstrange").GetValue<bool>();
  55. private static bool FirstHydra => Menu.Item("FirstHydra").GetValue<bool>();
  56. private static bool LaneQ => Menu.Item("LaneQ").GetValue<bool>();
  57. private static bool Youmu => Menu.Item("youmu").GetValue<bool>();
  58. private static void Main() => CustomEvents.Game.OnGameLoad += OnGameLoad;
  59. private static void OnGameLoad(EventArgs args)
  60. {
  61. if (Player.ChampionName != "Riven") return;
  62. Game.PrintChat("Hoola Riven - Loaded Successfully, Good Luck! :):)");
  63. Q = new Spell(SpellSlot.Q);
  64. W = new Spell(SpellSlot.W);
  65. E = new Spell(SpellSlot.E, 300);
  66. R = new Spell(SpellSlot.R, 900);
  67. R.SetSkillshot(0.25f, 45, 1600, false, SkillshotType.SkillshotCone);
  68. OnMenuLoad();
  69. Timer = new Render.Text("Q Expiry => " + ((double)(LastQ - Utils.GameTimeTickCount + 3800) / 1000).ToString("0.0"), (int)Drawing.WorldToScreen(Player.Position).X - 140, (int)Drawing.WorldToScreen(Player.Position).Y + 10, 30, Color.MidnightBlue, "calibri");
  70. Timer2 = new Render.Text("R Expiry => " + (((double)LastR - Utils.GameTimeTickCount + 15000) / 1000).ToString("0.0"), (int)Drawing.WorldToScreen(Player.Position).X - 60, (int)Drawing.WorldToScreen(Player.Position).Y + 10, 30, Color.IndianRed, "calibri");
  71. Game.OnUpdate += OnTick;
  72. Drawing.OnDraw += Drawing_OnDraw;
  73. Drawing.OnEndScene += Drawing_OnEndScene;
  74. Obj_AI_Base.OnProcessSpellCast += OnCast;
  75. Obj_AI_Base.OnDoCast += OnDoCast;
  76. Obj_AI_Base.OnDoCast += OnDoCastLC;
  77. Obj_AI_Base.OnPlayAnimation += OnPlay;
  78. Obj_AI_Base.OnProcessSpellCast += OnCasting;
  79. Interrupter2.OnInterruptableTarget += Interrupt;
  80. }
  81. private static bool HasTitan() => (Items.HasItem(3748) && Items.CanUseItem(3748));
  82. private static void CastTitan()
  83. {
  84. if (Items.HasItem(3748) && Items.CanUseItem(3748))
  85. {
  86. Items.UseItem(3748);
  87. Orbwalking.LastAATick = 0;
  88. }
  89. }
  90. private static void Drawing_OnEndScene(EventArgs args)
  91. {
  92. foreach (
  93. var enemy in
  94. ObjectManager.Get<Obj_AI_Hero>()
  95. .Where(ene => ene.IsValidTarget() && !ene.IsZombie))
  96. {
  97. if (Dind)
  98. {
  99. Indicator.unit = enemy;
  100. Indicator.drawDmg(getComboDamage(enemy), new ColorBGRA(255, 204, 0, 170));
  101. }
  102. }
  103. }
  104. private static void OnDoCastLC(Obj_AI_Base Sender, GameObjectProcessSpellCastEventArgs args)
  105. {
  106. if (!Sender.IsMe || !Orbwalking.IsAutoAttack((args.SData.Name))) return;
  107. QTarget = (Obj_AI_Base) args.Target;
  108. if (args.Target is Obj_AI_Minion)
  109. {
  110. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear)
  111. {
  112. var Minions = MinionManager.GetMinions(70 + 120 + Player.BoundingRadius);
  113. if (HasTitan())
  114. {
  115. CastTitan();
  116. return;
  117. }
  118. if (Q.IsReady() && LaneQ)
  119. {
  120. ForceItem();
  121. Utility.DelayAction.Add(1, ()=>ForceCastQ(Minions[0]));
  122. }
  123. if ((!Q.IsReady() || (Q.IsReady() && !LaneQ)) && W.IsReady() && LaneW != 0 &&
  124. Minions.Count >= LaneW)
  125. {
  126. ForceItem();
  127. Utility.DelayAction.Add(1, ForceW);
  128. }
  129. if ((!Q.IsReady() || (Q.IsReady() && !LaneQ)) && (!W.IsReady() || (W.IsReady() && LaneW == 0) || Minions.Count < LaneW) &&
  130. E.IsReady() && LaneE)
  131. {
  132. E.Cast(Minions[0].Position);
  133. Utility.DelayAction.Add(1, ForceItem);
  134. }
  135. }
  136. }
  137. }
  138. private static int Item => Items.CanUseItem(3077) && Items.HasItem(3077) ? 3077 : Items.CanUseItem(3074) && Items.HasItem(3074) ? 3074 : 0;
  139. private static void OnDoCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
  140. {
  141. var spellName = args.SData.Name;
  142. if (!sender.IsMe || !Orbwalking.IsAutoAttack(spellName)) return;
  143. QTarget = (Obj_AI_Base)args.Target;
  144. if (args.Target is Obj_AI_Minion)
  145. {
  146. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear)
  147. {
  148. var Mobs = MinionManager.GetMinions(120 + 70 + Player.BoundingRadius, MinionTypes.All,
  149. MinionTeam.Neutral, MinionOrderTypes.MaxHealth);
  150. if (Mobs.Count != 0)
  151. {
  152. if (HasTitan())
  153. {
  154. CastTitan();
  155. return;
  156. }
  157. if (Q.IsReady())
  158. {
  159. ForceItem();
  160. Utility.DelayAction.Add(1, ()=> ForceCastQ(Mobs[0]));
  161. }
  162. else if (W.IsReady())
  163. {
  164. ForceItem();
  165. Utility.DelayAction.Add(1, ForceW);
  166. }
  167. else if (E.IsReady())
  168. {
  169. E.Cast(Mobs[0].Position);
  170. }
  171. }
  172. }
  173. }
  174. if (args.Target is Obj_AI_Turret || args.Target is Obj_Barracks || args.Target is Obj_BarracksDampener || args.Target is Obj_Building) if (args.Target.IsValid && args.Target != null && Q.IsReady() && LaneQ && Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) ForceCastQ((Obj_AI_Base)args.Target);
  175. if (args.Target is Obj_AI_Hero)
  176. {
  177. var target = (Obj_AI_Hero)args.Target;
  178. if (KillstealR && R.IsReady() && R.Instance.Name == IsSecondR) if (target.Health < (Rdame(target, target.Health) + Player.GetAutoAttackDamage(target)) && target.Health > Player.GetAutoAttackDamage(target)) R.Cast(target.Position);
  179. if (KillstealW && W.IsReady()) if (target.Health < (W.GetDamage(target) + Player.GetAutoAttackDamage(target)) && target.Health > Player.GetAutoAttackDamage(target)) W.Cast();
  180. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo)
  181. {
  182. if (HasTitan())
  183. {
  184. CastTitan();
  185. return;
  186. }
  187. if (Q.IsReady())
  188. {
  189. ForceItem();
  190. Utility.DelayAction.Add(1, ()=>ForceCastQ(target));
  191. }
  192. else if (W.IsReady() && InWRange(target))
  193. {
  194. ForceItem();
  195. Utility.DelayAction.Add(1, ForceW);
  196. }
  197. else if (E.IsReady() && !Orbwalking.InAutoAttackRange(target)) E.Cast(target.Position);
  198. }
  199. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.FastHarass)
  200. {
  201. if (HasTitan())
  202. {
  203. CastTitan();
  204. return;
  205. }
  206. if (W.IsReady() && InWRange(target))
  207. {
  208. ForceItem();
  209. Utility.DelayAction.Add(1, ForceW);
  210. Utility.DelayAction.Add(2, () => ForceCastQ(target));
  211. }
  212. else if (Q.IsReady())
  213. {
  214. ForceItem();
  215. Utility.DelayAction.Add(1,()=>ForceCastQ(target));
  216. }
  217. else if (E.IsReady() && !Orbwalking.InAutoAttackRange(target) && !InWRange(target))
  218. {
  219. E.Cast(target.Position);
  220. }
  221. }
  222. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed)
  223. {
  224. if (HasTitan())
  225. {
  226. CastTitan();
  227. return;
  228. }
  229. if (QStack == 2 && Q.IsReady())
  230. {
  231. ForceItem();
  232. Utility.DelayAction.Add(1, () => ForceCastQ(target));
  233. }
  234. }
  235. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Burst)
  236. {
  237. if (HasTitan())
  238. {
  239. CastTitan();
  240. return;
  241. }
  242. if (R.IsReady() && R.Instance.Name == IsSecondR)
  243. {
  244. ForceItem();
  245. Utility.DelayAction.Add(1, ForceR2);
  246. }
  247. else if (Q.IsReady())
  248. {
  249. ForceItem();
  250. Utility.DelayAction.Add(1, ()=>ForceCastQ(target));
  251. }
  252. }
  253. }
  254. }
  255. private static void OnMenuLoad()
  256. {
  257. Menu = new Menu("Hoola Riven", "hoolariven", true);
  258. Menu ts = Menu.AddSubMenu(new Menu("Target Selector", "Target Selector"));
  259. TargetSelector.AddToMenu(ts);
  260. var orbwalker = new Menu("Orbwalk", "rorb");
  261. Orbwalker = new Orbwalking.Orbwalker(orbwalker);
  262. Menu.AddSubMenu(orbwalker);
  263. var Combo = new Menu("Combo", "Combo");
  264. Combo.AddItem(new MenuItem("AlwaysR", "Always Use R (Toggle)").SetValue(new KeyBind('G', KeyBindType.Toggle)));
  265. Combo.AddItem(new MenuItem("UseHoola", "Use Hoola Combo Logic (Toggle)").SetValue(new KeyBind('L', KeyBindType.Toggle)));
  266. Combo.AddItem(new MenuItem("ComboW", "Always use W").SetValue(true));
  267. Combo.AddItem(new MenuItem("RKillable", "Use R When Target Can Killable").SetValue(true));
  268. Menu.AddSubMenu(Combo);
  269. var Lane = new Menu("Lane", "Lane");
  270. Lane.AddItem(new MenuItem("LaneQ", "Use Q While Laneclear").SetValue(true));
  271. Lane.AddItem(new MenuItem("LaneW", "Use W X Minion (0 = Don't)").SetValue(new Slider(5, 0, 5)));
  272. Lane.AddItem(new MenuItem("LaneE", "Use E While Laneclear").SetValue(true));
  273. Menu.AddSubMenu(Lane);
  274. var Misc = new Menu("Misc", "Misc");
  275. Misc.AddItem(new MenuItem("youmu", "Use Youmus When E").SetValue(false));
  276. Misc.AddItem(new MenuItem("FirstHydra", "Flash Burst Hydra Cast before W").SetValue(false));
  277. Misc.AddItem(new MenuItem("Qstrange", "Strange Q For Speed").SetValue(false));
  278. Misc.AddItem(new MenuItem("Winterrupt", "W interrupt").SetValue(true));
  279. Misc.AddItem(new MenuItem("AutoW", "Auto W When x Enemy").SetValue(new Slider(5, 0, 5)));
  280. Misc.AddItem(new MenuItem("RMaxDam", "Use Second R Max Damage").SetValue(true));
  281. Misc.AddItem(new MenuItem("killstealw", "Killsteal W").SetValue(true));
  282. Misc.AddItem(new MenuItem("killstealr", "Killsteal Second R").SetValue(true));
  283. Misc.AddItem(new MenuItem("AutoShield", "Auto Cast E").SetValue(true));
  284. Misc.AddItem(new MenuItem("Shield", "Auto Cast E While LastHit").SetValue(true));
  285. Misc.AddItem(new MenuItem("KeepQ", "Keep Q Alive").SetValue(true));
  286. Misc.AddItem(new MenuItem("QD", "First,Second Q Delay").SetValue(new Slider(29, 23, 43)));
  287. Misc.AddItem(new MenuItem("QLD", "Third Q Delay").SetValue(new Slider(39, 36, 53)));
  288. Menu.AddSubMenu(Misc);
  289. var Draw = new Menu("Draw", "Draw");
  290. Draw.AddItem(new MenuItem("DrawAlwaysR", "Draw Always R Status").SetValue(true));
  291. Draw.AddItem(new MenuItem("DrawTimer1", "Draw Q Expiry Time").SetValue(true));
  292. Draw.AddItem(new MenuItem("DrawTimer2", "Draw R Expiry Time").SetValue(true));
  293. Draw.AddItem(new MenuItem("DrawUseHoola", "Draw Hoola Logic Status").SetValue(true));
  294. Draw.AddItem(new MenuItem("Dind", "Draw Damage Indicator").SetValue(true));
  295. Draw.AddItem(new MenuItem("DrawCB", "Draw Combo Engage Range").SetValue(false));
  296. Draw.AddItem(new MenuItem("DrawBT", "Draw Burst Engage Range").SetValue(false));
  297. Draw.AddItem(new MenuItem("DrawFH", "Draw FastHarass Engage Range").SetValue(false));
  298. Draw.AddItem(new MenuItem("DrawHS", "Draw Harass Engage Range").SetValue(false));
  299. Menu.AddSubMenu(Draw);
  300. var Credit = new Menu("Credit", "Credit");
  301. Credit.AddItem(new MenuItem("hoola", "Made by Hoola :)"));
  302. Credit.AddItem(new MenuItem("notfixe", "If High ping will be many buggy"));
  303. Credit.AddItem(new MenuItem("notfixed", "Not Fixed Anything Yet"));
  304. Credit.AddItem(new MenuItem("feedback", "So Feedback To Hoola!"));
  305. Menu.AddSubMenu(Credit);
  306. Menu.AddToMainMenu();
  307. }
  308. private static void Interrupt(Obj_AI_Hero sender, Interrupter2.InterruptableTargetEventArgs args)
  309. {
  310. if (sender.IsEnemy && W.IsReady() && sender.IsValidTarget() && !sender.IsZombie && WInterrupt)
  311. {
  312. if (sender.IsValidTarget(125 + Player.BoundingRadius + sender.BoundingRadius)) W.Cast();
  313. }
  314. }
  315. private static int GetWRange => Player.HasBuff("RivenFengShuiEngine") ? 330 : 265;
  316. private static void AutoUseW()
  317. {
  318. if (AutoW > 0)
  319. {
  320. if (Player.CountEnemiesInRange(GetWRange) >= AutoW)
  321. {
  322. ForceW();
  323. }
  324. }
  325. }
  326. private static void OnTick(EventArgs args)
  327. {
  328. Timer.X = (int)Drawing.WorldToScreen(Player.Position).X - 60;
  329. Timer.Y = (int)Drawing.WorldToScreen(Player.Position).Y + 43;
  330. Timer2.X = (int)Drawing.WorldToScreen(Player.Position).X - 60;
  331. Timer2.Y = (int)Drawing.WorldToScreen(Player.Position).Y + 65;
  332. ForceSkill();
  333. UseRMaxDam();
  334. AutoUseW();
  335. Killsteal();
  336. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo) Combo();
  337. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) Jungleclear();
  338. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed) Harass();
  339. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.FastHarass) FastHarass();
  340. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Burst) Burst();
  341. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Flee) Flee();
  342. if (Utils.GameTimeTickCount - LastQ >= 3650 && QStack != 1 && !Player.IsRecalling() && KeepQ && Q.IsReady()) Q.Cast(Game.CursorPos);
  343. }
  344. private static void Killsteal()
  345. {
  346. if (KillstealW && W.IsReady())
  347. {
  348. var targets = HeroManager.Enemies.Where(x => x.IsValidTarget(R.Range) && !x.IsZombie);
  349. foreach (var target in targets)
  350. {
  351. if (target.Health < W.GetDamage(target) && InWRange(target))
  352. W.Cast();
  353. }
  354. }
  355. if (KillstealR && R.IsReady() && R.Instance.Name == IsSecondR)
  356. {
  357. var targets = HeroManager.Enemies.Where(x => x.IsValidTarget(R.Range) && !x.IsZombie);
  358. foreach (var target in targets)
  359. {
  360. if (target.Health < Rdame(target, target.Health) && (!target.HasBuff("kindrednodeathbuff") && !target.HasBuff("Undying Rage") && !target.HasBuff("JudicatorIntervention")))
  361. R.Cast(target.Position);
  362. }
  363. }
  364. }
  365. private static void UseRMaxDam()
  366. {
  367. if (RMaxDam && R.IsReady() && R.Instance.Name == IsSecondR)
  368. {
  369. var targets = HeroManager.Enemies.Where(x => x.IsValidTarget(R.Range) && !x.IsZombie);
  370. foreach (var target in targets)
  371. {
  372. if (target.Health / target.MaxHealth <= 0.25 && (!target.HasBuff("kindrednodeathbuff") || !target.HasBuff("Undying Rage") || !target.HasBuff("JudicatorIntervention")))
  373. R.Cast(target.Position);
  374. }
  375. }
  376. }
  377. private static void Drawing_OnDraw(EventArgs args)
  378. {
  379. if (Player.IsDead)
  380. return;
  381. var heropos = Drawing.WorldToScreen(ObjectManager.Player.Position);
  382. if (QStack != 1 && DrawTimer1)
  383. {
  384. Timer.text = ("Q Expiry => " + ((double)(LastQ - Utils.GameTimeTickCount + 3800) / 1000).ToString("0.0")+"S");
  385. Timer.OnEndScene();
  386. }
  387. if (Player.HasBuff("RivenFengShuiEngine") && DrawTimer2)
  388. {
  389. Timer2.text = ("R Expiry => " + (((double)LastR - Utils.GameTimeTickCount + 15000) / 1000).ToString("0.0") +"S");
  390. Timer2.OnEndScene();
  391. }
  392. if (DrawCB) Render.Circle.DrawCircle(Player.Position, 250 + Player.AttackRange + 70, E.IsReady() ? System.Drawing.Color.FromArgb(120, 0, 170, 255) : System.Drawing.Color.IndianRed);
  393. if (DrawBT && Flash != SpellSlot.Unknown) Render.Circle.DrawCircle(Player.Position, 800, R.IsReady() && Flash.IsReady() ? System.Drawing.Color.FromArgb(120, 0, 170, 255) : System.Drawing.Color.IndianRed);
  394. if (DrawFH) Render.Circle.DrawCircle(Player.Position, 450 + Player.AttackRange + 70, E.IsReady() && Q.IsReady() ? System.Drawing.Color.FromArgb(120, 0, 170, 255) : System.Drawing.Color.IndianRed);
  395. if (DrawHS) Render.Circle.DrawCircle(Player.Position, 400, Q.IsReady() && W.IsReady() ? System.Drawing.Color.FromArgb(120, 0, 170, 255) : System.Drawing.Color.IndianRed);
  396. if (DrawAlwaysR)
  397. {
  398. Drawing.DrawText(heropos.X -40, heropos.Y + 20, System.Drawing.Color.DodgerBlue, "Always R ( )");
  399. Drawing.DrawText(heropos.X + 40, heropos.Y + 20, AlwaysR ? System.Drawing.Color.LimeGreen : System.Drawing.Color.Red, AlwaysR ? "On" : "Off");
  400. }
  401. if (DrawUseHoola)
  402. {
  403. Drawing.DrawText(heropos.X -40, heropos.Y + 33, System.Drawing.Color.DodgerBlue, "Hoola Logic ( )");
  404. Drawing.DrawText(heropos.X + 60, heropos.Y + 33, UseHoola ? System.Drawing.Color.LimeGreen : System.Drawing.Color.Red, UseHoola ? "On" : "Off");
  405. }
  406. }
  407. private static void Jungleclear()
  408. {
  409. var Mobs = MinionManager.GetMinions(250 + Player.AttackRange + 70, MinionTypes.All, MinionTeam.Neutral, MinionOrderTypes.MaxHealth);
  410. if (Mobs.Count <= 0)
  411. return;
  412. if (W.IsReady() && E.IsReady() && !Orbwalking.InAutoAttackRange(Mobs[0]))
  413. {
  414. E.Cast(Mobs[0].Position);
  415. Utility.DelayAction.Add(1, ForceItem);
  416. Utility.DelayAction.Add(200, ForceW);
  417. }
  418. }
  419. private static void Combo()
  420. {
  421. var targetR = TargetSelector.GetTarget(250 + Player.AttackRange + 70, TargetSelector.DamageType.Physical);
  422. if (R.IsReady() && R.Instance.Name == IsFirstR && Orbwalker.InAutoAttackRange(targetR) && AlwaysR && targetR != null) ForceR();
  423. if (R.IsReady() && R.Instance.Name == IsFirstR && W.IsReady() && InWRange(targetR) && ComboW && AlwaysR && targetR != null)
  424. {
  425. ForceR();
  426. Utility.DelayAction.Add(1, ForceW);
  427. }
  428. if (W.IsReady() && InWRange(targetR) && ComboW && targetR != null) W.Cast();
  429. if (UseHoola && R.IsReady() && R.Instance.Name == IsFirstR && W.IsReady() && targetR != null && E.IsReady() && targetR.IsValidTarget() && !targetR.IsZombie && (IsKillableR(targetR) || AlwaysR))
  430. {
  431. if (!InWRange(targetR))
  432. {
  433. E.Cast(targetR.Position);
  434. ForceR();
  435. Utility.DelayAction.Add(200, ForceW);
  436. Utility.DelayAction.Add(305, () => ForceCastQ(targetR));
  437. }
  438. }
  439. else if (!UseHoola && R.IsReady() && R.Instance.Name == IsFirstR && W.IsReady() && targetR != null && E.IsReady() && targetR.IsValidTarget() && !targetR.IsZombie && (IsKillableR(targetR) || AlwaysR))
  440. {
  441. if (!InWRange(targetR))
  442. {
  443. E.Cast(targetR.Position);
  444. ForceR();
  445. Utility.DelayAction.Add(200, ForceW);
  446. }
  447. }
  448. else if (UseHoola && W.IsReady() && E.IsReady())
  449. {
  450. if (targetR.IsValidTarget() && targetR != null && !targetR.IsZombie && !InWRange(targetR))
  451. {
  452. E.Cast(targetR.Position);
  453. Utility.DelayAction.Add(10, ForceItem);
  454. Utility.DelayAction.Add(200, ForceW);
  455. Utility.DelayAction.Add(305, () => ForceCastQ(targetR));
  456. }
  457. }
  458. else if (!UseHoola && W.IsReady() && targetR != null && E.IsReady())
  459. {
  460. if (targetR.IsValidTarget() && targetR != null && !targetR.IsZombie && !InWRange(targetR))
  461. {
  462. E.Cast(targetR.Position);
  463. Utility.DelayAction.Add(10, ForceItem);
  464. Utility.DelayAction.Add(240, ForceW);
  465. }
  466. }
  467. else if (E.IsReady())
  468. {
  469. if (targetR.IsValidTarget() && !targetR.IsZombie && !InWRange(targetR))
  470. {
  471. E.Cast(targetR.Position);
  472. }
  473. }
  474. }
  475. private static void Burst()
  476. {
  477. var target = TargetSelector.GetSelectedTarget();
  478. if (target != null && target.IsValidTarget() && !target.IsZombie)
  479. {
  480. if (R.IsReady() && R.Instance.Name == IsFirstR && W.IsReady() && E.IsReady() && Player.Distance(target.Position) <= 250 + 70 + Player.AttackRange)
  481. {
  482. E.Cast(target.Position);
  483. CastYoumoo();
  484. ForceR();
  485. Utility.DelayAction.Add(100, ForceW);
  486. }
  487. else if (R.IsReady() && R.Instance.Name == IsFirstR && E.IsReady() && W.IsReady() && Q.IsReady() &&
  488. Player.Distance(target.Position) <= 400 + 70 + Player.AttackRange)
  489. {
  490. E.Cast(target.Position);
  491. CastYoumoo();
  492. ForceR();
  493. Utility.DelayAction.Add(150,()=>ForceCastQ(target));
  494. Utility.DelayAction.Add(160, ForceW);
  495. }
  496. else if (Flash.IsReady()
  497. && R.IsReady() && R.Instance.Name == IsFirstR && (Player.Distance(target.Position) <= 800) && (!FirstHydra || (FirstHydra && !HasItem())))
  498. {
  499. E.Cast(target.Position);
  500. CastYoumoo();
  501. ForceR();
  502. Utility.DelayAction.Add(180, FlashW);
  503. }
  504. else if (Flash.IsReady()
  505. && R.IsReady() && E.IsReady() && W.IsReady() && R.Instance.Name == IsFirstR && (Player.Distance(target.Position) <= 800) && FirstHydra && HasItem())
  506. {
  507. E.Cast(target.Position);
  508. ForceR();
  509. Utility.DelayAction.Add(100, ForceItem);
  510. Utility.DelayAction.Add(210, FlashW);
  511. }
  512. }
  513. }
  514. private static void FastHarass()
  515. {
  516. if (Q.IsReady() && E.IsReady())
  517. {
  518. var target = TargetSelector.GetTarget(450 + Player.AttackRange + 70, TargetSelector.DamageType.Physical);
  519. if (target.IsValidTarget() && !target.IsZombie)
  520. {
  521. if (!Orbwalking.InAutoAttackRange(target) && !InWRange(target)) E.Cast(target.Position);
  522. Utility.DelayAction.Add(10, ForceItem);
  523. Utility.DelayAction.Add(170, ()=>ForceCastQ(target));
  524. }
  525. }
  526. }
  527. private static void Harass()
  528. {
  529. var target = TargetSelector.GetTarget(400, TargetSelector.DamageType.Physical);
  530. if (Q.IsReady() && W.IsReady() && E.IsReady() && QStack == 1)
  531. {
  532. if (target.IsValidTarget() && !target.IsZombie)
  533. {
  534. ForceCastQ(target);
  535. Utility.DelayAction.Add(1, ForceW);
  536. }
  537. }
  538. if (Q.IsReady() && E.IsReady() && QStack == 3 && !Orbwalking.CanAttack() && Orbwalking.CanMove(5))
  539. {
  540. var epos = Player.ServerPosition +
  541. (Player.ServerPosition - target.ServerPosition).Normalized() * 300;
  542. E.Cast(epos);
  543. Utility.DelayAction.Add(190, () => Q.Cast(epos));
  544. }
  545. }
  546. private static void Flee()
  547. {
  548. var enemy =
  549. HeroManager.Enemies.Where(
  550. hero =>
  551. hero.IsValidTarget(Player.HasBuff("RivenFengShuiEngine")
  552. ? 70 + 195 + Player.BoundingRadius
  553. : 70 + 120 + Player.BoundingRadius) && W.IsReady());
  554. var x = Player.Position.Extend(Game.CursorPos, 300);
  555. if (W.IsReady() && enemy.Any()) foreach (var target in enemy) if (InWRange(target)) W.Cast();
  556. if (Q.IsReady() && !Player.IsDashing()) Q.Cast(Game.CursorPos);
  557. if (E.IsReady() && !Player.IsDashing()) E.Cast(x);
  558. }
  559. private static void OnPlay(Obj_AI_Base sender, GameObjectPlayAnimationEventArgs args)
  560. {
  561. if (!sender.IsMe) return;
  562. switch (args.Animation)
  563. {
  564. case "Spell1a":
  565. LastQ = Utils.GameTimeTickCount;
  566. if (Qstrange && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None) Game.Say("/d");
  567. QStack = 2;
  568. if (Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.LastHit && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Flee) Utility.DelayAction.Add((QD * 10) + 1, Reset);
  569. break;
  570. case "Spell1b":
  571. LastQ = Utils.GameTimeTickCount;
  572. if (Qstrange && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None) Game.Say("/d");
  573. QStack = 3;
  574. if (Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.LastHit && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Flee) Utility.DelayAction.Add((QD * 10) + 1, Reset);
  575. break;
  576. case "Spell1c":
  577. LastQ = Utils.GameTimeTickCount;
  578. if (Qstrange && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None) Game.Say("/d");
  579. QStack = 1;
  580. if (Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.LastHit && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Flee) Utility.DelayAction.Add((QLD * 10) + 3, Reset);
  581. break;
  582. case "Spell3":
  583. if ((Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Burst ||
  584. Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo ||
  585. Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.FastHarass ||
  586. Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Flee) && Youmu) CastYoumoo();
  587. break;
  588. case "Spell4a":
  589. LastR = Utils.GameTimeTickCount;
  590. break;
  591. case "Spell4b":
  592. var target = TargetSelector.GetSelectedTarget();
  593. if (Q.IsReady() && target.IsValidTarget()) ForceCastQ(target);
  594. break;
  595. }
  596. }
  597. private static void OnCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
  598. {
  599. if (!sender.IsMe) return;
  600. if (args.SData.Name.Contains("ItemTiamatCleave")) forceItem = false;
  601. if (args.SData.Name.Contains("RivenTriCleave")) forceQ = false;
  602. if (args.SData.Name.Contains("RivenMartyr")) forceW = false;
  603. if (args.SData.Name == IsFirstR) forceR = false;
  604. if (args.SData.Name == IsSecondR) forceR2 = false;
  605. }
  606. private static void Reset()
  607. {
  608. Game.Say("/d");
  609. Orbwalking.LastAATick = 0;
  610. Player.IssueOrder(GameObjectOrder.MoveTo, Player.Position.Extend(Game.CursorPos, Player.Distance(Game.CursorPos) + 10));
  611. }
  612. private static bool InWRange(GameObject target)=> (Player.HasBuff("RivenFengShuiEngine") && target != null) ?
  613. 330 >= Player.Distance(target.Position) : 265 >= Player.Distance(target.Position);
  614. private static void ForceSkill()
  615. {
  616. if (forceQ && QTarget != null && QTarget.IsValidTarget(E.Range + Player.BoundingRadius + 70) && Q.IsReady()) Q.Cast(QTarget.Position);
  617. if (forceW) W.Cast();
  618. if (forceR && R.Instance.Name == IsFirstR) R.Cast();
  619. if (forceItem && Items.CanUseItem(Item) && Items.HasItem(Item) && Item != 0) Items.UseItem(Item);
  620. if (forceR2 && R.Instance.Name == IsSecondR)
  621. {
  622. var target = TargetSelector.GetSelectedTarget();
  623. if (target != null) R.Cast(target.Position);
  624. }
  625. }
  626. private static void ForceItem()
  627. {
  628. if (Items.CanUseItem(Item) && Items.HasItem(Item) && Item != 0) forceItem = true;
  629. Utility.DelayAction.Add(500, () => forceItem = false);
  630. }
  631. private static void ForceR()
  632. {
  633. forceR = (R.IsReady() && R.Instance.Name == IsFirstR);
  634. Utility.DelayAction.Add(500, ()=> forceR = false);
  635. }
  636. private static void ForceR2()
  637. {
  638. forceR2 = R.IsReady() && R.Instance.Name == IsSecondR;
  639. Utility.DelayAction.Add(500, () => forceR2 = false);
  640. }
  641. private static void ForceW()
  642. {
  643. forceW = W.IsReady();
  644. Utility.DelayAction.Add(500, () => forceW = false);
  645. }
  646. private static void ForceCastQ(AttackableUnit target)
  647. {
  648. forceQ = true;
  649. QTarget = target;
  650. }
  651. private static void FlashW()
  652. {
  653. var target = TargetSelector.GetSelectedTarget();
  654. if (target != null && target.IsValidTarget() && !target.IsZombie)
  655. {
  656. W.Cast();
  657. Utility.DelayAction.Add(10, () => Player.Spellbook.CastSpell(Flash, target.Position));
  658. }
  659. }
  660. private static bool HasItem() => ItemData.Tiamat_Melee_Only.GetItem().IsReady() || ItemData.Ravenous_Hydra_Melee_Only.GetItem().IsReady();
  661. private static void CastYoumoo(){if(ItemData.Youmuus_Ghostblade.GetItem().IsReady())ItemData.Youmuus_Ghostblade.GetItem().Cast();}
  662. private static void OnCasting(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
  663. {
  664. if (sender.IsEnemy && sender.Type == Player.Type && (AutoShield || (Shield && Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LastHit)))
  665. {
  666. var epos = Player.ServerPosition +
  667. (Player.ServerPosition - sender.ServerPosition).Normalized() * 300;
  668. if (Player.Distance(sender.ServerPosition) <= args.SData.CastRange)
  669. {
  670. switch (args.SData.TargettingType)
  671. {
  672. case SpellDataTargetType.Unit:
  673. if (args.Target.NetworkId == Player.NetworkId)
  674. {
  675. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LastHit && !args.SData.Name.Contains("NasusW"))
  676. {
  677. if (E.IsReady()) E.Cast(epos);
  678. }
  679. }
  680. break;
  681. case SpellDataTargetType.SelfAoe:
  682. if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LastHit)
  683. {
  684. if (E.IsReady()) E.Cast(epos);
  685. }
  686. break;
  687. }
  688. if (args.SData.Name.Contains("IreliaEquilibriumStrike"))
  689. {
  690. if (args.Target.NetworkId == Player.NetworkId)
  691. {
  692. if (W.IsReady() && InWRange(sender)) W.Cast();
  693. else if (E.IsReady()) E.Cast(epos);
  694. }
  695. }
  696. if (args.SData.Name.Contains("TalonCutthroat"))
  697. {
  698. if (args.Target.NetworkId == Player.NetworkId)
  699. {
  700. if (W.IsReady()) W.Cast();
  701. }
  702. }
  703. if (args.SData.Name.Contains("RenektonPreExecute"))
  704. {
  705. if (args.Target.NetworkId == Player.NetworkId)
  706. {
  707. if (W.IsReady()) W.Cast();
  708. }
  709. }
  710. if (args.SData.Name.Contains("GarenRPreCast"))
  711. {
  712. if (args.Target.NetworkId == Player.NetworkId)
  713. {
  714. if (E.IsReady()) E.Cast(epos);
  715. }
  716. }
  717. if (args.SData.Name.Contains("GarenQAttack"))
  718. {
  719. if (args.Target.NetworkId == Player.NetworkId)
  720. {
  721. if (E.IsReady()) E.Cast();
  722. }
  723. }
  724. if (args.SData.Name.Contains("XenZhaoThrust3"))
  725. {
  726. if (args.Target.NetworkId == Player.NetworkId)
  727. {
  728. if (W.IsReady()) W.Cast();
  729. }
  730. }
  731. if (args.SData.Name.Contains("RengarQ"))
  732. {
  733. if (args.Target.NetworkId == Player.NetworkId)
  734. {
  735. if (E.IsReady()) E.Cast();
  736. }
  737. }
  738. if (args.SData.Name.Contains("RengarPassiveBuffDash"))
  739. {
  740. if (args.Target.NetworkId == Player.NetworkId)
  741. {
  742. if (E.IsReady()) E.Cast();
  743. }
  744. }
  745. if (args.SData.Name.Contains("RengarPassiveBuffDashAADummy"))
  746. {
  747. if (args.Target.NetworkId == Player.NetworkId)
  748. {
  749. if (E.IsReady()) E.Cast();
  750. }
  751. }
  752. if (args.SData.Name.Contains("TwitchEParticle"))
  753. {
  754. if (args.Target.NetworkId == Player.NetworkId)
  755. {
  756. if (E.IsReady()) E.Cast();
  757. }
  758. }
  759. if (args.SData.Name.Contains("FizzPiercingStrike"))
  760. {
  761. if (args.Target.NetworkId == Player.NetworkId)
  762. {
  763. if (E.IsReady()) E.Cast();
  764. }
  765. }
  766. if (args.SData.Name.Contains("HungeringStrike"))
  767. {
  768. if (args.Target.NetworkId == Player.NetworkId)
  769. {
  770. if (E.IsReady()) E.Cast();
  771. }
  772. }
  773. if (args.SData.Name.Contains("YasuoDash"))
  774. {
  775. if (args.Target.NetworkId == Player.NetworkId)
  776. {
  777. if (E.IsReady()) E.Cast();
  778. }
  779. }
  780. if (args.SData.Name.Contains("KatarinaRTrigger"))
  781. {
  782. if (args.Target.NetworkId == Player.NetworkId)
  783. {
  784. if (W.IsReady() && InWRange(sender)) W.Cast();
  785. else if (E.IsReady()) E.Cast();
  786. }
  787. }
  788. if (args.SData.Name.Contains("YasuoDash"))
  789. {
  790. if (args.Target.NetworkId == Player.NetworkId)
  791. {
  792. if (E.IsReady()) E.Cast();
  793. }
  794. }
  795. if (args.SData.Name.Contains("KatarinaE"))
  796. {
  797. if (args.Target.NetworkId == Player.NetworkId)
  798. {
  799. if (W.IsReady()) W.Cast();
  800. }
  801. }
  802. if (args.SData.Name.Contains("MonkeyKingQAttack"))
  803. {
  804. if (args.Target.NetworkId == Player.NetworkId)
  805. {
  806. if (E.IsReady()) E.Cast();
  807. }
  808. }
  809. if (args.SData.Name.Contains("MonkeyKingSpinToWin"))
  810. {
  811. if (args.Target.NetworkId == Player.NetworkId)
  812. {
  813. if (E.IsReady()) E.Cast();
  814. else if (W.IsReady()) W.Cast();
  815. }
  816. }
  817. if (args.SData.Name.Contains("MonkeyKingQAttack"))
  818. {
  819. if (args.Target.NetworkId == Player.NetworkId)
  820. {
  821. if (E.IsReady()) E.Cast();
  822. }
  823. }
  824. if (args.SData.Name.Contains("MonkeyKingQAttack"))
  825. {
  826. if (args.Target.NetworkId == Player.NetworkId)
  827. {
  828. if (E.IsReady()) E.Cast();
  829. }
  830. }
  831. if (args.SData.Name.Contains("MonkeyKingQAttack"))
  832. {
  833. if (args.Target.NetworkId == Player.NetworkId)
  834. {
  835. if (E.IsReady()) E.Cast();
  836. }
  837. }
  838. }
  839. }
  840. }
  841. private static double basicdmg(Obj_AI_Base target)
  842. {
  843. if (target != null)
  844. {
  845. double dmg = 0;
  846. double passivenhan = 0;
  847. if (Player.Level >= 18) { passivenhan = 0.5; }
  848. else if (Player.Level >= 15) { passivenhan = 0.45; }
  849. else if (Player.Level >= 12) { passivenhan = 0.4; }
  850. else if (Player.Level >= 9) { passivenhan = 0.35; }
  851. else if (Player.Level >= 6) { passivenhan = 0.3; }
  852. else if (Player.Level >= 3) { passivenhan = 0.25; }
  853. else { passivenhan = 0.2; }
  854. if (HasItem()) dmg = dmg + Player.GetAutoAttackDamage(target) * 0.7;
  855. if (W.IsReady()) dmg = dmg + W.GetDamage(target);
  856. if (Q.IsReady())
  857. {
  858. var qnhan = 4 - QStack;
  859. dmg = dmg + Q.GetDamage(target) * qnhan + Player.GetAutoAttackDamage(target) * qnhan * (1 + passivenhan);
  860. }
  861. dmg = dmg + Player.GetAutoAttackDamage(target) * (1 + passivenhan);
  862. return dmg;
  863. }
  864. return 0;
  865. }
  866. private static float getComboDamage(Obj_AI_Base enemy)
  867. {
  868. if (enemy != null)
  869. {
  870. float damage = 0;
  871. float passivenhan = 0;
  872. if (Player.Level >= 18) { passivenhan = 0.5f; }
  873. else if (Player.Level >= 15) { passivenhan = 0.45f; }
  874. else if (Player.Level >= 12) { passivenhan = 0.4f; }
  875. else if (Player.Level >= 9) { passivenhan = 0.35f; }
  876. else if (Player.Level >= 6) { passivenhan = 0.3f; }
  877. else if (Player.Level >= 3) { passivenhan = 0.25f; }
  878. else { passivenhan = 0.2f; }
  879. if (HasItem()) damage = damage + (float)Player.GetAutoAttackDamage(enemy) * 0.7f;
  880. if (W.IsReady()) damage = damage + W.GetDamage(enemy);
  881. if (Q.IsReady())
  882. {
  883. var qnhan = 4 - QStack;
  884. damage = damage + Q.GetDamage(enemy) * qnhan + (float)Player.GetAutoAttackDamage(enemy) * qnhan * (1 + passivenhan);
  885. }
  886. damage = damage + (float)Player.GetAutoAttackDamage(enemy) * (1 + passivenhan);
  887. if (R.IsReady())
  888. {
  889. return damage * 1.2f + R.GetDamage(enemy);
  890. }
  891. return damage;
  892. }
  893. return 0;
  894. }
  895. public static bool IsKillableR(Obj_AI_Hero target)
  896. {
  897. if (RKillable && target.IsValidTarget() && (totaldame(target) >= target.Health
  898. && basicdmg(target) <= target.Health) || Player.CountEnemiesInRange(900) >= 2 && (!target.HasBuff("kindrednodeathbuff") && !target.HasBuff("Undying Rage") && !target.HasBuff("JudicatorIntervention")))
  899. {
  900. return true;
  901. }
  902. return false;
  903. }
  904. private static double totaldame(Obj_AI_Base target)
  905. {
  906. if (target != null)
  907. {
  908. double dmg = 0;
  909. double passivenhan = 0;
  910. if (Player.Level >= 18) { passivenhan = 0.5; }
  911. else if (Player.Level >= 15) { passivenhan = 0.45; }
  912. else if (Player.Level >= 12) { passivenhan = 0.4; }
  913. else if (Player.Level >= 9) { passivenhan = 0.35; }
  914. else if (Player.Level >= 6) { passivenhan = 0.3; }
  915. else if (Player.Level >= 3) { passivenhan = 0.25; }
  916. else { passivenhan = 0.2; }
  917. if (HasItem()) dmg = dmg + Player.GetAutoAttackDamage(target) * 0.7;
  918. if (W.IsReady()) dmg = dmg + W.GetDamage(target);
  919. if (Q.IsReady())
  920. {
  921. var qnhan = 4 - QStack;
  922. dmg = dmg + Q.GetDamage(target) * qnhan + Player.GetAutoAttackDamage(target) * qnhan * (1 + passivenhan);
  923. }
  924. dmg = dmg + Player.GetAutoAttackDamage(target) * (1 + passivenhan);
  925. if (R.IsReady())
  926. {
  927. var rdmg = Rdame(target, target.Health - dmg * 1.2);
  928. return dmg * 1.2 + rdmg;
  929. }
  930. return dmg;
  931. }
  932. return 0;
  933. }
  934. private static double Rdame(Obj_AI_Base target, double health)
  935. {
  936. if (target != null)
  937. {
  938. var missinghealth = (target.MaxHealth - health) / target.MaxHealth > 0.75 ? 0.75 : (target.MaxHealth - health) / target.MaxHealth;
  939. var pluspercent = missinghealth * (8 / 3);
  940. var rawdmg = new double[] { 80, 120, 160 }[R.Level - 1] + 0.6 * Player.FlatPhysicalDamageMod;
  941. return Player.CalcDamage(target, Damage.DamageType.Physical, rawdmg * (1 + pluspercent));
  942. }
  943. return 0;
  944. }
  945. }
  946. }

comments powered by Disqus