예제 #1
0
        //public static void Entity_OnIntegerPropertyChange(Entity sender, EntityIntegerPropertyChangeEventArgs args)
        //{
        //    if (!Game.IsInGame || Game.IsPaused || args.Property != "m_NetworkActivity" || MaxCount < 1)
        //        return;

        //    var unit = sender as Unit;
        //    var data =
        //        AttackAnimation.FirstOrDefault(
        //            unitData => unitData.UnitName == unit.Name || unitData.UnitClassID == unit.ClassID);
        //    if (data == null) 
        //        return;
        //    var gameTime = Game.GameTime;
        //    var attackPoint = UnitDatabase.GetAttackPoint(unit);
        //    var attackRate = UnitDatabase.GetAttackRate(unit);
        //    //Console.WriteLine(attackPoint + " " + attackRate);
        //   // Console.WriteLine("{0}  {1}",data.EndTime,gameTime);
        //    if (args.NewValue == 424 && Math.Abs(data.MoveTime) == 0)
        //    {
        //        data.MoveTime = gameTime + attackPoint;
        //        data.EndTime = gameTime + attackRate;
        //        // Console.WriteLine(gameTime + " " + data.MoveTime + " " + data.EndTime);
        //    }
        //    else if (data.MoveTime > 0 && gameTime > data.MoveTime && !data.CanMove)
        //    {
        //        data.CanMove = true;
        //    }
        //    else if (data.EndTime > 0 && data.EndTime <= gameTime)
        //    {
        //        data.CanMove = false;
        //        data.MoveTime = 0;
        //        data.EndTime = 0;
        //    }
        //}

        public static void TrackTick(EventArgs args)
        {
            if (!Game.IsInGame || Game.IsPaused)
            {
                return;
            }
            var me = ObjectMgr.LocalHero;
            if (me == null)
            {
                return;
            }
            //Console.WriteLine(me.ClassID);
            var gameTime = Game.GameTime;
            var tick = Environment.TickCount;
            if (StartTime == 0)
            {
                StartTime = gameTime;
            }
            else if (gameTime - StartTime >= 1)
            {
                StartTime = gameTime;
                MaxCount = Count;
                Count = 0;
            }
            else
            {
                Count += 1;
            }

            if (MaxCount < 1)
            {
                return;
            }
            //Console.WriteLine(MaxCount);
            var units = ObjectMgr.GetEntities<Unit>();
            foreach (var unit in units)
            {
                var data =
                    AttackAnimation.FirstOrDefault(
                        unitData => unitData.UnitName == unit.Name || unitData.UnitClassId == unit.ClassID);
                if (data == null && unit.IsAlive && unit.IsVisible)
                {
                    //Console.WriteLine(unit.ClassID);
                    data = new AttackAnimation(unit.Name, unit.ClassID, 0, 0, false);
                    AttackAnimation.Add(data);
                }
                if (data != null && (!unit.IsAlive || !unit.IsVisible))
                {
                    AttackAnimation.Remove(data);
                    continue;
                }
                if (data == null)
                {
                    continue;
                }
                if (data.MoveTime > 0 && gameTime > data.MoveTime)
                {
                    data.CanMove = true;
                }
                if (!(data.EndTime <= gameTime && data.EndTime > 0))
                {
                    continue;
                }
                data.CanMove = false;
                data.MoveTime = 0;
                data.EndTime = 0;
            }
        }
예제 #2
0
        //public static void Entity_OnIntegerPropertyChange(Entity sender, EntityIntegerPropertyChangeEventArgs args)
        //{
        //    if (!Game.IsInGame || Game.IsPaused || args.Property != "m_NetworkActivity" || MaxCount < 1)
        //        return;

        //    var unit = sender as Unit;
        //    var data =
        //        AttackAnimation.FirstOrDefault(
        //            unitData => unitData.UnitName == unit.Name || unitData.UnitClassID == unit.ClassID);
        //    if (data == null)
        //        return;
        //    var gameTime = Game.GameTime;
        //    var attackPoint = UnitDatabase.GetAttackPoint(unit);
        //    var attackRate = UnitDatabase.GetAttackRate(unit);
        //    //Console.WriteLine(attackPoint + " " + attackRate);
        //   // Console.WriteLine("{0}  {1}",data.EndTime,gameTime);
        //    if (args.NewValue == 424 && Math.Abs(data.MoveTime) == 0)
        //    {
        //        data.MoveTime = gameTime + attackPoint;
        //        data.EndTime = gameTime + attackRate;
        //        // Console.WriteLine(gameTime + " " + data.MoveTime + " " + data.EndTime);
        //    }
        //    else if (data.MoveTime > 0 && gameTime > data.MoveTime && !data.CanMove)
        //    {
        //        data.CanMove = true;
        //    }
        //    else if (data.EndTime > 0 && data.EndTime <= gameTime)
        //    {
        //        data.CanMove = false;
        //        data.MoveTime = 0;
        //        data.EndTime = 0;
        //    }
        //}

        /// <summary>
        ///     Tracks attack animation of units
        /// </summary>
        /// <param name="args"></param>
        public static void TrackTick(EventArgs args)
        {
            if (!Game.IsInGame || Game.IsPaused)
            {
                return;
            }
            var me = ObjectMgr.LocalHero;

            if (me == null)
            {
                return;
            }
            //Console.WriteLine(me.ClassID);
            var gameTime = Game.GameTime;
            var tick     = Environment.TickCount;

            if (StartTime == 0)
            {
                StartTime = gameTime;
            }
            else if (gameTime - StartTime >= 1)
            {
                StartTime = gameTime;
                MaxCount  = Count;
                Count     = 0;
            }
            else
            {
                Count += 1;
            }

            if (MaxCount < 1)
            {
                return;
            }
            //Console.WriteLine(MaxCount);
            var units = ObjectMgr.GetEntities <Unit>();

            foreach (var unit in units)
            {
                var data =
                    AttackAnimation.FirstOrDefault(
                        unitData => unitData.UnitName == unit.Name || unitData.UnitClassId == unit.ClassID);
                if (data == null && unit.IsAlive && unit.IsVisible)
                {
                    //Console.WriteLine(unit.ClassID);
                    data = new AttackAnimation(unit.Name, unit.ClassID, 0, 0, false);
                    AttackAnimation.Add(data);
                }
                if (data != null && (!unit.IsAlive || !unit.IsVisible))
                {
                    AttackAnimation.Remove(data);
                    continue;
                }
                if (data == null)
                {
                    continue;
                }
                if (data.MoveTime > 0 && gameTime > data.MoveTime)
                {
                    data.CanMove = true;
                }
                if (!(data.EndTime <= gameTime && data.EndTime > 0))
                {
                    continue;
                }
                data.CanMove  = false;
                data.MoveTime = 0;
                data.EndTime  = 0;
            }
        }