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; foreach (Player player in _log.PlayerList) { Statistics.FinalStatsAll stats = _statistics.StatsAll[player][phaseIndex]; WriteLine(new [] { player.Group.ToString(), player.Prof, player.Character, Math.Round((double)(stats.CriticalRate) / stats.CritablePowerLoopCount * 100, 1).ToString(), stats.CriticalRate.ToString(), stats.CriticalDmg.ToString(), Math.Round((double)(stats.ScholarRate) / stats.PowerLoopCount * 100, 1).ToString(), stats.ScholarRate.ToString(), stats.ScholarDmg.ToString(), Math.Round(100.0 * (stats.PowerDamage / (double)(stats.PowerDamage - stats.ScholarDmg) - 1.0), 3).ToString(), Math.Round((double)(stats.MovingRate) / stats.PowerLoopCount * 100, 1).ToString(), stats.MovingRate.ToString(), stats.MovingDamage.ToString(), Math.Round(100.0 * (stats.PowerDamage / (double)(stats.PowerDamage - stats.MovingDamage) - 1.0), 3).ToString(), Math.Round(stats.FlankingRate / (double)stats.PowerLoopCount * 100, 1).ToString(), stats.FlankingRate.ToString(), Math.Round(stats.GlanceRate / (double)stats.PowerLoopCount * 100, 1).ToString(), stats.GlanceRate.ToString(), Math.Round(stats.Missed / (double)stats.PowerLoopCount * 100, 1).ToString(), stats.Missed.ToString(), stats.PowerLoopCount.ToString(), stats.Interrupts.ToString(), stats.Invulned.ToString(), stats.TimeWasted.ToString(), stats.TimeSaved.ToString(), stats.SwapCount.ToString() }); count++; } while (count < 15)//so each graph has equal spacing { NewLine(); count++; } }
public JsonStatsAll(Statistics.FinalStatsAll stats) : base(stats) { Wasted = stats.Wasted; TimeWasted = stats.TimeWasted; Saved = stats.Saved; TimeSaved = stats.TimeSaved; StackDist = stats.StackDist; AvgBoons = stats.AvgBoons; AvgConditions = stats.AvgConditions; SwapCount = stats.SwapCount; }
public JsonStats(Statistics.FinalStatsAll 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.Account == ":Conjured Sword") { continue; } Statistics.FinalStatsAll stats = player.GetStatsAll(_log, phaseIndex); Statistics.FinalStats statsBoss = player.GetStatsTarget(_log, phaseIndex, _log.LegacyTarget); Dictionary <string, List <Statistics.DamageModifierData> > damageMods = player.GetDamageModifierData(_log, _log.LegacyTarget); Statistics.DamageModifierData scholar = new Statistics.DamageModifierData(0, 0, 0, 0); Statistics.DamageModifierData moving = new Statistics.DamageModifierData(0, 0, 0, 0); if (damageMods.TryGetValue("Scholar Rune", out var schoDict)) { scholar = schoDict[phaseIndex]; } if (damageMods.TryGetValue("Moving Bonus", out var moveDict)) { moving = moveDict[phaseIndex]; } WriteLine(new [] { player.Group.ToString(), player.Prof, player.Character, Math.Round((double)(statsBoss.CriticalRate) / statsBoss.CritableDirectDamageCount * 100, 1).ToString(), statsBoss.CriticalRate.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 / (double)(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 / (double)(moving.TotalDamage - moving.DamageGain) - 1.0), 3).ToString(), Math.Round(statsBoss.FlankingRate / (double)statsBoss.DirectDamageCount * 100, 1).ToString(), statsBoss.FlankingRate.ToString(), Math.Round(statsBoss.GlanceRate / (double)statsBoss.DirectDamageCount * 100, 1).ToString(), statsBoss.GlanceRate.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++; } }
// helper methods public static List <object> GetDMGStatData(Statistics.FinalStatsAll stats) { List <object> data = GetDMGTargetStatData(stats); data.AddRange(new List <object> { // commons stats.TimeWasted, // 9 stats.Wasted, // 10 stats.TimeSaved, // 11 stats.Saved, // 12 stats.SwapCount, // 13 Math.Round(stats.StackDist, 2) // 14 }); return(data); }
public JsonStats(Statistics.FinalStatsAll stats) { DirectDamageCount = stats.DirectDamageCount; CritableDirectDamageCount = stats.CritableDirectDamageCount; CriticalRate = stats.CriticalRate; CriticalDmg = stats.CriticalDmg; ScholarRate = stats.ScholarRate; ScholarDmg = stats.ScholarDmg; EagleRate = stats.EagleRate; EagleDmg = stats.EagleDmg; MovingRate = stats.MovingRate; MovingDamage = stats.MovingDamage; FlankingDmg = stats.FlankingDmg; FlankingRate = stats.FlankingRate; GlanceRate = stats.GlanceRate; Missed = stats.Missed; Interrupts = stats.Interrupts; Invulned = stats.Invulned; DirectDamage = stats.DirectDamage; }
// helper methods public static List <object> GetDMGStatData(Statistics.FinalStatsAll stats) { List <object> data = new List <object> { stats.DirectDamageCount, stats.CritableDirectDamageCount, stats.CriticalRate, stats.CriticalDmg, stats.ScholarRate, stats.ScholarDmg, stats.DirectDamage, stats.MovingRate, stats.MovingDamage, stats.FlankingRate, stats.GlanceRate, stats.Missed, stats.Interrupts, stats.Invulned, stats.EagleRate, stats.EagleDmg, stats.FlankingDmg, // commons stats.TimeWasted, stats.Wasted, stats.TimeSaved, stats.Saved, stats.SwapCount, Math.Round(stats.StackDist, 2) }; return(data); }
private void CreateDefTable(int phaseIndex) { //generate defstats table WriteLine(new [] { "Sub Group", "Profession", "Name", "DMG Taken", "DMG Barrier", "Blocked", "Invulned", "Evaded", "Dodges" }); int count = 0; foreach (Player player in _log.PlayerList) { Statistics.FinalDefenses defenses = _statistics.Defenses[player][phaseIndex]; Statistics.FinalStatsAll stats = _statistics.StatsAll[player][phaseIndex]; WriteLine(new [] { player.Group.ToString(), player.Prof, player.Character, defenses.DamageTaken.ToString(), defenses.DamageBarrier.ToString(), defenses.BlockedCount.ToString(), defenses.InvulnedCount.ToString(), defenses.EvadedCount.ToString(), stats.DodgeCount.ToString() }); count++; } while (count < 15)//so each graph has equal spacing { NewLine(); count++; } }
private void CreateDPSTable(int phaseIndex) { PhaseData phase = _statistics.Phases[phaseIndex]; WriteLine(new[] { "Sub Group", "Profession", "Role", "Name", "Account", "WepSet1_1", "WepSet1_2", "WepSet2_1", "WepSet2_2", "Boss DPS", "Boss DMG", "Boss Power DPS", "Boss Power DMG", "Boss Condi DPS", "Boss Condi DMG", "All DPS", "All DMG", "All Power DPS", "All Power DMG", "All Condi DPS", "All Condi DMG", "Times Downed", "Time Died", "Percent Alive" }); int count = 0; foreach (Player player in _log.PlayerList) { Statistics.FinalDPS dps = _statistics.DpsAll[player][phaseIndex]; Statistics.FinalDPS dpsBoss = _statistics.DpsBoss[_log.Boss][player][phaseIndex]; Statistics.FinalStatsAll stats = _statistics.StatsAll[player][phaseIndex]; Statistics.FinalStats statsBoss = _statistics.StatsBoss[_log.Boss][player][phaseIndex]; string deathString = ""; string deadthTooltip = ""; if (stats.Died != 0.0) { if (stats.Died < 0) { deathString = -stats.Died + " time(s)"; } else { TimeSpan timedead = TimeSpan.FromMilliseconds(stats.Died); deathString = timedead.Minutes + " m " + timedead.Seconds + " s"; deadthTooltip = Math.Round((timedead.TotalMilliseconds / phase.GetDuration()) * 100, 1) + "%"; } } else { deadthTooltip = "Never died"; } string[] wep = player.GetWeaponsArray(_log); string build = ""; if (player.Condition > 0) { build += " Condi:" + player.Condition; } if (player.Concentration > 0) { build += " Concentration:" + player.Concentration; } if (player.Healing > 0) { build += " Healing:" + player.Healing; } if (player.Toughness > 0) { build += " Toughness:" + player.Toughness; } WriteLine(new [] { player.Group.ToString(), player.Prof, build, player.Character, player.Account.TrimStart(':'), wep[0], wep[1], wep[2], wep[3], dpsBoss.Dps.ToString(), dpsBoss.Damage.ToString(), dpsBoss.PowerDps.ToString(), dpsBoss.PowerDamage.ToString(), dpsBoss.CondiDps.ToString(), dpsBoss.CondiDamage.ToString(), dps.Dps.ToString(), dps.Damage.ToString(), dps.PowerDps.ToString(), dps.PowerDamage.ToString(), dps.CondiDps.ToString(), dps.CondiDamage.ToString(), stats.DownCount.ToString(), deathString, deadthTooltip }); count++; } while (count < 15)//so each graph has equal spacing { NewLine(); count++; } }