//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; } }
//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; } }