private Composite FindPartySubroutine(int partyIndex, int minAverageHealth, int maxAverageHealth, float maxDistanceBetweenPlayers, int minUnits, string label)
{
return new TreeSharp.Action(a =>
{
var players = Me.RaidMemberInfos.Where(x => x.GroupNumber == partyIndex && ObjectManager.ObjectList.Any(y => y.Guid == x.Guid) && x.Location3D.Distance2DSqr(Me.Location) < 40 * 40);
WoWPlayer best = null;
int score = minUnits - 1;
foreach (var player in players)
{
var hits = players.Where(p => p.Location3D.Distance2DSqr(player.Location3D) < maxDistanceBetweenPlayers);
var avgHealth = hits.Average(p => p.Health * 100 / p.HealthMax);
var count = hits.Count();
Logparty("FindPartySubroutine hits: {0} AvgHealth: {1} Player: {2}", score, avgHealth, player.ToPlayer());
if (avgHealth >= minAverageHealth && avgHealth < maxAverageHealth && count > score)
{
best = player.ToPlayer();
score = count;
Logparty("Find Party hits: {0} AvgHealth: {1} Player: {2}", score, avgHealth, player.ToPlayer());
}
}
if (best != null)
{
Logparty(label + " score {1}", "Sark", score);
best.Target();
return RunStatus.Success;
}
return RunStatus.Failure;
});
}