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); } }
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); }
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); }
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); } }
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); } }