public override List <PhaseData> GetPhases(ParsedLog log, bool requirePhases) { long fightDuration = log.FightData.FightDuration; List <PhaseData> phases = GetInitialPhase(log); Target mainTarget = Targets.Find(x => x.ID == (ushort)ParseEnum.TargetIDS.Matthias); if (mainTarget == null) { throw new InvalidOperationException("Main target of the fight not found"); } phases[0].Targets.Add(mainTarget); if (!requirePhases) { return(phases); } // Special buff cast check CombatItem heatWave = log.GetBoonData(34526).FirstOrDefault(); if (heatWave != null) { phases.Add(new PhaseData(0, log.FightData.ToFightSpace(heatWave.Time) - 1)); CombatItem downPour = log.GetDamageData(mainTarget.InstID, mainTarget.FirstAware, mainTarget.LastAware).Find(x => x.SkillID == 34554); if (downPour != null) { phases.Add(new PhaseData(log.FightData.ToFightSpace(heatWave.Time), log.FightData.ToFightSpace(downPour.Time) - 1)); List <CastLog> castLogs = mainTarget.GetCastLogs(log, 0, log.FightData.FightEnd); CastLog abo = castLogs.Find(x => x.SkillId == 34427); if (abo != null) { phases.Add(new PhaseData(log.FightData.ToFightSpace(downPour.Time), abo.Time - 1)); CombatItem invulRemove = log.GetBoonDataByDst(mainTarget.InstID, log.FightData.ToLogSpace(abo.Time), log.FightData.ToLogSpace(abo.Time) + 10000).FirstOrDefault(x => x.SkillID == 757 && x.IsBuffRemove != ParseEnum.BuffRemove.None); if (invulRemove != null) { phases.Add(new PhaseData(log.FightData.ToFightSpace(invulRemove.Time), fightDuration)); } } else { phases.Add(new PhaseData(log.FightData.ToFightSpace(downPour.Time), fightDuration)); } } else { phases.Add(new PhaseData(log.FightData.ToFightSpace(heatWave.Time), fightDuration)); } } else { phases.Add(new PhaseData(0, fightDuration)); } string[] namesMat = new [] { "Ice Phase", "Fire Phase", "Storm Phase", "Abomination Phase" }; for (int i = 1; i < phases.Count; i++) { phases[i].Name = namesMat[i - 1]; phases[i].DrawStart = i > 1; phases[i].Targets.Add(mainTarget); } return(phases); }
// private getters private BoonMap GetBoonMap(ParsedLog log) { BoonMap boonMap = new BoonMap { BoonToTrack }; // Fill in Boon Map long timeStart = log.FightData.FightStart; long agentStart = Math.Max(FirstAware - log.FightData.FightStart, 0); long agentEnd = Math.Min(LastAware - log.FightData.FightStart, log.FightData.FightDuration); foreach (CombatItem c in log.GetBoonDataByDst(InstID)) { long boonId = c.SkillID; if (!boonMap.ContainsKey(boonId)) { continue; } long time = c.Time - timeStart; List <BoonLog> loglist = boonMap[boonId]; if (c.IsStateChange == ParseEnum.StateChange.BuffInitial && c.Value > 0) { ushort src = c.SrcMasterInstid > 0 ? c.SrcMasterInstid : c.SrcInstid; loglist.Add(new BoonApplicationLog(0, src, c.Value)); } else if (c.IsStateChange != ParseEnum.StateChange.BuffInitial && time >= agentStart && time < agentEnd) { if (c.IsBuffRemove == ParseEnum.BuffRemove.None) { ushort src = c.SrcMasterInstid > 0 ? c.SrcMasterInstid : c.SrcInstid; loglist.Add(new BoonApplicationLog(time, src, c.Value)); } else if (c.IsBuffRemove != ParseEnum.BuffRemove.Manual && time < log.FightData.FightDuration - 50) { loglist.Add(new BoonRemovalLog(time, c.DstInstid, c.Value, c.IsBuffRemove)); } } } boonMap.Sort(); return(boonMap); }
protected BoonMap GetBoonMap(ParsedLog log) { // buff extension ids HashSet <long> idsToCheck = new HashSet <long>() { 10236, 51696, 29453 }; List <CastLog> extensionSkills = new List <CastLog>(); foreach (Player p in log.PlayerList) { extensionSkills.AddRange(p.GetCastLogs(log, log.FightData.ToFightSpace(p.FirstAware), log.FightData.ToFightSpace(p.LastAware)).Where(x => idsToCheck.Contains(x.SkillId))); } // BoonMap boonMap = new BoonMap(); // Fill in Boon Map foreach (CombatItem c in log.GetBoonDataByDst(InstID, FirstAware, LastAware)) { long boonId = c.SkillID; if (!boonMap.ContainsKey(boonId)) { if (!Boon.BoonsByIds.ContainsKey(boonId)) { continue; } boonMap.Add(Boon.BoonsByIds[boonId]); } if (c.IsBuffRemove == ParseEnum.BuffRemove.Manual || (c.IsBuffRemove == ParseEnum.BuffRemove.Single && c.IFF == ParseEnum.IFF.Unknown && c.DstInstid == 0) || (c.IsBuffRemove != ParseEnum.BuffRemove.None && c.Value <= 50)) { continue; } long time = log.FightData.ToFightSpace(c.Time); List <BoonLog> loglist = boonMap[boonId]; if (c.IsStateChange == ParseEnum.StateChange.BuffInitial) { ushort src = c.SrcMasterInstid > 0 ? c.SrcMasterInstid : c.SrcInstid; loglist.Add(new BoonApplicationLog(time, src, c.Value)); } else if (c.IsStateChange != ParseEnum.StateChange.BuffInitial) { if (c.IsBuffRemove == ParseEnum.BuffRemove.None) { ushort src = c.SrcMasterInstid > 0 ? c.SrcMasterInstid : c.SrcInstid; if (c.IsOffcycle > 0) { if (src == 0) { src = TryFindSrc(extensionSkills, time, c.Value, log); } loglist.Add(new BoonExtensionLog(time, c.Value, c.OverstackValue - c.Value, src)); } else { loglist.Add(new BoonApplicationLog(time, src, c.Value)); } } else if (time < log.FightData.FightDuration - 50) { ushort src = c.DstMasterInstid > 0 ? c.DstMasterInstid : c.DstInstid; loglist.Add(new BoonRemovalLog(time, src, c.Value, c.IsBuffRemove)); } } } //boonMap.Sort(); foreach (var pair in boonMap) { TrackedBoons.Add(Boon.BoonsByIds[pair.Key]); } return(boonMap); }