public BoonColumn(SquadDamageData squadDamageData, ITheme theme) { this.squadDamageData = squadDamageData; this.theme = theme; }
/// <summary> /// Calculates statistics for an encounter, such as damage done... /// </summary> /// <param name="log">The processed log.</param> /// <param name="apiData">Data from the GW2 API, may be null, some statistics won't be calculated.</param> public LogStatistics GetStatistics(Log log, GW2ApiData apiData) { var encounter = GetEncounter(log); var phaseStats = new List <PhaseStats>(); var might = log.Skills.FirstOrDefault(x => x.Id == SkillIds.Might); var vulnerability = log.Skills.FirstOrDefault(x => x.Id == SkillIds.Vulnerability); if (might != null) { BuffSimulator.TrackBuff(might, BuffSimulationType.Intensity, 25); } if (vulnerability != null) { BuffSimulator.TrackBuff(vulnerability, BuffSimulationType.Intensity, 25); } var buffData = BuffSimulator.SimulateBuffs(log.Agents, log.Events.OfType <BuffEvent>(), encounter.GetPhases().Last().EndTime); var players = GetPlayers(log).ToArray(); foreach (var phase in encounter.GetPhases()) { var targetDamageData = new List <TargetSquadDamageData>(); long phaseDuration = phase.EndTime - phase.StartTime; foreach (var target in phase.ImportantEnemies) { var damageData = GetDamageData( players, phase.Events .OfType <DamageEvent>() .Where(x => x.Defender == target), phase.Events.OfType <SkillCastEvent>(), buffData, log.Skills, phaseDuration); targetDamageData.Add(new TargetSquadDamageData(target, phaseDuration, damageData.Values)); } var totalDamageData = new SquadDamageData(phaseDuration, GetDamageData( players, phase.Events.OfType <DamageEvent>(), phase.Events.OfType <SkillCastEvent>(), buffData, log.Skills, phaseDuration).Values ); phaseStats.Add(new PhaseStats(phase.Name, phase.StartTime, phase.EndTime, targetDamageData, totalDamageData)); } var fightTime = encounter.GetPhases().Sum(x => x.EndTime - x.StartTime); var fullFightSquadDamageData = new SquadDamageData(fightTime, GetDamageData(players, log.Events.OfType <DamageEvent>(), log.Events.OfType <SkillCastEvent>(), buffData, log.Skills, fightTime).Values); var fullFightTargetDamageData = new List <TargetSquadDamageData>(); foreach (var target in encounter.ImportantEnemies) { var damageData = GetDamageData( players, log.Events .OfType <DamageEvent>() .Where(x => x.Defender == target), log.Events.OfType <SkillCastEvent>(), buffData, log.Skills, fightTime); fullFightTargetDamageData.Add(new TargetSquadDamageData(target, fightTime, damageData.Values)); } var eventCounts = new Dictionary <Type, int>(); foreach (var e in log.Events) { var type = e.GetType(); if (!eventCounts.ContainsKey(type)) { eventCounts[type] = 0; } eventCounts[type]++; } var eventCountsByName = eventCounts.Select(x => (x.Key.Name, x.Value)).ToDictionary(x => x.Item1, x => x.Item2); var playerData = GetPlayerData(log, apiData); return(new LogStatistics(log.StartTime.ServerTime, log.PointOfView, playerData, phaseStats, fullFightSquadDamageData, fullFightTargetDamageData, buffData, encounter.GetResult(), encounter.GetName(), log.EVTCVersion, eventCountsByName, log.Agents, log.Skills)); }
public LogStatistics GetStatistics() { // TODO: This method should be mostly moved to the HtmlGenerator. var might = log.Skills.FirstOrDefault(x => x.Id == SkillIds.Might); var vulnerability = log.Skills.FirstOrDefault(x => x.Id == SkillIds.Vulnerability); if (might != null) { BuffSimulator.TrackBuff(might, BuffSimulationType.Intensity, 25); } if (vulnerability != null) { BuffSimulator.TrackBuff(vulnerability, BuffSimulationType.Intensity, 25); } var buffData = BuffSimulator.SimulateBuffs(log.Agents, log.Events.OfType <BuffEvent>(), GetEncounterEnd()); var players = GetPlayers(); var fightDurationMs = GetEncounterEnd() - GetEncounterStart(); var fullFightSquadDamageData = new SquadDamageData(fightDurationMs, GetDamageData(players, log.Events.OfType <DamageEvent>(), log.Events.OfType <SkillCastEvent>(), buffData, log.Skills, fightDurationMs).Values); var fullFightTargetDamageData = new List <TargetSquadDamageData>(); foreach (var target in log.EncounterData.Targets) { var damageData = GetDamageData( players, log.Events .OfType <DamageEvent>() .Where(x => x.Defender == target), log.Events.OfType <SkillCastEvent>(), buffData, log.Skills, fightDurationMs); fullFightTargetDamageData.Add(new TargetSquadDamageData(target, fightDurationMs, damageData.Values)); } var eventCounts = new Dictionary <Type, int>(); foreach (var e in log.Events) { var type = e.GetType(); if (!eventCounts.ContainsKey(type)) { eventCounts[type] = 0; } eventCounts[type]++; } var eventCountsByName = eventCounts.Select(x => (x.Key.Name, x.Value)).ToDictionary(x => x.Item1, x => x.Item2); var playerData = GetPlayerData(); string encounterName = new LocalizedEncounterNameProvider().GetEncounterName(log.EncounterData, log.GameLanguage); return(new LogStatistics(log.StartTime.ServerTime, log.PointOfView, playerData, fullFightSquadDamageData, fullFightTargetDamageData, buffData, GetResult(), GetMode(), encounterName, log.EvtcVersion, eventCountsByName, log.Agents, log.Skills)); }
public DamageTable(SquadDamageData squadDamageData, ITheme theme) { this.squadDamageData = squadDamageData; this.theme = theme; }