private void SetBuffs(ParsedLog log) { _buffs = new List <Dictionary <long, FinalTargetBuffs> >(); List <PhaseData> phases = log.FightData.GetPhases(log); for (int phaseIndex = 0; phaseIndex < phases.Count; phaseIndex++) { BoonDistribution boonDistribution = GetBoonDistribution(log, phaseIndex); Dictionary <long, FinalTargetBuffs> rates = new Dictionary <long, FinalTargetBuffs>(); _buffs.Add(rates); Dictionary <long, long> buffPresence = GetBuffPresence(log, phaseIndex); PhaseData phase = phases[phaseIndex]; long fightDuration = phase.DurationInMS; foreach (Boon boon in TrackedBoons) { if (boonDistribution.ContainsKey(boon.ID)) { FinalTargetBuffs buff = new FinalTargetBuffs(log.PlayerList); rates[boon.ID] = buff; if (boon.Type == Boon.BoonType.Duration) { buff.Uptime = Math.Round(100.0 * boonDistribution.GetUptime(boon.ID) / fightDuration, GeneralHelper.BoonDigit); foreach (Player p in log.PlayerList) { long gen = boonDistribution.GetGeneration(boon.ID, p.AgentItem); buff.Generated[p] = Math.Round(100.0 * gen / fightDuration, GeneralHelper.BoonDigit); buff.Overstacked[p] = Math.Round(100.0 * (boonDistribution.GetOverstack(boon.ID, p.AgentItem) + gen) / fightDuration, GeneralHelper.BoonDigit); buff.Wasted[p] = Math.Round(100.0 * boonDistribution.GetWaste(boon.ID, p.AgentItem) / fightDuration, GeneralHelper.BoonDigit); buff.UnknownExtension[p] = Math.Round(100.0 * boonDistribution.GetUnknownExtension(boon.ID, p.AgentItem) / fightDuration, GeneralHelper.BoonDigit); buff.Extension[p] = Math.Round(100.0 * boonDistribution.GetExtension(boon.ID, p.AgentItem) / fightDuration, GeneralHelper.BoonDigit); buff.Extended[p] = Math.Round(100.0 * boonDistribution.GetExtended(boon.ID, p.AgentItem) / fightDuration, GeneralHelper.BoonDigit); } } else if (boon.Type == Boon.BoonType.Intensity) { buff.Uptime = Math.Round((double)boonDistribution.GetUptime(boon.ID) / fightDuration, GeneralHelper.BoonDigit); foreach (Player p in log.PlayerList) { long gen = boonDistribution.GetGeneration(boon.ID, p.AgentItem); buff.Generated[p] = Math.Round((double)gen / fightDuration, GeneralHelper.BoonDigit); buff.Overstacked[p] = Math.Round((double)(boonDistribution.GetOverstack(boon.ID, p.AgentItem) + gen) / fightDuration, GeneralHelper.BoonDigit); buff.Wasted[p] = Math.Round((double)boonDistribution.GetWaste(boon.ID, p.AgentItem) / fightDuration, GeneralHelper.BoonDigit); buff.UnknownExtension[p] = Math.Round((double)boonDistribution.GetUnknownExtension(boon.ID, p.AgentItem) / fightDuration, GeneralHelper.BoonDigit); buff.Extension[p] = Math.Round((double)boonDistribution.GetExtension(boon.ID, p.AgentItem) / fightDuration, GeneralHelper.BoonDigit); buff.Extended[p] = Math.Round((double)boonDistribution.GetExtended(boon.ID, p.AgentItem) / fightDuration, GeneralHelper.BoonDigit); } if (buffPresence.TryGetValue(boon.ID, out long presenceValueBoon)) { buff.Presence = Math.Round(100.0 * presenceValueBoon / fightDuration, GeneralHelper.BoonDigit); } } } } } }
private void CalculateConditions() { foreach (Target target in _log.FightData.Logic.Targets) { Dictionary <long, FinalTargetBuffs>[] stats = new Dictionary <long, FinalTargetBuffs> [_statistics.Phases.Count]; for (int phaseIndex = 0; phaseIndex < _statistics.Phases.Count; phaseIndex++) { BoonDistribution boonDistribution = target.GetBoonDistribution(_log, phaseIndex); Dictionary <long, FinalTargetBuffs> rates = new Dictionary <long, FinalTargetBuffs>(); Dictionary <long, long> boonPresence = target.GetBoonPresence(_log, phaseIndex); Dictionary <long, long> condiPresence = target.GetCondiPresence(_log, phaseIndex); PhaseData phase = _statistics.Phases[phaseIndex]; long fightDuration = phase.GetDuration(); foreach (Boon boon in target.TrackedBoons) { if (boonDistribution.ContainsKey(boon.ID)) { FinalTargetBuffs buff = new FinalTargetBuffs(_log.PlayerList); rates[boon.ID] = buff; if (boon.Type == Boon.BoonType.Duration) { buff.Uptime = Math.Round(100.0 * boonDistribution.GetUptime(boon.ID) / fightDuration, 2); foreach (Player p in _log.PlayerList) { long gen = boonDistribution.GetGeneration(boon.ID, p.AgentItem); buff.Generated[p] = Math.Round(100.0 * gen / fightDuration, 2); buff.Overstacked[p] = Math.Round(100.0 * (boonDistribution.GetOverstack(boon.ID, p.AgentItem) + gen) / fightDuration, 2); buff.Wasted[p] = Math.Round(100.0 * boonDistribution.GetWaste(boon.ID, p.AgentItem) / fightDuration, 2); buff.UnknownExtension[p] = Math.Round(100.0 * boonDistribution.GetUnknownExtension(boon.ID, p.AgentItem) / fightDuration, 2); buff.Extension[p] = Math.Round(100.0 * boonDistribution.GetExtension(boon.ID, p.AgentItem) / fightDuration, 2); buff.Extended[p] = Math.Round(100.0 * boonDistribution.GetExtended(boon.ID, p.AgentItem) / fightDuration, 2); } } else if (boon.Type == Boon.BoonType.Intensity) { buff.Uptime = Math.Round((double)boonDistribution.GetUptime(boon.ID) / fightDuration, 2); foreach (Player p in _log.PlayerList) { long gen = boonDistribution.GetGeneration(boon.ID, p.AgentItem); buff.Generated[p] = Math.Round((double)gen / fightDuration, 2); buff.Overstacked[p] = Math.Round((double)(boonDistribution.GetOverstack(boon.ID, p.AgentItem) + gen) / fightDuration, 2); buff.Wasted[p] = Math.Round((double)boonDistribution.GetWaste(boon.ID, p.AgentItem) / fightDuration, 2); buff.UnknownExtension[p] = Math.Round((double)boonDistribution.GetUnknownExtension(boon.ID, p.AgentItem) / fightDuration, 2); buff.Extension[p] = Math.Round((double)boonDistribution.GetExtension(boon.ID, p.AgentItem) / fightDuration, 2); buff.Extended[p] = Math.Round((double)boonDistribution.GetExtended(boon.ID, p.AgentItem) / fightDuration, 2); } if (boonPresence.TryGetValue(boon.ID, out long presenceValueBoon)) { buff.Presence = Math.Round(100.0 * presenceValueBoon / fightDuration, 2); } else if (condiPresence.TryGetValue(boon.ID, out long presenceValueCondi)) { buff.Presence = Math.Round(100.0 * presenceValueCondi / fightDuration, 2); } } } } stats[phaseIndex] = rates; } _statistics.TargetBuffs[target] = stats; } }