예제 #1
0
        internal FinalDPS(ParsedEvtcLog log, long start, long end, AbstractSingleActor actor, AbstractSingleActor target)
        {
            double phaseDuration = (end - start) / 1000.0;

            (Damage, PowerDamage, CondiDamage, StrikeDamage, LifeLeechDamage, BarrierDamage) = ComputeDamageFrom(log, actor.GetDamageEvents(target, log, start, end));
            (ActorDamage, ActorPowerDamage, ActorCondiDamage, ActorStrikeDamage, ActorLifeLeechDamage, ActorBarrierDamage) = ComputeDamageFrom(log, actor.GetJustActorDamageEvents(target, log, start, end));

            if (phaseDuration > 0)
            {
                Dps          = (int)Math.Round(Damage / phaseDuration);
                CondiDps     = (int)Math.Round(CondiDamage / phaseDuration);
                PowerDps     = (int)Math.Round(PowerDamage / phaseDuration);
                StrikeDps    = (int)Math.Round(StrikeDamage / phaseDuration);
                LifeLeechDps = (int)Math.Round(LifeLeechDamage / phaseDuration);
                BarrierDps   = (int)Math.Round(BarrierDamage / phaseDuration);
                //
                ActorDps          = (int)Math.Round(Damage / phaseDuration);
                ActorCondiDps     = (int)Math.Round(ActorCondiDamage / phaseDuration);
                ActorPowerDps     = (int)Math.Round(ActorPowerDamage / phaseDuration);
                ActorStrikeDps    = (int)Math.Round(ActorStrikeDamage / phaseDuration);
                ActorLifeLeechDps = (int)Math.Round(ActorLifeLeechDamage / phaseDuration);
                ActorBarrierDps   = (int)Math.Round(ActorBarrierDamage / phaseDuration);
            }

            // Breakbar
            BreakbarDamage      = Math.Round(actor.GetBreakbarDamageEvents(target, log, start, end).Sum(x => x.BreakbarDamage), 1);
            ActorBreakbarDamage = Math.Round(actor.GetJustActorBreakbarDamageEvents(target, log, start, end).Sum(x => x.BreakbarDamage), 1);
        }
        internal FinalDPS(ParsedEvtcLog log, long start, long end, AbstractSingleActor actor, AbstractSingleActor target)
        {
            double phaseDuration = (end - start) / 1000.0;
            int    damage;
            double dps = 0.0;
            IReadOnlyList <AbstractHealthDamageEvent> damageLogs = actor.GetDamageEvents(target, log, start, end);

            //DPS
            damage = damageLogs.Sum(x => x.HealthDamage);

            if (phaseDuration > 0)
            {
                dps = damage / phaseDuration;
            }
            Dps    = (int)Math.Round(dps);
            Damage = damage;
            //Condi DPS
            damage = damageLogs.Sum(x => x.ConditionDamageBased(log) ? x.HealthDamage : 0);

            if (phaseDuration > 0)
            {
                dps = damage / phaseDuration;
            }
            CondiDps    = (int)Math.Round(dps);
            CondiDamage = damage;
            //Power DPS
            damage = Damage - CondiDamage;
            if (phaseDuration > 0)
            {
                dps = damage / phaseDuration;
            }
            PowerDps    = (int)Math.Round(dps);
            PowerDamage = damage;
            IReadOnlyList <AbstractHealthDamageEvent> actorDamageLogs = actor.GetJustActorDamageEvents(target, log, start, end);

            // Actor DPS
            damage = actorDamageLogs.Sum(x => x.HealthDamage);

            if (phaseDuration > 0)
            {
                dps = damage / phaseDuration;
            }
            ActorDps    = (int)Math.Round(dps);
            ActorDamage = damage;
            //Actor Condi DPS
            damage = actorDamageLogs.Sum(x => x.ConditionDamageBased(log) ? x.HealthDamage : 0);

            if (phaseDuration > 0)
            {
                dps = damage / phaseDuration;
            }
            ActorCondiDps    = (int)Math.Round(dps);
            ActorCondiDamage = damage;
            //Actor Power DPS
            damage = ActorDamage - ActorCondiDamage;
            if (phaseDuration > 0)
            {
                dps = damage / phaseDuration;
            }
            ActorPowerDps    = (int)Math.Round(dps);
            ActorPowerDamage = damage;

            // Breakbar
            BreakbarDamage      = Math.Round(actor.GetBreakbarDamageEvents(target, log, start, end).Sum(x => x.BreakbarDamage), 1);
            ActorBreakbarDamage = Math.Round(actor.GetJustActorBreakbarDamageEvents(target, log, start, end).Sum(x => x.BreakbarDamage), 1);
        }
예제 #3
0
        internal FinalGameplayStats(ParsedEvtcLog log, long start, long end, AbstractSingleActor actor, AbstractSingleActor target)
        {
            IReadOnlyList <AbstractHealthDamageEvent> dls = actor.GetJustActorDamageEvents(target, log, start, end);

            foreach (AbstractHealthDamageEvent dl in dls)
            {
                if (!(dl is NonDirectHealthDamageEvent))
                {
                    if (dl.HasHit)
                    {
                        if (SkillItem.CanCrit(dl.SkillId, log.LogData.GW2Build))
                        {
                            if (dl.HasCrit)
                            {
                                CriticalCount++;
                                CriticalDmg += dl.HealthDamage;
                            }
                            CritableDirectDamageCount++;
                        }
                        if (dl.IsFlanking)
                        {
                            FlankingCount++;
                        }

                        if (dl.HasGlanced)
                        {
                            GlanceCount++;
                        }
                        ConnectedDirectDamageCount++;
                    }

                    if (dl.HasInterrupted)
                    {
                        Interrupts++;
                    }

                    if (dl.IsBlind)
                    {
                        Missed++;
                    }
                    if (dl.IsEvaded)
                    {
                        Evaded++;
                    }
                    if (dl.IsBlocked)
                    {
                        Blocked++;
                    }
                    if (!dl.DoubleProcHit)
                    {
                        DirectDamageCount++;
                    }
                }
                if (dl.IsAbsorbed)
                {
                    Invulned++;
                }
                if (!dl.DoubleProcHit)
                {
                    TotalDamageCount++;
                }
                if (dl.HasKilled)
                {
                    Killed++;
                }
                if (dl.HasDowned)
                {
                    Downed++;
                }
            }
        }