public override async Task ExecuteAsync(CancellationToken token) { if (!await this.ShouldExecute(token)) { return; } this.MaxTargetRange = Math.Max(this.MaxTargetRange, 1200); if ((this.CurrentTarget == null) || !this.CurrentTarget.IsVisible || this.CurrentTarget.HasModifier(CurseModifier)) { this.WinterWyvern.Context.Orbwalker.Active.OrbwalkTo(null); return; } if (this.CurrentTarget.IsIllusion) { this.OrbwalkToTarget(); return; } try { if ((this.WinterWyvern.BlinkDagger != null) && (this.WinterWyvern.BlinkDagger.Item.IsValid) && Owner.Distance2D(this.CurrentTarget) <= 1200 + 350 && !(Owner.Distance2D(this.CurrentTarget) <= 400) && this.WinterWyvern.BlinkDagger.CanBeCasted && this.WinterWyvern.UseBlink) { var l = (this.Owner.Distance2D(this.CurrentTarget) - 350) / 350; var posA = this.Owner.Position; var posB = this.CurrentTarget.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.WinterWyvern.BlinkDagger.UseAbility(position); await Task.Delay(this.WinterWyvern.BlinkDagger.GetCastDelay(position), token); } var linkens = this.CurrentTarget.IsLinkensProtected(); await BreakLinken(token); var ulti = this.WinterWyvern.WintersCurse; if (ulti.CanBeCasted() && this.WinterWyvern.HeroestoUlti.Value.IsEnabled(CurrentTarget.Name) && this.WinterWyvern.NearHeroesCount(this.CurrentTarget) >= this.WinterWyvern.HeroCountToUlti.Value && this.Owner.Distance2D(this.CurrentTarget) <= this.WinterWyvern.WintersCurse.CastRange && !this.CurrentTarget.IsStunned()) { ulti.UseAbility(this.CurrentTarget); await Task.Delay((int)ulti.GetCastDelay(this.Owner, this.CurrentTarget) + 200, token); } var q = this.WinterWyvern.ArcticBurn; if (this.Owner.AghanimState()) { if (!q.IsToggled && q.CanBeCasted() && this.Owner.Distance2D(this.CurrentTarget) <= AbilityExtensions.GetAbilitySpecialData(q, "attack_range_bonus") + this.Owner.AttackRange) { q.ToggleAbility(); await Task.Delay(50, token); } await Task.Delay(125, token); } else if (!this.Owner.AghanimState() && q.CanBeCasted() && this.Owner.Distance2D(this.CurrentTarget) <= AbilityExtensions.GetAbilitySpecialData(q, "attack_range_bonus") + this.Owner.AttackRange) { q.UseAbility(); await Task.Delay(50, token); } var blast = this.WinterWyvern.SplinterBlast; var target = this.WinterWyvern.SplinterBlastUnit(this.CurrentTarget); var modifier = this.CurrentTarget.HasModifier("modifier_winter_wyvern_winters_curse_aura") || this.CurrentTarget.HasModifier("modifier_winter_wyvern_winters_curse") ? this.CurrentTarget.Modifiers.FirstOrDefault(x => x.Name.Contains("modifier_winter_wyvern_winters_curse")) : null; if (modifier != null && target != null) { if (blast.CanBeCasted() && !this.CurrentTarget.IsMagicImmune() && !target.IsMagicImmune() && this.Owner.Distance2D(target) <= blast.CastRange && modifier.RemainingTime <= this.WinterWyvern.GetBlastHitTime(this.CurrentTarget) + (target.Distance2D(this.CurrentTarget) / 650)) { blast.UseAbility(target); await Task.Delay((int)blast.GetCastDelay(this.Owner, target), token); } } else if (modifier == null && target != null && (this.WinterWyvern.NearHeroesCount(this.CurrentTarget) < this.WinterWyvern.HeroCountToUlti.Value || !this.WinterWyvern.WintersCurse.CanBeCasted())) { if (blast.CanBeCasted() && !this.CurrentTarget.IsMagicImmune() && !target.IsMagicImmune() && this.Owner.Distance2D(target) <= blast.CastRange) { blast.UseAbility(target); await Task.Delay((int)blast.GetCastDelay(this.Owner, target), token); } } var abyssal = this.WinterWyvern.AbyssalBlade; if (abyssal != null && abyssal.CanBeCasted && abyssal.CanHit(CurrentTarget) && !linkens && this.WinterWyvern.AbyssalBladeHeroes.Value.IsEnabled(CurrentTarget.Name)) { abyssal.UseAbility(CurrentTarget); await Task.Delay(abyssal.GetCastDelay(), token); } var manta = this.WinterWyvern.Manta; if (manta != null && manta.CanBeCasted && this.Owner.Distance2D(CurrentTarget) <= 200 && this.WinterWyvern.MantaHeroes.Value.IsEnabled(CurrentTarget.Name)) { manta.UseAbility(); await Task.Delay(manta.GetCastDelay(), token); } var nullifier = this.WinterWyvern.Nullifier; if (nullifier != null && nullifier.CanBeCasted && nullifier.CanHit(CurrentTarget) && !linkens && this.WinterWyvern.NullifierHeroes.Value.IsEnabled(CurrentTarget.Name)) { nullifier.UseAbility(CurrentTarget); await Task.Delay(nullifier.GetCastDelay(), token); } } catch (TaskCanceledException) { // ignore } catch (Exception e) { Log.Debug($"{e}"); } this.OrbwalkToTarget(); }
public override async Task ExecuteAsync(CancellationToken token) { if (!await this.ShouldExecute(token) || this.Owner.IsChanneling()) { return; } if ((this.CurrentTarget == null) || !this.CurrentTarget.IsVisible || UnitExtensions.IsInvulnerable(this.CurrentTarget)) { this.Nevermore.Context.Orbwalker.Active.OrbwalkTo(null); return; } if (this.CurrentTarget.IsIllusion) { this.OrbwalkToTarget(); return; } if (this.CurrentTarget != null && this.Owner.HasModifier("modifier_item_silver_edge_windwalk")) { this.Owner.Attack(this.CurrentTarget); await Task.Delay(100, token); } if ((this.Nevermore.BlinkDagger != null) && (this.Nevermore.BlinkDagger.Item.IsValid) && Owner.Distance2D(this.CurrentTarget) <= 1200 + 350 && !(Owner.Distance2D(this.CurrentTarget) <= 400) && this.Nevermore.BlinkDagger.CanBeCasted && this.Nevermore.UseBlink) { var l = (this.Owner.Distance2D(this.CurrentTarget) - 350) / 350; var posA = this.Owner.Position; var posB = this.CurrentTarget.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.Nevermore.BlinkDagger.UseAbility(position); await Task.Delay(this.Nevermore.BlinkDagger.GetCastDelay(position), token); } var linkens = this.CurrentTarget.IsLinkensProtected(); await BreakLinken(token, this.CurrentTarget); var veil = this.Nevermore.VeilOfDiscord; if (veil != null && veil.CanBeCasted && veil.CanHit(CurrentTarget) && this.Nevermore.VeilOfDiscordHeroes.Value.IsEnabled(CurrentTarget.Name)) { veil.UseAbility(CurrentTarget.Position); await Task.Delay(veil.GetCastDelay(), token); } var sheep = this.Nevermore.Sheepstick; if (sheep != null && sheep.CanBeCasted && !linkens && (this.Nevermore.HexHeroes.Value.IsEnabled(this.CurrentTarget.Name))) { sheep.UseAbility(CurrentTarget); await Task.Delay(sheep.GetCastDelay(), token); } var ethereal = this.Nevermore.EtherealBlade; if (ethereal != null && ethereal.CanBeCasted && ethereal.CanHit(CurrentTarget) && !linkens && this.Nevermore.EtherealHeroes.Value.IsEnabled(CurrentTarget.Name)) { ethereal.UseAbility(CurrentTarget); await Task.Delay(ethereal.GetCastDelay(this.CurrentTarget), token); } var dagon = this.Nevermore.Dagon; if ((ethereal == null || !ethereal.CanBeCasted) && dagon != null && dagon.CanBeCasted && !linkens && dagon.CanHit(this.CurrentTarget)) { dagon.UseAbility(this.CurrentTarget); await Task.Delay(dagon.GetCastDelay(), token); } var shivas = this.Nevermore.ShivasGuard; if (!this.Owner.IsChanneling() && shivas != null && shivas.CanBeCasted && Owner.Distance2D(CurrentTarget) <= 700) { shivas.UseAbility(); await Task.Delay(shivas.GetCastDelay(), token); } var bloodthorn = this.Nevermore.BloodThorn; if (bloodthorn != null && bloodthorn.CanBeCasted && bloodthorn.CanHit(CurrentTarget) && !linkens && this.Nevermore.OrchidBloodthornHeroes.Value.IsEnabled(CurrentTarget.Name)) { bloodthorn.UseAbility(CurrentTarget); await Task.Delay(bloodthorn.GetCastDelay(), token); } var orchid = this.Nevermore.Orchid; if (orchid != null && orchid.CanBeCasted && orchid.CanHit(CurrentTarget) && !linkens && this.Nevermore.OrchidBloodthornHeroes.Value.IsEnabled(CurrentTarget.Name)) { orchid.UseAbility(CurrentTarget); await Task.Delay(orchid.GetCastDelay(), token); } var atos = this.Nevermore.RodOfAtos; if (atos != null && atos.CanBeCasted && atos.CanHit(CurrentTarget) && !linkens && this.Nevermore.AtosHeroes.Value.IsEnabled(CurrentTarget.Name)) { atos.UseAbility(CurrentTarget); await Task.Delay(atos.GetCastDelay(), token); } var halberd = this.Nevermore.HeavensHalberd; if (halberd != null && halberd.CanBeCasted && halberd.CanHit(CurrentTarget) && !linkens && this.Nevermore.AtosHeroes.Value.IsEnabled(CurrentTarget.Name)) { halberd.UseAbility(CurrentTarget); await Task.Delay(halberd.GetCastDelay(), token); } try { // Log.Debug($"{Nevermore.Razes.ToString()}"); if (Nevermore.Razes != null) { foreach ( var raze in Nevermore.Razes.OrderBy( x => this.Owner.Distance2D(this.Owner.InFront(AbilityExtensions.GetAbilitySpecialData(x, "shadowraze_range"))))) { if (CurrentTarget == null || UnitExtensions.IsMagicImmune(CurrentTarget) || raze == null || !raze.CanBeCasted() || this.Owner.IsSilenced() || !this.Nevermore.CanHit(raze, CurrentTarget, Nevermore.GetRazeDelay(CurrentTarget, raze)) || !this.CurrentTarget.IsAlive || UnitExtensions.IsInvulnerable(this.CurrentTarget)) { continue; } /*if (raze == this.Nevermore.RazeLong && this.Owner.Distance2D(this.CurrentTarget) >= 730) * { * return; * } * else * {*/ raze.UseAbility(); await Task.Delay((int)raze.GetCastDelay(this.Owner, this.CurrentTarget, true) + 100, token); //} } } } catch (TaskCanceledException) { // ignore } catch (Exception e) { Log.Debug(e); } if (!this.Nevermore.RazeShort.IsInAbilityPhase && !this.Nevermore.RazeMedium.IsInAbilityPhase && !this.Nevermore.RazeLong.IsInAbilityPhase) { this.OrbwalkToTarget(); } }