// TODO: Not working? No debuffs being cured public static PartyMember GetHighestPriorityDebuff(this EliteAPI api, Dictionary <string, IEnumerable <short> > debuffs) { var members = api.GetActivePartyMembers().Where(pm => api.CanCastOn(pm)); int lowestIndex = int.MaxValue; PartyMember priorityMember = null; foreach (PartyMember pm in members) { if (!debuffs.ContainsKey(pm.Name)) { continue; } // We get the debuffs and order them by priority, filtering for statuses we have the right spell off cooldown. var debuffIds = debuffs[pm.Name].Where(id => Data.DebuffPriorities.Keys.Cast <short>().Contains(id)); if (debuffIds.Any()) { var pmPriorities = debuffIds.Cast <StatusEffect>().OrderBy(status => Array.IndexOf(Data.DebuffPriorities.Keys.ToArray(), status)).Where(status => api.SpellAvailable(Data.DebuffPriorities[status])); if (pmPriorities.Any()) { var priority = Array.IndexOf(Data.DebuffPriorities.Keys.ToArray(), pmPriorities.FirstOrDefault()); if (priority < lowestIndex) { lowestIndex = priority; priorityMember = pm; } } } } return(priorityMember); }
public static uint AverageHpLossForParty(this EliteAPI api, int partyNumber) { IEnumerable <PartyMember> members = api.GetActivePartyMembers().Where(pm => pm.InParty(partyNumber)); if (members != null && members.Any()) { return((uint)(members.Sum(pm => pm.HPLoss()) / members.Count())); } return(0); }
public static IEnumerable <int> PartyNeedsAoeCure(this EliteAPI api, int countThreshold, int cureThreshold) { List <int> partiesResult = new List <int>(); // Full alliance list of who's active and below the threshold. var activeMembers = api.GetActivePartyMembers().Where(pm => pm.HPLoss() >= cureThreshold); // Figure out which parties specifically qualify. if (activeMembers.Where(pm => pm.InParty(1)).Count() >= countThreshold) { partiesResult.Add(1); } if (activeMembers.Where(pm => pm.InParty(2)).Count() >= countThreshold) { partiesResult.Add(2); } if (activeMembers.Where(pm => pm.InParty(3)).Count() >= countThreshold) { partiesResult.Add(3); } return(partiesResult.OrderByDescending(partyNumber => api.AverageHpLossForParty(partyNumber))); }