Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Called when [game on update].
        /// </summary>
        private void OnGameOnUpdate()
        {
            if (LocalHero.IsDead || LocalHero.HasBuff("recall"))
            {
                return;
            }

            GameOnUpdateHandlerDelegate();
        }
Exemplo n.º 3
0
 /// <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&lt;System.Boolean&gt;.</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)));
 }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        /// <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);
                }
            }
        }
Exemplo n.º 6
0
        /// <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);
        }
Exemplo n.º 7
0
 /// <summary>
 /// Determines whether [is killable with spell r] [the specified enemy hero].
 /// </summary>
 /// <param name="enemyHero">The enemy hero.</param>
 /// <returns>Task&lt;System.Boolean&gt;.</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")));
 }
Exemplo n.º 8
0
        /// <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();
        }