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); }
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); }
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); }
public void SubtractStatsUpdate(ScrimEventAggregate update) { EventAggregateTracker.SubtractFromCurrent(update); }
public void AddStatsUpdate(ScrimEventAggregate update) { EventAggregateTracker.AddToCurrent(update); }