private void GapcloserOnOnGapcloser(AIHeroClient sender, Gapcloser.GapcloserEventArgs gapcloserEventArgs) { if (!sender.IsEnemy || !RivenMenu.Misc["antiGap"].Cast <CheckBox>().CurrentValue) { return; } var path = me.RealPath(); var gapTime = gapcloserEventArgs.TickCount - Environment.TickCount; var pathPoint = path.OrderBy(p => Math.Abs(p.Distance(me) / me.MoveSpeed * 1000 - gapTime)).First(); if (gapcloserEventArgs.End.Distance(pathPoint) <= Spells.W.Range && Spells.W.IsReady()) { Spells.ForceW(); } //else if (Spells.W.IsReady() && Spells.E.IsReady()) //{ // var ePos = me.Position.Extend(path.Last(), Spells.E.Range); // pathPoint = path.OrderBy(p => Math.Abs(p.Distance(ePos) / me.MoveSpeed * 1000 + Spells.E.CastDelay - gapTime)).First(); // if (gapcloserEventArgs.End.Distance(pathPoint) <= Spells.W.Range) // { // Spells.ForceE(path.Last().To2D()); // Core.DelayAction(Spells.ForceW, Spells.E.CastDelay); // } //} }
private void InterrupterOnOnInterruptableSpell(Obj_AI_Base sender, Interrupter.InterruptableSpellEventArgs interruptableSpellEventArgs) { if (!sender.IsEnemy || !RivenMenu.Misc["interrupt"].Cast <CheckBox>().CurrentValue) { return; } if (Prediction.Position.PredictUnitPosition(sender, Spells.W.CastDelay).Distance(me) <= Spells.W.Range && Spells.W.IsReady()) { Spells.ForceW(); } }
private void DashOnOnDash(Obj_AI_Base sender, Dash.DashEventArgs dashEventArgs) { if (!sender.IsMe) { return; } var slot = !Spells.E.IsReady() ? SpellSlot.E : SpellSlot.Q; CastType currentCastType = CastType.NONE; if (slot == SpellSlot.Q) { LastQ = Environment.TickCount; currentCastType = CastType.Q; } if (slot == SpellSlot.E) { currentCastType = CastType.E; } CastType?nextCast = RivenMenu.GetNextCastTyoe(currentCastType); if (nextCast == null || GetTarget == null) { return; } switch (nextCast) { case CastType.Q: Spells.ForceQ(GetTarget.Position.To2D()); break; case CastType.W: Spells.ForceW(); break; case CastType.E: Spells.ForceE(GetTarget.Position.To2D()); break; case CastType.R1: Spells.ForceR1(); break; case CastType.R2: TryR2Cast(); break; case CastType.H: Spells.ForceItem(); break; case CastType.F: Spells.ForceFlash(TargetSelector.SelectedTarget.Position.To2D()); break; } }
private void OnSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args) { if (!sender.IsMe) { return; } CastType currentCastType = CastType.NONE; if (args.SData.Name.Contains("BasicAttack")) { currentCastType = CastType.AA; if (ObjectManager.Get <Obj_AI_Turret>().Any(x => me.Distance(x) <= me.GetAutoAttackRange() + x.BoundingRadius + 200)) { Spells.ForceQ(); } if (me.GetAutoAttackDamage(args.Target as Obj_AI_Base) >= (args.Target as Obj_AI_Base).Health) { return; } } if (args.Slot == SpellSlot.W) { currentCastType = CastType.W; } if (args.SData.Name.Contains("RivenFengShuiEngine")) //firstR { currentCastType = CastType.R1; LastRTick = Environment.TickCount; } if (args.SData.Name.Contains("RivenIzunaBlade")) //secondR { currentCastType = CastType.R2; RivenMenu.Combo["burstKey"].Cast <KeyBind>().CurrentValue = false; } if (args.SData.Name.Contains("ItemTiamatCleave")) { currentCastType = CastType.H; } if (args.SData.Name.ToLower().Contains("flash")) { currentCastType = CastType.F; } if (currentCastType == CastType.NONE) { return; } if (GetTarget == null) { return; } CastType?nextCast = RivenMenu.GetNextCastTyoe(currentCastType); if (nextCast == null) { return; } switch (nextCast) { case CastType.Q: Spells.ForceQ(GetTarget.Position.To2D()); break; case CastType.W: Spells.ForceW(); break; case CastType.E: Spells.ForceE(GetTarget.Position.To2D()); break; case CastType.R1: Spells.ForceR1(); break; case CastType.R2: TryR2Cast(); break; case CastType.H: Spells.ForceItem(); break; case CastType.F: Spells.ForceFlash(TargetSelector.SelectedTarget.Position.To2D()); break; } }
private void CheckLaneClearExtra() { if (!Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.LaneClear)) { return; } if (GetTarget != null && GetTarget.Distance(me) > me.GetAutoAttackRange() && GetTarget.Distance(me) <= Spells.E.Range && Prediction.Health.GetPrediction(GetTarget, Spells.E.CastDelay + (int)(Orbwalker.AttackDelay * 1000)) > 0 && Orbwalker.CanAutoAttack && !Spells.W.IsReady() && !Spells.Hydra.IsReady() && !Spells.Tiamat.IsReady() && RivenMenu.IsEnabled("E")) { Spells.ForceE(GetTarget.Position.To2D()); } bool couldQ = Spells.Q.IsReady() && RivenMenu.IsEnabled("Q"); bool couldW = RivenMenu.IsEnabled("W") && Spells.W.IsReady(); bool couldH = RivenMenu.IsEnabled("H") && (Spells.Hydra.IsReady() || Spells.Tiamat.IsReady()); bool couldE = Spells.E.IsReady() && RivenMenu.IsEnabled("E"); if (couldW || couldH) { var minRadius = Spells.W.IsReady() ? Spells.W.Range : Spells.Hydra.Range; var location = Farming.GetBestFarmLocation(minRadius, couldE ? Spells.E.Range : 0); if (location.HasValue) { Spells.ForceE(location.Value); if (couldH) { Spells.ForceItem(); } ClearTick1 = Environment.TickCount; ClearBool1 = true; if (!couldH) /*skip to faster w usage*/ { ClearTick1 -= 250; } } } if (Environment.TickCount - ClearTick1 >= 250 && ClearBool1) { if (couldW) { Spells.ForceW(); } ClearBool1 = false; } if (Farming.CanKillMinionWithQ() && couldQ) { var min = Farming.GetQKillableMinion(); if (!me.IsInAutoAttackRange(min)) { Spells.ForceQ(min.Position.To2D()); } } //if (Farming.GetMinionsInQ() > 1) // Spells.ForceQ(); }