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