Example #1
0
        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);
 }
Example #3
0
        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);
        }