Example #1
0
        private void OnAddTrackingProjectile(TrackingProjectileAddedEventArgs args)
        {
            if (!this.Menu.AbilitySettings.IsCounterEnabled(this.Ability.Name))
            {
                return;
            }

            try
            {
                var projectile = args.TrackingProjectile;
                if (projectile.Target?.Handle != this.Owner.Handle)
                {
                    return;
                }

                var source = projectile.Source as Unit;
                if (source == null)
                {
                    return;
                }

                var unit = EntityManager9.GetUnit(source.Handle);
                if (unit == null)
                {
                    return;
                }

                this.projectiles[projectile] = unit.GetAttackDamage(this.Owner, DamageValue.Maximum);
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Example #2
0
        private void OnAddTrackingProjectile(TrackingProjectileAddedEventArgs args)
        {
            try
            {
                var projectile = args.TrackingProjectile;
                if (projectile.IsAutoAttackProjectile())
                {
                    return;
                }

                var target = EntityManager9.GetUnit(projectile.Target.Handle);
                if (target == null || target.Team != this.myTeam)
                {
                    return;
                }

                var source = projectile.Source;
                if (source != null)
                {
                    //// enemy ability, but added though ally
                    //// might add some ability prediction problems...
                    //var thoughAlly = target.Team == this.myTeam && source.Team == this.myTeam;

                    //var ability = this.evadableAbilities.OfType<IProjectile>()
                    //    .FirstOrDefault(
                    //        x => (int)x.ActiveAbility.Speed == projectile.Speed && x.ActiveAbility.TimeSinceCasted < 1.5f
                    //             && (thoughAlly || x.ActiveAbility.Owner.Handle == source.Handle));

                    var ability = this.evadableAbilities
                                  .Where(
                        x => x.Ability.Owner.Handle == source.Handle &&
                        (x.Ability.TimeSinceCasted < 1.5f + (x.Ability is IChanneled channeled ? channeled.ChannelTime : 0) ||
                         x.Ability.BaseAbility.IsHidden))
                                  .OfType <IProjectile>()
                                  .FirstOrDefault(x => (int)x.ActiveAbility.Speed == projectile.Speed);

                    ability?.AddProjectile(projectile, target);
                    return;
                }

                var predictedAbilities = this.evadableAbilities.Where(
                    x => !x.Ability.Owner.IsVisible || x.Ability.TimeSinceCasted < 1.5f
                    /*+ x.AdditionalDelay*/)
                                         .OfType <IProjectile>()
                                         .Where(x => (int)x.ActiveAbility.Speed == projectile.Speed)
                                         .ToList();

                if (predictedAbilities.Count == 1)
                {
                    predictedAbilities[0].AddProjectile(projectile, target);
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Example #3
0
        private void OnAddTrackingProjectile(TrackingProjectileAddedEventArgs args)
        {
            if (args.IsCollection)
            {
                return;
            }

            try
            {
                if (!this.Menu.AbilitySettings.IsCounterEnabled(this.Ability.Name))
                {
                    return;
                }

                var projectile = args.TrackingProjectile;
                if (projectile == null || projectile.Source == null)
                {
                    return;
                }

                if (projectile.Target?.Handle != this.Ability.Owner.Handle)
                {
                    return;
                }

                var unit = EntityManager9.GetUnit(projectile.Source.Handle);
                if (unit == null || unit.Team == this.Ability.Owner.Team)
                {
                    return;
                }

                if (this.Ability.CanBeCasted())
                {
                    this.ActiveAbility.UseAbility(false, true);
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Example #4
0
        private void OnAddTrackingProjectile(TrackingProjectileAddedEventArgs e)
        {
            try
            {
                var source = e.TrackingProjectile.Source;
                if (source?.IsValid != true)
                {
                    return;
                }

                var controllable = this.controllableUnits.Find(x => x.Handle == source.Handle);
                if (controllable == null)
                {
                    return;
                }

                controllable.MoveSleeper.Reset();
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }
Example #5
0
        private void ProjectileManager_TrackingProjectileAdded(TrackingProjectileAddedEventArgs e)
        {
            var trackingProjectile = e.TrackingProjectile;

            Console.WriteLine("TrackingProjectileAdded: " + trackingProjectile.Source + "  " + trackingProjectile.Target + "  " + trackingProjectile.TargetPosition + "  " + trackingProjectile.Handle);
        }
Example #6
0
        private void OnAddTrackingProjectile(TrackingProjectileAddedEventArgs e)
        {
            try
            {
                var projectile = e.TrackingProjectile;
                if (!projectile.IsAutoAttackProjectile())
                {
                    return;
                }

                var source = this.unitManager.GetUnit(projectile.Source);
                if (source?.IsControllable != false)
                {
                    return;
                }

                var target = projectile.Target;
                if (target == null)
                {
                    return;
                }

                var allUnits = this.unitManager.Units.ToList();
                var damages  = allUnits.SelectMany(x => x.IncomingDamage).OfType <RangedDamage>().ToList();
                var damage   = damages.LastOrDefault(
                    x => x.Projectile == null && !x.IsPredicted && x.MinDamage > 0 && x.Source.Unit.Handle == source.Unit.Handle &&
                    x.Target.Unit.Handle == target.Handle);

                if (damage != null)
                {
                    if (GameManager.RawGameTime < damage.HitTime)
                    {
                        damage.AddProjectile(projectile);
                    }
                }
                else
                {
                    damage = damages.Find(x => x.Projectile == null && x.Source.Unit.Handle == source.Unit.Handle);

                    if (damage != null)
                    {
                        //wrong projectile target
                        damage.Delete();
                        this.AttackCanceled?.Invoke(this, damage);
                    }

                    var newTarget = allUnits.Find(x => x.Unit.Handle == target.Handle);
                    if (newTarget == null)
                    {
                        return;
                    }

                    damage = (RangedDamage)source.AddDamage(newTarget, 0, false, true);
                    damage.AddProjectile(projectile);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }
        }