using System; using System.Linq; using LeagueSharp; using LeagueSharp.Common; using SharpDX; using ItemData = LeagueSharp.Common.Data.ItemData; namespace HoolaRiven { public class Program { public static Menu Menu; private static Orbwalking.Orbwalker Orbwalker; private static readonly Obj_AI_Hero Player = ObjectManager.Player; private static readonly HpBarIndicator Indicator = new HpBarIndicator(); private const string IsFirstR = "RivenFengShuiEngine"; private const string IsSecondR = "RivenIzunaBlade"; private static readonly SpellSlot Flash = Player.GetSpellSlot("summonerFlash"); private static Spell Q, Q1, W, E, R; private static int QStack = 1; public static Render.Text Timer, Timer2; private static bool forceQ; private static bool forceW; private static bool forceR; private static bool forceR2; private static bool forceItem; private static float LastQ; private static float LastR; private static AttackableUnit QTarget; private static bool Dind => Menu.Item("Dind").GetValue(); private static bool DrawCB => Menu.Item("DrawCB").GetValue(); private static bool KillstealW => Menu.Item("killstealw").GetValue(); private static bool KillstealR => Menu.Item("killstealr").GetValue(); private static bool DrawAlwaysR => Menu.Item("DrawAlwaysR").GetValue(); private static bool DrawUseHoola => Menu.Item("DrawUseHoola").GetValue (); private static bool DrawFH => Menu.Item("DrawFH").GetValue(); private static bool DrawTimer1 => Menu.Item("DrawTimer1").GetValue(); private static bool DrawTimer2 => Menu.Item("DrawTimer2").GetValue(); private static bool DrawHS => Menu.Item("DrawHS").GetValue(); private static bool DrawBT => Menu.Item("DrawBT").GetValue(); private static bool UseHoola => Menu.Item("UseHoola").GetValue().Active; private static bool AlwaysR => Menu.Item("AlwaysR").GetValue().Active; private static bool AutoShield => Menu.Item("AutoShield").GetValue(); private static bool Shield => Menu.Item("Shield").GetValue(); private static bool KeepQ => Menu.Item("KeepQ").GetValue(); private static int QD => Menu.Item("QD").GetValue().Value; private static int QLD => Menu.Item("QLD").GetValue().Value; private static int AutoW => Menu.Item("AutoW").GetValue().Value; private static bool ComboW => Menu.Item("ComboW").GetValue(); private static bool RMaxDam => Menu.Item("RMaxDam").GetValue(); private static bool RKillable => Menu.Item("RKillable").GetValue(); private static int LaneW => Menu.Item("LaneW").GetValue().Value; private static bool LaneE => Menu.Item("LaneE").GetValue(); private static bool WInterrupt => Menu.Item("WInterrupt").GetValue(); private static bool Qstrange => Menu.Item("Qstrange").GetValue(); private static bool FirstHydra => Menu.Item("FirstHydra").GetValue(); private static bool LaneQ => Menu.Item("LaneQ").GetValue(); private static bool Youmu => Menu.Item("youmu").GetValue(); private static void Main() => CustomEvents.Game.OnGameLoad += OnGameLoad; private static void OnGameLoad(EventArgs args) { if (Player.ChampionName != "Riven") return; Game.PrintChat("Hoola Riven - Loaded Successfully, Good Luck! :):)"); Q = new Spell(SpellSlot.Q); W = new Spell(SpellSlot.W); E = new Spell(SpellSlot.E, 300); R = new Spell(SpellSlot.R, 900); R.SetSkillshot(0.25f, 45, 1600, false, SkillshotType.SkillshotCone); OnMenuLoad(); 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"); 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"); Game.OnUpdate += OnTick; Drawing.OnDraw += Drawing_OnDraw; Drawing.OnEndScene += Drawing_OnEndScene; Obj_AI_Base.OnProcessSpellCast += OnCast; Obj_AI_Base.OnDoCast += OnDoCast; Obj_AI_Base.OnDoCast += OnDoCastLC; Obj_AI_Base.OnPlayAnimation += OnPlay; Obj_AI_Base.OnProcessSpellCast += OnCasting; Interrupter2.OnInterruptableTarget += Interrupt; } private static bool HasTitan() => (Items.HasItem(3748) && Items.CanUseItem(3748)); private static void CastTitan() { if (Items.HasItem(3748) && Items.CanUseItem(3748)) { Items.UseItem(3748); Orbwalking.LastAATick = 0; } } private static void Drawing_OnEndScene(EventArgs args) { foreach ( var enemy in ObjectManager.Get() .Where(ene => ene.IsValidTarget() && !ene.IsZombie)) { if (Dind) { Indicator.unit = enemy; Indicator.drawDmg(getComboDamage(enemy), new ColorBGRA(255, 204, 0, 170)); } } } private static void OnDoCastLC(Obj_AI_Base Sender, GameObjectProcessSpellCastEventArgs args) { if (!Sender.IsMe || !Orbwalking.IsAutoAttack((args.SData.Name))) return; QTarget = (Obj_AI_Base) args.Target; if (args.Target is Obj_AI_Minion) { if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) { var Minions = MinionManager.GetMinions(70 + 120 + Player.BoundingRadius); if (HasTitan()) { CastTitan(); return; } if (Q.IsReady() && LaneQ) { ForceItem(); Utility.DelayAction.Add(1, ()=>ForceCastQ(Minions[0])); } if ((!Q.IsReady() || (Q.IsReady() && !LaneQ)) && W.IsReady() && LaneW != 0 && Minions.Count >= LaneW) { ForceItem(); Utility.DelayAction.Add(1, ForceW); } if ((!Q.IsReady() || (Q.IsReady() && !LaneQ)) && (!W.IsReady() || (W.IsReady() && LaneW == 0) || Minions.Count < LaneW) && E.IsReady() && LaneE) { E.Cast(Minions[0].Position); Utility.DelayAction.Add(1, ForceItem); } } } } private static int Item => Items.CanUseItem(3077) && Items.HasItem(3077) ? 3077 : Items.CanUseItem(3074) && Items.HasItem(3074) ? 3074 : 0; private static void OnDoCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { var spellName = args.SData.Name; if (!sender.IsMe || !Orbwalking.IsAutoAttack(spellName)) return; QTarget = (Obj_AI_Base)args.Target; if (args.Target is Obj_AI_Minion) { if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) { var Mobs = MinionManager.GetMinions(120 + 70 + Player.BoundingRadius, MinionTypes.All, MinionTeam.Neutral, MinionOrderTypes.MaxHealth); if (Mobs.Count != 0) { if (HasTitan()) { CastTitan(); return; } if (Q.IsReady()) { ForceItem(); Utility.DelayAction.Add(1, ()=> ForceCastQ(Mobs[0])); } else if (W.IsReady()) { ForceItem(); Utility.DelayAction.Add(1, ForceW); } else if (E.IsReady()) { E.Cast(Mobs[0].Position); } } } } 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); if (args.Target is Obj_AI_Hero) { var target = (Obj_AI_Hero)args.Target; 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); if (KillstealW && W.IsReady()) if (target.Health < (W.GetDamage(target) + Player.GetAutoAttackDamage(target)) && target.Health > Player.GetAutoAttackDamage(target)) W.Cast(); if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo) { if (HasTitan()) { CastTitan(); return; } if (Q.IsReady()) { ForceItem(); Utility.DelayAction.Add(1, ()=>ForceCastQ(target)); } else if (W.IsReady() && InWRange(target)) { ForceItem(); Utility.DelayAction.Add(1, ForceW); } else if (E.IsReady() && !Orbwalking.InAutoAttackRange(target)) E.Cast(target.Position); } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.FastHarass) { if (HasTitan()) { CastTitan(); return; } if (W.IsReady() && InWRange(target)) { ForceItem(); Utility.DelayAction.Add(1, ForceW); Utility.DelayAction.Add(2, () => ForceCastQ(target)); } else if (Q.IsReady()) { ForceItem(); Utility.DelayAction.Add(1,()=>ForceCastQ(target)); } else if (E.IsReady() && !Orbwalking.InAutoAttackRange(target) && !InWRange(target)) { E.Cast(target.Position); } } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed) { if (HasTitan()) { CastTitan(); return; } if (QStack == 2 && Q.IsReady()) { ForceItem(); Utility.DelayAction.Add(1, () => ForceCastQ(target)); } } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Burst) { if (HasTitan()) { CastTitan(); return; } if (R.IsReady() && R.Instance.Name == IsSecondR) { ForceItem(); Utility.DelayAction.Add(1, ForceR2); } else if (Q.IsReady()) { ForceItem(); Utility.DelayAction.Add(1, ()=>ForceCastQ(target)); } } } } private static void OnMenuLoad() { Menu = new Menu("Hoola Riven", "hoolariven", true); Menu ts = Menu.AddSubMenu(new Menu("Target Selector", "Target Selector")); TargetSelector.AddToMenu(ts); var orbwalker = new Menu("Orbwalk", "rorb"); Orbwalker = new Orbwalking.Orbwalker(orbwalker); Menu.AddSubMenu(orbwalker); var Combo = new Menu("Combo", "Combo"); Combo.AddItem(new MenuItem("AlwaysR", "Always Use R (Toggle)").SetValue(new KeyBind('G', KeyBindType.Toggle))); Combo.AddItem(new MenuItem("UseHoola", "Use Hoola Combo Logic (Toggle)").SetValue(new KeyBind('L', KeyBindType.Toggle))); Combo.AddItem(new MenuItem("ComboW", "Always use W").SetValue(true)); Combo.AddItem(new MenuItem("RKillable", "Use R When Target Can Killable").SetValue(true)); Menu.AddSubMenu(Combo); var Lane = new Menu("Lane", "Lane"); Lane.AddItem(new MenuItem("LaneQ", "Use Q While Laneclear").SetValue(true)); Lane.AddItem(new MenuItem("LaneW", "Use W X Minion (0 = Don't)").SetValue(new Slider(5, 0, 5))); Lane.AddItem(new MenuItem("LaneE", "Use E While Laneclear").SetValue(true)); Menu.AddSubMenu(Lane); var Misc = new Menu("Misc", "Misc"); Misc.AddItem(new MenuItem("youmu", "Use Youmus When E").SetValue(false)); Misc.AddItem(new MenuItem("FirstHydra", "Flash Burst Hydra Cast before W").SetValue(false)); Misc.AddItem(new MenuItem("Qstrange", "Strange Q For Speed").SetValue(false)); Misc.AddItem(new MenuItem("Winterrupt", "W interrupt").SetValue(true)); Misc.AddItem(new MenuItem("AutoW", "Auto W When x Enemy").SetValue(new Slider(5, 0, 5))); Misc.AddItem(new MenuItem("RMaxDam", "Use Second R Max Damage").SetValue(true)); Misc.AddItem(new MenuItem("killstealw", "Killsteal W").SetValue(true)); Misc.AddItem(new MenuItem("killstealr", "Killsteal Second R").SetValue(true)); Misc.AddItem(new MenuItem("AutoShield", "Auto Cast E").SetValue(true)); Misc.AddItem(new MenuItem("Shield", "Auto Cast E While LastHit").SetValue(true)); Misc.AddItem(new MenuItem("KeepQ", "Keep Q Alive").SetValue(true)); Misc.AddItem(new MenuItem("QD", "First,Second Q Delay").SetValue(new Slider(29, 23, 43))); Misc.AddItem(new MenuItem("QLD", "Third Q Delay").SetValue(new Slider(39, 36, 53))); Menu.AddSubMenu(Misc); var Draw = new Menu("Draw", "Draw"); Draw.AddItem(new MenuItem("DrawAlwaysR", "Draw Always R Status").SetValue(true)); Draw.AddItem(new MenuItem("DrawTimer1", "Draw Q Expiry Time").SetValue(true)); Draw.AddItem(new MenuItem("DrawTimer2", "Draw R Expiry Time").SetValue(true)); Draw.AddItem(new MenuItem("DrawUseHoola", "Draw Hoola Logic Status").SetValue(true)); Draw.AddItem(new MenuItem("Dind", "Draw Damage Indicator").SetValue(true)); Draw.AddItem(new MenuItem("DrawCB", "Draw Combo Engage Range").SetValue(false)); Draw.AddItem(new MenuItem("DrawBT", "Draw Burst Engage Range").SetValue(false)); Draw.AddItem(new MenuItem("DrawFH", "Draw FastHarass Engage Range").SetValue(false)); Draw.AddItem(new MenuItem("DrawHS", "Draw Harass Engage Range").SetValue(false)); Menu.AddSubMenu(Draw); var Credit = new Menu("Credit", "Credit"); Credit.AddItem(new MenuItem("hoola", "Made by Hoola :)")); Credit.AddItem(new MenuItem("notfixe", "If High ping will be many buggy")); Credit.AddItem(new MenuItem("notfixed", "Not Fixed Anything Yet")); Credit.AddItem(new MenuItem("feedback", "So Feedback To Hoola!")); Menu.AddSubMenu(Credit); Menu.AddToMainMenu(); } private static void Interrupt(Obj_AI_Hero sender, Interrupter2.InterruptableTargetEventArgs args) { if (sender.IsEnemy && W.IsReady() && sender.IsValidTarget() && !sender.IsZombie && WInterrupt) { if (sender.IsValidTarget(125 + Player.BoundingRadius + sender.BoundingRadius)) W.Cast(); } } private static int GetWRange => Player.HasBuff("RivenFengShuiEngine") ? 330 : 265; private static void AutoUseW() { if (AutoW > 0) { if (Player.CountEnemiesInRange(GetWRange) >= AutoW) { ForceW(); } } } private static void OnTick(EventArgs args) { Timer.X = (int)Drawing.WorldToScreen(Player.Position).X - 60; Timer.Y = (int)Drawing.WorldToScreen(Player.Position).Y + 43; Timer2.X = (int)Drawing.WorldToScreen(Player.Position).X - 60; Timer2.Y = (int)Drawing.WorldToScreen(Player.Position).Y + 65; ForceSkill(); UseRMaxDam(); AutoUseW(); Killsteal(); if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo) Combo(); if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LaneClear) Jungleclear(); if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Mixed) Harass(); if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.FastHarass) FastHarass(); if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Burst) Burst(); if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Flee) Flee(); if (Utils.GameTimeTickCount - LastQ >= 3650 && QStack != 1 && !Player.IsRecalling() && KeepQ && Q.IsReady()) Q.Cast(Game.CursorPos); } private static void Killsteal() { if (KillstealW && W.IsReady()) { var targets = HeroManager.Enemies.Where(x => x.IsValidTarget(R.Range) && !x.IsZombie); foreach (var target in targets) { if (target.Health < W.GetDamage(target) && InWRange(target)) W.Cast(); } } if (KillstealR && R.IsReady() && R.Instance.Name == IsSecondR) { var targets = HeroManager.Enemies.Where(x => x.IsValidTarget(R.Range) && !x.IsZombie); foreach (var target in targets) { if (target.Health < Rdame(target, target.Health) && (!target.HasBuff("kindrednodeathbuff") && !target.HasBuff("Undying Rage") && !target.HasBuff("JudicatorIntervention"))) R.Cast(target.Position); } } } private static void UseRMaxDam() { if (RMaxDam && R.IsReady() && R.Instance.Name == IsSecondR) { var targets = HeroManager.Enemies.Where(x => x.IsValidTarget(R.Range) && !x.IsZombie); foreach (var target in targets) { if (target.Health / target.MaxHealth <= 0.25 && (!target.HasBuff("kindrednodeathbuff") || !target.HasBuff("Undying Rage") || !target.HasBuff("JudicatorIntervention"))) R.Cast(target.Position); } } } private static void Drawing_OnDraw(EventArgs args) { if (Player.IsDead) return; var heropos = Drawing.WorldToScreen(ObjectManager.Player.Position); if (QStack != 1 && DrawTimer1) { Timer.text = ("Q Expiry => " + ((double)(LastQ - Utils.GameTimeTickCount + 3800) / 1000).ToString("0.0")+"S"); Timer.OnEndScene(); } if (Player.HasBuff("RivenFengShuiEngine") && DrawTimer2) { Timer2.text = ("R Expiry => " + (((double)LastR - Utils.GameTimeTickCount + 15000) / 1000).ToString("0.0") +"S"); Timer2.OnEndScene(); } 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); 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); 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); if (DrawHS) Render.Circle.DrawCircle(Player.Position, 400, Q.IsReady() && W.IsReady() ? System.Drawing.Color.FromArgb(120, 0, 170, 255) : System.Drawing.Color.IndianRed); if (DrawAlwaysR) { Drawing.DrawText(heropos.X -40, heropos.Y + 20, System.Drawing.Color.DodgerBlue, "Always R ( )"); Drawing.DrawText(heropos.X + 40, heropos.Y + 20, AlwaysR ? System.Drawing.Color.LimeGreen : System.Drawing.Color.Red, AlwaysR ? "On" : "Off"); } if (DrawUseHoola) { Drawing.DrawText(heropos.X -40, heropos.Y + 33, System.Drawing.Color.DodgerBlue, "Hoola Logic ( )"); Drawing.DrawText(heropos.X + 60, heropos.Y + 33, UseHoola ? System.Drawing.Color.LimeGreen : System.Drawing.Color.Red, UseHoola ? "On" : "Off"); } } private static void Jungleclear() { var Mobs = MinionManager.GetMinions(250 + Player.AttackRange + 70, MinionTypes.All, MinionTeam.Neutral, MinionOrderTypes.MaxHealth); if (Mobs.Count <= 0) return; if (W.IsReady() && E.IsReady() && !Orbwalking.InAutoAttackRange(Mobs[0])) { E.Cast(Mobs[0].Position); Utility.DelayAction.Add(1, ForceItem); Utility.DelayAction.Add(200, ForceW); } } private static void Combo() { var targetR = TargetSelector.GetTarget(250 + Player.AttackRange + 70, TargetSelector.DamageType.Physical); if (R.IsReady() && R.Instance.Name == IsFirstR && Orbwalker.InAutoAttackRange(targetR) && AlwaysR && targetR != null) ForceR(); if (R.IsReady() && R.Instance.Name == IsFirstR && W.IsReady() && InWRange(targetR) && ComboW && AlwaysR && targetR != null) { ForceR(); Utility.DelayAction.Add(1, ForceW); } if (W.IsReady() && InWRange(targetR) && ComboW && targetR != null) W.Cast(); if (UseHoola && R.IsReady() && R.Instance.Name == IsFirstR && W.IsReady() && targetR != null && E.IsReady() && targetR.IsValidTarget() && !targetR.IsZombie && (IsKillableR(targetR) || AlwaysR)) { if (!InWRange(targetR)) { E.Cast(targetR.Position); ForceR(); Utility.DelayAction.Add(200, ForceW); Utility.DelayAction.Add(305, () => ForceCastQ(targetR)); } } else if (!UseHoola && R.IsReady() && R.Instance.Name == IsFirstR && W.IsReady() && targetR != null && E.IsReady() && targetR.IsValidTarget() && !targetR.IsZombie && (IsKillableR(targetR) || AlwaysR)) { if (!InWRange(targetR)) { E.Cast(targetR.Position); ForceR(); Utility.DelayAction.Add(200, ForceW); } } else if (UseHoola && W.IsReady() && E.IsReady()) { if (targetR.IsValidTarget() && targetR != null && !targetR.IsZombie && !InWRange(targetR)) { E.Cast(targetR.Position); Utility.DelayAction.Add(10, ForceItem); Utility.DelayAction.Add(200, ForceW); Utility.DelayAction.Add(305, () => ForceCastQ(targetR)); } } else if (!UseHoola && W.IsReady() && targetR != null && E.IsReady()) { if (targetR.IsValidTarget() && targetR != null && !targetR.IsZombie && !InWRange(targetR)) { E.Cast(targetR.Position); Utility.DelayAction.Add(10, ForceItem); Utility.DelayAction.Add(240, ForceW); } } else if (E.IsReady()) { if (targetR.IsValidTarget() && !targetR.IsZombie && !InWRange(targetR)) { E.Cast(targetR.Position); } } } private static void Burst() { var target = TargetSelector.GetSelectedTarget(); if (target != null && target.IsValidTarget() && !target.IsZombie) { if (R.IsReady() && R.Instance.Name == IsFirstR && W.IsReady() && E.IsReady() && Player.Distance(target.Position) <= 250 + 70 + Player.AttackRange) { E.Cast(target.Position); CastYoumoo(); ForceR(); Utility.DelayAction.Add(100, ForceW); } else if (R.IsReady() && R.Instance.Name == IsFirstR && E.IsReady() && W.IsReady() && Q.IsReady() && Player.Distance(target.Position) <= 400 + 70 + Player.AttackRange) { E.Cast(target.Position); CastYoumoo(); ForceR(); Utility.DelayAction.Add(150,()=>ForceCastQ(target)); Utility.DelayAction.Add(160, ForceW); } else if (Flash.IsReady() && R.IsReady() && R.Instance.Name == IsFirstR && (Player.Distance(target.Position) <= 800) && (!FirstHydra || (FirstHydra && !HasItem()))) { E.Cast(target.Position); CastYoumoo(); ForceR(); Utility.DelayAction.Add(180, FlashW); } else if (Flash.IsReady() && R.IsReady() && E.IsReady() && W.IsReady() && R.Instance.Name == IsFirstR && (Player.Distance(target.Position) <= 800) && FirstHydra && HasItem()) { E.Cast(target.Position); ForceR(); Utility.DelayAction.Add(100, ForceItem); Utility.DelayAction.Add(210, FlashW); } } } private static void FastHarass() { if (Q.IsReady() && E.IsReady()) { var target = TargetSelector.GetTarget(450 + Player.AttackRange + 70, TargetSelector.DamageType.Physical); if (target.IsValidTarget() && !target.IsZombie) { if (!Orbwalking.InAutoAttackRange(target) && !InWRange(target)) E.Cast(target.Position); Utility.DelayAction.Add(10, ForceItem); Utility.DelayAction.Add(170, ()=>ForceCastQ(target)); } } } private static void Harass() { var target = TargetSelector.GetTarget(400, TargetSelector.DamageType.Physical); if (Q.IsReady() && W.IsReady() && E.IsReady() && QStack == 1) { if (target.IsValidTarget() && !target.IsZombie) { ForceCastQ(target); Utility.DelayAction.Add(1, ForceW); } } if (Q.IsReady() && E.IsReady() && QStack == 3 && !Orbwalking.CanAttack() && Orbwalking.CanMove(5)) { var epos = Player.ServerPosition + (Player.ServerPosition - target.ServerPosition).Normalized() * 300; E.Cast(epos); Utility.DelayAction.Add(190, () => Q.Cast(epos)); } } private static void Flee() { var enemy = HeroManager.Enemies.Where( hero => hero.IsValidTarget(Player.HasBuff("RivenFengShuiEngine") ? 70 + 195 + Player.BoundingRadius : 70 + 120 + Player.BoundingRadius) && W.IsReady()); var x = Player.Position.Extend(Game.CursorPos, 300); if (W.IsReady() && enemy.Any()) foreach (var target in enemy) if (InWRange(target)) W.Cast(); if (Q.IsReady() && !Player.IsDashing()) Q.Cast(Game.CursorPos); if (E.IsReady() && !Player.IsDashing()) E.Cast(x); } private static void OnPlay(Obj_AI_Base sender, GameObjectPlayAnimationEventArgs args) { if (!sender.IsMe) return; switch (args.Animation) { case "Spell1a": LastQ = Utils.GameTimeTickCount; if (Qstrange && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None) Game.Say("/d"); QStack = 2; if (Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.LastHit && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Flee) Utility.DelayAction.Add((QD * 10) + 1, Reset); break; case "Spell1b": LastQ = Utils.GameTimeTickCount; if (Qstrange && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None) Game.Say("/d"); QStack = 3; if (Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.LastHit && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Flee) Utility.DelayAction.Add((QD * 10) + 1, Reset); break; case "Spell1c": LastQ = Utils.GameTimeTickCount; if (Qstrange && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None) Game.Say("/d"); QStack = 1; if (Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.None && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.LastHit && Orbwalker.ActiveMode != Orbwalking.OrbwalkingMode.Flee) Utility.DelayAction.Add((QLD * 10) + 3, Reset); break; case "Spell3": if ((Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Burst || Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo || Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.FastHarass || Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Flee) && Youmu) CastYoumoo(); break; case "Spell4a": LastR = Utils.GameTimeTickCount; break; case "Spell4b": var target = TargetSelector.GetSelectedTarget(); if (Q.IsReady() && target.IsValidTarget()) ForceCastQ(target); break; } } private static void OnCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (!sender.IsMe) return; if (args.SData.Name.Contains("ItemTiamatCleave")) forceItem = false; if (args.SData.Name.Contains("RivenTriCleave")) forceQ = false; if (args.SData.Name.Contains("RivenMartyr")) forceW = false; if (args.SData.Name == IsFirstR) forceR = false; if (args.SData.Name == IsSecondR) forceR2 = false; } private static void Reset() { Game.Say("/d"); Orbwalking.LastAATick = 0; Player.IssueOrder(GameObjectOrder.MoveTo, Player.Position.Extend(Game.CursorPos, Player.Distance(Game.CursorPos) + 10)); } private static bool InWRange(GameObject target)=> (Player.HasBuff("RivenFengShuiEngine") && target != null) ? 330 >= Player.Distance(target.Position) : 265 >= Player.Distance(target.Position); private static void ForceSkill() { if (forceQ && QTarget != null && QTarget.IsValidTarget(E.Range + Player.BoundingRadius + 70) && Q.IsReady()) Q.Cast(QTarget.Position); if (forceW) W.Cast(); if (forceR && R.Instance.Name == IsFirstR) R.Cast(); if (forceItem && Items.CanUseItem(Item) && Items.HasItem(Item) && Item != 0) Items.UseItem(Item); if (forceR2 && R.Instance.Name == IsSecondR) { var target = TargetSelector.GetSelectedTarget(); if (target != null) R.Cast(target.Position); } } private static void ForceItem() { if (Items.CanUseItem(Item) && Items.HasItem(Item) && Item != 0) forceItem = true; Utility.DelayAction.Add(500, () => forceItem = false); } private static void ForceR() { forceR = (R.IsReady() && R.Instance.Name == IsFirstR); Utility.DelayAction.Add(500, ()=> forceR = false); } private static void ForceR2() { forceR2 = R.IsReady() && R.Instance.Name == IsSecondR; Utility.DelayAction.Add(500, () => forceR2 = false); } private static void ForceW() { forceW = W.IsReady(); Utility.DelayAction.Add(500, () => forceW = false); } private static void ForceCastQ(AttackableUnit target) { forceQ = true; QTarget = target; } private static void FlashW() { var target = TargetSelector.GetSelectedTarget(); if (target != null && target.IsValidTarget() && !target.IsZombie) { W.Cast(); Utility.DelayAction.Add(10, () => Player.Spellbook.CastSpell(Flash, target.Position)); } } private static bool HasItem() => ItemData.Tiamat_Melee_Only.GetItem().IsReady() || ItemData.Ravenous_Hydra_Melee_Only.GetItem().IsReady(); private static void CastYoumoo(){if(ItemData.Youmuus_Ghostblade.GetItem().IsReady())ItemData.Youmuus_Ghostblade.GetItem().Cast();} private static void OnCasting(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (sender.IsEnemy && sender.Type == Player.Type && (AutoShield || (Shield && Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LastHit))) { var epos = Player.ServerPosition + (Player.ServerPosition - sender.ServerPosition).Normalized() * 300; if (Player.Distance(sender.ServerPosition) <= args.SData.CastRange) { switch (args.SData.TargettingType) { case SpellDataTargetType.Unit: if (args.Target.NetworkId == Player.NetworkId) { if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LastHit && !args.SData.Name.Contains("NasusW")) { if (E.IsReady()) E.Cast(epos); } } break; case SpellDataTargetType.SelfAoe: if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.LastHit) { if (E.IsReady()) E.Cast(epos); } break; } if (args.SData.Name.Contains("IreliaEquilibriumStrike")) { if (args.Target.NetworkId == Player.NetworkId) { if (W.IsReady() && InWRange(sender)) W.Cast(); else if (E.IsReady()) E.Cast(epos); } } if (args.SData.Name.Contains("TalonCutthroat")) { if (args.Target.NetworkId == Player.NetworkId) { if (W.IsReady()) W.Cast(); } } if (args.SData.Name.Contains("RenektonPreExecute")) { if (args.Target.NetworkId == Player.NetworkId) { if (W.IsReady()) W.Cast(); } } if (args.SData.Name.Contains("GarenRPreCast")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(epos); } } if (args.SData.Name.Contains("GarenQAttack")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("XenZhaoThrust3")) { if (args.Target.NetworkId == Player.NetworkId) { if (W.IsReady()) W.Cast(); } } if (args.SData.Name.Contains("RengarQ")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("RengarPassiveBuffDash")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("RengarPassiveBuffDashAADummy")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("TwitchEParticle")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("FizzPiercingStrike")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("HungeringStrike")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("YasuoDash")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("KatarinaRTrigger")) { if (args.Target.NetworkId == Player.NetworkId) { if (W.IsReady() && InWRange(sender)) W.Cast(); else if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("YasuoDash")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("KatarinaE")) { if (args.Target.NetworkId == Player.NetworkId) { if (W.IsReady()) W.Cast(); } } if (args.SData.Name.Contains("MonkeyKingQAttack")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("MonkeyKingSpinToWin")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); else if (W.IsReady()) W.Cast(); } } if (args.SData.Name.Contains("MonkeyKingQAttack")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("MonkeyKingQAttack")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } if (args.SData.Name.Contains("MonkeyKingQAttack")) { if (args.Target.NetworkId == Player.NetworkId) { if (E.IsReady()) E.Cast(); } } } } } private static double basicdmg(Obj_AI_Base target) { if (target != null) { double dmg = 0; double passivenhan = 0; if (Player.Level >= 18) { passivenhan = 0.5; } else if (Player.Level >= 15) { passivenhan = 0.45; } else if (Player.Level >= 12) { passivenhan = 0.4; } else if (Player.Level >= 9) { passivenhan = 0.35; } else if (Player.Level >= 6) { passivenhan = 0.3; } else if (Player.Level >= 3) { passivenhan = 0.25; } else { passivenhan = 0.2; } if (HasItem()) dmg = dmg + Player.GetAutoAttackDamage(target) * 0.7; if (W.IsReady()) dmg = dmg + W.GetDamage(target); if (Q.IsReady()) { var qnhan = 4 - QStack; dmg = dmg + Q.GetDamage(target) * qnhan + Player.GetAutoAttackDamage(target) * qnhan * (1 + passivenhan); } dmg = dmg + Player.GetAutoAttackDamage(target) * (1 + passivenhan); return dmg; } return 0; } private static float getComboDamage(Obj_AI_Base enemy) { if (enemy != null) { float damage = 0; float passivenhan = 0; if (Player.Level >= 18) { passivenhan = 0.5f; } else if (Player.Level >= 15) { passivenhan = 0.45f; } else if (Player.Level >= 12) { passivenhan = 0.4f; } else if (Player.Level >= 9) { passivenhan = 0.35f; } else if (Player.Level >= 6) { passivenhan = 0.3f; } else if (Player.Level >= 3) { passivenhan = 0.25f; } else { passivenhan = 0.2f; } if (HasItem()) damage = damage + (float)Player.GetAutoAttackDamage(enemy) * 0.7f; if (W.IsReady()) damage = damage + W.GetDamage(enemy); if (Q.IsReady()) { var qnhan = 4 - QStack; damage = damage + Q.GetDamage(enemy) * qnhan + (float)Player.GetAutoAttackDamage(enemy) * qnhan * (1 + passivenhan); } damage = damage + (float)Player.GetAutoAttackDamage(enemy) * (1 + passivenhan); if (R.IsReady()) { return damage * 1.2f + R.GetDamage(enemy); } return damage; } return 0; } public static bool IsKillableR(Obj_AI_Hero target) { if (RKillable && target.IsValidTarget() && (totaldame(target) >= target.Health && basicdmg(target) <= target.Health) || Player.CountEnemiesInRange(900) >= 2 && (!target.HasBuff("kindrednodeathbuff") && !target.HasBuff("Undying Rage") && !target.HasBuff("JudicatorIntervention"))) { return true; } return false; } private static double totaldame(Obj_AI_Base target) { if (target != null) { double dmg = 0; double passivenhan = 0; if (Player.Level >= 18) { passivenhan = 0.5; } else if (Player.Level >= 15) { passivenhan = 0.45; } else if (Player.Level >= 12) { passivenhan = 0.4; } else if (Player.Level >= 9) { passivenhan = 0.35; } else if (Player.Level >= 6) { passivenhan = 0.3; } else if (Player.Level >= 3) { passivenhan = 0.25; } else { passivenhan = 0.2; } if (HasItem()) dmg = dmg + Player.GetAutoAttackDamage(target) * 0.7; if (W.IsReady()) dmg = dmg + W.GetDamage(target); if (Q.IsReady()) { var qnhan = 4 - QStack; dmg = dmg + Q.GetDamage(target) * qnhan + Player.GetAutoAttackDamage(target) * qnhan * (1 + passivenhan); } dmg = dmg + Player.GetAutoAttackDamage(target) * (1 + passivenhan); if (R.IsReady()) { var rdmg = Rdame(target, target.Health - dmg * 1.2); return dmg * 1.2 + rdmg; } return dmg; } return 0; } private static double Rdame(Obj_AI_Base target, double health) { if (target != null) { var missinghealth = (target.MaxHealth - health) / target.MaxHealth > 0.75 ? 0.75 : (target.MaxHealth - health) / target.MaxHealth; var pluspercent = missinghealth * (8 / 3); var rawdmg = new double[] { 80, 120, 160 }[R.Level - 1] + 0.6 * Player.FlatPhysicalDamageMod; return Player.CalcDamage(target, Damage.DamageType.Physical, rawdmg * (1 + pluspercent)); } return 0; } } }