/// <summary> /// </summary> /// <param name="line"></param> public void SetDamageTaken(Line line) { if ((LimitBreaks.IsLimit(line.Action)) && Settings.Default.IgnoreLimitBreaks) { return; } Last20DamageTakenActions.Add(new LineHistory(line)); if (Last20DamageTakenActions.Count > 20) { Last20DamageTakenActions.RemoveAt(0); } //LineHistory.Add(new LineHistory(line)); var fields = line.GetType() .GetProperties(); var abilityGroup = GetGroup("DamageTakenByAction"); StatGroup subAbilityGroup; if (!abilityGroup.TryGetGroup(line.Action, out subAbilityGroup)) { subAbilityGroup = new StatGroup(line.Action); subAbilityGroup.Stats.AddStats(DamageTakenStatList(null)); abilityGroup.AddGroup(subAbilityGroup); } var damageGroup = GetGroup("DamageTakenByPlayers"); StatGroup subPlayerGroup; if (!damageGroup.TryGetGroup(line.Source, out subPlayerGroup)) { subPlayerGroup = new StatGroup(line.Source); subPlayerGroup.Stats.AddStats(DamageTakenStatList(null)); damageGroup.AddGroup(subPlayerGroup); } var abilities = subPlayerGroup.GetGroup("DamageTakenByPlayersByAction"); StatGroup subPlayerAbilityGroup; if (!abilities.TryGetGroup(line.Action, out subPlayerAbilityGroup)) { subPlayerAbilityGroup = new StatGroup(line.Action); subPlayerAbilityGroup.Stats.AddStats(DamageTakenStatList(subPlayerGroup, true)); abilities.AddGroup(subPlayerAbilityGroup); } Stats.IncrementStat("TotalDamageTakenActionsUsed"); subAbilityGroup.Stats.IncrementStat("TotalDamageTakenActionsUsed"); subPlayerGroup.Stats.IncrementStat("TotalDamageTakenActionsUsed"); subPlayerAbilityGroup.Stats.IncrementStat("TotalDamageTakenActionsUsed"); if (line.Hit) { Stats.IncrementStat("TotalOverallDamageTaken", line.Amount); subAbilityGroup.Stats.IncrementStat("TotalOverallDamageTaken", line.Amount); subPlayerGroup.Stats.IncrementStat("TotalOverallDamageTaken", line.Amount); subPlayerAbilityGroup.Stats.IncrementStat("TotalOverallDamageTaken", line.Amount); if (line.Crit) { Stats.IncrementStat("DamageTakenCritHit"); subAbilityGroup.Stats.IncrementStat("DamageTakenCritHit"); subPlayerGroup.Stats.IncrementStat("DamageTakenCritHit"); subPlayerAbilityGroup.Stats.IncrementStat("DamageTakenCritHit"); Stats.IncrementStat("CriticalDamageTaken", line.Amount); subAbilityGroup.Stats.IncrementStat("CriticalDamageTaken", line.Amount); subPlayerGroup.Stats.IncrementStat("CriticalDamageTaken", line.Amount); subPlayerAbilityGroup.Stats.IncrementStat("CriticalDamageTaken", line.Amount); if (line.Modifier != 0) { var mod = ParseHelper.GetBonusAmount(line.Amount, line.Modifier); var modStat = "DamageTakenCritMod"; Stats.IncrementStat(modStat, mod); subAbilityGroup.Stats.IncrementStat(modStat, mod); subPlayerGroup.Stats.IncrementStat(modStat, mod); subPlayerAbilityGroup.Stats.IncrementStat(modStat, mod); } } else { Stats.IncrementStat("DamageTakenRegHit"); subAbilityGroup.Stats.IncrementStat("DamageTakenRegHit"); subPlayerGroup.Stats.IncrementStat("DamageTakenRegHit"); subPlayerAbilityGroup.Stats.IncrementStat("DamageTakenRegHit"); Stats.IncrementStat("RegularDamageTaken", line.Amount); subAbilityGroup.Stats.IncrementStat("RegularDamageTaken", line.Amount); subPlayerGroup.Stats.IncrementStat("RegularDamageTaken", line.Amount); subPlayerAbilityGroup.Stats.IncrementStat("RegularDamageTaken", line.Amount); if (line.Modifier != 0) { var mod = ParseHelper.GetBonusAmount(line.Amount, line.Modifier); var modStat = "DamageTakenRegMod"; Stats.IncrementStat(modStat, mod); subAbilityGroup.Stats.IncrementStat(modStat, mod); subPlayerGroup.Stats.IncrementStat(modStat, mod); subPlayerAbilityGroup.Stats.IncrementStat(modStat, mod); } } } else { Stats.IncrementStat("DamageTakenRegMiss"); subAbilityGroup.Stats.IncrementStat("DamageTakenRegMiss"); subPlayerGroup.Stats.IncrementStat("DamageTakenRegMiss"); subPlayerAbilityGroup.Stats.IncrementStat("DamageTakenRegMiss"); } foreach (var stat in fields.Where(stat => LD.Contains(stat.Name)) .Where(stat => Equals(stat.GetValue(line), true))) { var regStat = String.Format("DamageTaken{0}", stat.Name); Stats.IncrementStat(regStat); subAbilityGroup.Stats.IncrementStat(regStat); subPlayerGroup.Stats.IncrementStat(regStat); subPlayerAbilityGroup.Stats.IncrementStat(regStat); if (line.Modifier == 0) { continue; } var mod = ParseHelper.GetBonusAmount(line.Amount, line.Modifier); var modStat = String.Format("DamageTaken{0}Mod", stat.Name); Stats.IncrementStat(modStat, mod); subAbilityGroup.Stats.IncrementStat(modStat, mod); subPlayerGroup.Stats.IncrementStat(modStat, mod); subPlayerAbilityGroup.Stats.IncrementStat(modStat, mod); } }
/// <summary> /// </summary> /// <param name="line"></param> public void SetDamage(Line line) { if (Name == Constants.CharacterName) { //LineHistory.Add(new LineHistory(line)); } Last20DamageActions.Add(new LineHistory(line)); if (Last20DamageActions.Count > 20) { Last20DamageActions.RemoveAt(0); } if ((LimitBreaks.IsLimit(line.Action)) && Settings.Default.IgnoreLimitBreaks) { return; } var fields = line.GetType() .GetProperties(); var currentDamage = line.Crit ? line.Amount > 0 ? ParseHelper.GetOriginalAmount(line.Amount, (decimal) .5) : 0 : line.Amount; if (currentDamage > 0) { ParseHelper.LastAmountByAction.EnsurePlayerAction(line.Source, line.Action, currentDamage); } var abilityGroup = GetGroup("DamageByAction"); StatGroup subAbilityGroup; if (!abilityGroup.TryGetGroup(line.Action, out subAbilityGroup)) { subAbilityGroup = new StatGroup(line.Action); subAbilityGroup.Stats.AddStats(DamageStatList(null)); abilityGroup.AddGroup(subAbilityGroup); } var monsterGroup = GetGroup("DamageToMonsters"); StatGroup subMonsterGroup; if (!monsterGroup.TryGetGroup(line.Target, out subMonsterGroup)) { subMonsterGroup = new StatGroup(line.Target); subMonsterGroup.Stats.AddStats(DamageStatList(null)); monsterGroup.AddGroup(subMonsterGroup); } var monsters = subMonsterGroup.GetGroup("DamageToMonstersByAction"); StatGroup subMonsterAbilityGroup; if (!monsters.TryGetGroup(line.Action, out subMonsterAbilityGroup)) { subMonsterAbilityGroup = new StatGroup(line.Action); subMonsterAbilityGroup.Stats.AddStats(DamageStatList(subMonsterGroup, true)); monsters.AddGroup(subMonsterAbilityGroup); } Stats.IncrementStat("TotalDamageActionsUsed"); subAbilityGroup.Stats.IncrementStat("TotalDamageActionsUsed"); subMonsterGroup.Stats.IncrementStat("TotalDamageActionsUsed"); subMonsterAbilityGroup.Stats.IncrementStat("TotalDamageActionsUsed"); if (line.Hit) { Stats.IncrementStat("TotalOverallDamage", line.Amount); subAbilityGroup.Stats.IncrementStat("TotalOverallDamage", line.Amount); subMonsterGroup.Stats.IncrementStat("TotalOverallDamage", line.Amount); subMonsterAbilityGroup.Stats.IncrementStat("TotalOverallDamage", line.Amount); if (line.Crit) { Stats.IncrementStat("DamageCritHit"); subAbilityGroup.Stats.IncrementStat("DamageCritHit"); subMonsterGroup.Stats.IncrementStat("DamageCritHit"); subMonsterAbilityGroup.Stats.IncrementStat("DamageCritHit"); Stats.IncrementStat("CriticalDamage", line.Amount); subAbilityGroup.Stats.IncrementStat("CriticalDamage", line.Amount); subMonsterGroup.Stats.IncrementStat("CriticalDamage", line.Amount); subMonsterAbilityGroup.Stats.IncrementStat("CriticalDamage", line.Amount); if (line.Modifier != 0) { var mod = ParseHelper.GetBonusAmount(line.Amount, line.Modifier); var modStat = "DamageCritMod"; Stats.IncrementStat(modStat, mod); subAbilityGroup.Stats.IncrementStat(modStat, mod); subMonsterGroup.Stats.IncrementStat(modStat, mod); subMonsterAbilityGroup.Stats.IncrementStat(modStat, mod); } } else { Stats.IncrementStat("DamageRegHit"); subAbilityGroup.Stats.IncrementStat("DamageRegHit"); subMonsterGroup.Stats.IncrementStat("DamageRegHit"); subMonsterAbilityGroup.Stats.IncrementStat("DamageRegHit"); Stats.IncrementStat("RegularDamage", line.Amount); subAbilityGroup.Stats.IncrementStat("RegularDamage", line.Amount); subMonsterGroup.Stats.IncrementStat("RegularDamage", line.Amount); subMonsterAbilityGroup.Stats.IncrementStat("RegularDamage", line.Amount); if (line.Modifier != 0) { var mod = ParseHelper.GetBonusAmount(line.Amount, line.Modifier); var modStat = "DamageRegMod"; Stats.IncrementStat(modStat, mod); subAbilityGroup.Stats.IncrementStat(modStat, mod); subMonsterGroup.Stats.IncrementStat(modStat, mod); subMonsterAbilityGroup.Stats.IncrementStat(modStat, mod); } } } else { Stats.IncrementStat("DamageRegMiss"); subAbilityGroup.Stats.IncrementStat("DamageRegMiss"); subMonsterGroup.Stats.IncrementStat("DamageRegMiss"); subMonsterAbilityGroup.Stats.IncrementStat("DamageRegMiss"); } foreach (var stat in fields.Where(stat => LD.Contains(stat.Name)) .Where(stat => Equals(stat.GetValue(line), true))) { var regStat = String.Format("Damage{0}", stat.Name); Stats.IncrementStat(regStat); subAbilityGroup.Stats.IncrementStat(regStat); subMonsterGroup.Stats.IncrementStat(regStat); subMonsterAbilityGroup.Stats.IncrementStat(regStat); if (line.Modifier == 0) { continue; } var mod = ParseHelper.GetBonusAmount(line.Amount, line.Modifier); var modStat = String.Format("Damage{0}Mod", stat.Name); Stats.IncrementStat(modStat, mod); subAbilityGroup.Stats.IncrementStat(modStat, mod); subMonsterGroup.Stats.IncrementStat(modStat, mod); subMonsterAbilityGroup.Stats.IncrementStat(modStat, mod); } }