private static List <object> GetDMGTargetStatData(FinalGameplayStats stats) { var data = new List <object> { stats.DirectDamageCount, // 0 stats.CritableDirectDamageCount, // 1 stats.CriticalCount, // 2 stats.CriticalDmg, // 3 stats.FlankingCount, // 4 stats.GlanceCount, // 5 stats.Missed, // 6 stats.Interrupts, // 7 stats.Invulned, // 8 stats.Evaded, // 9 stats.Blocked, // 10 stats.ConnectedDirectDamageCount, // 11 stats.Killed, // 12 stats.Downed, // 13 }; return(data); }
public static JsonGameplayStats BuildJsonGameplayStats(FinalGameplayStats stats) { var jsonGameplayStats = new JsonGameplayStats(); FillJsonGamePlayStats(jsonGameplayStats, stats); return(jsonGameplayStats); }
public static List <List <object> > BuildGameplayStatsData(ParsedEvtcLog log, PhaseData phase) { var list = new List <List <object> >(); foreach (AbstractSingleActor actor in log.Friendlies) { FinalGameplayStats stats = actor.GetGameplayStats(log, phase.Start, phase.End); list.Add(GetGameplayStatData(stats)); } return(list); }
public JsonGameplayStats(FinalGameplayStats stats) { DirectDamageCount = stats.DirectDamageCount; CritableDirectDamageCount = stats.CritableDirectDamageCount; CriticalRate = stats.CriticalCount; CriticalDmg = stats.CriticalDmg; FlankingRate = stats.FlankingCount; GlanceRate = stats.GlanceCount; Missed = stats.Missed; Interrupts = stats.Interrupts; Invulned = stats.Invulned; }
private void CreateBossDMGStatsTable(int phaseIndex) { //generate dmgstats table= WriteLine(new[] { "Sub Group", "Profession", "Name", "Critical%", "Critical hits", "Critical DMG", "Scholar%", "Scholar hits", "Scholar DMG", "Scholar % increase", "Moving%", "Moving Hits", "Moving DMG", "Moving % increase", "Flanking%", "Flanking hits", "Glancing%", "Glancing Hits", "Blind%", "Blind Hits", "Total Hits", "Hits to Interupt", "Hits Invulned", "Time wasted", "Time saved", "Weapon Swaps" }); int count = 0; foreach (Player player in _log.PlayerList) { if (player.IsFakeActor) { continue; } FinalGameplayStatsAll stats = player.GetGameplayStats(_log, phaseIndex); FinalGameplayStats statsBoss = player.GetGameplayStats(_log, phaseIndex, _legacyTarget); Dictionary <string, List <DamageModifierStat> > damageMods = player.GetDamageModifierStats(_log, _legacyTarget); var scholar = new DamageModifierStat(0, 0, 0, 0); var moving = new DamageModifierStat(0, 0, 0, 0); if (damageMods.TryGetValue("Scholar Rune", out List <DamageModifierStat> schoDict)) { scholar = schoDict[phaseIndex]; } if (damageMods.TryGetValue("Moving Bonus", out List <DamageModifierStat> moveDict)) { moving = moveDict[phaseIndex]; } WriteLine(new[] { player.Group.ToString(), player.Prof, player.Character, Math.Round((double)(statsBoss.CriticalCount) / statsBoss.CritableDirectDamageCount * 100, 1).ToString(), statsBoss.CriticalCount.ToString(), statsBoss.CriticalDmg.ToString(), Math.Round((double)(scholar.HitCount) / scholar.TotalHitCount * 100, 1).ToString(), scholar.HitCount.ToString(), scholar.DamageGain.ToString(), Math.Round(100.0 * (scholar.TotalDamage / (scholar.TotalDamage - scholar.DamageGain) - 1.0), 3).ToString(), Math.Round((double)(moving.HitCount) / moving.TotalHitCount * 100, 1).ToString(), moving.HitCount.ToString(), moving.DamageGain.ToString(), Math.Round(100.0 * (moving.TotalDamage / (moving.TotalDamage - moving.DamageGain) - 1.0), 3).ToString(), Math.Round(statsBoss.FlankingCount / (double)statsBoss.DirectDamageCount * 100, 1).ToString(), statsBoss.FlankingCount.ToString(), Math.Round(statsBoss.GlanceCount / (double)statsBoss.DirectDamageCount * 100, 1).ToString(), statsBoss.GlanceCount.ToString(), Math.Round(statsBoss.Missed / (double)statsBoss.DirectDamageCount * 100, 1).ToString(), statsBoss.Missed.ToString(), statsBoss.DirectDamageCount.ToString(), statsBoss.Interrupts.ToString(), statsBoss.Invulned.ToString(), stats.TimeWasted.ToString(), stats.TimeSaved.ToString(), stats.SwapCount.ToString() }); count++; } while (count < 15)//so each graph has equal spacing { NewLine(); count++; } }
private void CreateDmgStatsTable(int phaseIndex) { //generate dmgstats table WriteLine(new[] { "Sub Group", "Profession", "Name", "Critical%", "Critical hits", "Critical DMG", "Scholar%", "Scholar hits", "Scholar DMG", "Scholar % increase", "Moving%", "Moving Hits", "Moving DMG", "Moving % increase", "Flanking%", "Flanking hits", "Glancing%", "Glancing Hits", "Blind%", "Blind Hits", "Total Hits", "Hits to Interupt", "Hits Invulned", "Time wasted", "Time saved", "Weapon Swaps" }); int count = 0; PhaseData phase = _phases[phaseIndex]; foreach (Player player in _noFakePlayers) { FinalGameplayStats gameplayStats = player.GetGameplayStats(_log, phase.Start, phase.End); FinalOffensiveStats offStats = player.GetOffensiveStats(null, _log, phase.Start, phase.End); IReadOnlyDictionary <string, DamageModifierStat> damageMods = player.GetDamageModifierStats(_legacyTarget, _log, phase.Start, phase.End); var scholar = new DamageModifierStat(0, 0, 0, 0); var moving = new DamageModifierStat(0, 0, 0, 0); if (damageMods.TryGetValue("Scholar Rune", out DamageModifierStat schoDict)) { scholar = schoDict; } if (damageMods.TryGetValue("Moving Bonus", out DamageModifierStat moveDict)) { moving = moveDict; } WriteLine(new[] { player.Group.ToString(), player.Spec.ToString(), player.Character, Math.Round((double)(offStats.CriticalCount) / offStats.CritableDirectDamageCount * 100, 1).ToString(), offStats.CriticalCount.ToString(), offStats.CriticalDmg.ToString(), Math.Round((double)(scholar.HitCount) / scholar.TotalHitCount * 100, 1).ToString(), scholar.HitCount.ToString(), scholar.DamageGain.ToString(), Math.Round(100.0 * (scholar.TotalDamage / (scholar.TotalDamage - scholar.DamageGain) - 1.0), 3).ToString(), Math.Round((double)(moving.HitCount) / moving.TotalHitCount * 100, 1).ToString(), moving.HitCount.ToString(), moving.DamageGain.ToString(), Math.Round(100.0 * (moving.TotalDamage / (moving.TotalDamage - moving.DamageGain) - 1.0), 3).ToString(), Math.Round(offStats.FlankingCount / (double)offStats.ConnectedDirectDamageCount * 100, 1).ToString(), offStats.FlankingCount.ToString(), Math.Round(offStats.GlanceCount / (double)offStats.ConnectedDirectDamageCount * 100, 1).ToString(), offStats.GlanceCount.ToString(), Math.Round(offStats.Missed / (double)offStats.DirectDamageCount * 100, 1).ToString(), offStats.Missed.ToString(), offStats.DirectDamageCount.ToString(), offStats.Interrupts.ToString(), offStats.Invulned.ToString(), gameplayStats.TimeWasted.ToString(), gameplayStats.TimeSaved.ToString(), gameplayStats.SwapCount.ToString() }); count++; } while (count < 15)//so each graph has equal spacing { NewLine(); count++; } }
public static List <List <List <object> > > BuildDMGStatsTargetsData(ParsedEvtcLog log, PhaseData phase) { var list = new List <List <List <object> > >(); foreach (Player player in log.PlayerList) { var playerData = new List <List <object> >(); foreach (NPC target in phase.Targets) { FinalGameplayStats statsTarget = player.GetGameplayStats(target, log, phase.Start, phase.End); playerData.Add(GetDMGTargetStatData(statsTarget)); } list.Add(playerData); } return(list); }
internal JsonGameplayStats(FinalGameplayStats stats) { TotalDamageCount = stats.TotalDamageCount; DirectDamageCount = stats.DirectDamageCount; ConnectedDirectDamageCount = stats.ConnectedDirectDamageCount; CritableDirectDamageCount = stats.CritableDirectDamageCount; CriticalRate = stats.CriticalCount; CriticalDmg = stats.CriticalDmg; FlankingRate = stats.FlankingCount; GlanceRate = stats.GlanceCount; Missed = stats.Missed; Blocked = stats.Blocked; Evaded = stats.Evaded; Interrupts = stats.Interrupts; Invulned = stats.Invulned; }
public static List <List <List <object> > > BuildDMGStatsTargetsData(ParsedEvtcLog log, PhaseData phase) { var list = new List <List <List <object> > >(); foreach (AbstractSingleActor actor in log.Friendlies) { var playerData = new List <List <object> >(); foreach (AbstractSingleActor target in phase.Targets) { FinalGameplayStats statsTarget = actor.GetGameplayStats(target, log, phase.Start, phase.End); playerData.Add(GetDMGTargetStatData(statsTarget)); } list.Add(playerData); } return(list); }
public static List <List <List <object> > > BuildDMGStatsTargetsData(ParsedLog log, int phaseIndex) { var list = new List <List <List <object> > >(); PhaseData phase = log.FightData.GetPhases(log)[phaseIndex]; foreach (Player player in log.PlayerList) { var playerData = new List <List <object> >(); foreach (NPC target in phase.Targets) { FinalGameplayStats statsTarget = player.GetGameplayStats(log, phaseIndex, target); playerData.Add(PhaseDto.GetDMGTargetStatData(statsTarget)); } list.Add(playerData); } return(list); }
public static List <object> GetDMGTargetStatData(FinalGameplayStats stats) { var data = new List <object> { stats.DirectDamageCount, // 0 stats.CritableDirectDamageCount, // 1 stats.CriticalCount, // 2 stats.CriticalDmg, // 3 stats.FlankingCount, // 4 stats.GlanceCount, // 5 stats.Missed, // 6 stats.Interrupts, // 7 stats.Invulned // 8 }; return(data); }
// helper methods private static List <object> GetGameplayStatData(FinalGameplayStats stats) { var data = new List <object> { // commons stats.TimeWasted, // 0 stats.Wasted, // 1 stats.TimeSaved, // 2 stats.Saved, // 3 stats.SwapCount, // 4 Math.Round(stats.StackDist, 2), // 5 Math.Round(stats.DistToCom, 2), // 6 stats.SkillCastUptime, // 7 stats.SkillCastUptimeNoAA, // 8 }; return(data); }
public static JsonGameplayStatsAll BuildJsonGameplayStatsAll(FinalGameplayStats stats, FinalOffensiveStats offStats) { var jsonGameplayStatsAll = new JsonGameplayStatsAll { Wasted = stats.Wasted, TimeWasted = stats.TimeWasted, Saved = stats.Saved, TimeSaved = stats.TimeSaved, StackDist = stats.StackDist, DistToCom = stats.DistToCom, AvgBoons = stats.AvgBoons, AvgActiveBoons = stats.AvgActiveBoons, AvgConditions = stats.AvgConditions, AvgActiveConditions = stats.AvgActiveConditions, SwapCount = stats.SwapCount, SkillCastUptime = stats.SkillCastUptime, SkillCastUptimeNoAA = stats.SkillCastUptimeNoAA, }; FillJsonGamePlayStats(jsonGameplayStatsAll, offStats); return(jsonGameplayStatsAll); }
private static void FillJsonGamePlayStats(JsonGameplayStats jsonGameplayStats, FinalGameplayStats stats) { jsonGameplayStats.TotalDamageCount = stats.TotalDamageCount; jsonGameplayStats.DirectDamageCount = stats.DirectDamageCount; jsonGameplayStats.ConnectedDirectDamageCount = stats.ConnectedDirectDamageCount; jsonGameplayStats.ConnectedDamageCount = stats.ConnectedDamageCount; jsonGameplayStats.CritableDirectDamageCount = stats.CritableDirectDamageCount; jsonGameplayStats.CriticalRate = stats.CriticalCount; jsonGameplayStats.CriticalDmg = stats.CriticalDmg; jsonGameplayStats.FlankingRate = stats.FlankingCount; jsonGameplayStats.GlanceRate = stats.GlanceCount; jsonGameplayStats.AgainstMovingRate = stats.AgainstMovingCount; jsonGameplayStats.Missed = stats.Missed; jsonGameplayStats.Blocked = stats.Blocked; jsonGameplayStats.Evaded = stats.Evaded; jsonGameplayStats.Interrupts = stats.Interrupts; jsonGameplayStats.Invulned = stats.Invulned; jsonGameplayStats.Killed = stats.Killed; jsonGameplayStats.Downed = stats.Downed; }