Пример #1
0
        /// <summary>
        ///     Executes the module given a target.
        /// </summary>
        /// <param name="target">The target.</param>
        public void Execute(Obj_AI_Base target)
        {
            try
            {
                if (target is AIHeroClient)
                {
                    var targetHero = target as AIHeroClient;
                    if (targetHero.IsValidTarget())
                    {
                        //If the Harass mode is agressive and the target has 1 W Stacks + 1 for current AA then we Q for the third.
                        if (Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Harass) &&
                            targetHero.GetWBuff().Count != 1 &&
                            MenuGenerator.HarassMenu["TDVaynemixedmode"].Cast <Slider>().CurrentValue == 1)
                        {
                            return;
                        }

                        //If they are autoattacking or winding up and Harass mode is passive we AA them then Q backwards.
                        if (Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Harass) &&
                            MenuGenerator.HarassMenu["TDVaynemixedmode"].Cast <Slider>().CurrentValue == 0 &&
                            (targetHero.Spellbook.IsAutoAttacking || targetHero.Spellbook.IsAutoAttacking) &&
                            AutoAttacks.IsAutoAttack(target.LastCastedSpellName()) &&
                            target.LastCastedSpellTarget().IsValid&& target.LastCastedSpellTarget() is AIHeroClient)
                        {
                            var backwardsPosition = ObjectManager.Player.ServerPosition.Extend(target.ServerPosition,
                                                                                               -300f);
                            if (backwardsPosition.To3D().IsSafe())
                            {
                                CastTumble(backwardsPosition.To3D(), targetHero);
                            }
                            return;
                        }

                        if (MenuGenerator.QMenu["TDVaynemisctumblesmartQ"].Cast <CheckBox>().CurrentValue)
                        {
                            var position = Provider.GetTDVayneQPosition();
                            if (position != Vector3.Zero)
                            {
                                CastTumble(position, targetHero);
                            }
                        }
                        else
                        {
                            var position = ObjectManager.Player.ServerPosition.Extend(Game.CursorPos, 300f);
                            if (position.To3D().IsSafe())
                            {
                                CastTumble(position.To3D(), targetHero);
                            }
                        }
                    }
                }
            }
            catch (NullReferenceException kappa)
            {
            }
        }
Пример #2
0
        private static void Obj_AI_Base_OnPlayAnimation(Obj_AI_Base sender, GameObjectPlayAnimationEventArgs args)
        {
            if (!sender.IsMe)
            {
                return;
            }

            if (AutoAttacks.IsDashAutoAttackReset(Player.Instance, args))
            {
                LastAAReset = Core.GameTickCount;
            }
        }
Пример #3
0
 /// <summary>
 ///     Called when an unit has executed the windup time for a skill.
 /// </summary>
 /// <param name="sender">The unit.</param>
 /// <param name="args">The <see cref="GameObjectProcessSpellCastEventArgs" /> instance containing the event data.</param>
 private void OnDoCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
 {
     if (sender.IsMe && AutoAttacks.IsAutoAttack(args.SData.Name) &&
         args.Target is Obj_AI_Base)
     {
         foreach (var skill in Variables.skills)
         {
             if (skill.GetSkillMode() == SkillMode.OnAfterAA)
             {
                 if ((Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Combo) ||
                      Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.Harass)) && args.Target != null)
                 {
                     skill.Execute(args.Target as Obj_AI_Base);
                 }
                 if (Orbwalker.ActiveModesFlags.HasFlag(Orbwalker.ActiveModes.LaneClear) && args.Target != null)
                 {
                     skill.ExecuteFarm(args.Target as Obj_AI_Base);
                 }
             }
         }
     }
 }
