Example #1
0
        private async Task ExecuteAsync(CancellationToken token)
        {
            try
            {
                if (Game.IsPaused || !owner.IsValid || !owner.IsAlive || owner.IsStunned())
                {
                    return;
                }

                var heroes = EntityManager <Hero> .Entities.Where(x => x.IsValidTarget());

                foreach (var target in heroes)
                {
                    if (killStealSettingsMenu.UseBasicAttackItem.Value && this.orbwalker.CanAttack(target) && this.owner.IsInAttackRange(target) && (int)target.Health - (int)DamageCalculationHelper.GetAttackDamage(target) <= 0)
                    {
                        this.orbwalker.Attack(target);
                        return;
                    }

                    var iceShards = abilities.IceShards;
                    if (killStealSettingsMenu.KillStealAbilitiesItem.Value.IsEnabled(iceShards.Ability.Name) &&
                        target.IsValidTarget() &&
                        iceShards.CanBeCasted &&
                        iceShards.CanHit(target) &&
                        (int)target.Health - iceShards.GetDamage(target) <= 0)
                    {
                        var predictionInput = new PredictionInput
                        {
                            Owner  = this.owner,
                            Delay  = iceShards.CastPoint + iceShards.ActivationDelay,
                            Range  = iceShards.CastRange,
                            Radius = iceShards.Radius,
                        };

                        var predictionOutput = prediction.GetPrediction(predictionInput.WithTarget(target));
                        var castPosition     = predictionOutput.CastPosition;

                        Vector3 position;
                        if (target.NetworkActivity == NetworkActivity.Move)
                        {
                            var castRange = iceShards.CastRange - 200;

                            var distance = Vector2.Distance(owner.NetworkPosition.To2D(), castPosition.To2D() + target.Direction2D(target.MovementSpeed));
                            var time     = (distance / iceShards.Speed);

                            position = castPosition + target.Direction2D(time < 1 ? 75 + target.MovementSpeed * time : (target.MovementSpeed) * time).ToVector3();
                            if (this.owner.NetworkPosition.Distance(position) < castRange)
                            {
                                iceShards.UseAbility(position);
                                await Task.Delay(iceShards.GetCastDelay(position), token);
                            }
                        }
                    }

                    var walrusKick = abilities.WalrusKick;
                    if (killStealSettingsMenu.KillStealAbilitiesItem.Value.IsEnabled(walrusKick.Ability.Name) &&
                        !walrusKick.Ability.IsHidden &&
                        walrusKick.CanBeCasted &&
                        walrusKick.CanHit(target) &&
                        (int)target.Health - (int)walrusKick.GetDamage(target) <= 0)
                    {
                        if (owner.Animation.Name.Contains("cast"))
                        {
                            owner.Stop();
                        }

                        walrusKick.UseAbility(target);
                        await Task.Delay(walrusKick.GetCastDelay(target), token);
                    }

                    var walrusPunch = abilities.WalrusPunch;
                    if (killStealSettingsMenu.KillStealAbilitiesItem.Value.IsEnabled(walrusPunch.Ability.Name) &&
                        target.IsValidTarget() &&
                        walrusPunch.CanBeCasted &&
                        walrusPunch.CanHit(target) &&
                        (int)target.Health - walrusPunch.GetDamage(target) <= 0)
                    {
                        if (owner.Animation.Name.Contains("cast"))
                        {
                            owner.Stop();
                        }

                        walrusPunch.UseAbility(target);
                        await Task.Delay(walrusPunch.GetCastDelay(target), token);
                    }
                }
            }
            catch (TaskCanceledException)
            {
            }
            catch (Exception ex)
            {
                LogService.Log(LogType.Error, ex);
            }
        }
