Example #1
0
        protected double ComputeGainPlayer(int stack, AbstractHealthDamageEvent dl, ParsedEvtcLog log)
        {
            if (DLChecker != null && !DLChecker(dl, log))
            {
                return(-1.0);
            }
            double gain = _gainComputerPlayer.ComputeGain(1.0, stack);

            return(gain > 0.0 ? 1.0 : -1.0);
        }
Example #2
0
        protected double ComputeGain(int stack, AbstractHealthDamageEvent dl, ParsedEvtcLog log)
        {
            if (DLChecker != null && !DLChecker(dl, log))
            {
                return(-1.0);
            }
            double gain = GainComputer.ComputeGain(GainPerStack, stack);

            return(gain > 0.0 ? gain * dl.HealthDamage : -1.0);
        }
        protected double ComputeGain(int stack, AbstractDamageEvent dl)
        {
            if (DLChecker != null && !DLChecker(dl))
            {
                return(-1.0);
            }
            double gain = GainComputer.ComputeGain(GainPerStack, stack);

            return(gain > 0.0 ? gain * dl.Damage : -1.0);
        }
Example #4
0
        protected double ComputeGainPlayer(int stack, AbstractDamageEvent dl)
        {
            if (DLChecker != null && !DLChecker(dl))
            {
                return(-1.0);
            }
            double gain = _gainComputerPlayer.ComputeGain(1.0, stack);

            return(gain > 0.0 ? 1.0 : -1.0);
        }
        protected double ComputeGain(int stack, AbstractHealthDamageEvent dl, ParsedEvtcLog log)
        {
            if (DLChecker != null && !DLChecker(dl, log))
            {
                return(-1.0);
            }
            // When gain per stack is 0, we only count hits done under the buff or in its absence
            double gain = GainComputer.ComputeGain(GainPerStack == 0.0 ? 1.0 : GainPerStack, stack);

            return(gain > 0.0 ? (GainPerStack == 0.0 ? 0.0 : gain *dl.HealthDamage) : -1.0);
        }
        internal override List <DamageModifierEvent> ComputeDamageModifier(AbstractSingleActor actor, ParsedEvtcLog log)
        {
            var    res  = new List <DamageModifierEvent>();
            double gain = GainComputer.ComputeGain(GainPerStack, 1);
            IReadOnlyList <AbstractHealthDamageEvent> typeHits = GetHitDamageEvents(actor, log, null, 0, log.FightData.FightEnd);

            foreach (AbstractHealthDamageEvent evt in typeHits)
            {
                if (DLChecker(evt, log))
                {
                    res.Add(new DamageModifierEvent(evt, this, gain * evt.HealthDamage));
                }
            }
            return(res);
        }
Example #7
0
        internal override void ComputeDamageModifier(Dictionary <string, List <DamageModifierStat> > data, Dictionary <NPC, Dictionary <string, List <DamageModifierStat> > > dataTarget, Player p, ParsedEvtcLog log)
        {
            IReadOnlyList <PhaseData> phases = log.FightData.GetPhases(log);
            double gain = GainComputer.ComputeGain(GainPerStack, 1);

            if (!p.GetHitDamageEvents(null, log, phases[0].Start, phases[0].End).Any(x => DLChecker(x)))
            {
                return;
            }
            foreach (NPC target in log.FightData.Logic.Targets)
            {
                if (!dataTarget.TryGetValue(target, out Dictionary <string, List <DamageModifierStat> > extra))
                {
                    dataTarget[target] = new Dictionary <string, List <DamageModifierStat> >();
                }
                Dictionary <string, List <DamageModifierStat> > dict = dataTarget[target];
                if (!dict.TryGetValue(Name, out List <DamageModifierStat> list))
                {
                    var extraDataList = new List <DamageModifierStat>();
                    foreach (PhaseData phase in phases)
                    {
                        int totalDamage = GetTotalDamage(p, log, target, phase.Start, phase.End);
                        IReadOnlyList <AbstractHealthDamageEvent> typeHits = GetHitDamageEvents(p, log, target, phase.Start, phase.End);
                        var effect = typeHits.Where(x => DLChecker(x)).ToList();
                        extraDataList.Add(new DamageModifierStat(effect.Count, typeHits.Count, gain * effect.Sum(x => x.HealthDamage), totalDamage));
                    }
                    dict[Name] = extraDataList;
                }
            }
            data[Name] = new List <DamageModifierStat>();
            foreach (PhaseData phase in phases)
            {
                int totalDamage = GetTotalDamage(p, log, null, phase.Start, phase.End);
                IReadOnlyList <AbstractHealthDamageEvent> typeHits = GetHitDamageEvents(p, log, null, phase.Start, phase.End);
                var effect = typeHits.Where(x => DLChecker(x)).ToList();
                data[Name].Add(new DamageModifierStat(effect.Count, typeHits.Count, gain * effect.Sum(x => x.HealthDamage), totalDamage));
            }
        }