// helpers public static EXTBarrierStatsPlayerDetailsDto BuildPlayerBarrierData(ParsedEvtcLog log, AbstractSingleActor actor, Dictionary <long, SkillItem> usedSkills, Dictionary <long, Buff> usedBuffs) { var dto = new EXTBarrierStatsPlayerDetailsDto { BarrierDistributions = new List <EXTBarrierStatsBarrierDistributionDto>(), BarrierDistributionsTargets = new List <List <EXTBarrierStatsBarrierDistributionDto> >(), IncomingBarrierDistributions = new List <EXTBarrierStatsBarrierDistributionDto>(), Minions = new List <EXTBarrierStatsPlayerDetailsDto>(), }; foreach (PhaseData phase in log.FightData.GetPhases(log)) { dto.BarrierDistributions.Add(EXTBarrierStatsBarrierDistributionDto.BuildFriendlyBarrierDistData(log, actor, null, phase, usedSkills, usedBuffs)); var dmgTargetsDto = new List <EXTBarrierStatsBarrierDistributionDto>(); foreach (AbstractSingleActor target in log.Friendlies) { dmgTargetsDto.Add(EXTBarrierStatsBarrierDistributionDto.BuildFriendlyBarrierDistData(log, actor, target, phase, usedSkills, usedBuffs)); } dto.BarrierDistributionsTargets.Add(dmgTargetsDto); dto.IncomingBarrierDistributions.Add(EXTBarrierStatsBarrierDistributionDto.BuildIncomingBarrierDistData(log, actor, phase, usedSkills, usedBuffs)); } foreach (KeyValuePair <long, Minions> pair in actor.GetMinions(log)) { dto.Minions.Add(BuildFriendlyMinionsHealingData(log, actor, pair.Value, usedSkills, usedBuffs)); } return(dto); }
private static EXTBarrierStatsBarrierDistributionDto BuildBarrierDistDataMinionsInternal(ParsedEvtcLog log, EXTFinalOutgoingBarrierStat outgoingBarrierStats, Minions minions, AbstractSingleActor target, PhaseData phase, Dictionary <long, SkillItem> usedSkills, Dictionary <long, Buff> usedBuffs) { var dto = new EXTBarrierStatsBarrierDistributionDto(); IReadOnlyList <AbstractCastEvent> casting = minions.GetIntersectingCastEvents(log, phase.Start, phase.End); IReadOnlyList <EXTAbstractBarrierEvent> barrierLogs = minions.EXTBarrier.GetOutgoingBarrierEvents(target, log, phase.Start, phase.End); dto.ContributedBarrier = barrierLogs.Sum(x => x.BarrierGiven); dto.TotalBarrier = outgoingBarrierStats.Barrier; dto.TotalCasting = casting.Sum(cl => Math.Min(cl.EndTime, phase.End) - Math.Max(cl.Time, phase.Start)); dto.Distribution = BuildBarrierDistBodyData(log, casting, barrierLogs, usedSkills, usedBuffs, phase); return(dto); }
public static EXTBarrierStatsBarrierDistributionDto BuildIncomingBarrierDistData(ParsedEvtcLog log, AbstractSingleActor p, PhaseData phase, Dictionary <long, SkillItem> usedSkills, Dictionary <long, Buff> usedBuffs) { var dto = new EXTBarrierStatsBarrierDistributionDto { Distribution = new List <object[]>() }; EXTFinalIncomingBarrierStat incomingBarrierStats = p.EXTBarrier.GetIncomingBarrierStats(null, log, phase.Start, phase.End); IReadOnlyList <EXTAbstractBarrierEvent> barrierLogs = p.EXTBarrier.GetIncomingBarrierEvents(null, log, phase.Start, phase.End); var barrierLogsBySkill = barrierLogs.GroupBy(x => x.Skill).ToDictionary(x => x.Key, x => x.ToList()); dto.ContributedBarrier = incomingBarrierStats.BarrierReceived; var conditionsById = log.StatisticsHelper.PresentConditions.ToDictionary(x => x.ID); foreach (KeyValuePair <SkillItem, List <EXTAbstractBarrierEvent> > pair in barrierLogsBySkill) { dto.Distribution.Add(GetBarrierToItem(pair.Key, pair.Value, null, usedSkills, usedBuffs, log.Buffs, phase)); } return(dto); }
private static EXTBarrierStatsPlayerDetailsDto BuildFriendlyMinionsHealingData(ParsedEvtcLog log, AbstractSingleActor actor, Minions minion, Dictionary <long, SkillItem> usedSkills, Dictionary <long, Buff> usedBuffs) { var dto = new EXTBarrierStatsPlayerDetailsDto { BarrierDistributions = new List <EXTBarrierStatsBarrierDistributionDto>(), BarrierDistributionsTargets = new List <List <EXTBarrierStatsBarrierDistributionDto> >() }; foreach (PhaseData phase in log.FightData.GetPhases(log)) { var dmgTargetsDto = new List <EXTBarrierStatsBarrierDistributionDto>(); foreach (AbstractSingleActor target in log.Friendlies) { dmgTargetsDto.Add(EXTBarrierStatsBarrierDistributionDto.BuildFriendlyMinionBarrierDistData(log, actor, minion, target, phase, usedSkills, usedBuffs)); } dto.BarrierDistributionsTargets.Add(dmgTargetsDto); dto.BarrierDistributions.Add(EXTBarrierStatsBarrierDistributionDto.BuildFriendlyMinionBarrierDistData(log, actor, minion, null, phase, usedSkills, usedBuffs)); } return(dto); }