internal override List <PhaseData> GetPhases(ParsedEvtcLog log, bool requirePhases) { List <PhaseData> phases = GetInitialPhase(log); AbstractSingleActor maiTrin = Targets.FirstOrDefault(x => x.ID == (int)ArcDPSEnums.TargetID.MaiTrinStrike); if (maiTrin == null) { throw new MissingKeyActorsException("Mai Trin not found"); } phases[0].AddTarget(maiTrin); AbstractSingleActor echoOfScarlet = Targets.FirstOrDefault(x => x.ID == (int)ArcDPSEnums.TargetID.EchoOfScarletBriar); if (echoOfScarlet != null) { phases[0].AddTarget(echoOfScarlet); } if (!requirePhases) { return(phases); } if (log.CombatData.GetDamageTakenData(maiTrin.AgentItem).Any()) { HealthUpdateEvent lastHPUpdate = log.CombatData.GetHealthUpdateEvents(maiTrin.AgentItem).LastOrDefault(); long maiTrinEnd = lastHPUpdate.Time; long maiTrinStart = 0; BuffRemoveAllEvent buffRemove = log.CombatData.GetBuffData(895).OfType <BuffRemoveAllEvent>().Where(x => x.To == maiTrin.AgentItem).FirstOrDefault(); if (buffRemove != null) { maiTrinStart = buffRemove.Time; } var mainPhase = new PhaseData(0, maiTrinEnd, "Mai Trin"); mainPhase.AddTarget(maiTrin); phases.Add(mainPhase); List <PhaseData> maiPhases = GetPhasesByInvul(log, 38793, maiTrin, false, true, maiTrinStart, maiTrinEnd); for (int i = 0; i < maiPhases.Count; i++) { PhaseData subPhase = maiPhases[i]; subPhase.Name = "Mai Trin Phase " + (i + 1); subPhase.AddTarget(maiTrin); } phases.AddRange(maiPhases); } if (echoOfScarlet != null) { long echoStart = echoOfScarlet.FirstAware + 10000; var phase = new PhaseData(echoStart, log.FightData.FightEnd, "Echo of Scarlet Briar"); phase.AddTarget(echoOfScarlet); phases.Add(phase); List <PhaseData> echoPhases = GetPhasesByInvul(log, 38793, echoOfScarlet, false, true, echoStart, log.FightData.FightEnd); for (int i = 0; i < echoPhases.Count; i++) { PhaseData subPhase = echoPhases[i]; subPhase.Name = "Echo Phase " + (i + 1); subPhase.AddTarget(echoOfScarlet); } phases.AddRange(echoPhases); } return(phases); }
protected bool Keep(BuffRemoveAllEvent c, ParsedEvtcLog log) { if (_triggerCondition != null) { return(_triggerCondition(c, log)); } return(true); }
private static List <PhaseData> GetSubPhases(AbstractSingleActor eye, ParsedEvtcLog log) { var res = new List <PhaseData>(); BuffRemoveAllEvent det762Loss = log.CombatData.GetBuffData(SkillIDs.Determined762).OfType <BuffRemoveAllEvent>().Where(x => x.To == eye.AgentItem).FirstOrDefault(); if (det762Loss != null) { int count = 0; long start = det762Loss.Time; List <AbstractBuffEvent> det895s = GetFilteredList(log.CombatData, Determined895, eye, true, true); foreach (AbstractBuffEvent abe in det895s) { if (abe is BuffApplyEvent) { var phase = new PhaseData(start, Math.Min(abe.Time, log.FightData.FightDuration)) { Name = eye.Character + " " + (++count) }; phase.AddTarget(eye); res.Add(phase); } else { start = Math.Min(abe.Time, log.FightData.FightDuration); } } if (start < log.FightData.FightDuration) { var phase = new PhaseData(start, log.FightData.FightDuration) { Name = eye.Character + " " + (++count) }; phase.AddTarget(eye); res.Add(phase); } } return(res); }