public async Task Update(MatchFinishedEvent nextEvent) { if (nextEvent.WasFakeEvent) { return; } var dataPlayers = nextEvent.match.players; if (dataPlayers.Count == 2) { var p1 = await _playerRepository.LoadMapAndRaceStat(dataPlayers[0].battleTag, nextEvent.match.season) ?? PlayerRaceOnMapVersusRaceRatio.Create(dataPlayers[0].battleTag, nextEvent.match.season); var p2 = await _playerRepository.LoadMapAndRaceStat(dataPlayers[1].battleTag, nextEvent.match.season) ?? PlayerRaceOnMapVersusRaceRatio.Create(dataPlayers[1].battleTag, nextEvent.match.season); DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); DateTime date = start.AddMilliseconds(nextEvent.match.startTime); var patch = await _patchRepository.GetPatchVersionFromDate(date); p1.AddMapWin(dataPlayers[0].race, dataPlayers[1].race, "Overall", dataPlayers[0].won, patch); p1.AddMapWin(dataPlayers[0].race, dataPlayers[1].race, "Overall", dataPlayers[0].won, "All"); p2.AddMapWin(dataPlayers[1].race, dataPlayers[0].race, "Overall", dataPlayers[1].won, patch); p2.AddMapWin(dataPlayers[1].race, dataPlayers[0].race, "Overall", dataPlayers[1].won, "All"); p1.AddMapWin(dataPlayers[0].race, dataPlayers[1].race, new MapName(nextEvent.match.map).Name, dataPlayers[0].won, patch); p1.AddMapWin(dataPlayers[0].race, dataPlayers[1].race, new MapName(nextEvent.match.map).Name, dataPlayers[0].won, "All"); p2.AddMapWin(dataPlayers[1].race, dataPlayers[0].race, new MapName(nextEvent.match.map).Name, dataPlayers[1].won, patch); p2.AddMapWin(dataPlayers[1].race, dataPlayers[0].race, new MapName(nextEvent.match.map).Name, dataPlayers[1].won, "All"); await _playerRepository.UpsertMapAndRaceStat(p1); await _playerRepository.UpsertMapAndRaceStat(p2); } }
public async Task Update(MatchFinishedEvent nextEvent) { if (nextEvent.WasFakeEvent || nextEvent.match.players.All(p => p.won) || nextEvent.match.players.All(p => !p.won)) { return; } if (nextEvent.match.gameMode == GameMode.GM_1v1) { var players = nextEvent.match.players; if (Math.Abs(nextEvent.match.players[0].mmr.rating - nextEvent.match.players[1].mmr.rating) > 200) { return; } var averageMmr = players.Average(p => p.mmr.rating); DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); DateTime date = start.AddMilliseconds(nextEvent.match.startTime); var patch = await _patchRepository.GetPatchVersionFromDate(date); var statOverall = await _w3Stats.LoadRaceVsRaceStat(0) ?? new OverallRaceAndWinStat(0); var statPerMmr = await _w3Stats.LoadRaceVsRaceStat(ToMaxMMr(averageMmr)) ?? new OverallRaceAndWinStat(ToMaxMMr(averageMmr)); statOverall.Apply("Overall", players[0].race, players[1].race, players[0].won, patch); statOverall.Apply("Overall", players[0].race, players[1].race, players[0].won, "All"); statOverall.Apply("Overall", players[1].race, players[0].race, players[1].won, patch); statOverall.Apply("Overall", players[1].race, players[0].race, players[1].won, "All"); statOverall.Apply(new MapName(nextEvent.match.map).Name, players[0].race, players[1].race, players[0].won, patch); statOverall.Apply(new MapName(nextEvent.match.map).Name, players[0].race, players[1].race, players[0].won, "All"); statOverall.Apply(new MapName(nextEvent.match.map).Name, players[1].race, players[0].race, players[1].won, patch); statOverall.Apply(new MapName(nextEvent.match.map).Name, players[1].race, players[0].race, players[1].won, "All"); statPerMmr.Apply("Overall", players[0].race, players[1].race, players[0].won, patch); statPerMmr.Apply("Overall", players[0].race, players[1].race, players[0].won, "All"); statPerMmr.Apply("Overall", players[1].race, players[0].race, players[1].won, patch); statPerMmr.Apply("Overall", players[1].race, players[0].race, players[1].won, "All"); statPerMmr.Apply(new MapName(nextEvent.match.map).Name, players[0].race, players[1].race, players[0].won, patch); statPerMmr.Apply(new MapName(nextEvent.match.map).Name, players[0].race, players[1].race, players[0].won, "All"); statPerMmr.Apply(new MapName(nextEvent.match.map).Name, players[1].race, players[0].race, players[1].won, patch); statPerMmr.Apply(new MapName(nextEvent.match.map).Name, players[1].race, players[0].race, players[1].won, "All"); await _w3Stats.Save(statOverall); await _w3Stats.Save(statPerMmr); } }