private static List <Guid> GetMatchEventsIds(Player player, MatchEvents type) { return(player.MatchEvents .Select(mId => MatchEventRepository.GetInstance().FindById(mId)) .Where(matchEvent => matchEvent.GetType() == type) .Select(mEvent => mEvent.Id).ToList()); }
private MatchEvent GetMatchEvent(MatchEvents type, Player player, Team team) { MatchEvent matchEvent; switch (type) { case MatchEvents.RedCard: matchEvent = new RedCard(player.Id, Match.Id); break; case MatchEvents.YellowCard: matchEvent = new YellowCard(player.Id, Match.Id); break; case MatchEvents.Assist: matchEvent = new Assist(player.Id, Match.Id); break; case MatchEvents.Goal: matchEvent = new Goal(player.Id, team.Id, Match.Id); break; default: throw new ArgumentOutOfRangeException(nameof(type), type, null); } return(matchEvent); }
private MatchResult GetMatchResult(CampaignMatch match, string gamerTag, MatchEvents matchEvents) { MatchResult result = Mapper.Map <MatchResult>(match); //var players = match.PlayerStats.Select(GetCampaignPlayer).ToList(); return(result); }
public override int GetHashCode() { unchecked { return((IsCompleteSetOfEvents.GetHashCode() * 397) ^ (MatchEvents?.GetHashCode() ?? 0)); } }
private void AddMatchEvent(MatchEvents type) { var player = GetSelectedPlayerFromList(); var playersTeam = _teamService.FindTeamByPlayerId(player.Id); var matchEvent = GetMatchEvent(type, player, playersTeam); _matchEventsTemp.Add(matchEvent); if (playersTeam.Id == AwayTeam.Id) { var awayEvenst = GetMatchEventsForTeam(AwayTeam) .Where(e => e.GetType() == MatchEvents.Goal) .ToList(); AwayTeamGoals.Text = awayEvenst.Count.ToString(); _matchEventsAway.Add(matchEvent); return; } var test = GetMatchEventsForTeam(HomeTeam); HomeTeamGoals.Text = test .Where(e => e.GetType() == MatchEvents.Goal) .ToList() .Count.ToString(); _matchEventsHome.Add(matchEvent); PlayerHasMaxCardsOnHim(player); }
public IActionResult SetCurrentMatch(string MatchId, string GameMode) { MatchResults.GetMatchResultsById(MatchId, GameMode); MatchEvents.GetMatchEventsById(MatchId); ViewBag.CurrentTeams = MatchResults.CurrentTeams; return(View()); }
private void OnGameEndType(MatchEvents arg1, object[] arg2) { if (arg2 != null && arg2.Length > 0) { m_matchID = Convert.ToInt32(arg2[0]); MatchGameEnd(m_matchID); } }
private void OnMatchCallbackType(MatchEvents arg1, object[] arg2) { if (arg2 != null || arg2.Length > 0) { m_matchID = Convert.ToInt32(arg2[0]); MatchSuccess(m_matchID); } }
private void UpdateTeamUnCompletedPassesEvent(MatchEvents matchEvent, MatchEventDTO TeamEvent, List <PlayerDTO> players) { TeamEvent.UnCompletedPasses++; var player = players.Where(p => p.PlayerID == matchEvent.PlayerID_1).SingleOrDefault(); if (player != null) { player.PlayerEvents.UnCompletedPasses++; } }
private void UpdateTeamShotOffTargetEvent(MatchEvents matchEvent, MatchEventDTO TeamEvent, List <PlayerDTO> players) { TeamEvent.ShotsOffTarget++; var player = players.Where(p => p.PlayerID == matchEvent.PlayerID_1).SingleOrDefault(); if (player != null) { player.PlayerEvents.ShotsOffTarget++; } }
private void UpdateTeamOwnGoalEvent(MatchEvents matchEvent, MatchEventDTO TeamEvent, List <PlayerDTO> players) { TeamEvent.OwnGoals++; var player = players.Where(p => p.PlayerID == matchEvent.PlayerID_1).SingleOrDefault(); if (player != null) { player.PlayerEvents.OwnGoals++; } }
public void Setup() { _matchEvents = JsonConvert.DeserializeObject<MatchEvents>(File.ReadAllText(Config.MatchEventsJsonPath)); var mock = new Mock<IHaloSession>(); mock.Setup(m => m.Get<MatchEvents>(It.IsAny<string>())) .ReturnsAsync(_matchEvents); _mockSession = mock.Object; }
public void Setup() { _matchEvents = JsonConvert.DeserializeObject <MatchEvents>(File.ReadAllText(Config.MatchEventsJsonPath)); var mock = new Mock <IHaloSession>(); mock.Setup(m => m.Get <MatchEvents>(It.IsAny <string>())) .ReturnsAsync(_matchEvents); _mockSession = mock.Object; }
public ActionResult <MatchEventDTO> GetMatchEvent(int matchEventId) { MatchEventDTO result = new MatchEventDTO(); using (UaFootballContext db = new UaFootballContext()) { MatchEvents me = new MatchEvents(); var o = (from matchEvent in db.MatchEvents where matchEvent.MatchEventId == matchEventId select new { A = matchEvent, B = matchEvent.Player1, C = matchEvent.Player2 }).Single(); me = o.A; me.Player1 = o.B; me.Player2 = o.C; if (me != null) { result = new MatchEventDTO { EventFlags = me.EventFlags, Event_Cd = me.EventCd, MatchEvent_Id = me.MatchEventId, Match_Id = me.MatchId, Minute = me.Minute, Player1_Id = me.Player1Id, Player2_Id = me.Player2Id, Player1 = new PlayerDTO { First_Name = me.Player1.FirstName, Last_Name = me.Player1.LastName, Display_Name = me.Player1.DisplayName, Country_Id = me.Player1.CountryId } }; } if (me.Player2Id.HasValue) { result.Player2 = new PlayerDTO { First_Name = me.Player2.FirstName, Last_Name = me.Player2.LastName, Display_Name = me.Player2.DisplayName, Country_Id = me.Player2.CountryId }; } } return(result); }
public bool Equals(MatchEventSummary other) { if (ReferenceEquals(null, other)) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return(IsCompleteSetOfEvents == other.IsCompleteSetOfEvents && MatchEvents.OrderBy(me => me.TimeSinceStart).SequenceEqual(other.MatchEvents.OrderBy(me => me.TimeSinceStart))); }
private async Task SetPlayer(IPlayer playerStat, ArenaPlayer player, MatchEvents matchEvents = null) { await SetBasePlayer(playerStat, player, matchEvents); var killed = playerStat.KilledOpponentDetails.Select(p => p.GamerTag); var killedBy = playerStat.KilledByOpponentDetails.Select(p => p.GamerTag); var temp = killed.Union(killedBy); foreach (var tag in temp) { Enemy enemy = new Enemy { Name = tag, Kills = playerStat.KilledOpponentDetails?.FirstOrDefault(p => p.GamerTag == tag)?.TotalKills ?? 0, Deaths = playerStat.KilledByOpponentDetails?.FirstOrDefault(p => p.GamerTag == tag)?.TotalKills ?? 0, IsPlayer = true }; enemy.Spread = enemy.Kills - enemy.Deaths; player.Enemies.Add(enemy); } var maxSpread = player.Enemies.Max(e => e.Spread); var minSpread = Math.Abs(player.Enemies.Min(e => e.Spread)); int minKills = player.Enemies.Min(p => p.Kills); int maxKills = player.Enemies.Max(p => p.Kills) - minKills; int minDeaths = player.Enemies.Min(p => p.Deaths); int maxDeaths = player.Enemies.Max(p => p.Deaths) - minDeaths; foreach (var enemy in player.Enemies) { if (enemy.Spread > 0) { enemy.SpreadSign = "+"; enemy.SpreadPercent = enemy.Spread.Percent(maxSpread); } else if (enemy.Spread < 0) { enemy.SpreadSign = "-"; enemy.Spread = Math.Abs(enemy.Spread); enemy.SpreadPercent = enemy.Spread.Percent(minSpread); } enemy.KillPercent = enemy.Kills.Percent(minKills, maxKills); enemy.DeathPercent = enemy.Deaths.Percent(minDeaths, maxDeaths); } player.Enemies = player.Enemies.OrderByDescending(e => e.Kills).ThenBy(e => e.Deaths).ToList(); }
public async Task <BaseMatchResult> GetMatch(Enumeration.GameMode gameMode, Guid id, string gamerTag) { BaseMatchResult match = null; switch (gameMode) { case Enumeration.GameMode.Arena: var arenaMatch = await _statsRepository.GetArenaMatch(id); match = await GetMatchResult(arenaMatch, gamerTag); break; case Enumeration.GameMode.Campaign: var campaignMatch = await _statsRepository.GetCampaignMatch(id); match = GetMatchResult(campaignMatch, gamerTag); break; case Enumeration.GameMode.Custom: var customMatch = await _statsRepository.GetCustomMatch(id); match = await GetMatchResult(customMatch, gamerTag); break; case Enumeration.GameMode.Warzone: MatchEvents matchEvents = await _statsRepository.GetEventsForMatch(id); var warzoneMatch = await _statsRepository.GetWarzoneMatch(id); match = await GetMatchResult(warzoneMatch, gamerTag, matchEvents); break; default: return(null); } if (match != null) { match.GameMode = gameMode; match.Id = id; } return(match); }
private void OnLoginStateType(MatchEvents arg1, object[] arg2) { if (arg2 != null && arg2.Length > 0) { string uuid = arg2[0].ToString(); if (!gameOver && gameing) { Dictionary <string, object> rejoinDic = new Dictionary <string, object>(); rejoinDic.Add("action", "rejoin"); rejoinDic.Add("match_id", m_matchID); string sendData = JsonUtils.Instance.ObjectToJson(rejoinDic); byte[] bsend = Encoding.UTF8.GetBytes(sendData); WebSocketSendAysnc(bsend, (errorSend) => { }, WebSocketMessageType.Text); } } }
public ActionResult <string> UpdateMatchEvent(int matchEventId, int?player2Id, long flags) { string response = "success"; using (UaFootballContext db = new UaFootballContext()) { try { MatchEvents me = db.MatchEvents.Find(matchEventId); me.Player2Id = player2Id; me.EventFlags = flags; db.SaveChanges(); } catch (Exception ex) { response = "Error: " + ex.Message; } } return(string.Format("{{\"result\":\"{0}\"}}", response)); }
private void Reset() { playList = new List <PlayInfo>(150); secondHalfStarted = false; screen.Reset(MatchSpeed); if (screen.HomeTeamSquad != null) { screen.HomeTeamSquad.ResetFatigue(); screen.AwayTeamSquad.ResetFatigue(); } if (!isSimulatingMatch) { screen.Narration.Reset(); } actionManager = new MatchActionManager(); playDiceRolls = new PlayDiceRolls(); matchEvents = new MatchEvents(); }
public IActionResult GetMatchEvents(string GamerTag) { List <MatchEvents.GameEvent> relevantEventsList = MatchEvents.GetMatchEvents(GamerTag); if (relevantEventsList.Count > 0) { List <Medal.Root> allMedals = new List <Medal.Root> { }; for (int i = 0; i < relevantEventsList.Count; i++) { allMedals.Add(Medal.GetMedal(relevantEventsList[i].MedalId)); } ViewBag.MatchEvents = relevantEventsList; ViewBag.MatchMedals = allMedals; ViewBag.GamerTag = GamerTag; return(View()); } else { return(RedirectToAction("NoMedals")); } }
private int GetGoals(bool isHome) { var side = isHome ? "home" : "away"; return(MatchEvents.OfType <GoalEvent>().Count(m => m.Team == side)); }
private async Task <ArenaPlayer> GetCustomPlayer(CustomMatchPlayerStat playerStat, MatchEvents matchEvents) { ArenaPlayer player = Mapper.Map <ArenaPlayer>(playerStat); await SetPlayer(playerStat, player, matchEvents); return(player); }
public async Task <string> GetMatch(Enumeration.GameMode gameMode, Guid id, string gamerTag) { if (_settings.CacheResults) { var result = await _db.FindAsync <MatchResultData>(id.ToString()); if (result != null) { return(result.Data); } } MatchEvents matchEvents = await _statsRepository.GetEventsForMatch(id); matchEvents.GameEvents = matchEvents.GameEvents.Where(e => e.EventName == Enumeration.EventType.Death).ToList(); MatchResult match = null; switch (gameMode) { case Enumeration.GameMode.Arena: var arenaMatch = await _statsRepository.GetArenaMatch(id); match = await GetMatchResult(arenaMatch, gamerTag, matchEvents); break; case Enumeration.GameMode.Campaign: var campaignMatch = await _statsRepository.GetCampaignMatch(id); match = GetMatchResult(campaignMatch, gamerTag, matchEvents); break; case Enumeration.GameMode.Custom: var customMatch = await _statsRepository.GetCustomMatch(id); match = await GetMatchResult(customMatch, gamerTag, matchEvents); break; case Enumeration.GameMode.Warzone: var warzoneMatch = await _statsRepository.GetWarzoneMatch(id); match = await GetMatchResult(warzoneMatch, gamerTag, matchEvents); break; default: return(null); } if (match != null) { match.GameMode = gameMode; match.Id = id; } var matchResult = new MatchResultData(id.ToString(), match); if (_settings.CacheResults) { _db.InsertAsync(matchResult); await _db.CommitChanges(); } return(matchResult.Data); }
private async Task <ArenaMatchResult> GetMatchResult(WarzoneMatch match, string gamerTag, MatchEvents matchEvents) { ArenaMatchResult result = Mapper.Map <ArenaMatchResult>(match); var players = new List <ArenaPlayer>(); foreach (var playerStat in match.PlayerStats) { var p = await GetWarzonePlayer(playerStat, matchEvents); players.Add(p); } SetTeams(match, players, result, gamerTag); return(result); }
public ActionResult Add(MatchViewModel model) { var fixture = unitOfWork.FixtureRepository.GetByID(model.fixtureid); Players player1 = null; Players player2 = null; if (ModelState.IsValid) { Teams team1 = unitOfWork.TeamRepository.GetByID(fixture.Team1); Teams team2 = unitOfWork.TeamRepository.GetByID(fixture.Team2); //odstraneni MNG flagu RemovePlayerInjuries(team1); RemovePlayerInjuries(team2); // nove detaily zapasu var teamData1 = new TeamMatchData() { Team = fixture.Team1, Fame = model.fame1, Gate = model.gate1, Winnings = model.winning1, FanFactorMod = model.fanfactor1, Score = model.score1, SpirallingExpense = CalculateRollingExpenses(fixture.Teams) //teaminducements }; if (model.mvp1 != 0) { teamData1.MVP = model.mvp1; } var teamData2 = new TeamMatchData() { Team = fixture.Team2, Fame = model.fame2, Gate = model.gate2, Winnings = model.winning2, FanFactorMod = model.fanfactor2, Score = model.score2, SpirallingExpense = CalculateRollingExpenses(fixture.Teams1) //teaminducements }; if (model.mvp2 != 0) { teamData2.MVP = model.mvp2; } // pricteni penez, update ff, rolling expense team1.Treasury += model.winning1; team2.Treasury += model.winning2; if (CalculateRollingExpenses(team1) > 0) { team1.Treasury = (team1.Treasury - CalculateRollingExpenses(team1) > 0) ? team1.Treasury -= CalculateRollingExpenses(team1) : 0; } if (CalculateRollingExpenses(team2) > 0) { team2.Treasury = (team2.Treasury - CalculateRollingExpenses(team2) > 0) ? team2.Treasury -= CalculateRollingExpenses(team2) : 0; } team1.Fanfactor += model.fanfactor1; team1.Value += model.fanfactor1 * 10000; team2.Fanfactor += model.fanfactor2; team2.Value += model.fanfactor2 * 10000; // vlozeni zapasu var match = new Matches() { TeamMatchData = teamData1, TeamMatchData1 = teamData2, Date = model.matchDate, Competition = fixture.Group, Fixture = fixture.ID, Round = fixture.Round }; // pridani MVP if (model.mvp1 > 0) { player1 = unitOfWork.PlayerRepository.GetByID(model.mvp1); player1.SPP += 5; player1.MVP++; unitOfWork.PlayerRepository.Update(player1); } if (model.mvp2 > 0) { player2 = unitOfWork.PlayerRepository.GetByID(model.mvp2); player2.SPP += 5; player2.MVP++; unitOfWork.PlayerRepository.Update(player2); } //Inducementy if (model.selectedInducements1 != null) { foreach (var ind in model.selectedInducements1) { var inducement = new TeamInducements() { Type = ind, Value = 0 }; teamData1.TeamInducements.Add(inducement); } } if (model.selectedStarplayers1 != null) { foreach (var ind in model.selectedStarplayers1) { var inducement = new TeamInducements() { Type = Inducements.StarPlayer, Value = ind }; teamData1.TeamInducements.Add(inducement); } } if (model.selectedInducements2 != null) { foreach (var ind in model.selectedInducements2) { var inducement = new TeamInducements() { Type = ind, Value = 0 }; teamData2.TeamInducements.Add(inducement); } } if (model.selectedStarplayers2 != null) { foreach (var ind in model.selectedStarplayers2) { var inducement = new TeamInducements() { Type = Inducements.StarPlayer, Value = ind }; teamData2.TeamInducements.Add(inducement); } } unitOfWork.TeamMatchDataRepository.Insert(teamData1); unitOfWork.TeamMatchDataRepository.Insert(teamData2); unitOfWork.TeamRepository.Update(team1); unitOfWork.TeamRepository.Update(team2); unitOfWork.MatchRepository.Insert(match); unitOfWork.Save(); // vyreseni match eventu if (model.events != null) { foreach (var mevent in model.events) { if (mevent.canceled) { continue; } player1 = unitOfWork.PlayerRepository.GetByID(mevent.sourcePlayer); MatchEvents newEvent = new MatchEvents() { Team = mevent.sourcePlayerTeam, SourcePlayer = mevent.sourcePlayer, Match = match.ID, EventType = (int)mevent.type }; switch (mevent.type) { case MatchEventsTypes.Touchdown: player1.SPP += 3; player1.TD++; break; case MatchEventsTypes.Completion: player1.SPP++; player1.COMP++; break; case MatchEventsTypes.Interception: player1.SPP += 2; player1.INT++; break; case MatchEventsTypes.Injury: var tteam1 = unitOfWork.TeamRepository.GetByID(player1.Team); switch (mevent.result) { case 1: break; case 2: player1.MNG = 1; tteam1.Value -= player1.Value; break; case 3: player1.NI = 1; player1.MNG = 1; tteam1.Value -= player1.Value; break; case 4: player1.MA--; player1.MNG = 1; tteam1.Value -= player1.Value; break; case 5: player1.AV--; player1.MNG = 1; tteam1.Value -= player1.Value; break; case 6: player1.AG--; player1.MNG = 1; tteam1.Value -= player1.Value; break; case 7: player1.ST--; player1.MNG = 1; tteam1.Value -= player1.Value; break; case 8: player1.Status = Status.Inactive; tteam1.Value -= player1.Value; break; } if (fixture.Groups.Playoff == 1 && player1.MNG == 1 && player1.Status == Status.Active) { player1.MNG = 0; tteam1.Value += player1.Value; } unitOfWork.TeamRepository.Update(tteam1); break; case MatchEventsTypes.Casualty: player1.SPP += 2; player1.CAS++; player2 = unitOfWork.PlayerRepository.GetByID(mevent.targetPlayer); newEvent.TargetPlayer = mevent.targetPlayer; newEvent.Result = mevent.result; var tteam2 = unitOfWork.TeamRepository.GetByID(player2.Team); switch (mevent.result) { case 1: break; case 2: player2.MNG = 1; tteam2.Value -= player2.Value; break; case 3: player2.NI = 1; player2.MNG = 1; tteam2.Value -= player2.Value; break; case 4: player2.MA--; player2.MNG = 1; tteam2.Value -= player2.Value; break; case 5: player2.AV--; player2.MNG = 1; tteam2.Value -= player2.Value; break; case 6: player2.AG--; player2.MNG = 1; tteam2.Value -= player2.Value; break; case 7: player2.ST--; player2.MNG = 1; tteam2.Value -= player2.Value; break; case 8: player1.Kills++; player2.Status = Status.Inactive; tteam2.Value -= player2.Value; break; } if (fixture.Groups.Playoff == 1 && player2.MNG == 1 && player2.Status == Status.Active) { player2.MNG = 0; tteam2.Value += player2.Value; } unitOfWork.PlayerRepository.Update(player2); unitOfWork.TeamRepository.Update(tteam2); break; } unitOfWork.MatchEventRepository.Insert(newEvent); unitOfWork.PlayerRepository.Update(player1); unitOfWork.Save(); } } AddApplicationMessage("Zápas byl uložen", Models.MessageSeverity.Success); return(RedirectToAction("Group", "Team", new { groupid = fixture.Group })); } if (fixture == null) { AddApplicationMessage("Neznámý zápas.", Models.MessageSeverity.Danger); return(RedirectToAction("Index", "Competitions")); } AddApplicationMessage("Formulář obsahuje chyby, zkontrolujte prosím obsah", Models.MessageSeverity.Danger); var players1 = unitOfWork.PlayerRepository.GetPlayersForEvent(fixture.Team1).ToList(); var players2 = unitOfWork.PlayerRepository.GetPlayersForEvent(fixture.Team2).ToList(); var i = 0; var noplayer = new Players() { ID = 0, Name = "-- Nikdo ze seznamu --" }; foreach (var player in players1) { players1[i].Name = player.Number + " - " + player.Name; i++; } players1.Add(noplayer); players1.AddRange(unitOfWork.PlayerRepository.GetSpecialsForEvent()); players2.AddRange(unitOfWork.PlayerRepository.GetSpecialsForEvent()); i = 0; foreach (var player in players2) { players2[i].Name = player.Number + " - " + player.Name; i++; } players2.Add(noplayer); model.fixture = fixture; model.players1 = new SelectList(players1.OrderBy(m => m.ID), "ID", "Name"); model.players2 = new SelectList(players2.OrderBy(m => m.ID), "ID", "Name"); var starplayers = unitOfWork.PlayerRepository.Get(filter: p => p.PlayerTypes.Race == Races.Special).ToList(); starplayers.Concat(unitOfWork.PlayerRepository.GetSpecialsForEvent()); var inducements = from Inducements r in Enum.GetValues(typeof(Inducements)) select new { ID = (int)r, Name = r.ToString() }; model.inducements = new SelectList(inducements, "ID", "Name"); model.starplayers = new SelectList(starplayers, "ID", "Name"); return(View(model)); }
private async Task <ArenaPlayer> GetWarzonePlayer(WarzonePlayerStat playerStat, MatchEvents matchEvents) { ArenaPlayer player = Mapper.Map <ArenaPlayer>(playerStat); await SetCompetetivePlayer(playerStat, player, matchEvents); return(player); }
private async Task SetPlayer(IPlayer playerStat, ArenaPlayer player, MatchEvents matchEvents = null) { await SetBasePlayer(playerStat, player, matchEvents); var killed = playerStat.KilledOpponentDetails.Select(p => p.GamerTag); var killedBy = playerStat.KilledByOpponentDetails.Select(p => p.GamerTag); var temp = killed.Union(killedBy); foreach (var tag in temp) { Enemy enemy = new Enemy { Name = tag, Kills = playerStat.KilledOpponentDetails?.FirstOrDefault(p => p.GamerTag == tag)?.TotalKills ?? 0, Deaths = playerStat.KilledByOpponentDetails?.FirstOrDefault(p => p.GamerTag == tag)?.TotalKills ?? 0, IsPlayer = true }; enemy.Spread = enemy.Kills - enemy.Deaths; if (matchEvents != null) { var weaponKills = matchEvents.GameEvents.Where(e => e.Killer != null && e.Victim != null && e.KillerWeaponStockId.HasValue && e.EventName == Enumeration.EventType.Death && ((e.Killer.Gamertag == tag && e.Victim.Gamertag == player.GamerTag) || (e.Killer.Gamertag == player.GamerTag && e.Victim.Gamertag == tag))).Select(e => new { Killer = e.Killer.Gamertag, Victim = e.Victim.Gamertag, WeaponId = e.WeaponKillId(), Type = e.SpartanKillType() }).ToList(); var groups = weaponKills.GroupBy(g => new { g.WeaponId, g.Type }); foreach (var g in groups) { var weapon = await _metadataRepository.GetWeapon(g.Key.WeaponId); var weaponKill = Mapper.Map <WeaponKill>(weapon); if (weaponKill != null) { if (!string.IsNullOrEmpty(g.Key.Type)) { weaponKill.Name = g.Key.Type; } weaponKill.Kills = g.Count(g2 => g2.Killer == player.GamerTag); weaponKill.Deaths = g.Count(g2 => g2.Killer == tag); enemy.WeaponKills.Add(weaponKill); } } enemy.WeaponKills = enemy.WeaponKills.OrderByDescending(e => e.Kills).ThenBy(e => e.Deaths).ToList(); } player.Enemies.Add(enemy); } if (player.Enemies.Any()) { var maxSpread = player.Enemies.Max(e => e.Spread); var minSpread = Math.Abs(player.Enemies.Min(e => e.Spread)); int minKills = player.Enemies.Min(p => p.Kills); int maxKills = player.Enemies.Max(p => p.Kills) - minKills; int minDeaths = player.Enemies.Min(p => p.Deaths); int maxDeaths = player.Enemies.Max(p => p.Deaths) - minDeaths; foreach (var enemy in player.Enemies) { if (enemy.Spread > 0) { enemy.SpreadSign = "+"; enemy.SpreadPercent = enemy.Spread.Percent(maxSpread); } else if (enemy.Spread < 0) { enemy.SpreadSign = "-"; enemy.Spread = Math.Abs(enemy.Spread); enemy.SpreadPercent = enemy.Spread.Percent(minSpread); } enemy.KillPercent = enemy.Kills.Percent(minKills, maxKills); enemy.DeathPercent = enemy.Deaths.Percent(minDeaths, maxDeaths); } } player.Enemies = player.Enemies.OrderByDescending(e => e.Kills).ThenBy(e => e.Deaths).ToList(); }
private async Task SetBasePlayer(IBasePlayerStat playerStat, ArenaPlayer player, MatchEvents matchEvents = null) { player.Weapons = playerStat.WeaponStats.Where(w => w.Weapon != null && (w.TotalDamageDealt > 0 || w.TotalShotsFired > 0)).OrderByDescending(w => w.TotalKills).Select(Mapper.Map <WeaponStat>).ToList(); if (player.Weapons.Any()) { var minKills = player.Weapons.Min(w => w.TotalKills); var maxKills = player.Weapons.Max(w => w.TotalKills) - minKills; var minHeadShots = player.Weapons.Min(w => w.TotalHeadshots); var maxHeadShots = player.Weapons.Max(w => w.TotalHeadshots) - minHeadShots; var minTotalDamage = player.Weapons.Min(w => w.TotalDamageDealt); var maxTotalDamage = player.Weapons.Max(w => w.TotalDamageDealt) - minTotalDamage; var minShotsFired = player.Weapons.Min(w => w.TotalShotsFired); var maxShotsFired = player.Weapons.Max(w => w.TotalShotsFired) - minShotsFired; var minShotsLanded = player.Weapons.Min(w => w.TotalShotsLanded); var maxShotsLanded = player.Weapons.Max(w => w.TotalShotsLanded) - minShotsLanded; var minAccuraccy = player.Weapons.Min(w => w.Accuracy); var maxAccuraccy = player.Weapons.Max(w => w.Accuracy) - minAccuraccy; foreach (var weaponStat in player.Weapons) { weaponStat.KillPercent = weaponStat.TotalKills.Percent(minKills, maxKills); weaponStat.HeadShotPercent = weaponStat.TotalHeadshots.Percent(minHeadShots, maxHeadShots); weaponStat.TotalDamagePercent = weaponStat.TotalDamageDealt.Percent(minTotalDamage, maxTotalDamage); weaponStat.ShotsFiredPercent = weaponStat.TotalShotsFired.Percent(minShotsFired, maxShotsFired); weaponStat.ShotsLandedPercent = weaponStat.TotalShotsLanded.Percent(minShotsLanded, maxShotsLanded); weaponStat.AccuracyPercent = weaponStat.Accuracy.Percent(minAccuraccy, maxAccuraccy); } } player.Medals = playerStat.MedalAwards?.Where(m => m.Medal != null).GroupBy(m => m.Medal.Classification).Select(m => new MedalClassification { Classification = m.Key, MedalAwards = Mapper.Map <List <MedalAward> >(m) }).ToList(); player.TotalPerfectKills = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.PerfectKill))?.Count ?? 0; player.RoundWinningKills = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.RoundWinningKill))?.Count ?? 0; player.FlagCaptures = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.FlagCapture))?.Count ?? 0; player.FlagPulls = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.FlagGrabs))?.Count ?? 0; player.FlagCarrierKills = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.FlagCarrierKills))?.Count ?? 0; player.StrongholdsCaptured = playerStat.FlexibleStats.MedalStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.StrongholdCaptured))?.Count ?? 0; player.StrongholdsSecured = playerStat.FlexibleStats.MedalStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.StrongholdSecured))?.Count ?? 0; player.StrongholdsDefended = playerStat.FlexibleStats.MedalStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.StrongholdDefense))?.Count ?? 0; player.Score = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.Score))?.Count ?? 0; player.Kills = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.Kills))?.Count ?? 0; player.RoundsSurvived = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.RoundsSurvived))?.Count ?? 0; player.RoundsComplete = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.RoundsComplete))?.Count ?? 0; player.BossTakedowns = playerStat.FlexibleStats.MedalStatCounts.Where(i => i.Id == Guid.Parse(Constants.MythicTakedown) || i.Id == Guid.Parse(Constants.LegendaryTakedown) || i.Id == Guid.Parse(Constants.BossTakedown)).Sum(i => i.Count); player.NpcKills = playerStat.EnemyKills.Sum(e => e.TotalKills); player.BasesCaptured = playerStat.FlexibleStats.ImpulseStatCounts.FirstOrDefault(i => i.Id == Guid.Parse(Constants.BasesCaptured))?.Count ?? 0; List <GameEvent> killers = new List <GameEvent>(); if (matchEvents != null) { killers = matchEvents.GameEvents.Where(e => e.VictimAgent == Enumeration.Agent.Player && e.Victim.Gamertag == player.GamerTag && e.KillerAgent == Enumeration.Agent.AI && (e.IsWeapon == null || e.IsWeapon == false) && e.EventName == Enumeration.EventType.Death).ToList(); } foreach (var baseGroup in playerStat.EnemyKills.GroupBy(k => k.Enemy.BaseId)) { var enemyKill = baseGroup.First(); Enemy enemy = new Enemy { Id = enemyKill.Enemy.BaseId, Name = enemyKill.Enemy.EnemyObject.Name, Kills = baseGroup.Sum(k => k.TotalKills), Description = enemyKill.Enemy.EnemyObject.Description, ImageUrl = enemyKill.Enemy.EnemyObject.SmallIconImageUrl, Deaths = killers.Count(k => k.KillerWeaponStockId == enemyKill.Enemy.BaseId), IsPlayer = false }; enemy.Spread = enemy.Kills - enemy.Deaths; player.Enemies.Add(enemy); } //foreach (var baseGroup in playerStat.DestroyedEnemyVehicles.GroupBy(k=>k.Enemy.BaseId)) //{ // var enemyKill = baseGroup.First(); // Enemy enemy = new Enemy // { // Id = enemyKill.Enemy.BaseId, // Name = enemyKill.Enemy.Vehicle.Name, // Kills = baseGroup.Sum(k => k.TotalKills), // Description = enemyKill.Enemy.Vehicle.Description, // ImageUrl = enemyKill.Enemy.Vehicle.SmallIconImageUrl, // Deaths = killers.Count(k => k.KillerWeaponStockId == enemyKill.Enemy.BaseId), // IsPlayer = false // }; // enemy.Spread = enemy.Kills - enemy.Deaths; // player.Enemies.Add(enemy); //} var ids = playerStat.EnemyKills.Select(k => k.Enemy.BaseId) .Union(playerStat.DestroyedEnemyVehicles.Select(v => v.Enemy.BaseId)) .ToList(); killers.RemoveAll(k => ids.Contains(k.KillerWeaponStockId.Value)); foreach (var killer in killers.Where(k => k.KillerWeaponStockId.HasValue).GroupBy(k => k.KillerWeaponStockId)) { var enemyKill = await _metadataRepository.GetEnemyOrVehicle(killer.Key.Value); if (enemyKill != null) { Enemy enemy = new Enemy { Id = enemyKill.Id, Name = enemyKill.Name, Kills = 0, Description = enemyKill.Description, ImageUrl = enemyKill.SmallIconImageUrl, Deaths = killer.Count(), IsPlayer = false }; enemy.Spread = enemy.Kills - enemy.Deaths; player.Enemies.Add(enemy); } } if (matchEvents != null) { foreach (var enemy in player.Enemies) { var weaponKills = matchEvents.GameEvents.Where(e => e.EventName == Enumeration.EventType.Death && (e.VictimStockId == enemy.Id && e.Killer != null && e.Killer.Gamertag == player.GamerTag) || e.Victim != null && e.Victim.Gamertag == player.GamerTag && e.KillerWeaponStockId == enemy.Id) .Select(e => new { Killer = e.Killer?.Gamertag, //Victim = e.VictimStockId, WeaponId = e.WeaponKillId(), Type = e.SpartanKillType() }).ToList(); var groups = weaponKills.Where(g => g.WeaponId != 0).GroupBy(g => new { g.WeaponId, g.Type }); foreach (var g in groups) { var weapon = await _metadataRepository.GetWeaponOrEnemyOrVehicle(g.Key.WeaponId); if (weapon != null) { var weaponKill = Mapper.Map <WeaponKill>(weapon); weaponKill.Kills = g.Count(g2 => g2.Killer == player.GamerTag); weaponKill.Deaths = g.Count(g2 => g2.Killer != player.GamerTag); if (!string.IsNullOrEmpty(g.Key.Type)) { weaponKill.Name = g.Key.Type; } enemy.WeaponKills.Add(weaponKill); } } enemy.WeaponKills = enemy.WeaponKills.OrderByDescending(e => e.Kills).ThenBy(e => e.Deaths).ToList(); //var weaponKills = matchEvents.GameEvents.Where(e => e.Killer != null && e.Victim != null && // e.KillerWeaponStockId.HasValue && e.EventName == Enumeration.EventType.Death && // ((e.Killer.Gamertag == tag && e.Victim.Gamertag == player.GamerTag) || // (e.Killer.Gamertag == player.GamerTag && e.Victim.Gamertag == tag))).Select(e => new // { // Killer = e.Killer.Gamertag, // Victim = e.Victim.Gamertag, // WeaponId = e.KillerWeaponStockId.Value // }).ToList(); } } }
private async Task SetBasePlayer(IBasePlayerStat playerStat, ArenaPlayer player, MatchEvents matchEvents = null) { player.Weapons = playerStat.WeaponStats.Where(w => w.Weapon != null && (w.TotalDamageDealt > 0 || w.TotalShotsFired > 0)).OrderByDescending(w => w.TotalKills).Select(Mapper.Map <WeaponStat>).ToList(); var minKills = player.Weapons.Min(w => w.TotalKills); var maxKills = player.Weapons.Max(w => w.TotalKills) - minKills; var minHeadShots = player.Weapons.Min(w => w.TotalHeadshots); var maxHeadShots = player.Weapons.Max(w => w.TotalHeadshots) - minHeadShots; var minTotalDamage = player.Weapons.Min(w => w.TotalDamageDealt); var maxTotalDamage = player.Weapons.Max(w => w.TotalDamageDealt) - minTotalDamage; var minShotsFired = player.Weapons.Min(w => w.TotalShotsFired); var maxShotsFired = player.Weapons.Max(w => w.TotalShotsFired) - minShotsFired; var minShotsLanded = player.Weapons.Min(w => w.TotalShotsLanded); var maxShotsLanded = player.Weapons.Max(w => w.TotalShotsLanded) - minShotsLanded; var minAccuraccy = player.Weapons.Min(w => w.Accuracy); var maxAccuraccy = player.Weapons.Max(w => w.Accuracy) - minAccuraccy; foreach (var weaponStat in player.Weapons) { weaponStat.KillPercent = weaponStat.TotalKills.Percent(minKills, maxKills); weaponStat.HeadShotPercent = weaponStat.TotalHeadshots.Percent(minHeadShots, maxHeadShots); weaponStat.TotalDamagePercent = weaponStat.TotalDamageDealt.Percent(minTotalDamage, maxTotalDamage); weaponStat.ShotsFiredPercent = weaponStat.TotalShotsFired.Percent(minShotsFired, maxShotsFired); weaponStat.ShotsLandedPercent = weaponStat.TotalShotsLanded.Percent(minShotsLanded, maxShotsLanded); weaponStat.AccuracyPercent = weaponStat.Accuracy.Percent(minAccuraccy, maxAccuraccy); } player.Medals = playerStat.MedalAwards.GroupBy(m => m.Medal.Classification).Select(m => new MedalClassification { Classification = m.Key, MedalAwards = Mapper.Map <List <MedalAward> >(m) }).ToList(); List <GameEvent> killers = new List <GameEvent>(); if (matchEvents != null) { killers = matchEvents.GameEvents.Where(e => e.VictimAgent == Enumeration.Agent.Player && e.Victim.Gamertag == player.GamerTag && e.KillerAgent == Enumeration.Agent.AI && !e.IsWeapon && e.EventName == Enumeration.EventType.Death).ToList(); } foreach (var baseGroup in playerStat.EnemyKills.GroupBy(k => k.Enemy.BaseId)) { var enemyKill = baseGroup.First(); Enemy enemy = new Enemy { Name = enemyKill.Enemy.EnemyObject.Name, Kills = baseGroup.Sum(k => k.TotalKills), Description = enemyKill.Enemy.EnemyObject.Description, ImageUrl = enemyKill.Enemy.EnemyObject.SmallIconImageUrl, Deaths = killers.Count(k => k.KillerWeaponStockId == enemyKill.Enemy.BaseId), IsPlayer = false }; enemy.Spread = enemy.Kills - enemy.Deaths; player.Enemies.Add(enemy); } foreach (var baseGroup in playerStat.DestroyedEnemyVehicles.GroupBy(k => k.Enemy.BaseId)) { var enemyKill = baseGroup.First(); Enemy enemy = new Enemy { Name = enemyKill.Enemy.Vehicle.Name, Kills = baseGroup.Sum(k => k.TotalKills), Description = enemyKill.Enemy.Vehicle.Description, ImageUrl = enemyKill.Enemy.Vehicle.SmallIconImageUrl, Deaths = killers.Count(k => k.KillerWeaponStockId == enemyKill.Enemy.BaseId), IsPlayer = false }; enemy.Spread = enemy.Kills - enemy.Deaths; player.Enemies.Add(enemy); } var ids = playerStat.EnemyKills.Select(k => k.Enemy.BaseId) .Union(playerStat.DestroyedEnemyVehicles.Select(v => v.Enemy.BaseId)) .ToList(); killers.RemoveAll(k => ids.Contains(k.KillerWeaponStockId)); foreach (var killer in killers.GroupBy(k => k.KillerWeaponStockId)) { var enemyKill = await _metadataRepository.GetEnemyOrVehicl(killer.Key); if (enemyKill != null) { Enemy enemy = new Enemy { Name = enemyKill.Name, Kills = 0, Description = enemyKill.Description, ImageUrl = enemyKill.SmallIconImageUrl, Deaths = killer.Count(), IsPlayer = false }; enemy.Spread = enemy.Kills - enemy.Deaths; player.Enemies.Add(enemy); } } }
private async Task SetCompetetivePlayer(ICompetetivePlayer playerStat, ArenaPlayer player, MatchEvents matchEvents = null) { await SetPlayer(playerStat, player, matchEvents); player.XpInfo.XpEarned = player.XpInfo.TotalXp - player.XpInfo.PrevTotalXp; player.XpInfo.CurrentRankXp = player.XpInfo.TotalXp - playerStat.CurrentSpartanRank.StartXp; var previousRankXp = player.XpInfo.PrevTotalXp - playerStat.CurrentSpartanRank.StartXp; player.XpInfo.XpToNextRank = playerStat.NextSpartanRank.StartXp - playerStat.CurrentSpartanRank.StartXp; player.XpInfo.PreviousPercent = previousRankXp.Percent(player.XpInfo.XpToNextRank); player.XpInfo.CurrentPercent = player.XpInfo.CurrentRankXp.Percent(player.XpInfo.XpToNextRank); }