コード例 #1
0
ファイル: Riven.cs プロジェクト: tekintr/Elobuddy
        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;
            }
        }
コード例 #2
0
ファイル: Riven.cs プロジェクト: tekintr/Elobuddy
        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;
            }
        }
コード例 #3
0
ファイル: Riven.cs プロジェクト: tekintr/Elobuddy
        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();
        }