/// <summary> /// Fired on an incoming gapcloser. /// </summary> /// <param name="sender">The sender.</param> /// <param name="args">The <see cref="Gapcloser.GapcloserArgs" /> instance containing the event data.</param> public void OnGapcloser(AIHeroClient sender, Gapcloser.GapcloserArgs args) { if (UtilityClass.Player.IsDead) { return; } if (sender == null || !sender.IsEnemy() || !sender.IsMelee) { return; } /// <summary> /// The Anti-Gapcloser E. /// </summary> if (SpellClass.E.Ready && !Invulnerable.Check(sender, DamageType.Magical, false)) { var enabledOption = MenuClass.Gapcloser["enabled"]; if (enabledOption == null || !enabledOption.Enabled) { return; } var spellOption = MenuClass.SubGapcloser[$"{sender.CharName.ToLower()}.{args.SpellName.ToLower()}"]; if (spellOption == null || !spellOption.Enabled) { return; } switch (args.Type) { case Gapcloser.Type.Targeted: if (sender.IsMelee && args.Target.IsMe()) { SpellClass.E.Cast(); } break; default: if (args.EndPosition.DistanceToPlayer() <= UtilityClass.Player.GetAutoAttackRange()) { SpellClass.E.Cast(); } break; } } }
/// <summary> /// Fired on an incoming gapcloser. /// </summary> /// <param name="sender">The sender.</param> /// <param name="args">The <see cref="Gapcloser.GapcloserArgs" /> instance containing the event data.</param> public void OnGapcloser(AIHeroClient sender, Gapcloser.GapcloserArgs args) { if (UtilityClass.Player.IsDead) { return; } if (sender == null || !sender.IsEnemy() || !sender.IsMelee) { return; } /// <summary> /// The Anti-Gapcloser Q. /// </summary> if (SpellClass.Q.Ready && MenuClass.Gapcloser["enabled"].Enabled && MenuClass.SubGapcloser[$"{sender.CharName.ToLower()}.{args.SpellName.ToLower()}"].Enabled) { switch (args.Type) { case Gapcloser.Type.Targeted: if (sender.IsMelee && args.Target.IsMe()) { Vector3 targetPos = UtilityClass.Player.Position.Extend(args.StartPosition, -SpellClass.Q.Range); if (targetPos.IsUnderEnemyTurret()) { return; } SpellClass.Q.Cast(targetPos); } break; default: Vector3 targetPos2 = UtilityClass.Player.Position.Extend(args.EndPosition, -SpellClass.Q.Range); if (targetPos2.IsUnderEnemyTurret()) { return; } if (args.EndPosition.DistanceToPlayer() <= UtilityClass.Player.GetAutoAttackRange()) { SpellClass.Q.Cast(targetPos2); } break; } } /// <summary> /// The Anti-Gapcloser E. /// </summary> if (SpellClass.E.Ready && MenuClass.Gapcloser2["enabled"].Enabled && MenuClass.SubGapcloser2[$"{sender.CharName.ToLower()}.{args.SpellName.ToLower()}"].Enabled && !Invulnerable.Check(sender, DamageType.Magical, false)) { switch (args.Type) { case Gapcloser.Type.Targeted: if (args.Target.IsMe()) { SpellClass.E.CastOnUnit(sender); } break; default: if (args.EndPosition.DistanceToPlayer() <= UtilityClass.Player.GetAutoAttackRange()) { SpellClass.E.CastOnUnit(sender); } break; } } }
/// <summary> /// Fired on an incoming gapcloser. /// </summary> /// <param name="sender">The sender.</param> /// <param name="args">The <see cref="Utilities.Gapcloser.GapcloserArgs" /> instance containing the event data.</param> public void OnGapcloser(AIHeroClient sender, Gapcloser.GapcloserArgs args) { if (UtilityClass.Player.IsDead) { return; } if (sender == null) { return; } /// <summary> /// The On-Dash E Logics. /// </summary> if (SpellClass.E.Ready) { /// <summary> /// The Anti-Gapcloser E. /// </summary> if (sender.IsEnemy() && sender.IsMelee) { var enabledOption = MenuClass.Gapcloser["enabled"]; if (enabledOption == null || !enabledOption.Enabled) { return; } var spellOption = MenuClass.SubGapcloser[$"{sender.CharName.ToLower()}.{args.SpellName.ToLower()}"]; if (spellOption == null || !spellOption.Enabled) { return; } switch (args.Type) { case Gapcloser.Type.Targeted: if (args.Target.IsMe()) { SpellClass.E.CastOnUnit(UtilityClass.Player); } break; default: if (args.EndPosition.Distance(UtilityClass.Player.Position) <= UtilityClass.Player.GetAutoAttackRange()) { SpellClass.E.CastOnUnit(UtilityClass.Player); } else { var bestAlly = ObjectCache.AllyHeroes .Where(a => !a.IsMe() && a.IsValidTarget(SpellClass.E.Range, true) && args.EndPosition.Distance(a) <= a.GetAutoAttackRange() / 2) .MinBy(o => o.MaxHP); if (bestAlly != null) { SpellClass.E.CastOnUnit(bestAlly); } } break; } } else if (sender.IsAlly()) { if (ObjectCache.EnemyHeroes.Count() < 2) { return; } /// <summary> /// The E Engager Logic. /// </summary> if (sender.IsValidTarget(SpellClass.E.Range, true) && MenuClass.R["aoe"].Enabled && MenuClass.E["engager"].Enabled) { if (ObjectCache.EnemyHeroes.Count(t => !Invulnerable.Check(t, DamageType.Magical, false) && t.IsValidTarget(SpellClass.R.Width - SpellClass.R.Delay * t.BoundingRadius, args.EndPosition)) >= MenuClass.R["aoe"].Value && MenuClass.E["engagerswhitelist"][sender.CharName.ToLower()].Enabled) { SpellClass.E.CastOnUnit(sender); } } } } }