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); } } // 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.GetBuffDataByDst(player.AgentItem)) { if (item is BuffApplyEvent && item.To == player.AgentItem && remainingBuffsByIds.TryGetValue(item.BuffID, out Buff boon)) { PresentPersonalBuffs[player].Add(boon); } } } }