Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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
            });
        }