public GeneralStatistics(CombatData combatData, List <Player> players, BuffsContainer boons) { HashSet <long> skillIDs = combatData.GetSkills(); // Main boons foreach (Buff boon in boons.BuffsByNature[BuffNature.Boon]) { if (skillIDs.Contains(boon.ID)) { PresentBoons.Add(boon); } } // Main Conditions foreach (Buff boon in boons.BuffsByNature[BuffNature.Condition]) { if (skillIDs.Contains(boon.ID)) { PresentConditions.Add(boon); } } // Important class specific boons foreach (Buff boon in boons.BuffsByNature[BuffNature.OffensiveBuffTable]) { if (skillIDs.Contains(boon.ID)) { PresentOffbuffs.Add(boon); } } foreach (Buff boon in boons.BuffsByNature[BuffNature.DefensiveBuffTable]) { if (skillIDs.Contains(boon.ID)) { PresentDefbuffs.Add(boon); } } foreach (Buff boon in boons.BuffsBySource[GeneralHelper.Source.FractalInstability]) { if (skillIDs.Contains(boon.ID)) { PresentFractalInstabilities.Add(boon); } } // All class specific boons var remainingBuffsByIds = boons.BuffsByNature[BuffNature.GraphOnlyBuff].GroupBy(x => x.ID).ToDictionary(x => x.Key, x => x.ToList().FirstOrDefault()); foreach (Player player in players) { PresentPersonalBuffs[player] = new HashSet <Buff>(); foreach (AbstractBuffEvent item in combatData.GetBuffData(player.AgentItem)) { if (item is BuffApplyEvent && item.To == player.AgentItem && remainingBuffsByIds.TryGetValue(item.BuffID, out Buff boon)) { PresentPersonalBuffs[player].Add(boon); } } } }
private static HashSet <AgentItem> GetBannerAgents(CombatData combatData, long id, HashSet <AgentItem> playerAgents) { return(new HashSet <AgentItem>(combatData.GetBuffData(id).Where(x => x is BuffApplyEvent && x.CreditedBy.Type == AgentItem.AgentType.Gadget && x.CreditedBy.Master == null && playerAgents.Contains(x.To.GetFinalMaster())).Select(x => x.CreditedBy))); }
internal StatisticsHelper(CombatData combatData, IReadOnlyList <Player> players, BuffsContainer buffs) { IReadOnlyCollection <long> skillIDs = combatData.GetSkills(); // Main boons foreach (Buff boon in buffs.BuffsByClassification[BuffClassification.Boon]) { if (skillIDs.Contains(boon.ID)) { _presentBoons.Add(boon); } } // Main Conditions foreach (Buff condition in buffs.BuffsByClassification[BuffClassification.Condition]) { if (skillIDs.Contains(condition.ID)) { _presentConditions.Add(condition); } } // Important class specific boons foreach (Buff offensiveBuff in buffs.BuffsByClassification[BuffClassification.Offensive]) { if (skillIDs.Contains(offensiveBuff.ID)) { _presentOffbuffs.Add(offensiveBuff); } } foreach (Buff supportBuff in buffs.BuffsByClassification[BuffClassification.Support]) { if (skillIDs.Contains(supportBuff.ID)) { _presentSupbuffs.Add(supportBuff); } } foreach (Buff defensiveBuff in buffs.BuffsByClassification[BuffClassification.Defensive]) { if (skillIDs.Contains(defensiveBuff.ID)) { _presentDefbuffs.Add(defensiveBuff); } } foreach (Buff gearBuff in buffs.BuffsByClassification[BuffClassification.Gear]) { if (skillIDs.Contains(gearBuff.ID)) { _presentGearbuffs.Add(gearBuff); } } foreach (Buff debuff in buffs.BuffsByClassification[BuffClassification.Debuff]) { if (skillIDs.Contains(debuff.ID)) { _presentDebuffs.Add(debuff); } } // All class specific boons var remainingBuffsByIds = buffs.BuffsByClassification[BuffClassification.Other].GroupBy(x => x.ID).ToDictionary(x => x.Key, x => x.ToList().FirstOrDefault()); foreach (Player player in players) { _presentRemainingBuffsPerPlayer[player] = new HashSet <Buff>(); foreach (AbstractBuffEvent item in combatData.GetBuffData(player.AgentItem)) { if (item is BuffApplyEvent && item.To == player.AgentItem && remainingBuffsByIds.TryGetValue(item.BuffID, out Buff boon)) { _presentRemainingBuffsPerPlayer[player].Add(boon); } } } }