public void CombatLogChanged(BasicCombatLogEntry entry) { var wowUnit = WowInterface.ObjectManager.GetWowObjectByGuid <WowUnit>(entry.DestinationGuid); if (entry.Subtype == CombatLogEntrySubtype.KILL && NpcIds.Contains(WowGuid.ToNpcId(entry.DestinationGuid)) && wowUnit != null && wowUnit.IsTaggedByMe) { ++Killed; } }
public void Execute() { if (Finished || WowInterface.Player.IsCasting) { return; } if (!WowInterface.Player.IsInCombat && DateTime.UtcNow.Subtract(LastUnitCheck).TotalMilliseconds >= 1250.0) { LastUnitCheck = DateTime.UtcNow; WowUnit = WowInterface.ObjectManager.WowObjects .OfType <WowUnit>() .Where(e => !e.IsDead && NpcIds.Contains(WowGuid.ToNpcId(e.Guid)) && !e.IsNotAttackable && WowInterface.HookManager.WowGetUnitReaction(WowInterface.Player, e) != WowUnitReaction.Friendly) .OrderBy(e => e.Position.GetDistance(WowInterface.Player.Position)) .Take(3) .OrderBy(e => WowInterface.PathfindingHandler.GetPathDistance((int)WowInterface.ObjectManager.MapId, WowInterface.Player.Position, e.Position)) .FirstOrDefault(); // Kill enemies in the path if (WowUnit != null && !WowInterface.CombatClass.IsTargetAttackable(WowUnit)) { var path = WowInterface.PathfindingHandler.GetPath((int)WowInterface.ObjectManager.MapId, WowInterface.Player.Position, WowUnit.Position); if (path != null) { var nearEnemies = WowInterface.ObjectManager.GetEnemiesInPath <WowUnit>(path, 10.0f); if (nearEnemies.Any()) { WowUnit = nearEnemies.FirstOrDefault(); } } } if (WowUnit != null) { WowInterface.HookManager.WowTargetGuid(WowUnit.Guid); } } if (WowUnit != null) { SearchAreas.NotifyDetour(); WowInterface.CombatClass.AttackTarget(); } else if (WowInterface.Player.Position.GetDistance(CurrentSpot) < 3.0f || SearchAreas.HasAbortedPath() || WowInterface.MovementEngine.Status == MovementAction.None) { CurrentSpot = SearchAreas.GetNextPosition(WowInterface); WowInterface.MovementEngine.SetMovementAction(MovementAction.Move, CurrentSpot); } }