Example #2
0
        public override async Task ExecuteAsync(CancellationToken token)
        {
            try
            {
                var target = targetSelector.Active.GetTargets().FirstOrDefault(x => x.IsValidTarget()) as Hero;

                if (target == null || (!comboSettingsMenu.AttackBladeMailItem && target.HasModifier("modifier_item_blade_mail_reflect")) && target.HasModifier("modifier_abaddon_borrowed_time"))
                {
                    if (Orbwalker.CanMove())
                    {
                        Orbwalker.Move(Game.MousePosition);
                    }

                    return;
                }

                if (!target.IsBlockingAbilities())
                {
                    var snowball = abilities.Snowball;
                    if (comboMenu.ComboAbilitiesItem.Value.IsEnabled(snowball.Ability.Name) && snowball.CanBeCasted && !snowball.Ability.IsHidden)
                    {
                        snowball.UseAbility(target);
                        await Task.Delay(snowball.GetCastDelay(target), token);
                    }

                    var launchSnowball = abilities.LaunchSnowball;
                    if (comboMenu.ComboAbilitiesItem.Value.IsEnabled(launchSnowball.Ability.Name) && launchSnowball.CanBeCasted && target.IsValidTarget() && !launchSnowball.Ability.IsHidden)
                    {
                        launchSnowball.UseAbility();
                        await Task.Delay(launchSnowball.GetCastDelay(), token);
                    }

                    var tagTeam = abilities.TagTeam;
                    if (comboMenu.ComboAbilitiesItem.Value.IsEnabled("tusk_frozen_sigil") && tagTeam.CanBeCasted && target.IsValidTarget() && owner.IsInAttackRange(target) && Orbwalker.CanAttack(target))
                    {
                        tagTeam.UseAbility();
                        await Task.Delay(tagTeam.GetCastDelay(), token);
                    }

                    var iceShards = abilities.IceShards;
                    if (comboMenu.ComboAbilitiesItem.Value.IsEnabled(iceShards.Ability.Name) && iceShards.CanBeCasted && target.IsValidTarget() && (!this.owner.IsInAttackRange(target) && Orbwalker.CanAttack(target)) && !this.owner.HasModifier(snowball.ModifierName) && launchSnowball.Ability.IsHidden)
                    {
                        var predictionInput = new PredictionInput
                        {
                            Owner  = this.owner,
                            Delay  = iceShards.CastPoint + iceShards.ActivationDelay,
                            Range  = iceShards.CastRange,
                            Radius = iceShards.Radius,
                        };

                        var predictionOutput = prediction.GetPrediction(predictionInput.WithTarget(target));
                        var castPosition     = predictionOutput.CastPosition;

                        Vector3 position;
                        if (target.NetworkActivity == NetworkActivity.Move)
                        {
                            var castRange                = iceShards.CastRange - 200;
                            var ownersDirection          = owner.Direction2D(castRange);
                            var targetsDirection         = target.Direction2D(castRange);
                            var targetsDirectionDistance = targetsDirection.Distance2D(ownersDirection); // Useless? Maybe? Lets just leave it there.

                            var ownersDistance = Vector3.Distance(owner.NetworkPosition,
                                                                  target.NetworkPosition + targetsDirection.ToVector3());

                            var distance = Vector2.Distance(owner.NetworkPosition.To2D(), castPosition.To2D() + target.Direction2D(target.MovementSpeed));
                            var time     = (distance / iceShards.Speed);

                            if (targetsDirectionDistance < castRange && ownersDistance > castRange)
                            {
                                position = castPosition + target.Direction2D(time < 1 ? 75 + target.MovementSpeed * time : (target.MovementSpeed) * time).ToVector3();
                                if (this.owner.NetworkPosition.Distance(position) < castRange)
                                {
                                    iceShards.UseAbility(position);
                                    await Task.Delay(iceShards.GetCastDelay(position), token);
                                }
                            }
                        }
                    }

                    var walrusPunch = abilities.WalrusPunch;
                    if (comboMenu.ComboAbilitiesItem.Value.IsEnabled(walrusPunch.Ability.Name) && walrusPunch.CanBeCasted && target.IsValidTarget())
                    {
                        walrusPunch.UseAbility(target);
                        await Task.Delay(walrusPunch.GetCastDelay(), token);
                    }
                }

                if (owner.IsInAttackRange(target) && !orbwalkerSettingsMenu.LockToTargetItem || orbwalkerSettingsMenu.LockToTargetItem)
                {
                    Orbwalker.OrbwalkTo(target);
                }
                else
                {
                    if (Orbwalker.CanMove())
                    {
                        Orbwalker.Move(Game.MousePosition);
                    }
                }
            }
            catch (TaskCanceledException)
            {
                // Ignored
            }
            catch (Exception ex)
            {
                LogService.Log(LogType.Error, ex);
            }
        }