private void CheckWallJumpSpots() { int qStacks = me.Buffs.FirstOrDefault(b => b.Name == "RivenTriCleave")?.Count ?? 0; if (!LastLeftClickPos.IsZero && (Orbwalker.ActiveModesFlags == Orbwalker.ActiveModes.Flee || TriggerWallJumpByDoubleClick) && NearestPreMoveSpot.IsZero && NearestJumpSpot.IsZero) { var bestSpot = WallJumpData.WallJumpSpots.OrderBy(x => x.Key.Distance(LastLeftClickPos)).First(); NearestJumpSpot = bestSpot.Key; JumpSpotEnd = bestSpot.Value; float extraTurnRange = !Spells.E.IsReady() ? 150 : 0; var preMove = bestSpot.Value.Extend(bestSpot.Key, bestSpot.Key.Distance(bestSpot.Value) + extraTurnRange); NearestPreMoveSpot = preMove; WaitPrePos = true; WaitMainPos = true; } if (WaitPrePos && !NearestPreMoveSpot.IsZero && me.Distance(NearestPreMoveSpot) > 80) { if (qStacks < 2 && me.Distance(NearestPreMoveSpot) > Spells.Q.Range) { Spells.Q.Cast(me.Position); } Orbwalker.DisableMovement = true; Player.IssueOrder(GameObjectOrder.MoveTo, NearestPreMoveSpot.To3D()); } else if (WaitPrePos && !NearestPreMoveSpot.IsZero && me.Distance(NearestPreMoveSpot) <= 80) { NearestPreMoveSpot = Vector2.Zero; WaitPrePos = false; } if (!WaitPrePos && WaitMainPos && !NearestJumpSpot.IsZero && me.Distance(NearestJumpSpot) > 80) { Orbwalker.DisableMovement = true; Player.IssueOrder(GameObjectOrder.MoveTo, NearestJumpSpot.To3D()); } else if (!WaitPrePos && WaitMainPos && !NearestJumpSpot.IsZero && me.Distance(NearestJumpSpot) <= 80) { Spells.ForceE(JumpSpotEnd); Orbwalker.DisableMovement = true; WaitMainPos = false; CanQ3WallJump = true; } //if (CanQ3WallJump && qStacks == 2 && !Spells.E.IsReady()) //Chat.Print(CanQ3WallJump && qStacks == 2 && !Spells.E.IsReady()); else if (CanQ3WallJump) { if (qStacks < 2) { Spells.Q.Cast(me.Position); } else { Core.DelayAction(() => Spells.Q.Cast(me.Position), (int)(Spells.E.CastDelay + (float)Spells.E.Range / Spells.E.Speed * 1000f)); } } if (CanQ3WallJump && qStacks == 0) { Orbwalker.DisableMovement = false; LastLeftClickPos = Vector2.Zero; NearestJumpSpot = Vector2.Zero; NearestPreMoveSpot = Vector2.Zero; WaitPrePos = false; WaitMainPos = false; CanQ3WallJump = false; TriggerWallJumpByDoubleClick = false; } }
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(); }