예제 #1
0
        private void RemovePlayerObjectiveTicksFromTeamAggregate(Player player)
        {
            var teamUpdates = new ScrimEventAggregateRoundTracker();

            var playerTracker = player.EventAggregateTracker;

            var playerMaxRound = playerTracker.HighestRound;
            var teamMaxRound   = EventAggregateTracker.HighestRound;

            var maxRound = playerMaxRound >= teamMaxRound ? playerMaxRound : teamMaxRound;

            for (var round = 1; round <= maxRound; round++)
            {
                if (playerTracker.TryGetTargetRoundStats(round, out var roundStats))
                {
                    var tempStats = new ScrimEventAggregate();

                    tempStats.ObjectiveCaptureTicks += roundStats.ObjectiveCaptureTicks;
                    tempStats.ObjectiveDefenseTicks += roundStats.ObjectiveDefenseTicks;

                    teamUpdates.AddToCurrent(tempStats);

                    teamUpdates.SaveRoundToHistory(round);
                }
            }

            teamUpdates.RoundStats.ObjectiveCaptureTicks += playerTracker.RoundStats.ObjectiveCaptureTicks;
            teamUpdates.RoundStats.ObjectiveDefenseTicks += playerTracker.RoundStats.ObjectiveDefenseTicks;

            EventAggregateTracker.SubtractFromHistory(teamUpdates);
        }
예제 #2
0
        private async Task <int> ScoreTeamkill(ScrimDeathActionEvent death)
        {
            var actionType = death.ActionType;
            var points     = GetActionRulePoints(actionType);

            var attackerUpdate = new ScrimEventAggregate()
            {
                Points    = points,
                NetScore  = points,
                Teamkills = 1
            };

            var victimUpdate = new ScrimEventAggregate()
            {
                Deaths         = 1,
                TeamkillDeaths = 1
            };

            // Player Stats update automatically updates the appropriate team's stats
            await _teamsManager.UpdatePlayerStats(death.AttackerPlayer.Id, attackerUpdate);

            await _teamsManager.UpdatePlayerStats(death.VictimPlayer.Id, victimUpdate);

            return(points);
        }
예제 #3
0
        private async Task <int> ScoreKill(ScrimDeathActionEvent death)
        {
            int points = 0;

            if (GetDeferToItemCategoryPoints(death.ActionType))
            {
                var categoryId = death.Weapon?.ItemCategoryId;

                if (categoryId != null)
                {
                    points = _activeRuleset.ItemCategoryRules
                             .Where(rule => rule.ItemCategoryId == categoryId)
                             .Select(rule => rule.Points)
                             .FirstOrDefault();
                }
            }
            else
            {
                var actionType = death.ActionType;
                points = GetActionRulePoints(actionType);
            }

            var isHeadshot = (death.IsHeadshot ? 1 : 0);

            var attackerUpdate = new ScrimEventAggregate()
            {
                Points    = points,
                NetScore  = points,
                Kills     = 1,
                Headshots = isHeadshot
            };

            var victimUpdate = new ScrimEventAggregate()
            {
                NetScore       = -points,
                Deaths         = 1,
                HeadshotDeaths = isHeadshot
            };

            // Player Stats update automatically updates the appropriate team's stats
            await _teamsManager.UpdatePlayerStats(death.AttackerPlayer.Id, attackerUpdate);

            await _teamsManager.UpdatePlayerStats(death.VictimPlayer.Id, victimUpdate);

            return(points);
        }
예제 #4
0
 public void SubtractStatsUpdate(ScrimEventAggregate update)
 {
     EventAggregateTracker.SubtractFromCurrent(update);
 }
예제 #5
0
 public void AddStatsUpdate(ScrimEventAggregate update)
 {
     EventAggregateTracker.AddToCurrent(update);
 }