private async void Rupture(Unit unit, Modifier modifier) { if (unit.Team != LocalHero.Team) { return; } if (LocalHero.Handle != unit.Handle) { return; } ColorScreen.IsEnable = true; if (BloodseekerRuptureMenu.AutoStopItem) { LocalHero.Stop(); UpdateManager.BeginInvoke(300, () => LocalHero.Stop()); } while (modifier.IsValid) { await Task.Delay(50); } ColorScreen.IsEnable = false; }
/// <summary> /// Called when [game on update]. /// </summary> private void OnGameOnUpdate() { if (LocalHero.IsDead || LocalHero.HasBuff("recall")) { return; } GameOnUpdateHandlerDelegate(); }
/// <summary> /// Determines whether [is killable with spell w and spell r and automatic attack] [the specified enemy hero]. /// </summary> /// <param name="enemyHero">The enemy hero.</param> /// <returns>Task<System.Boolean>.</returns> private async Task <bool> IsKillableWithSpellWAndSpellRAndAutoAttack(Obj_AI_Base enemyHero) { return(await Task.FromResult(WSpell.Ready && RSpell.Ready && LocalHero.GetSpellDamage(enemyHero, SpellSlot.W) + LocalHero.GetSpellDamage(enemyHero, SpellSlot.R) + LocalHero.GetAutoAttackDamage(enemyHero) > enemyHero.Health + enemyHero.PhysicalShield && IsValidTargetLocked(enemyHero, WSpell.Range))); }
/// <summary> /// The create new controllable unit. /// </summary> /// <param name="unit"> /// The unit. /// </param> /// <returns> /// The <see cref="IControllableUnit" />. /// </returns> public IControllableUnit CreateNewControllableUnit(Unit unit, IAbilityTeam team) { IControllableUnit controllableUnit; if (unit is Hero) { if (unit.Handle.Equals(GlobalVariables.LocalHero.Handle)) { controllableUnit = new LocalHero(unit); } else if (unit is Meepo) { controllableUnit = new ControllableMeepo(unit); } else { controllableUnit = new ControllableHero(unit); } } else { controllableUnit = new ControllableCreep(unit); } team.UnitManager.AddUnit(controllableUnit); var composer = this.UnitComposers.FirstOrDefault( x => x.Metadata.ClassIds.Contains(controllableUnit.SourceUnit.ClassId)); if (composer != null) { composer.Value.Compose(controllableUnit); } else { this.unitComposer.Compose(controllableUnit); } return(controllableUnit); }
/// <summary> /// Processes the instagib mechanics. /// </summary> /// <returns>Task.</returns> private async Task ProcessInstagibMechanics() { foreach (var enemyHero in GameObjects.EnemyHeroes) { if (LocalHero.Distance(enemyHero) > WSpell.Range) { continue; } var taskCheckKillableWithSpellWAndSpellRAndAuto = await IsKillableWithSpellWAndSpellRAndAutoAttack(enemyHero); var taskCheckKillableWithSpellW = await IsKillableWithSpellW(enemyHero); var taskCheckKillableWithSpellR = await IsKillableWithSpellR(enemyHero); if (taskCheckKillableWithSpellWAndSpellRAndAuto) { CastSpellR(enemyHero, SpellPriority.Combo); CastSpellW(enemyHero, SpellPriority.Force); continue; } if (taskCheckKillableWithSpellW) { CastSpellW(enemyHero, SpellPriority.Force); continue; } if (!taskCheckKillableWithSpellR) { continue; } { CastSpellR(enemyHero, SpellPriority.Combo); } } }
/// <summary> /// The create new unit. /// </summary> /// <param name="unit"> /// The unit. /// </param> /// <returns> /// The <see cref="IAbilityUnit" />. /// </returns> public IAbilityUnit CreateNewUnit(Unit unit, IAbilityTeam team, IAbilityUnit owner = null) { IAbilityUnit abilityUnit; if (unit is Hero) { if (unit.Handle.Equals(GlobalVariables.LocalHero.Handle)) { abilityUnit = new LocalHero(unit); } else if (unit is Meepo) { abilityUnit = new AbilityUnitMeepo(unit as Meepo); } else { abilityUnit = new AbilityHero(unit); } } else { abilityUnit = new AbilityCreep(unit); } team.UnitManager.AddUnit(abilityUnit); if (owner != null) { abilityUnit.Owner = owner; } if (abilityUnit.IsHero) { var composer = this.UnitHeroComposers.FirstOrDefault( x => x.Metadata.HeroIds.Contains((uint)(abilityUnit.SourceUnit as Hero).HeroId)); if (composer != null) { composer.Value.Compose(abilityUnit); } else { this.unitComposer.Compose(abilityUnit); } return(abilityUnit); } var unitcomposer = this.UnitComposers.FirstOrDefault(x => x.Metadata.UnitNames.Contains(abilityUnit.Name)); if (unitcomposer != null) { unitcomposer.Value.Compose(abilityUnit); } else { this.unitComposer.Compose(abilityUnit); } return(abilityUnit); }
/// <summary> /// Determines whether [is killable with spell r] [the specified enemy hero]. /// </summary> /// <param name="enemyHero">The enemy hero.</param> /// <returns>Task<System.Boolean>.</returns> private async Task <bool> IsKillableWithSpellR(Obj_AI_Base enemyHero) { return(await Task.FromResult(RSpell.Ready && LocalHero.GetSpellDamage(enemyHero, SpellSlot.R) > enemyHero.Health + enemyHero.MagicalShield + 20 && IsValidTargetLocked(enemyHero, RSpell.Range) && enemyHero.HasBuff("recall"))); }
/// <summary> /// Processes the trick trap mechanics. /// </summary> private void ProcessTrickTrapMechanics() { var panicMechanicsTask = Task.Factory.StartNew(() => { if (LocalHero.HealthPercent() > 33) { return; } foreach (var enemyHero in GameObjects.EnemyHeroes) { if (LocalHero.Distance(enemyHero) >= LocalHeroTrueRange / 2 || !enemyHero.IsFacing(LocalHero) || enemyHero.HealthPercent() <= LocalHero.HealthPercent()) { continue; } CastSpellR(enemyHero, SpellPriority.Force); Krywalker.Orbwalk(enemyHero); } }); var underTowerMechanicsTask = Task.Factory.StartNew(() => { foreach (var enemyHero in GameObjects.EnemyHeroes) { if (!enemyHero.IsUnderAllyTurret() || !IsValidTargetLocked(enemyHero, LocalHeroTrueRange) || !LocalHero.IsUnderAllyTurret()) { continue; } CastSpellR(enemyHero, SpellPriority.Force); } }); var onOpportunityMechanicsTask = Task.Factory.StartNew(() => { foreach (var enemyHero in GameObjects.EnemyHeroes) { if (!IsValidTargetLocked(enemyHero, WSpell.Range)) { continue; } CastSpellW(enemyHero, SpellPriority.Combo); if (!IsValidTargetLocked(enemyHero, LocalHeroTrueRange) || enemyHero.HealthPercent() > LocalHero.HealthPercent()) { continue; } { var zoneCircle = Geometry.GetNewCircleAtPoint(new Point(LocalHero.Position.X, 0, LocalHero.Position.Z), LocalHeroTrueRange * 3); var allyHeroesCountTask = Task <int> .Factory.StartNew(() => GetAllyHeroesCountInZone(ref zoneCircle)); var enemyHeroesCountTask = Task <int> .Factory.StartNew(() => GetEnemyHeroesCountInZone(ref zoneCircle)); var allyMinionsCountTask = Task <int> .Factory.StartNew(() => GetAllyMinionsCountInZone(ref zoneCircle)); var enemyMinionsCountTask = Task <int> .Factory.StartNew(() => GetEnemyMinionsCountInZone(ref zoneCircle)); if (allyHeroesCountTask.Result < enemyHeroesCountTask.Result || allyMinionsCountTask.Result < enemyMinionsCountTask.Result || LocalHero.GetAutoAttackDamage(enemyHero) <= enemyHero.GetAutoAttackDamage(LocalHero) || LocalHero.IsUnderEnemyTurret()) { continue; } if (IsValidTargetLocked(enemyHero, WSpell.Range / 2)) { CastSpellR(enemyHero, SpellPriority.Combo); } if (!IsValidTargetLocked(enemyHero, LocalHeroTrueRange)) { continue; } CastSpellQ(enemyHero, SpellPriority.Combo); Krywalker.Orbwalk(enemyHero); } } }); panicMechanicsTask.Wait(); underTowerMechanicsTask.Wait(); onOpportunityMechanicsTask.Wait(); }