Пример #1
0
        // 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);
        }
Пример #2
0
        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);
        }
Пример #3
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)));
        }