public static JsonPlayer BuildJsonPlayer(AbstractSingleActor player, ParsedEvtcLog log, RawFormatSettings settings, Dictionary <string, JsonLog.SkillDesc> skillDesc, Dictionary <string, JsonLog.BuffDesc> buffDesc, Dictionary <string, JsonLog.DamageModDesc> damageModDesc, Dictionary <string, HashSet <long> > personalBuffs) { var jsonPlayer = new JsonPlayer(); JsonActorBuilder.FillJsonActor(jsonPlayer, player, log, settings, skillDesc, buffDesc); IReadOnlyList <PhaseData> phases = log.FightData.GetNonDummyPhases(log); // jsonPlayer.Account = player.Account; jsonPlayer.Weapons = player.GetWeaponsArray(log).Select(w => w ?? "Unknown").ToArray(); jsonPlayer.Group = player.Group; jsonPlayer.Profession = player.Spec.ToString(); jsonPlayer.FriendlyNPC = player is NPC; jsonPlayer.NotInSquad = player is PlayerNonSquad; jsonPlayer.ActiveTimes = phases.Select(x => player.GetActiveDuration(log, x.Start, x.End)).ToList(); jsonPlayer.HasCommanderTag = player.HasCommanderTag; // jsonPlayer.Support = phases.Select(phase => JsonStatisticsBuilder.BuildJsonPlayerSupport(player.GetToPlayerSupportStats(log, phase.Start, phase.End))).ToArray(); var targetDamage1S = new IReadOnlyList <int> [log.FightData.Logic.Targets.Count][]; var targetPowerDamage1S = new IReadOnlyList <int> [log.FightData.Logic.Targets.Count][]; var targetConditionDamage1S = new IReadOnlyList <int> [log.FightData.Logic.Targets.Count][]; var targetBreakbarDamage1S = new IReadOnlyList <double> [log.FightData.Logic.Targets.Count][]; var dpsTargets = new JsonStatistics.JsonDPS[log.FightData.Logic.Targets.Count][]; var statsTargets = new JsonStatistics.JsonGameplayStats[log.FightData.Logic.Targets.Count][]; var targetDamageDist = new IReadOnlyList <JsonDamageDist> [log.FightData.Logic.Targets.Count][]; for (int j = 0; j < log.FightData.Logic.Targets.Count; j++) { AbstractSingleActor target = log.FightData.Logic.Targets[j]; var graph1SDamageList = new IReadOnlyList <int> [phases.Count]; var graph1SPowerDamageList = new IReadOnlyList <int> [phases.Count]; var graph1SConditionDamageList = new IReadOnlyList <int> [phases.Count]; var graph1SBreakbarDamageList = new IReadOnlyList <double> [phases.Count]; var targetDamageDistList = new IReadOnlyList <JsonDamageDist> [phases.Count]; for (int i = 0; i < phases.Count; i++) { PhaseData phase = phases[i]; if (settings.RawFormatTimelineArrays) { graph1SDamageList[i] = player.Get1SDamageList(log, phase.Start, phase.End, target, DamageType.All); graph1SPowerDamageList[i] = player.Get1SDamageList(log, phase.Start, phase.End, target, DamageType.Power); graph1SConditionDamageList[i] = player.Get1SDamageList(log, phase.Start, phase.End, target, DamageType.Condition); graph1SBreakbarDamageList[i] = player.Get1SBreakbarDamageList(log, phase.Start, phase.End, target); } targetDamageDistList[i] = JsonDamageDistBuilder.BuildJsonDamageDistList(player.GetJustActorDamageEvents(target, log, phase.Start, phase.End).GroupBy(x => x.SkillId).ToDictionary(x => x.Key, x => x.ToList()), log, skillDesc, buffDesc); } if (settings.RawFormatTimelineArrays) { targetDamage1S[j] = graph1SDamageList; targetPowerDamage1S[j] = graph1SPowerDamageList; targetConditionDamage1S[j] = graph1SConditionDamageList; targetBreakbarDamage1S[j] = graph1SBreakbarDamageList; } targetDamageDist[j] = targetDamageDistList; dpsTargets[j] = phases.Select(phase => JsonStatisticsBuilder.BuildJsonDPS(player.GetDPSStats(target, log, phase.Start, phase.End))).ToArray(); statsTargets[j] = phases.Select(phase => JsonStatisticsBuilder.BuildJsonGameplayStats(player.GetGameplayStats(target, log, phase.Start, phase.End))).ToArray(); } if (settings.RawFormatTimelineArrays) { jsonPlayer.TargetDamage1S = targetDamage1S; jsonPlayer.TargetPowerDamage1S = targetPowerDamage1S; jsonPlayer.TargetConditionDamage1S = targetConditionDamage1S; jsonPlayer.TargetBreakbarDamage1S = targetBreakbarDamage1S; Dictionary <long, BuffsGraphModel> buffGraphs = player.GetBuffGraphs(log); if (buffGraphs.TryGetValue(Buff.NumberOfClonesID, out BuffsGraphModel states)) { jsonPlayer.ActiveClones = JsonBuffsUptimeBuilder.GetBuffStates(states); } } jsonPlayer.TargetDamageDist = targetDamageDist; jsonPlayer.DpsTargets = dpsTargets; jsonPlayer.StatsTargets = statsTargets; if (!log.CombatData.HasBreakbarDamageData) { jsonPlayer.TargetBreakbarDamage1S = null; } // jsonPlayer.BuffUptimes = GetPlayerJsonBuffsUptime(player, phases.Select(phase => player.GetBuffs(BuffEnum.Self, log, phase.Start, phase.End)).ToList(), log, settings, buffDesc, personalBuffs); jsonPlayer.SelfBuffs = GetPlayerBuffGenerations(phases.Select(phase => player.GetBuffs(BuffEnum.Self, log, phase.Start, phase.End)).ToList(), log, buffDesc); jsonPlayer.GroupBuffs = GetPlayerBuffGenerations(phases.Select(phase => player.GetBuffs(BuffEnum.Group, log, phase.Start, phase.End)).ToList(), log, buffDesc); jsonPlayer.OffGroupBuffs = GetPlayerBuffGenerations(phases.Select(phase => player.GetBuffs(BuffEnum.OffGroup, log, phase.Start, phase.End)).ToList(), log, buffDesc); jsonPlayer.SquadBuffs = GetPlayerBuffGenerations(phases.Select(phase => player.GetBuffs(BuffEnum.Squad, log, phase.Start, phase.End)).ToList(), log, buffDesc); // jsonPlayer.BuffUptimesActive = GetPlayerJsonBuffsUptime(player, phases.Select(phase => player.GetActiveBuffs(BuffEnum.Self, log, phase.Start, phase.End)).ToList(), log, settings, buffDesc, personalBuffs); jsonPlayer.SelfBuffsActive = GetPlayerBuffGenerations(phases.Select(phase => player.GetActiveBuffs(BuffEnum.Self, log, phase.Start, phase.End)).ToList(), log, buffDesc); jsonPlayer.GroupBuffsActive = GetPlayerBuffGenerations(phases.Select(phase => player.GetActiveBuffs(BuffEnum.Group, log, phase.Start, phase.End)).ToList(), log, buffDesc); jsonPlayer.OffGroupBuffsActive = GetPlayerBuffGenerations(phases.Select(phase => player.GetActiveBuffs(BuffEnum.OffGroup, log, phase.Start, phase.End)).ToList(), log, buffDesc); jsonPlayer.SquadBuffsActive = GetPlayerBuffGenerations(phases.Select(phase => player.GetActiveBuffs(BuffEnum.Squad, log, phase.Start, phase.End)).ToList(), log, buffDesc); // IReadOnlyList <Consumable> consumables = player.GetConsumablesList(log, 0, log.FightData.FightEnd); if (consumables.Any()) { var consumablesJSON = new List <JsonConsumable>(); foreach (Consumable food in consumables) { if (!buffDesc.ContainsKey("b" + food.Buff.ID)) { buffDesc["b" + food.Buff.ID] = JsonLogBuilder.BuildBuffDesc(food.Buff, log); } consumablesJSON.Add(JsonConsumableBuilder.BuildJsonConsumable(food)); } jsonPlayer.Consumables = consumablesJSON; } // IReadOnlyList <DeathRecap> deathRecaps = player.GetDeathRecaps(log); if (deathRecaps.Any()) { jsonPlayer.DeathRecap = deathRecaps.Select(x => JsonDeathRecapBuilder.BuildJsonDeathRecap(x)).ToList(); } // jsonPlayer.DamageModifiers = JsonDamageModifierDataBuilder.GetDamageModifiers(phases.Select(x => player.GetDamageModifierStats(null, log, x.Start, x.End)).ToList(), log, damageModDesc); jsonPlayer.DamageModifiersTarget = JsonDamageModifierDataBuilder.GetDamageModifiersTarget(player, log, damageModDesc, phases); if (log.CombatData.HasEXTHealing) { jsonPlayer.EXTHealingStats = EXTJsonPlayerHealingStatsBuilder.BuildPlayerHealingStats(player, log, settings, skillDesc, buffDesc); } return(jsonPlayer); }
internal JsonPlayer(Player player, ParsedEvtcLog log, RawFormatSettings settings, Dictionary <string, JsonLog.SkillDesc> skillDesc, Dictionary <string, JsonLog.BuffDesc> buffDesc, Dictionary <string, JsonLog.DamageModDesc> damageModDesc, Dictionary <string, HashSet <long> > personalBuffs) : base(player, log, settings, skillDesc, buffDesc) { IReadOnlyList <PhaseData> phases = log.FightData.GetPhases(log); // Account = player.Account; Weapons = player.GetWeaponsArray(log).Select(w => w ?? "Unknown").ToArray(); Group = player.Group; Profession = player.Prof; ActiveTimes = phases.Select(x => player.GetActiveDuration(log, x.Start, x.End)).ToList(); HasCommanderTag = player.HasCommanderTag; // Support = phases.Select(phase => new JsonStatistics.JsonPlayerSupport(player.GetPlayerSupportStats(log, phase.Start, phase.End))).ToArray(); var targetDamage1S = new IReadOnlyList <int> [log.FightData.Logic.Targets.Count][]; var targetPowerDamage1S = new IReadOnlyList <int> [log.FightData.Logic.Targets.Count][]; var targetConditionDamage1S = new IReadOnlyList <int> [log.FightData.Logic.Targets.Count][]; var targetBreakbarDamage1S = new IReadOnlyList <double> [log.FightData.Logic.Targets.Count][]; var dpsTargets = new JsonStatistics.JsonDPS[log.FightData.Logic.Targets.Count][]; var statsTargets = new JsonStatistics.JsonGameplayStats[log.FightData.Logic.Targets.Count][]; var targetDamageDist = new IReadOnlyList <JsonDamageDist> [log.FightData.Logic.Targets.Count][]; for (int j = 0; j < log.FightData.Logic.Targets.Count; j++) { NPC target = log.FightData.Logic.Targets[j]; var graph1SDamageList = new IReadOnlyList <int> [phases.Count]; var graph1SPowerDamageList = new IReadOnlyList <int> [phases.Count]; var graph1SConditionDamageList = new IReadOnlyList <int> [phases.Count]; var graph1SBreakbarDamageList = new IReadOnlyList <double> [phases.Count]; var targetDamageDistList = new IReadOnlyList <JsonDamageDist> [phases.Count]; for (int i = 0; i < phases.Count; i++) { PhaseData phase = phases[i]; if (settings.RawFormatTimelineArrays) { graph1SDamageList[i] = player.Get1SDamageList(log, phase.Start, phase.End, target, DamageType.All); graph1SPowerDamageList[i] = player.Get1SDamageList(log, phase.Start, phase.End, target, DamageType.Power); graph1SConditionDamageList[i] = player.Get1SDamageList(log, phase.Start, phase.End, target, DamageType.Condition); graph1SBreakbarDamageList[i] = player.Get1SBreakbarDamageList(log, phase.Start, phase.End, target); } targetDamageDistList[i] = JsonDamageDist.BuildJsonDamageDistList(player.GetDamageEvents(target, log, phase.Start, phase.End).GroupBy(x => x.SkillId).ToDictionary(x => x.Key, x => x.ToList()), log, skillDesc, buffDesc); } if (settings.RawFormatTimelineArrays) { targetDamage1S[j] = graph1SDamageList; targetPowerDamage1S[j] = graph1SPowerDamageList; targetConditionDamage1S[j] = graph1SConditionDamageList; targetBreakbarDamage1S[j] = graph1SBreakbarDamageList; } targetDamageDist[j] = targetDamageDistList; dpsTargets[j] = phases.Select(phase => new JsonStatistics.JsonDPS(player.GetDPSStats(target, log, phase.Start, phase.End))).ToArray(); statsTargets[j] = phases.Select(phase => new JsonStatistics.JsonGameplayStats(player.GetGameplayStats(target, log, phase.Start, phase.End))).ToArray(); } if (settings.RawFormatTimelineArrays) { TargetDamage1S = targetDamage1S; TargetPowerDamage1S = targetPowerDamage1S; TargetConditionDamage1S = targetConditionDamage1S; TargetBreakbarDamage1S = targetBreakbarDamage1S; } TargetDamageDist = targetDamageDist; DpsTargets = dpsTargets; StatsTargets = statsTargets; if (!log.CombatData.HasBreakbarDamageData) { TargetBreakbarDamage1S = null; } // BuffUptimes = GetPlayerJsonBuffsUptime(player, phases.Select(phase => player.GetBuffs(BuffEnum.Self, log, phase.Start, phase.End)).ToList(), log, settings, buffDesc, personalBuffs); SelfBuffs = GetPlayerBuffGenerations(phases.Select(phase => player.GetBuffs(BuffEnum.Self, log, phase.Start, phase.End)).ToList(), log, buffDesc); GroupBuffs = GetPlayerBuffGenerations(phases.Select(phase => player.GetBuffs(BuffEnum.Group, log, phase.Start, phase.End)).ToList(), log, buffDesc); OffGroupBuffs = GetPlayerBuffGenerations(phases.Select(phase => player.GetBuffs(BuffEnum.OffGroup, log, phase.Start, phase.End)).ToList(), log, buffDesc); SquadBuffs = GetPlayerBuffGenerations(phases.Select(phase => player.GetBuffs(BuffEnum.Squad, log, phase.Start, phase.End)).ToList(), log, buffDesc); // BuffUptimesActive = GetPlayerJsonBuffsUptime(player, phases.Select(phase => player.GetActiveBuffs(BuffEnum.Self, log, phase.Start, phase.End)).ToList(), log, settings, buffDesc, personalBuffs); SelfBuffsActive = GetPlayerBuffGenerations(phases.Select(phase => player.GetActiveBuffs(BuffEnum.Self, log, phase.Start, phase.End)).ToList(), log, buffDesc); GroupBuffsActive = GetPlayerBuffGenerations(phases.Select(phase => player.GetActiveBuffs(BuffEnum.Group, log, phase.Start, phase.End)).ToList(), log, buffDesc); OffGroupBuffsActive = GetPlayerBuffGenerations(phases.Select(phase => player.GetActiveBuffs(BuffEnum.OffGroup, log, phase.Start, phase.End)).ToList(), log, buffDesc); SquadBuffsActive = GetPlayerBuffGenerations(phases.Select(phase => player.GetActiveBuffs(BuffEnum.Squad, log, phase.Start, phase.End)).ToList(), log, buffDesc); // IReadOnlyList <Consumable> consumables = player.GetConsumablesList(log, 0, log.FightData.FightEnd); if (consumables.Any()) { var consumablesJSON = new List <JsonConsumable>(); foreach (Consumable food in consumables) { if (!buffDesc.ContainsKey("b" + food.Buff.ID)) { buffDesc["b" + food.Buff.ID] = new JsonLog.BuffDesc(food.Buff, log); } consumablesJSON.Add(new JsonConsumable(food)); } Consumables = consumablesJSON; } // IReadOnlyList <DeathRecap> deathRecaps = player.GetDeathRecaps(log); if (deathRecaps.Any()) { DeathRecap = deathRecaps.Select(x => new JsonDeathRecap(x)).ToList(); } // DamageModifiers = JsonDamageModifierData.GetDamageModifiers(player.GetDamageModifierStats(log, null), log, damageModDesc); DamageModifiersTarget = JsonDamageModifierData.GetDamageModifiersTarget(player, log, damageModDesc); }
internal JsonPlayer(Player player, ParsedEvtcLog log, RawFormatSettings settings, Dictionary <string, JsonLog.SkillDesc> skillDesc, Dictionary <string, JsonLog.BuffDesc> buffDesc, Dictionary <string, JsonLog.DamageModDesc> damageModDesc, Dictionary <string, HashSet <long> > personalBuffs) : base(player, log, settings, skillDesc, buffDesc) { List <PhaseData> phases = log.FightData.GetPhases(log); // Account = player.Account; Weapons = player.GetWeaponsArray(log).Select(w => w ?? "Unknown").ToArray(); Group = player.Group; Profession = player.Prof; ActiveTimes = phases.Select(x => x.GetActorActiveDuration(player, log)).ToList(); HasCommanderTag = player.HasCommanderTag; // Support = player.GetPlayerSupport(log).Select(x => new JsonStatistics.JsonPlayerSupport(x)).ToArray(); TargetDamage1S = new List <int> [log.FightData.Logic.Targets.Count][]; DpsTargets = new JsonStatistics.JsonDPS[log.FightData.Logic.Targets.Count][]; StatsTargets = new JsonStatistics.JsonGameplayStats[log.FightData.Logic.Targets.Count][]; TargetDamageDist = new List <JsonDamageDist> [log.FightData.Logic.Targets.Count][]; for (int j = 0; j < log.FightData.Logic.Targets.Count; j++) { NPC target = log.FightData.Logic.Targets[j]; var dpsGraphList = new List <int> [phases.Count]; var targetDamageDistList = new List <JsonDamageDist> [phases.Count]; for (int i = 0; i < phases.Count; i++) { PhaseData phase = phases[i]; if (settings.RawFormatTimelineArrays) { dpsGraphList[i] = player.Get1SDamageList(log, i, phase, target); } targetDamageDistList[i] = JsonDamageDist.BuildJsonDamageDistList(player.GetDamageLogs(target, log, phase.Start, phase.End).GroupBy(x => x.SkillId).ToDictionary(x => x.Key, x => x.ToList()), log, skillDesc, buffDesc); } if (settings.RawFormatTimelineArrays) { TargetDamage1S[j] = dpsGraphList; } TargetDamageDist[j] = targetDamageDistList; DpsTargets[j] = player.GetDPSTarget(log, target).Select(x => new JsonStatistics.JsonDPS(x)).ToArray(); StatsTargets[j] = player.GetGameplayStats(log, target).Select(x => new JsonStatistics.JsonGameplayStats(x)).ToArray(); } // BuffUptimes = GetPlayerJsonBuffsUptime(player, player.GetBuffs(log, BuffEnum.Self), player.GetBuffsDictionary(log), log, settings, buffDesc, personalBuffs); SelfBuffs = GetPlayerBuffGenerations(player.GetBuffs(log, BuffEnum.Self), log, buffDesc); GroupBuffs = GetPlayerBuffGenerations(player.GetBuffs(log, BuffEnum.Group), log, buffDesc); OffGroupBuffs = GetPlayerBuffGenerations(player.GetBuffs(log, BuffEnum.OffGroup), log, buffDesc); SquadBuffs = GetPlayerBuffGenerations(player.GetBuffs(log, BuffEnum.Squad), log, buffDesc); // BuffUptimesActive = GetPlayerJsonBuffsUptime(player, player.GetActiveBuffs(log, BuffEnum.Self), player.GetBuffsDictionary(log), log, settings, buffDesc, personalBuffs); SelfBuffsActive = GetPlayerBuffGenerations(player.GetActiveBuffs(log, BuffEnum.Self), log, buffDesc); GroupBuffsActive = GetPlayerBuffGenerations(player.GetActiveBuffs(log, BuffEnum.Group), log, buffDesc); OffGroupBuffsActive = GetPlayerBuffGenerations(player.GetActiveBuffs(log, BuffEnum.OffGroup), log, buffDesc); SquadBuffsActive = GetPlayerBuffGenerations(player.GetActiveBuffs(log, BuffEnum.Squad), log, buffDesc); // List <Consumable> consumables = player.GetConsumablesList(log, 0, log.FightData.FightEnd); if (consumables.Any()) { Consumables = new List <JsonConsumable>(); foreach (Consumable food in consumables) { if (!buffDesc.ContainsKey("b" + food.Buff.ID)) { buffDesc["b" + food.Buff.ID] = new JsonLog.BuffDesc(food.Buff, log); } Consumables.Add(new JsonConsumable(food)); } } // List <DeathRecap> deathRecaps = player.GetDeathRecaps(log); if (deathRecaps.Any()) { DeathRecap = deathRecaps.Select(x => new JsonDeathRecap(x)).ToList(); } // DamageModifiers = JsonDamageModifierData.GetDamageModifiers(player.GetDamageModifierStats(log, null), log, damageModDesc); DamageModifiersTarget = JsonDamageModifierData.GetDamageModifiersTarget(player, log, damageModDesc); }