示例#1
0
        public override async Task ExecuteAsync(CancellationToken token)
        {
            try
            {
                var sliderValue = this.Config.UseBlinkPrediction.Item.GetValue <Slider>().Value;

                if (Config.TargetItem.Value.SelectedValue.Contains("Lock") && Context.TargetSelector.IsActive &&
                    (!CanExecute || EnemyHero == null || !EnemyHero.IsValid || !EnemyHero.IsAlive))
                {
                    EnemyHero = Context.TargetSelector.Active.GetTargets().FirstOrDefault() as Hero;
                }
                else if (Config.TargetItem.Value.SelectedValue.Contains("Default") && Context.TargetSelector.IsActive)
                {
                    EnemyHero = Context.TargetSelector.Active.GetTargets().FirstOrDefault() as Hero;
                }

                var Silenced = UnitExtensions.IsSilenced(base.Owner);

                if (EnemyHero != null)
                {
                    if (this.BlinkDagger != null &&
                        (this.BlinkDagger.CanBeCasted &&
                         base.Owner.Distance2D(EnemyHero) <= 1200 + sliderValue &&
                         !(base.Owner.Distance2D(EnemyHero) <= 400) &&
                         this.Config.ItemToggler.Value.IsEnabled(this.BlinkDagger.Item.Name)))
                    {
                        var l        = (this.Owner.Distance2D(EnemyHero) - sliderValue) / sliderValue;
                        var posA     = this.Owner.Position;
                        var posB     = EnemyHero.Position;
                        var x        = (posA.X + (l * posB.X)) / (1 + l);
                        var y        = (posA.Y + (l * posB.Y)) / (1 + l);
                        var position = new Vector3((int)x, (int)y, posA.Z);

                        this.BlinkDagger.UseAbility(position);
                        await Await.Delay(BlinkDagger.GetCastDelay(position), token);
                    }

                    if (!Silenced)
                    {
                        if (this.Config.AbilityToggler.Value.IsEnabled(this.Blast.Name) && this.Blast.CanBeCasted() && this.Blast.CanHit(EnemyHero))
                        {
                            this.Blast.UseAbility(EnemyHero);
                            await Await.Delay(this.GetAbilityDelay(base.Owner, Blast), token);
                        }
                    }

                    if (this.Basher != null &&
                        base.Owner.IsAttacking() &&
                        this.Basher.CanBeCasted &&
                        this.Basher.CanHit(EnemyHero) &&
                        this.Config.ItemToggler.Value.IsEnabled(Basher.ToString()))
                    {
                        this.Basher.UseAbility(EnemyHero);
                        await Await.Delay(Basher.GetCastDelay(EnemyHero), token);
                    }

                    if (this.Mjollnir != null &&
                        base.Owner.IsAttacking() &&
                        this.Mjollnir.CanBeCasted &&
                        this.Config.ItemToggler.Value.IsEnabled(Mjollnir.ToString()))
                    {
                        this.Mjollnir.UseAbility(base.Owner);
                        await Await.Delay(Mjollnir.GetCastDelay(Owner), token);
                    }

                    if (!UnitExtensions.IsMagicImmune(EnemyHero) &&
                        !EnemyHero.IsInvulnerable() &&
                        !UnitExtensions.HasModifier(EnemyHero, "modifier_winter_wyvern_winters_curse"))
                    {
                        if (this.BloodThorn != null &&
                            this.BloodThorn.CanBeCasted &&
                            this.BloodThorn.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled(this.BloodThorn.ToString()))
                        {
                            this.BloodThorn.UseAbility(EnemyHero);
                            await Await.Delay(BloodThorn.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Medalion1 != null &&
                            this.Medalion1.CanBeCasted &&
                            this.Medalion1.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled(this.Medalion1.ToString()))
                        {
                            this.Medalion1.UseAbility(EnemyHero);
                            await Await.Delay(Medalion1.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Medallion2 != null &&
                            this.Medallion2.CanBeCasted &&
                            this.Medallion2.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled(this.Medallion2.ToString()))
                        {
                            this.Medallion2.UseAbility(EnemyHero);
                            await Await.Delay(Medallion2.GetCastDelay(EnemyHero), token);
                        }



                        if (this.DiffBlade != null &&
                            this.DiffBlade.CanBeCasted &&
                            this.DiffBlade.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled("item_diffusal_blade_2"))
                        {
                            this.DiffBlade.UseAbility(EnemyHero);
                            await Await.Delay(DiffBlade.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Orchid != null &&
                            this.Orchid.CanBeCasted &&
                            this.Orchid.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled(Orchid.ToString()))
                        {
                            this.Orchid.UseAbility(EnemyHero);
                            await Await.Delay(Orchid.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Heaven != null &&
                            base.Owner.IsAttacking() &&
                            this.Heaven.CanBeCasted &&
                            this.Heaven.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled(Heaven.ToString()))
                        {
                            this.Heaven.UseAbility(EnemyHero);
                            await Await.Delay(Heaven.GetCastDelay(EnemyHero), token);
                        }
                    }

                    if (EnemyHero != null && (EnemyHero.IsInvulnerable() || UnitExtensions.IsAttackImmune(EnemyHero)))
                    {
                        Orbwalker.Move(Game.MousePosition);
                    }
                    else if (EnemyHero != null)
                    {
                        Orbwalker.OrbwalkTo(EnemyHero);
                    }
                }
                else
                {
                    Orbwalker.Move(Game.MousePosition);
                }
            }
            catch (TaskCanceledException)
            {
                // canceled
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
示例#2
0
        public override async Task ExecuteAsync(CancellationToken token)
        {
            var e = TargetSelector.Active.GetTargets()
                    .FirstOrDefault(x => !x.IsInvulnerable() && x.IsAlive);

            if (e == null)
            {
                return;
            }
            var debuff = e.FindModifier("modifier_storm_spirit_electric_vortex_pull") ?? e.FindModifier("modifier_sheepstick_debuff") ?? e.FindModifier("modifier_rod_of_atos_debuff");


            var buff = e.HasModifiers(new[]
            {
                "modifier_storm_spirit_electric_vortex_pull",
                "modifier_sheepstick_debuff",
                "modifier_rod_of_atos_debuff"
            }, false) || ExUnit.IsStunned(e) || ExUnit.IsHexed(e) || ExUnit.IsRooted(e);
            var checkTimeModif = debuff?.RemainingTime <= 0.3;

            var inUltBall = ExUnit.HasModifier(me, "modifier_storm_spirit_ball_lightning") ||
                            R.IsInAbilityPhase;
            var inOverload = ExUnit.HasModifier(me, "modifier_storm_spirit_overload");
            var lotusBuff  = ExUnit.HasModifier(e, "modifier_item_lotus_orb_active");
            var inVortex   = ExUnit.HasModifier(e, "modifier_storm_spirit_electric_vortex_pull");

            var travelSpeed   = R.GetAbilityData("ball_lightning_move_speed", R.Level);
            var distance      = me.Distance2D(e);
            var travelTime    = distance / travelSpeed;
            var startManaCost = R.GetAbilityData("ball_lightning_initial_mana_base") +
                                me.MaximumMana / 100 * R.GetAbilityData("ball_lightning_initial_mana_percentage");
            var costPerUnit = (12 + me.MaximumMana * 0.007) / 100.0;
            var rManacost   = startManaCost + costPerUnit * Math.Floor(distance / 100) * 100;
            var dagon       = me.GetDagon();
            var enemies     = EntityManager <Hero> .Entities.Count(
                x => x.IsValid && x.IsAlive && !x.IsIllusion && x.Team != me.Team && x.Distance2D(me) <= 700) >= Config.Heel.Item.GetValue <Slider>().Value;

            if (!lotusBuff)
            {
                if (
                    // cheese
                    cheese != null &&
                    cheese.Item.IsValid &&
                    cheese.Item.CanBeCasted() &&
                    (me.Health <= me.MaximumHealth * 0.3 ||
                     me.Mana <= me.MaximumMana * 0.2) &&
                    distance <= 700 &&
                    Config.ItemToggler.Value.IsEnabled(cheese.Item.Name)
                    )
                {
                    cheese.UseAbility();
                    await Await.Delay(GetItemDelay(e), token);
                }
                if ( // SoulRing Item
                    soul != null &&
                    soul.Item.IsValid &&
                    soul.Item.CanBeCasted() &&
                    Config.ItemToggler.Value.IsEnabled(soul.Item.Name) &&
                    me.CanCast() &&
                    me.Health >= me.MaximumHealth * 0.4 &&
                    me.Mana <= me.MaximumMana * 0.4
                    )
                {
                    soul.UseAbility();
                    await Await.Delay(GetItemDelay(e), token);
                }
                if ( // Arcane Boots Item
                    arcane != null &&
                    arcane.Item.IsValid &&
                    arcane.Item.CanBeCasted() &&
                    Config.ItemToggler.Value.IsEnabled(arcane.Item.Name) &&
                    me.CanCast() &&
                    me.Mana <= me.MaximumMana * 0.4
                    )
                {
                    arcane.UseAbility();
                    await Await.Delay(GetItemDelay(e), token);
                }

                uint elsecount = 0;
                elsecount += 1;
                if (elsecount == 1 &&
                    R != null &&
                    R.CanBeCasted() &&
                    !me.IsAttacking() &&
                    !R.IsChanneling &&
                    !R.IsInAbilityPhase &&
                    me.Mana >= rManacost &&
                    !inUltBall &&
                    distance >= me.GetAttackRange() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.AbilityToggler.Value.IsEnabled(R.Name)
                    )
                {
                    if (e.NetworkActivity == NetworkActivity.Move)
                    {
                        R.CastSkillShot(e);
                    }
                    else
                    {
                        R.UseAbility(e.Position);
                    }
                    await Await.Delay(GetAbilityDelay(me, R) + (int)Math.Floor(travelTime * 1000), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (vail != null &&
                    vail.Item.IsValid &&
                    vail.Item.CanBeCasted() &&
                    Config.ItemToggler.Value.IsEnabled(vail.Item.Name) &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e)
                    )
                {
                    vail.UseAbility(e.Position);
                    await Await.Delay(GetItemDelay(e), token);
                }
                if (orchid != null &&
                    orchid.Item.IsValid &&
                    orchid.Item.CanBeCasted() &&
                    (Config.silenceToHex.Value || !ExUnit.IsHexed(e)) &&
                    (Config.silenceToVortex.Value || !inVortex)

                    && me.CanCast() &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled("item_bloodthorn")
                    )
                {
                    orchid.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }
                if (nullifier != null &&
                    nullifier.Item.IsValid &&
                    nullifier.Item.CanBeCasted() &&
                    me.CanCast() &&
                    !ExUnit.IsHexed(e) &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(nullifier.Item.Name)
                    )
                {
                    nullifier.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }

                if (bloodthorn != null &&
                    bloodthorn.Item.IsValid &&
                    bloodthorn.Item.CanBeCasted() &&
                    (Config.silenceToVortex.Value || !inVortex) &&
                    (Config.silenceToHex.Value || !ExUnit.IsHexed(e)) &&
                    me.CanCast() &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled("item_bloodthorn")
                    )
                {
                    bloodthorn.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }
                if (elsecount == 2 &&
                    sheep != null &&
                    sheep.Item.IsValid &&
                    sheep.Item.CanBeCasted() &&
                    me.CanCast() &&
                    (checkTimeModif || !buff) &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    (Config.hexToSilence.Value || !ExUnit.IsSilenced(e)) &&
                    e.ClassId != ClassId.CDOTA_Unit_Hero_Tidehunter &&
                    Config.ItemToggler.Value.IsEnabled(sheep.Item.Name)
                    )
                {
                    sheep.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 3 &&
                    Q != null &&
                    Q.CanBeCasted() &&
                    Config.AbilityToggler.Value.IsEnabled(Q.Name) &&
                    !ExUnit.IsMagicImmune(e) &&
                    me.CanCast() &&
                    !R.IsInAbilityPhase &&
                    (W == null || !W.CanBeCasted() || !Config.AbilityToggler.Value.IsEnabled(W.Name) || ExUnit.IsSilenced(e) || ExUnit.IsHexed(e)) &&
                    (!inOverload || inOverload && ExUnit.IsAttackImmune(e)) &&
                    distance <= Q.GetAbilityData("static_remnant_radius") + me.HullRadius
                    )
                {
                    Q.UseAbility();
                    await Await.Delay(GetAbilityDelay(me, Q) + 100, token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 4 &&
                    W != null &&
                    W.CanBeCasted() &&
                    (Config.fastVortex.Value || !R.IsInAbilityPhase && !inOverload) &&
                    (checkTimeModif || !buff) &&
                    (Config.vortexToSilence.Value || !ExUnit.IsSilenced(e)) &&
                    !me.IsAttacking() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.AbilityToggler.Value.IsEnabled(W.Name)
                    )
                {
                    W.UseAbility(e);
                    await Await.Delay(GetAbilityDelay(me, W) + 50, token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 5 &&
                    ExUnit.CanAttack(me) &&
                    !me.IsAttacking() &&
                    !ExUnit.HasModifier(e, "modifier_item_ethereal_blade_slow") &&
                    inOverload &&
                    !ExUnit.IsAttackImmune(e) &&
                    distance <= me.GetAttackRange() &&
                    !ExUnit.IsAttackImmune(e)
                    )
                {
                    me.Attack(e);
                    await Await.Delay(170, token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 6 &&
                    W != null &&
                    W.CanBeCasted() &&
                    (Config.fastVortex.Value || !inOverload) &&
                    me.AghanimState() &&
                    (checkTimeModif || !buff) &&
                    !me.IsAttacking() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.AbilityToggler.Value.IsEnabled(W.Name)
                    )
                {
                    W.UseAbility();
                    await Await.Delay(GetAbilityDelay(me, W), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 7 &&
                    atos != null &&
                    atos.Item.IsValid &&
                    atos.Item.CanBeCasted() &&
                    me.CanCast() &&
                    (checkTimeModif || !buff || !ExUnit.IsHexed(e)) &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(atos.Item.Name)
                    )
                {
                    atos.UseAbility(e);
                    await Await.Delay(GetItemDelay(e) + 100, token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 8 &&
                    ethereal != null &&
                    ethereal.Item.IsValid &&
                    ethereal.Item.CanBeCasted() &&
                    me.CanCast() &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(ethereal.Item.Name)
                    )
                {
                    if (Config.debuff.Value)
                    {
                        var speed = ethereal.Item.GetAbilityData("projectile_speed");
                        var time  = e.Distance2D(me) / speed;
                        ethereal.UseAbility(e);
                        await Await.Delay((int)(time * 1000.0f + Game.Ping) + 30, token);
                    }
                    else
                    {
                        ethereal.UseAbility(e);
                        await Await.Delay(GetItemDelay(e), token);
                    }
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 9 &&
                    dagon != null &&
                    dagon.IsValid &&
                    dagon.CanBeCasted() &&
                    Config.ItemToggler.Value.IsEnabled("item_dagon_5") &&
                    me.CanCast() &&
                    (ethereal == null ||
                     ExUnit.HasModifier(e, "modifier_item_ethereal_blade_slow") ||
                     ethereal.Item.Cooldown < 17) &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e)
                    )
                {
                    dagon.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 10 &&
                    urn != null &&
                    urn.Item.IsValid && urn.Item.CanBeCasted() && urn.Item.CurrentCharges > 0 &&
                    distance <= urn.Item.GetCastRange() &&
                    Config.ItemToggler.Value.IsEnabled(urn.Item.Name)
                    )
                {
                    urn.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 11 &&
                    bkb != null &&
                    bkb.Item.IsValid &&
                    bkb.Item.CanBeCasted() &&
                    enemies &&
                    Config.ItemToggler.Value.IsEnabled(bkb.Item.Name)
                    )
                {
                    bkb.UseAbility();
                    await Await.Delay(GetItemDelay(me), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 12 &&
                    lotus != null &&
                    lotus.Item.IsValid &&
                    lotus.Item.CanBeCasted() &&
                    enemies &&
                    Config.ItemToggler.Value.IsEnabled(lotus.Item.Name)
                    )
                {
                    lotus.UseAbility(me);
                    await Await.Delay(GetItemDelay(me), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 13 &&
                    shiva != null &&
                    shiva.Item.IsValid &&
                    shiva.Item.CanBeCasted() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(shiva.Item.Name) &&
                    distance <= 600
                    )
                {
                    shiva.UseAbility();
                    await Await.Delay(GetItemDelay(me), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 14 &&
                    mjollnir != null &&
                    mjollnir.Item.IsValid &&
                    mjollnir.Item.CanBeCasted() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(mjollnir.Item.Name) &&
                    me.Distance2D(e) <= 600
                    )
                {
                    mjollnir.UseAbility(me);
                    await Await.Delay(GetItemDelay(me), token);
                }
            }
            else
            {
                if (Q != null &&
                    Q.CanBeCasted() &&
                    !inOverload &&
                    (W == null || !W.CanBeCasted() || !Config.AbilityToggler.Value.IsEnabled(W.Name)) &&
                    distance <= Q.GetAbilityData("static_remnant_radius") + me.HullRadius &&
                    Config.AbilityToggler.Value.IsEnabled(Q.Name) &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e)
                    )
                {
                    Q.UseAbility();
                    await Await.Delay(GetAbilityDelay(me, Q) + 200, token);
                }

                if (shiva != null &&
                    shiva.Item.IsValid &&
                    shiva.Item.CanBeCasted() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(shiva.Item.Name) &&
                    distance <= 600
                    )
                {
                    shiva.UseAbility();
                    await Await.Delay(GetItemDelay(me), token);
                }
                if (W != null &&
                    W.CanBeCasted() &&
                    !inOverload &&
                    me.AghanimState() &&
                    (checkTimeModif || !buff) &&
                    !me.IsAttacking() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.AbilityToggler.Value.IsEnabled(W.Name)
                    )
                {
                    W.UseAbility();
                    await Await.Delay(GetAbilityDelay(me, W), token);
                }
            }
            Vector3 start = e.NetworkActivity == NetworkActivity.Move ? new Vector3((float)((R.GetCastDelay(me, me, true) + 0.3) * Math.Cos(e.RotationRad) * e.MovementSpeed + e.Position.X),
                                                                                    (float)((R.GetCastDelay(me, me, true) + 0.3) * Math.Sin(e.RotationRad) * e.MovementSpeed + e.NetworkPosition.Y), e.NetworkPosition.Z) : e.NetworkPosition;

            if (R != null &&
                R.CanBeCasted() &&
                !inUltBall &&
                Q.Cooldown <= 3 &&
                !R.IsInAbilityPhase &&
                !R.IsChanneling &&
                !me.IsAttacking() &&
                (W == null || !W.CanBeCasted() || !Config.AbilityToggler.Value.IsEnabled(W.Name)) &&
                !ExUnit.IsChanneling(me) &&
                (Config.AutoOverload.Value &&
                 buff ||
                 !buff) &&
                me.Position.Distance2D(start) <= me.GetAttackRange() &&
                !ExUnit.IsMagicImmune(e) &&
                (Config.savemanamode.Value &&
                 me.AttackBackswing() > 0.3 - me.TurnTime(e.NetworkPosition) &&
                 !cooldown ||
                 !Config.savemanamode.Value) &&
                Config.AbilityToggler.Value.IsEnabled(R.Name)
                )
            {
                float   angle = e.FindAngleBetween(me.Position, true);
                Vector3 pos   = new Vector3((float)(me.Position.X - 15 * Math.Cos(angle)),
                                            (float)(me.Position.Y - 15 * Math.Sin(angle)), me.Position.Z);
                if (!inOverload)
                {
                    R.UseAbility(pos);
                    await Await.Delay(GetAbilityDelay(me, R) + 100, token);
                }
            }
            if (!ExUnit.IsAttackImmune(e) && !ExUnit.IsDisarmed(me) && !ExUnit.HasModifier(e, "modifier_item_ethereal_blade_slow"))
            {
                float   angle = e.FindAngleBetween(me.Position, true);
                Vector3 pos   = new Vector3((float)(me.Position.X + 300 * Math.Cos(angle)),
                                            (float)(me.Position.Y + 300 * Math.Sin(angle)), me.Position.Z);
                if (me.Distance2D(e) <= 250 && e.GetTurnTime(me) * 1000 < 35 && cooldown && !me.IsAttacking())
                {
                    me.Move(pos);
                    await Await.Delay((int)(me.SecondsPerAttack * 100), token);
                }
                if (me.Distance2D(e) <= 250 && !cooldown && !me.IsAttacking() && ExUnit.CanAttack(me))
                {
                    me.Attack(e);
                    await Await.Delay((int)(me.SecondsPerAttack * 100), token);
                }
                if (me.Distance2D(e) >= 250 && !cooldown && ExUnit.CanAttack(me))
                {
                    if (Orbwalker.OrbwalkTo(e))
                    {
                        return;
                    }
                }
            }
            await Await.Delay(10, token);
        }
示例#3
0
        public override async Task ExecuteAsync(CancellationToken token)
        {
            if (TargetSelector.IsActive)
            {
                this.Target     = this.TargetSelector.Active.GetTargets().FirstOrDefault(x => !x.IsInvulnerable());
                this.AllTargets = this.TargetSelector.Active.GetTargets().FirstOrDefault();
            }

            var silenced = UnitExtensions.IsSilenced(this.Owner);

            var sliderValue = this.Config.UseBlinkPrediction.Item.GetValue <Slider>().Value;

            var myHpThreshold = this.Config.SelfHPDrain.Item.GetValue <Slider>().Value;

            var postDrainHp = this.Config.PostDrainHP.Item.GetValue <Slider>().Value;

            var allyPostDrain = this.Config.HealAllyTo.Item.GetValue <Slider>().Value;

            var healThreshold = this.Config.DrainHP.Item.GetValue <Slider>().Value;

            var wardTars = this.Config.WardTargets.Item.GetValue <Slider>().Value;

            //warnings
            if (myHpThreshold < postDrainHp && this.Config.AbilityToggler.Value.IsEnabled(this.Drain.Name))
            {
                Log.Debug(
                    "Post drain hp is higher than your hp threshold to begin healing, please change this or the script won't work.");
                return;
            }

            if (healThreshold > allyPostDrain && this.Config.AbilityToggler.Value.IsEnabled(this.Drain.Name))
            {
                Log.Debug("Your ally's post heal threshold is lower than their heal threshold, please fix this.");
                return;
            }

            if (!silenced)
            {
                try
                {
                    var tempHealTarget =
                        EntityManager <Hero> .Entities.FirstOrDefault(
                            x =>
                            x.IsAlive && x.Team == this.Owner.Team && x != Owner && !x.IsIllusion &&
                            ((float)x.Health / (float)x.MaximumHealth) * 100 < healThreshold &&
                            !UnitExtensions.IsMagicImmune(x));

                    float myHealth = (float)Owner.Health / (float)Owner.MaximumHealth * 100;

                    if (tempHealTarget != null)
                    {
                        HealTarget = tempHealTarget;
                    }

                    if (HealTarget != null)
                    {
                        if (HealTarget != null && this.Config.AbilityToggler.Value.IsEnabled(this.Drain.Name) &&
                            !UnitExtensions.IsChanneling(Owner) && myHealth >= myHpThreshold &&
                            HealTarget.HealthPercent() * 100 < healThreshold)
                        {
                            this.Drain.UseAbility(HealTarget);
                            IsHealing = true;
                            await Await.Delay(GetAbilityDelay(HealTarget, Drain), token);
                        }

                        //Stop Healing; There is no hidden modifier/any way to check if we are healing a target.
                        if ((UnitExtensions.IsChanneling(Owner) && myHealth <= postDrainHp) && IsHealing)
                        {
                            Owner.Stop();
                            IsHealing = false;
                        }

                        if (HealTarget != null && IsHealing &&
                            (HealTarget.HealthPercent() >= ((float)allyPostDrain / 100)))
                        {
                            Owner.Stop();
                            IsHealing = false;
                        }

                        if (HealTarget == null && IsHealing)
                        {
                            Owner.Stop();
                            IsHealing = false;
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.Debug($"{e}");
                }
            }


            if ((this.BlinkDagger != null) &&
                (this.BlinkDagger.Item.IsValid) &&
                this.Target != null && Owner.Distance2D(this.Target) <= 1200 + sliderValue && !(Owner.Distance2D(this.Target) <= 400) &&
                this.BlinkDagger.Item.CanBeCasted(this.Target) &&
                this.Config.ItemToggler.Value.IsEnabled(this.BlinkDagger.Item.Name) &&
                !UnitExtensions.IsChanneling(Owner))
            {
                var l        = (this.Owner.Distance2D(this.Target) - sliderValue) / sliderValue;
                var posA     = this.Owner.Position;
                var posB     = this.Target.Position;
                var x        = (posA.X + (l * posB.X)) / (1 + l);
                var y        = (posA.Y + (l * posB.Y)) / (1 + l);
                var position = new Vector3((int)x, (int)y, posA.Z);

                Log.Debug("Using BlinkDagger");
                this.BlinkDagger.UseAbility(position);
                await Await.Delay(this.GetItemDelay(this.Target) + (int)Game.Ping, token);
            }


            if (!silenced && this.Target != null)
            {
                var targets =
                    EntityManager <Hero> .Entities.Where(
                        x =>
                        x.IsValid && x.Team != this.Owner.Team && !x.IsIllusion &&
                        !UnitExtensions.IsMagicImmune(x) &&
                        x.Distance2D(this.Owner) <= Ward.GetAbilityData("radius"))
                    .ToList();

                if (targets.Count >= wardTars &&
                    this.Ward.CanBeCasted() &&
                    this.Config.AbilityToggler.Value.IsEnabled(this.Ward.Name))
                {
                    Ward.UseAbility(Owner.NetworkPosition);
                    await Await.Delay(GetAbilityDelay(Owner, Ward), token);
                }

                // var thresholdTars = this.Config.WardTargets.Item.GetValue<Slider>();
                var manaDecrepify = Decrepify.GetManaCost(Decrepify.Level - 1);
                var manaBlast     = Blast.GetManaCost(Blast.Level - 1);
                // var manaDrain = Drain.GetManaCost(Drain.Level - 1);

                if (this.Target != null)
                {
                    try
                    {
                        if (Decrepify.CanBeCasted() && Decrepify.CanHit(this.Target) &&
                            this.Config.AbilityToggler.Value.IsEnabled(this.Decrepify.Name) &&
                            this.Owner.Mana >= manaBlast + manaDecrepify &&
                            !UnitExtensions.IsChanneling(Owner) &&
                            this.Target.IsAlive && this.Target != null)
                        {
                            this.Decrepify.UseAbility(this.Target);
                            await Await.Delay(GetAbilityDelay(this.Target, Decrepify), token);
                        }

                        if (this.Blast.CanBeCasted() &&
                            this.Config.AbilityToggler.Value.IsEnabled(this.Blast.Name) &&
                            (!this.Decrepify.CanBeCasted() || manaBlast > Owner.Mana - manaDecrepify) &&
                            !UnitExtensions.IsChanneling(Owner) &&
                            this.Target.IsAlive && this.Target != null)
                        {
                            var delay        = Blast.GetAbilityData("delay") * 1000;
                            var blastTargets =
                                EntityManager <Hero> .Entities.OrderBy(x => x == this.AllTargets).Where(
                                    x =>
                                    x.IsValid && x.IsVisible && x.Team != Owner.Team && !x.IsIllusion &&
                                    !UnitExtensions.IsMagicImmune(x)).ToList();

                            if (blastTargets == null)
                            {
                                return;
                            }
                            var input =
                                new PredictionInput(
                                    Owner,
                                    this.Target,
                                    delay,
                                    float.MaxValue,
                                    620,
                                    400,
                                    PredictionSkillshotType.SkillshotCircle,
                                    true,
                                    blastTargets)
                            {
                                CollisionTypes = CollisionTypes.None
                            };

                            var output = Prediction.GetPrediction(input);

                            if (output.HitChance >= HitChance.Medium)
                            {
                                this.Blast.UseAbility(output.CastPosition);
                                await Await.Delay(GetAbilityDelay(this.Target, this.Blast), token);
                            }
                        }

                        if (this.Drain.CanBeCasted() &&
                            !this.Blast.CanBeCasted() && !this.Decrepify.CanBeCasted() &&
                            this.Config.AbilityToggler.Value.IsEnabled(this.Drain.Name) &&
                            !UnitExtensions.IsChanneling(Owner) &&
                            this.Target.IsAlive && this.Target != null)
                        {
                            this.Drain.UseAbility(this.Target);
                            await Await.Delay(GetAbilityDelay(this.Target, Drain), token);
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Debug($"{e}");
                    }
                }
            }

            if (this.BloodThorn != null &&
                this.BloodThorn.Item.IsValid &&
                this.Target != null &&
                this.BloodThorn.Item.CanBeCasted(this.Target) &&
                this.Config.ItemToggler.Value.IsEnabled(this.BloodThorn.Item.Name))
            {
                Log.Debug("Using Bloodthorn");
                this.BloodThorn.UseAbility(this.Target);
                await Await.Delay(this.GetItemDelay(this.Target), token);
            }

            if ((this.SheepStick != null) &&
                (this.SheepStick.Item.IsValid) &&
                this.Target != null &&
                this.SheepStick.Item.CanBeCasted(this.Target) &&
                this.Config.ItemToggler.Value.IsEnabled("item_sheepstick"))
            {
                Log.Debug("Using Sheepstick");
                this.SheepStick.UseAbility(this.Target);
                await Await.Delay(this.GetItemDelay(this.Target), token);
            }

            if (this.Dagon != null &&
                this.Dagon.Item.IsValid &&
                this.Target != null &&
                this.Dagon.Item.CanBeCasted(this.Target) &&
                this.Config.ItemToggler.Value.IsEnabled(Dagon5.Item.Name))
            {
                Log.Debug("Using Dagon");
                this.Dagon.UseAbility(this.Target);
                await Await.Delay(this.GetItemDelay(this.Target), token);
            }

            if (this.Orchid != null &&
                this.Orchid.Item.IsValid &&
                this.Target != null &&
                this.Orchid.Item.CanBeCasted(this.Target) &&
                this.Config.ItemToggler.Value.IsEnabled("item_orchid"))
            {
                Log.Debug("Using Orchid");
                this.Orchid.UseAbility(this.Target);
                await Await.Delay(this.GetItemDelay(this.Target), token);
            }

            if (this.RodofAtos != null &&
                this.RodofAtos.Item.IsValid &&
                this.Target != null &&
                this.RodofAtos.Item.CanBeCasted(this.Target) &&
                this.Config.ItemToggler.Value.IsEnabled("item_rod_of_atos"))
            {
                Log.Debug("Using RodofAtos");
                this.RodofAtos.UseAbility(this.Target);
                await Await.Delay(this.GetItemDelay(this.Target), token);
            }

            if (this.VeilofDiscord != null &&
                this.VeilofDiscord.Item.IsValid &&
                this.Target != null &&
                this.VeilofDiscord.Item.CanBeCasted() &&
                this.Config.ItemToggler.Value.IsEnabled("item_veil_of_discord"))
            {
                Log.Debug("Using VeilofDiscord");
                this.VeilofDiscord.UseAbility(this.Target.Position);
                await Await.Delay(this.GetItemDelay(this.Target), token);
            }

            if (this.HurricanePike != null &&
                this.HurricanePike.Item.IsValid &&
                this.Target != null &&
                this.HurricanePike.Item.CanBeCasted() &&
                this.Config.ItemToggler.Value.IsEnabled("item_hurricane_pike"))
            {
                Log.Debug("Using HurricanePike");
                this.HurricanePike.UseAbility(this.Target);
                await Await.Delay(this.GetItemDelay(this.Target), token);
            }

            if (this.ShivasGuard != null &&
                this.ShivasGuard.Item.IsValid &&
                this.Target != null &&
                this.ShivasGuard.Item.CanBeCasted() &&
                Owner.Distance2D(this.Target) <= 900 &&
                this.Config.ItemToggler.Value.IsEnabled("item_shivas_guard"))
            {
                Log.Debug("Using Shiva's Guard");
                this.ShivasGuard.UseAbility();
                await Await.Delay((int)Game.Ping, token);
            }

            if (this.Mjollnir != null &&
                this.Mjollnir.Item.IsValid &&
                this.Target != null &&
                this.Mjollnir.Item.CanBeCasted() &&
                this.Config.ItemToggler.Value.IsEnabled("item_mjollnir"))
            {
                Log.Debug("Using Mjollnir");
                this.Mjollnir.UseAbility(Owner);
                await Await.Delay(this.GetItemDelay(this.Target), token);
            }

            if (UnitExtensions.IsAttackImmune(this.Target) || this.Target.IsInvulnerable())
            {
                return;
            }

            if (this.Orbwalker.OrbwalkTo(this.Target))
            {
                return;
            }

            await Await.Delay(50, token);
        }
示例#4
0
        public override async Task ExecuteAsync(CancellationToken token)
        {
            try
            {
                if (Config.Target.Value.SelectedValue.Contains("Lock") && Context.TargetSelector.IsActive &&
                    (!CanExecute || EnemyHero == null || !EnemyHero.IsValid || !EnemyHero.IsAlive))
                {
                    EnemyHero = Context.TargetSelector.Active.GetTargets().FirstOrDefault() as Hero;
                }
                else if (Config.Target.Value.SelectedValue.Contains("Default") && Context.TargetSelector.IsActive)
                {
                    EnemyHero = Context.TargetSelector.Active.GetTargets().FirstOrDefault() as Hero;
                }

                var Silenced   = UnitExtensions.IsSilenced(base.Owner);
                var SliderData = this.Config.UseBlink.Item.GetValue <Slider>().Value;
                var IsInvis    = Ensage.SDK.Extensions.UnitExtensions.IsInvisible(this.Owner);


                var WAbiCasted = Ensage.SDK.Extensions.UnitExtensions.HasModifier(Owner, "modifier_dark_willow_shadow_realm_buff");



                var QAbiTargets = EntityManager <Hero> .Entities.OrderBy(x => x == EnemyHero).Where(x => x.IsValid && x.IsVisible && x.Team != Owner.Team && !x.IsIllusion && !UnitExtensions.IsMagicImmune(x)).ToList();

                if (EnemyHero != null && !EnemyHero.IsInvulnerable() && !UnitExtensions.IsMagicImmune(EnemyHero))
                {
                    if (this.QAbi.CanBeCasted && this.QAbi != null && !Silenced && this.Config.AbilityToggler.Value.IsEnabled(this.QAbi.Ability.Name) && this.QAbi.CanHit(EnemyHero) && !IsInvis)
                    {
                        QAbi.UseAbility(EnemyHero.Position);
                        ///  await Await.Delay(QAbi.GetCastDelay(EnemyHero.Position), token);
                        await Await.Delay(this.GetAbilityDelay(this.Owner, QAbi), token);
                    }

                    if (!Silenced && this.EAbi != null && this.Config.AbilityToggler.Value.IsEnabled(this.EAbi.Ability.Name) && this.EAbi.CanBeCasted && !IsInvis && this.EAbi.CanHit(EnemyHero))
                    {
                        this.EAbi.Ability.UseAbility(EnemyHero);
                        await Await.Delay(this.GetAbilityDelay(this.Owner, EAbi), token);
                    }

                    if (!Silenced && this.DAbi != null && !IsInvis && this.Owner.IsInRange(EnemyHero, 300) && !IsInvis && this.DAbi.CanBeCasted && this.Config.AbilityToggler.Value.IsEnabled(this.DAbi.Ability.Name))
                    {
                        this.DAbi.Ability.UseAbility();
                        await Await.Delay(this.GetAbilityDelay(this.Owner, DAbi), token);
                    }

                    //
                    //
                    //
                    //
                    //
                    //


                    if (this.Blink != null && this.Blink.CanBeCasted && Owner.Distance2D(EnemyHero) <= 1200 + SliderData && !IsInvis && !(this.Owner.Distance2D(EnemyHero) <= 400) && this.Config.ItemToggler2.Value.IsEnabled(this.Blink.Item.Name))
                    {
                        var l        = (this.Owner.Distance2D(EnemyHero) - SliderData) / SliderData;
                        var posA     = this.Owner.Position;
                        var posB     = EnemyHero.Position;
                        var x        = (posA.X + (l * posB.X)) / (1 + l);
                        var y        = (posA.Y + (l * posB.Y)) / (1 + l);
                        var position = new Vector3((int)x, (int)y, posA.Z);

                        this.Blink.UseAbility(position);
                        await Await.Delay(Blink.GetCastDelay(position), token);
                    }


                    if (!UnitExtensions.IsMagicImmune(EnemyHero))
                    {
                        if (this.BloodThorn != null && this.BloodThorn.CanBeCasted && !IsInvis && !this.Owner.IsAttacking() && this.Config.ItemToggler.Value.IsEnabled(this.BloodThorn.Item.Name))
                        {
                            this.BloodThorn.UseAbility(EnemyHero);
                            await Await.Delay(BloodThorn.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Medalion1 != null && this.Medalion1.CanBeCasted && !IsInvis && this.Owner.IsInAttackRange(EnemyHero) && !this.Owner.IsAttacking() && this.Config.ItemToggler.Value.IsEnabled(this.Medalion1.Item.Name))
                        {
                            this.Medalion1.UseAbility(EnemyHero);
                            await Await.Delay(Medalion1.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Medallion2 != null && this.Medallion2.CanBeCasted && !IsInvis && this.Owner.IsInAttackRange(EnemyHero) && !this.Owner.IsAttacking() && this.Config.ItemToggler.Value.IsEnabled(this.Medallion2.Item.Name))
                        {
                            this.Medallion2.UseAbility(EnemyHero);
                            await Await.Delay(Medallion2.GetCastDelay(EnemyHero), token);
                        }

                        if (this.SheepStick != null && this.SheepStick.CanBeCasted && !IsInvis && this.Config.ItemToggler.Value.IsEnabled(this.SheepStick.Item.Name))
                        {
                            this.SheepStick.UseAbility(EnemyHero);
                            await Await.Delay(SheepStick.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Orchid != null && this.Orchid.CanBeCasted && !IsInvis && this.Config.ItemToggler.Value.IsEnabled(Orchid.Item.Name))
                        {
                            this.Orchid.UseAbility(EnemyHero);
                            await Await.Delay(Orchid.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Mjollnir != null && this.Mjollnir.CanBeCasted && !IsInvis && this.Owner.IsInAttackRange(EnemyHero) && this.Config.ItemToggler2.Value.IsEnabled(Mjollnir.Item.Name))
                        {
                            this.Mjollnir.UseAbility(this.Owner);
                            await Await.Delay(Mjollnir.GetCastDelay(), token);
                        }

                        if (this.Veil_Of_Discord != null && this.Veil_Of_Discord.CanBeCasted && !IsInvis && this.Config.ItemToggler2.Value.IsEnabled(Veil_Of_Discord.Item.Name))
                        {
                            this.Veil_Of_Discord.UseAbility(EnemyHero.Position);
                            await Await.Delay(Veil_Of_Discord.GetCastDelay(), token);
                        }

                        if (this.Rod_Of_Atos != null && this.Rod_Of_Atos.CanBeCasted && !IsInvis && this.Config.ItemToggler2.Value.IsEnabled(Rod_Of_Atos.Item.Name))
                        {
                            this.Rod_Of_Atos.UseAbility(EnemyHero);
                            await Await.Delay(Rod_Of_Atos.GetCastDelay(), token);
                        }
                    }

                    if (EnemyHero != null && (EnemyHero.IsInvulnerable() || UnitExtensions.IsAttackImmune(EnemyHero)))
                    {
                        Orbwalker.Move(Game.MousePosition);
                    }
                    else if (EnemyHero != null)
                    {
                        Orbwalker.OrbwalkTo(EnemyHero);
                    }
                }
                else
                {
                    Orbwalker.Move(Game.MousePosition);
                }
            }
            catch (TaskCanceledException)
            {
                // canceled
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
示例#5
0
        public override async Task ExecuteAsync(CancellationToken token)
        {
            try
            {
                if (Config.Target.Value.SelectedValue.Contains("Lock") && Context.TargetSelector.IsActive &&
                    (!CanExecute || EnemyHero == null || !EnemyHero.IsValid || !EnemyHero.IsAlive))
                {
                    EnemyHero = Context.TargetSelector.Active.GetTargets().FirstOrDefault() as Hero;
                }
                else if (Config.Target.Value.SelectedValue.Contains("Default") && Context.TargetSelector.IsActive)
                {
                    EnemyHero = Context.TargetSelector.Active.GetTargets().FirstOrDefault() as Hero;
                }

                var Silenced   = UnitExtensions.IsSilenced(base.Owner);
                var SliderData = this.Config.UseBlink.Item.GetValue <Slider>().Value;
                var IsInvis    = Ensage.SDK.Extensions.UnitExtensions.IsInvisible(this.Owner);



                if (EnemyHero != null && !EnemyHero.IsInvulnerable())
                {
                    if (!Silenced && this.Config.AbilityToggler.Value.IsEnabled(this.QAbi.Ability.Name) && this.Owner.IsMelee && !IsInvis && this.Owner.IsInAttackRange(EnemyHero, 350) && !this.Owner.IsInRange(EnemyHero, 150))
                    {
                        this.QAbi.Ability.ToggleAbility();
                        await Await.Delay(this.GetAbilityDelay(base.Owner, QAbi), token);
                    }

                    if (!Silenced && this.Config.AbilityToggler.Value.IsEnabled(this.QAbi.Ability.Name) && !IsInvis && this.Owner.IsRanged && this.Owner.IsInRange(EnemyHero, 150))
                    {
                        this.QAbi.Ability.ToggleAbility();
                        await Await.Delay(this.GetAbilityDelay(base.Owner, QAbi), token);
                    }

                    if (!Silenced && !this.Owner.IsInAttackRange(EnemyHero) && !IsInvis && this.Owner.IsRanged)
                    {
                        this.QAbi.Ability.ToggleAbility();
                        await Await.Delay(this.GetAbilityDelay(base.Owner, QAbi), token);
                    }

                    if (this.Blink != null && this.Blink.CanBeCasted && Owner.Distance2D(EnemyHero) <= 1200 + SliderData && !IsInvis && !(this.Owner.Distance2D(EnemyHero) <= 400) && this.Config.ItemToggler2.Value.IsEnabled(this.Blink.Item.Name))
                    {
                        var l        = (this.Owner.Distance2D(EnemyHero) - SliderData) / SliderData;
                        var posA     = this.Owner.Position;
                        var posB     = EnemyHero.Position;
                        var x        = (posA.X + (l * posB.X)) / (1 + l);
                        var y        = (posA.Y + (l * posB.Y)) / (1 + l);
                        var position = new Vector3((int)x, (int)y, posA.Z);

                        this.Blink.UseAbility(position);
                        await Await.Delay(Blink.GetCastDelay(position), token);
                    }


                    if (!UnitExtensions.IsMagicImmune(EnemyHero))
                    {
                        if (!Silenced && this.WAbi != null && this.WAbi.CanBeCasted && !IsInvis && this.WAbi.CanHit(EnemyHero) && this.Config.AbilityToggler.Value.IsEnabled(this.WAbi.Ability.Name))
                        {
                            this.WAbi.UseAbility();
                            await Await.Delay(WAbi.GetCastDelay(), token);
                        }

                        if (!Silenced && this.EAbi != null && this.EAbi.CanBeCasted && !IsInvis && this.EAbi.CanHit(EnemyHero) && this.Config.AbilityToggler.Value.IsEnabled(this.EAbi.Ability.Name))
                        {
                            this.EAbi.UseAbility(EnemyHero);
                            await Await.Delay(EAbi.GetCastDelay(), token);
                        }


                        if (!Silenced && this.RAbi != null && this.RAbi.CanBeCasted && !IsInvis && this.Owner.IsAttacking() && this.Config.AbilityToggler.Value.IsEnabled(this.RAbi.Ability.Name))
                        {
                            this.RAbi.UseAbility();
                            await Await.Delay(EAbi.GetCastDelay(), token);
                        }

                        if (this.BloodThorn != null && this.BloodThorn.CanBeCasted && !IsInvis && this.Owner.IsInAttackRange(EnemyHero) && !this.Owner.IsAttacking() && this.Config.ItemToggler.Value.IsEnabled(this.BloodThorn.Item.Name))
                        {
                            this.BloodThorn.UseAbility(EnemyHero);
                            await Await.Delay(BloodThorn.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Medalion1 != null && this.Medalion1.CanBeCasted && !IsInvis && this.Owner.IsInAttackRange(EnemyHero) && !this.Owner.IsAttacking() && this.Config.ItemToggler.Value.IsEnabled(this.Medalion1.Item.Name))
                        {
                            this.Medalion1.UseAbility(EnemyHero);
                            await Await.Delay(Medalion1.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Medallion2 != null && this.Medallion2.CanBeCasted && !IsInvis && this.Owner.IsInAttackRange(EnemyHero) && !this.Owner.IsAttacking() && this.Config.ItemToggler.Value.IsEnabled(this.Medallion2.Item.Name))
                        {
                            this.Medallion2.UseAbility(EnemyHero);
                            await Await.Delay(Medallion2.GetCastDelay(EnemyHero), token);
                        }

                        if (this.SheepStick != null && this.SheepStick.CanBeCasted && !IsInvis && this.Owner.IsInAttackRange(EnemyHero) && this.Config.ItemToggler.Value.IsEnabled(this.SheepStick.Item.Name))
                        {
                            this.SheepStick.UseAbility(EnemyHero);
                            await Await.Delay(SheepStick.GetCastDelay(EnemyHero), token);
                        }

                        if (this.DiffBlade != null && this.DiffBlade.CanBeCasted && !IsInvis && this.Owner.IsInAttackRange(EnemyHero) && this.Config.ItemToggler.Value.IsEnabled(DiffBlade.Item.Name))
                        {
                            this.DiffBlade.UseAbility(EnemyHero);
                            await Await.Delay(DiffBlade.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Orchid != null && this.Orchid.CanBeCasted && !IsInvis && this.Owner.IsInAttackRange(EnemyHero) && this.Config.ItemToggler.Value.IsEnabled(Orchid.Item.Name))
                        {
                            this.Orchid.UseAbility(EnemyHero);
                            await Await.Delay(Orchid.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Mjollnir != null && this.Mjollnir.CanBeCasted && !IsInvis && this.Owner.IsInAttackRange(EnemyHero) && this.Config.ItemToggler2.Value.IsEnabled(Mjollnir.Item.Name))
                        {
                            this.Mjollnir.UseAbility(this.Owner);
                            await Await.Delay(Mjollnir.GetCastDelay(), token);
                        }

                        if (this.Heavens_Halberd != null && this.Heavens_Halberd.CanBeCasted && !IsInvis && this.Owner.IsInAttackRange(EnemyHero) && this.Config.ItemToggler2.Value.IsEnabled(Heavens_Halberd.Item.Name))
                        {
                            this.Heavens_Halberd.UseAbility(EnemyHero);
                            await Await.Delay(Heavens_Halberd.GetCastDelay(), token);
                        }

                        if (this.Invis_Sword != null && this.Invis_Sword.CanBeCasted && !IsInvis && !this.Owner.IsInRange(EnemyHero, 1000) && !this.Owner.IsAttacking() && this.Config.ItemToggler2.Value.IsEnabled(Invis_Sword.Item.Name))
                        {
                            this.Invis_Sword.UseAbility();
                            await Await.Delay(Invis_Sword.GetCastDelay(), token);
                        }

                        if (this.Silver_Edge != null && this.Silver_Edge.CanBeCasted && !IsInvis && !this.Owner.IsInRange(EnemyHero, 1000) && !this.Owner.IsAttacking() && this.Config.ItemToggler2.Value.IsEnabled(Silver_Edge.Item.Name))
                        {
                            this.Silver_Edge.UseAbility();
                            await Await.Delay(Silver_Edge.GetCastDelay(), token);
                        }
                    }

                    if (this.Mask_Of_Madness != null && this.Mask_Of_Madness.CanBeCasted && !IsInvis && this.Config.ItemToggler2.Value.IsEnabled(Mask_Of_Madness.Item.Name))
                    {
                        if (Config.MomUsage.Value.SelectedValue.Contains("Melee Form") && this.Owner.IsMelee && !this.EAbi.CanBeCasted && !this.RAbi.CanBeCasted)
                        {
                            this.Mask_Of_Madness.UseAbility();
                            await Await.Delay(Mask_Of_Madness.GetCastDelay(), token);
                        }
                        else if (Config.MomUsage.Value.SelectedValue.Contains("Ranged Form") && this.Owner.IsRanged && !this.WAbi.CanBeCasted && !this.RAbi.CanBeCasted)
                        {
                            this.Mask_Of_Madness.UseAbility();
                            await Await.Delay(Mask_Of_Madness.GetCastDelay(), token);
                        }
                    }

                    if (EnemyHero != null && (EnemyHero.IsInvulnerable() || UnitExtensions.IsAttackImmune(EnemyHero)))
                    {
                        Orbwalker.Move(Game.MousePosition);
                    }
                    else if (EnemyHero != null)
                    {
                        Orbwalker.OrbwalkTo(EnemyHero);
                    }
                }
                else
                {
                    Orbwalker.Move(Game.MousePosition);
                }
            }
            catch (TaskCanceledException)
            {
                // canceled
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }