private static void Parser_PlayerKilled(object sender, PlayerKilledEventArgs e) { if (!_matchStarted) { return; } var killTime = GetRoundDuration(); var tick = _parser.CurrentTick - _rountTickTimeStart; if (e.Killer != null && e.Killer.SteamID != 0 && e.Victim != null && e.Victim.SteamID != 0) { var kill = new Kill(_results.Players[e.Killer.SteamID], _results.Players[e.Victim.SteamID], e.Headshot, EquipmentMapper.Map(e.Weapon.Weapon), _currentRoundNumber, e.Killer.SteamID == e.Victim.SteamID, killTime, e.PenetratedObjects, e.AssistedFlash, tick); if (e.Assister != null) { kill.Assister = _results.Players[e.Assister.SteamID]; kill.Assister.Assists.Add(kill); } _results.Players[e.Killer.SteamID].Kills.Add(kill); _results.Players[e.Victim.SteamID].Deaths.Add(kill); if (e.Killer.Team == e.Victim.Team) { _results.Players[e.Killer.SteamID].Teamkills.Add(kill); } } // suicide if (e.Killer == null && e.Victim != null && e.Victim.SteamID != 0) { var kill = new Kill(null, _results.Players[e.Victim.SteamID], e.Headshot, EquipmentMapper.Map(e.Weapon.Weapon), _currentRoundNumber, true, killTime, e.PenetratedObjects, e.AssistedFlash, tick); if (e.Assister != null) { kill.Assister = _results.Players[e.Assister.SteamID]; kill.Assister.Assists.Add(kill); } _results.Players[e.Victim.SteamID].Deaths.Add(kill); } }
private static void Parser_PlayerHurt(object sender, PlayerHurtEventArgs e) { if (!_matchStarted || e.Attacker == null || e.Player == null) { return; } var attakersTeam = GetParticipants(_participants, _parser.Participants) .FirstOrDefault(x => x.SteamID == e.Attacker.SteamID)?.Team; var victimsTeam = GetParticipants(_participants, _parser.Participants) .FirstOrDefault(x => x.SteamID == e.Player.SteamID)?.Team; if (attakersTeam == victimsTeam) // attacked teammate { return; } var query = _playerDamageStat.Where(damage => damage.RoundNumber == _currentRoundNumber && damage.Attacker == e.Attacker.SteamID && damage.Victim == e.Player.SteamID) .ToList(); var givenDamage = query.Sum(x => x.HealthDamage); var lastHealth = query.Any() ? query.Min(x => x.Health) : FullHP; if (givenDamage >= FullHP) { return; } _playerDamageStat.Add(new Damage { RoundNumber = _currentRoundNumber, Weapon = EquipmentMapper.Map(e.Weapon.Weapon), Attacker = e.Attacker.SteamID, Victim = e.Player.SteamID, Health = e.Health, HealthDamage = e.HealthDamage + givenDamage <= FullHP ? e.HealthDamage : lastHealth, ArmorDamage = e.ArmorDamage }); }