Esempio n. 1
0
        /// <summary>
        ///     Fired when the OnNewPath event is called.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="args">The <see cref="GameObjectNewPathEventArgs" /> instance containing the event data.</param>
        private void AIBaseClient_OnNewPath(AIBaseClient sender, AIBaseClientNewPathEventArgs args)
        {
            if (!sender.IsMe)
            {
                return;
            }

            CatchAxe();
        }
Esempio n. 2
0
        /// <summary>
        ///     New Path subscribed event function.
        /// </summary>
        /// <param name="sender"><see cref="AIBaseClient" /> sender</param>
        /// <param name="args">New Path event data</param>
        private static void EventDash(AIBaseClient sender, AIBaseClientNewPathEventArgs args)
        {
            var hero = sender as AIHeroClient;

            if (hero != null && hero.IsValid)
            {
                if (!DetectedDashes.ContainsKey(hero.NetworkId))
                {
                    DetectedDashes.Add(hero.NetworkId, new DashArgs());
                }

                if (args.IsDash)
                {
                    var path = new List <Vector2> {
                        hero.Position.ToVector2()
                    };
                    path.AddRange(args.Path.ToList().ToVector2());

                    DetectedDashes[hero.NetworkId].Unit      = sender;
                    DetectedDashes[hero.NetworkId].Path      = path;
                    DetectedDashes[hero.NetworkId].Speed     = args.Speed;
                    DetectedDashes[hero.NetworkId].StartPos  = hero.Position.ToVector2();
                    DetectedDashes[hero.NetworkId].StartTick = Variables.TickCount - (Game.Ping / 2);
                    DetectedDashes[hero.NetworkId].EndPos    = path.Last();
                    DetectedDashes[hero.NetworkId].EndTick   = DetectedDashes[hero.NetworkId].StartTick
                                                               + (int)
                                                               (1000
                                                                * (DetectedDashes[hero.NetworkId].EndPos.Distance(
                                                                       DetectedDashes[hero.NetworkId].StartPos)
                                                                   / DetectedDashes[hero.NetworkId].Speed));
                    DetectedDashes[hero.NetworkId].Duration = DetectedDashes[hero.NetworkId].EndTick
                                                              - DetectedDashes[hero.NetworkId].StartTick;

                    OnDash?.Invoke(MethodBase.GetCurrentMethod().DeclaringType, DetectedDashes[hero.NetworkId]);
                }
                else
                {
                    DetectedDashes[hero.NetworkId].EndTick = 0;
                }
            }
        }
            /// <summary>
            ///     On New Path subscribed event function.
            /// </summary>
            /// <param name="sender"><see cref="AIBaseClient" /> sender.</param>
            /// <param name="args">Path Data</param>
            private static void AIHeroClient_OnNewPath(AIBaseClient sender, AIBaseClientNewPathEventArgs args)
            {
                if (!(sender is AIHeroClient))
                {
                    return;
                }

                if (!StoredPaths.ContainsKey(sender.NetworkId))
                {
                    StoredPaths.Add(sender.NetworkId, new List <StoredPath>());
                }

                var newPath = new StoredPath {
                    Tick = Variables.TickCount, Path = args.Path.ToList().ToVector2()
                };

                StoredPaths[sender.NetworkId].Add(newPath);

                if (StoredPaths[sender.NetworkId].Count > 50)
                {
                    StoredPaths[sender.NetworkId].RemoveRange(0, 40);
                }
            }
Esempio n. 4
0
        /// <summary>
        /// OnNewPath event for average reaction time calculations
        /// </summary>
        private static void AIBaseClient_OnNewPath(AIBaseClient sender, AIBaseClientNewPathEventArgs args)
        {
            if (!sender.IsEnemy || !(sender.Type == GameObjectType.AIHeroClient && sender.IsValid) || args.IsDash)
            {
                return;
            }

            var enemy = EnemyInfo[sender.NetworkId];

            if (args.Path.Length < 2)
            {
                if (!enemy.IsStopped)
                {
                    enemy.StopTick         = Environment.TickCount;
                    enemy.LastWaypointTick = Environment.TickCount;
                    enemy.IsStopped        = true;
                    enemy.Count            = 0;
                    enemy.AvgTick          = 0;
                    enemy.AvgPathLenght    = 0;
                    enemy.LastAngleDiff    = 360;
                }
            }
            else
            {
                var wp      = args.Path.Select(p => p.ToVector2()).ToList();
                var sample1 = new List <Vector2>();
                wp.Insert(0, sender.PreviousPosition.ToVector2());

                for (var i = 0; i < wp.Count - 1; i++)
                {
                    var direction = (wp[i + 1] - wp[i]).Normalized();
                    sample1.Add(direction);
                }

                var sample2 = new List <Vector2>();
                for (var i = 0; i < enemy.LastWaypoints.Count - 1; i++)
                {
                    var direction = (enemy.LastWaypoints[i + 1] - enemy.LastWaypoints[i]).Normalized();
                    sample2.Add(direction);
                }

                if (sample1.Count > 0 && sample2.Count > 0)
                {
                    var sample1_avg = sample1.Average(p => p.AngleBetween(Vector2.Zero));
                    var sample2_avg = sample2.Average(p => p.AngleBetween(Vector2.Zero));
                    enemy.LastAngleDiff = Math.Abs(sample2_avg - sample1_avg);
                }
                if (!enemy.LastWaypoints.SequenceEqual(wp))
                {
                    if (!enemy.IsStopped)
                    {
                        enemy.AvgTick       = (enemy.Count * enemy.AvgTick + (Environment.TickCount - enemy.LastWaypointTick)) / ++enemy.Count;
                        enemy.AvgPathLenght = ((enemy.Count - 1) * enemy.AvgPathLenght + wp.PathLength()) / enemy.Count;
                    }
                    enemy.LastWaypointTick = Environment.TickCount;
                    enemy.IsStopped        = false;
                    enemy.LastWaypoints    = wp;

                    if (!enemy.IsWindupChecked)
                    {
                        if (Environment.TickCount - enemy.LastAATick < 300)
                        {
                            enemy.AvgOrbwalkTime = (enemy.AvgOrbwalkTime * enemy.OrbwalkCount + (enemy.LastWaypointTick - enemy.LastWindupTick)) / ++enemy.OrbwalkCount;
                        }
                        enemy.IsWindupChecked = true;
                    }
                }
            }

            EnemyInfo[sender.NetworkId] = enemy;
        }
Esempio n. 5
0
 /// <summary>
 ///     On new path event.
 /// </summary>
 /// <param name="sender">
 ///     The sender.
 /// </param>
 /// <param name="args">
 ///     The args.
 /// </param>
 private static void OnNewPath(AIBaseClient sender, AIBaseClientNewPathEventArgs args)
 {
     EventDash(sender, args);
 }