private PlayerInfo GetOrCreate(SkillResult skillResult) { NpcEntity npctarget = skillResult.Target as NpcEntity; if (npctarget != null) { if (OnlyBosses)//not count bosses { if (!npctarget.Info.Boss) { return(null); } } if (IgnoreOneshots)//ignore damage that is more than 10x times than mob's hp { if ((npctarget.Info.HP > 0) && (npctarget.Info.HP <= skillResult.Damage / 10)) { return(null); } } } var player = skillResult.SourcePlayer; PlayerInfo playerStats = StatsByUser.FirstOrDefault(pi => pi.Player.Equals(player)); if (playerStats == null && (IsFromHealer(skillResult) || //either healer (!IsFromHealer(skillResult) && IsValidAttack(skillResult)))) //or damage from non-healer { playerStats = new PlayerInfo(player, this); StatsByUser.Add(playerStats); } return(playerStats); }
private PlayerInfo GetOrCreate(SkillResult skillResult) { NpcEntity npctarget = skillResult.Target as NpcEntity; //ignore pvp if onlybosses is ticked if (OnlyBosses && npctarget == null && IsValidAttack(skillResult)) { return(null); } if (npctarget != null) { if (OnlyBosses)//not count bosses { if (!npctarget.Info.Boss) { return(null); } } if (IgnoreOneshots) { if ((npctarget.Info.HP > 0) //ignore damage that is more than 10x times than mob's hp && (npctarget.Info.HP <= skillResult.Damage / 10 //ignore damage over 100m on a boss || (npctarget.Info.Boss && skillResult.Damage > 99999999))) { return(null); } } } var player = skillResult.SourcePlayer; PlayerInfo playerStats = StatsByUser.FirstOrDefault(pi => pi.Player.Equals(player)); if (playerStats == null && (IsFromHealer(skillResult) || //either healer (!IsFromHealer(skillResult) && IsValidAttack(skillResult)))) //or damage from non-healer { playerStats = new PlayerInfo(player, this); StatsByUser.Add(playerStats); } //update primary target if it's a mob if (npctarget != null) { if (!_targetHitCount.ContainsKey(npctarget)) { _targetHitCount.Add(npctarget, 0); } _targetHitCount[npctarget]++; PrimaryTarget = _targetHitCount.Aggregate((l, r) => l.Value > r.Value ? l : r).Key; } return(playerStats); }