Beispiel #1
0
        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++;
            }
        }
Beispiel #2
0
 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;
 }
Beispiel #3
0
 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;
 }
Beispiel #4
0
        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);
        }
Beispiel #6
0
 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;
 }
Beispiel #7
0
        // 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++;
            }
        }