private static DmgDistributionDto BuildDMGDistDataMinionsInternal(ParsedEvtcLog log, FinalDPS dps, Minions minions, AbstractSingleActor target, PhaseData phase, Dictionary <long, SkillItem> usedSkills, Dictionary <long, Buff> usedBuffs) { var dto = new DmgDistributionDto(); IReadOnlyList <AbstractCastEvent> casting = minions.GetIntersectingCastEvents(log, phase.Start, phase.End); IReadOnlyList <AbstractHealthDamageEvent> damageLogs = minions.GetDamageEvents(target, log, phase.Start, phase.End); IReadOnlyList <AbstractBreakbarDamageEvent> brkDamageLogs = minions.GetBreakbarDamageEvents(target, log, phase.Start, phase.End); dto.ContributedDamage = damageLogs.Sum(x => x.HealthDamage); dto.ContributedShieldDamage = damageLogs.Sum(x => x.ShieldDamage); dto.ContributedBreakbarDamage = Math.Round(brkDamageLogs.Sum(x => x.BreakbarDamage), 1); dto.TotalDamage = dps.Damage; dto.TotalBreakbarDamage = dps.BreakbarDamage; dto.TotalCasting = casting.Sum(cl => Math.Min(cl.EndTime, phase.End) - Math.Max(cl.Time, phase.Start)); dto.Distribution = BuildDMGDistBodyData(log, casting, damageLogs, brkDamageLogs, usedSkills, usedBuffs, phase); return(dto); }
public static DmgDistributionDto BuildDMGTakenDistData(ParsedEvtcLog log, AbstractSingleActor p, PhaseData phase, Dictionary <long, SkillItem> usedSkills, Dictionary <long, Buff> usedBuffs) { var dto = new DmgDistributionDto { Distribution = new List <object[]>() }; FinalDefensesAll incomingDamageStats = p.GetDefenseStats(log, phase.Start, phase.End); IReadOnlyList <AbstractHealthDamageEvent> damageLogs = p.GetDamageTakenEvents(null, log, phase.Start, phase.End); IReadOnlyList <AbstractBreakbarDamageEvent> breakbarLogs = p.GetBreakbarDamageTakenEvents(null, log, phase.Start, phase.End); var damageLogsBySkill = damageLogs.GroupBy(x => x.Skill).ToDictionary(x => x.Key, x => x.ToList()); var breakbarLogsBySkill = breakbarLogs.GroupBy(x => x.Skill).ToDictionary(x => x.Key, x => x.ToList()); dto.ContributedDamage = incomingDamageStats.DamageTaken; dto.ContributedShieldDamage = incomingDamageStats.DamageBarrier; dto.ContributedBreakbarDamage = incomingDamageStats.BreakbarDamageTaken; foreach (KeyValuePair <SkillItem, List <AbstractHealthDamageEvent> > pair in damageLogsBySkill) { dto.Distribution.Add(GetDMGDtoItem(pair.Key, pair.Value, null, breakbarLogsBySkill, usedSkills, usedBuffs, log.Buffs, phase)); } return(dto); }