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); }
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); }
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); }
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)); } }