Exemplo n.º 1
0
 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);
        }
Exemplo n.º 3
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.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)
                        });
                    }
                }
            }
        }