Пример #4
0
        /// <summary>
        ///     Fired when the game processes a spell cast.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="args">The <see cref="GameObjectProcessSpellCastEventArgs" /> instance containing the event data.</param>
        private static void ObjAiBaseOnOnProcessSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
        {
            if (!sender.IsValidTarget(3000, false) || sender.Team != ObjectManager.Player.Team || sender is AIHeroClient ||
                !AutoAttacks.IsAutoAttack(args.SData.Name) || !(args.Target is Obj_AI_Base))
            {
                return;
            }

            var target = (Obj_AI_Base)args.Target;

            ActiveAttacks.Remove(sender.NetworkId);

            var attackData = new PredictedDamage(
                sender,
                target,
                Core.GameTickCount - Game.Ping / 2,
                sender.AttackCastDelay * 1000,
                sender.AttackDelay * 1000 - (sender is Obj_AI_Turret ? 70 : 0),
                sender.IsMelee ? int.MaxValue : (int)args.SData.MissileSpeed,
                sender.GetAutoAttackDamage(target, true));

            ActiveAttacks.Add(sender.NetworkId, attackData);
        }
Пример #5
0
        /// <summary>
        ///     Loads this instance.
        /// </summary>
        public override void Load()
        {
            var superParent = new SuperParent(this.DisplayName);

            var orbwalkerModule = new OrbwalkerModule();

            orbwalkerModule.Load();

            var graphGeneratorModule = new GraphGeneratorModule(null);

            var pathfinderModule = new PathfinderModule();

            var damageCalculator = new DamageCalculatorParent();

            //var ireliaP = new IreliaP();
            var ireliaQ = new IreliaQ(graphGeneratorModule, pathfinderModule);

            graphGeneratorModule.IreliaQ = ireliaQ;
            var ireliaW = new IreliaW();
            var ireliaE = new IreliaE();
            var ireliaR = new IreliaR();

            var aa = new AutoAttacks();

            damageCalculator.Add(aa);
            damageCalculator.Add(ireliaQ);
            damageCalculator.Add(ireliaW);
            damageCalculator.Add(ireliaE);
            damageCalculator.Add(ireliaR);

            graphGeneratorModule.IreliaQ = ireliaQ;

            var spellInterrupterModule =
                new SpellInterrupterModule(new SpellInterrupter(ireliaE.Spell, sender => ireliaE.CanStun(sender)));

            var dashToMouseModule = new PathfindToMouseModule(ireliaQ);

            var spellParent = new SpellParent.SpellParent();

            spellParent.Add(new List <Base> {
                ireliaQ, ireliaW, ireliaE, ireliaR,
            });
            spellParent.Load();

            var comboParent = new OrbwalkingParent(
                "Combo",
                orbwalkerModule.OrbwalkerInstance,
                Orbwalking.OrbwalkingMode.Combo);

            var laneClearParent = new OrbwalkingParent(
                "LaneClear",
                orbwalkerModule.OrbwalkerInstance,
                Orbwalking.OrbwalkingMode.LaneClear);

            var lastHitParent = new OrbwalkingParent(
                "LastHit",
                orbwalkerModule.OrbwalkerInstance,
                Orbwalking.OrbwalkingMode.LastHit,
                Orbwalking.OrbwalkingMode.Mixed,
                Orbwalking.OrbwalkingMode.LaneClear);

            var mixedParent = new OrbwalkingParent(
                "Mixed",
                orbwalkerModule.OrbwalkerInstance,
                Orbwalking.OrbwalkingMode.Mixed);

            var drawingParent = new Parent("Drawings");

            comboParent.Add(
                new List <Base>
            {
                new Q(ireliaQ, damageCalculator).Guardian(new SpellMustBeReady(SpellSlot.Q)),
                new W(ireliaW, ireliaQ).Guardian(new SpellMustBeReady(SpellSlot.W)),
                new E(ireliaE).Guardian(new SpellMustBeReady(SpellSlot.E)).Guardian(new PlayerMustNotBeWindingUp()),
                new R(ireliaR, ireliaQ, damageCalculator).Guardian(new SpellMustBeReady(SpellSlot.R))
                .Guardian(new PlayerMustNotBeWindingUp())
            });

            laneClearParent.Add(
                new List <Base>
            {
                new LaneClear.W(ireliaW).Guardian(new SpellMustBeReady(SpellSlot.W)),
                new LaneClear.E(ireliaE).Guardian(new SpellMustBeReady(SpellSlot.E))
                .Guardian(new PlayerMustNotBeWindingUp())
            });

            lastHitParent.Add(
                new List <Base>
            {
                new LastHit.Q(ireliaQ).Guardian(new SpellMustBeReady(SpellSlot.Q)),
                new LastHit.E(ireliaE).Guardian(new SpellMustBeReady(SpellSlot.E))
                .Guardian(new PlayerMustNotBeWindingUp())
            });

            mixedParent.Add(
                new List <Base>
            {
                new Q(ireliaQ, damageCalculator).Guardian(new SpellMustBeReady(SpellSlot.Q)),
                new W(ireliaW, ireliaQ).Guardian(new SpellMustBeReady(SpellSlot.W)),
                new Mixed.E(ireliaE).Guardian(new SpellMustBeReady(SpellSlot.E))
                .Guardian(new PlayerMustNotBeWindingUp())
            });

            var module = new DamageDrawingParent("Damage Drawings");

            const byte defaultAlpha = 50 * 255 / 100;

            module.Add(
                new List <IDamageDrawing>
            {
                new DamageDrawingChild("Auto-Attacks", aa.GetDamage)
                {
                    Color = new Color(40, 175, 175)
                    {
                        A = defaultAlpha
                    },
                },
                new DamageDrawingChild("Q", ireliaQ.GetDamage)
                {
                    Color = new Color(25, 100, 125)
                    {
                        A = defaultAlpha
                    }
                },
                new DamageDrawingChild("W", ireliaW.GetDamage)
                {
                    Color = new Color(40, 175, 175)
                    {
                        A = defaultAlpha
                    }
                },
                new DamageDrawingChild("E", ireliaE.GetDamage)
                {
                    Color = new Color(255, 210, 95)
                    {
                        A = defaultAlpha
                    }
                },
                new DamageDrawingChild("R", ireliaR.GetDamage)
                {
                    Color = new Color(240, 150, 75)
                    {
                        A = defaultAlpha
                    }
                }
            });

            var spellRangeParent = new Parent("Ranges");

            spellRangeParent.Add(
                new List <Base>
            {
                new RangeDrawingChild(ireliaQ.Spell, "Q"),
                new RangeDrawingChild(ireliaE.Spell, "E"),
                new RangeDrawingChild(ireliaR.Spell, "R", true),
            });

            drawingParent.Add(new List <Base> {
                spellRangeParent, module
            });

            superParent.Add(
                new List <Base>
            {
                orbwalkerModule,
                spellParent,
                damageCalculator,
                pathfinderModule,
                graphGeneratorModule,
                comboParent,
                laneClearParent,
                lastHitParent,
                mixedParent,
                dashToMouseModule,
                spellInterrupterModule,
                drawingParent
            });

            superParent.Load();

            superParent.Menu.Style = FontStyle.Bold;
            superParent.Menu.Color = Color.Firebrick;
        }
Пример #6
0
 /// <summary>
 ///     Returns the last GameTickCount for the Attack.
 /// </summary>
 public static float?LastPlayerAttack(this Obj_AI_Base target)
 {
     return(AutoAttacks.FirstOrDefault(a => a.Attacker.NetworkId.Equals(target.NetworkId) && 300 + (a.Attacker.AttackCastDelay * 1000) + (a.Attacker.AttackDelay * 1000) > Core.GameTickCount - a.LastAttackTick)?.LastAttackTick);
 }
Пример #7
0
 /// <summary>
 ///     Returns True if the target is attacking a player.
 /// </summary>
 public static bool IsAttackPlayer(this Obj_AI_Base target)
 {
     return(AutoAttacks.FirstOrDefault(a => a.Attacker.NetworkId.Equals(target.NetworkId) && 500 + (a.Attacker.AttackCastDelay * 1000) + (a.Attacker.AttackDelay * 1000) > Core.GameTickCount - a.LastAttackTick) != null);
 }