internal JsonDamageModifierItem(DamageModifierStat extraData) { HitCount = extraData.HitCount; TotalHitCount = extraData.TotalHitCount; DamageGain = extraData.DamageGain; TotalDamage = extraData.TotalDamage; }
private static JsonDamageModifierItem BuildJsonDamageModifierItem(DamageModifierStat extraData) { var jsonDamageModifierItem = new JsonDamageModifierItem(); jsonDamageModifierItem.HitCount = extraData.HitCount; jsonDamageModifierItem.TotalHitCount = extraData.TotalHitCount; jsonDamageModifierItem.DamageGain = extraData.DamageGain; jsonDamageModifierItem.TotalDamage = extraData.TotalDamage; return(jsonDamageModifierItem); }
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 DamageModData(Player player, ParsedLog log, List <DamageModifier> listToUse, int phaseIndex) { Dictionary <string, List <DamageModifierStat> > dModData = player.GetDamageModifierStats(log, null); List <PhaseData> phases = log.FightData.GetPhases(log); foreach (DamageModifier dMod in listToUse) { if (dModData.TryGetValue(dMod.Name, out List <DamageModifierStat> list)) { DamageModifierStat data = list[phaseIndex]; Data.Add(new object[] { data.HitCount, data.TotalHitCount, data.DamageGain, data.TotalDamage }); } else { Data.Add(new object[] { 0, dMod.GetDamageLogs(player, log, null, phases[phaseIndex]).Count, 0, dMod.GetTotalDamage(player, log, null, phaseIndex) }); } } PhaseData phase = log.FightData.GetPhases(log)[phaseIndex]; foreach (NPC target in phase.Targets) { var pTarget = new List <object[]>(); DataTarget.Add(pTarget); dModData = player.GetDamageModifierStats(log, target); foreach (DamageModifier dMod in listToUse) { if (dModData.TryGetValue(dMod.Name, out List <DamageModifierStat> list)) { DamageModifierStat data = list[phaseIndex]; pTarget.Add(new object[] { data.HitCount, data.TotalHitCount, data.DamageGain, data.TotalDamage }); } else { pTarget.Add(new object[] { 0, dMod.GetDamageLogs(player, log, target, phases[phaseIndex]).Count, 0, dMod.GetTotalDamage(player, log, target, phaseIndex) }); } } } }