private void BindPlayerStats() { Player player = ((Player)Session["UserBasicStatsPlayer"]); if (player == null) { return; } using (TrambambuleDBContextDataContext context = new TrambambuleDBContextDataContext()) { List <TeamMatch> playerMatches = context.TeamMatches.Where(p => p.TeamMatchPlayers.Any(x => x.PlayerId == player.Id)).ToList(); StringBuilder sb = new StringBuilder(); List <TeamMatch> lastGames = playerMatches.OrderByDescending(p => p.Timestamp).ToList(); if (lastGames.Any()) { TeamMatchPlayer playerData = lastGames.First().TeamMatchPlayers.First(p => p.PlayerId == player.Id); sb.AppendLine("Obecna pozycja w rankingu: " + context.GetPlayerRankPosition(player.Id)); sb.AppendLine("Punkty rankingowe: " + (playerData.Rating.HasValue ? ((int)playerData.Rating.Value).ToString() : string.Empty)); string form = string.Empty; foreach (TeamMatch tm in lastGames.Take(15).ToList()) { form += GetMatchResultLabel(tm); } sb.AppendLine("Forma: " + form); sb.Append("<hr/>"); } //sb.AppendLine("Rozegranych: " + playerMatches.Select(p => new { Mid = p.MatchId }).Distinct().Count()); sb.AppendLine("Bilans W/R/P: " + playerMatches.Select(p => new { Mid = p.MatchId, Result = p.Result }).Distinct().Count(p => p.Result == (int)Common.EResult.Win) + " / " + playerMatches.Select(p => new { Mid = p.MatchId, Result = p.Result }).Distinct().Count(p => p.Result == (int)Common.EResult.Draw) + " / " + playerMatches.Select(p => new { Mid = p.MatchId, Result = p.Result }).Distinct().Count(p => p.Result == (int)Common.EResult.Loose)); sb.AppendLine("Bilans W/R/P [atak]: " + playerMatches.Count(p => p.Result == (int)Common.EResult.Win && p.TeamMatchPlayers.First(x => x.PlayerId == player.Id).Position == (byte)Common.EPosition.Offence) + " / " + playerMatches.Count(p => p.Result == (int)Common.EResult.Draw && p.TeamMatchPlayers.First(x => x.PlayerId == player.Id).Position == (byte)Common.EPosition.Offence) + " / " + playerMatches.Count(p => p.Result == (int)Common.EResult.Loose && p.TeamMatchPlayers.First(x => x.PlayerId == player.Id).Position == (byte)Common.EPosition.Offence)); sb.AppendLine("Bilans W/R/P [obrona]: " + playerMatches.Count(p => p.Result == (int)Common.EResult.Win && p.TeamMatchPlayers.First(x => x.PlayerId == player.Id).Position == (byte)Common.EPosition.Defence) + " / " + playerMatches.Count(p => p.Result == (int)Common.EResult.Draw && p.TeamMatchPlayers.First(x => x.PlayerId == player.Id).Position == (byte)Common.EPosition.Defence) + " / " + playerMatches.Count(p => p.Result == (int)Common.EResult.Loose && p.TeamMatchPlayers.First(x => x.PlayerId == player.Id).Position == (byte)Common.EPosition.Defence)); sb.AppendLine("Bilans bramek: " + playerMatches.Select(p => new { Mid = p.MatchId, GoalsScored = p.GoalsScored }).Distinct().Sum(p => p.GoalsScored) + " / " + playerMatches.Select(p => new { Mid = p.MatchId, GoalsLost = p.GoalsLost }).Distinct().Sum(p => p.GoalsLost)); var achievements = (from ap in context.AchievementPlayer join p in context.Players on ap.PlayerId equals p.Id join a in context.Achievements on ap.AchievementId equals a.Id where p.Id == player.Id select new PlayerWithAchievement(p, ap.LevelOfAchievement, ap.ToNextLevelLabel, a)).ToList(); if (achievements.Any()) { sb.AppendLine("<hr/>Osiągnięcia:"); for (int i = 0; i < achievements.Count; i++) { var ach = achievements[i]; //if (ach.LevelOfAchievement>0) // sb.AppendFormat("{0}. Poziom {1} ({2}) w osiągnięciu \"{3}\".<br/>", (i + 1).ToString(), Common.GetAchievementsLevelName(ach.LevelOfAchievement), GetLabel(ach.LevelOfAchievement, ach.Achievement), ach.Achievement.Title); //else // sb.AppendFormat("{0}. Nie zdobyto jeszcze żadnego poziomu w osiągnięciu \"{2}\". {3}.", (i+1).ToString(), if (ach.LevelOfAchievement > 0) { sb.AppendFormat("<b>{0}. {1}</b><br/>Poziom {2}: {3}.<br/>{4}.<br/>", (i + 1).ToString(), ach.Achievement.Title, Common.GetAchievementsLevelName(ach.LevelOfAchievement), GetLabel(ach.LevelOfAchievement, ach.Achievement), GetTextWithAnchors(ach.ToNextLevelLabel)); } else { sb.AppendFormat("<b>{0}. {1}</b><br/>Nie osiągnięto jeszcze żadnego poziomu.<br/>{2}.<br/>", (i + 1).ToString(), ach.Achievement.Title, GetTextWithAnchors(ach.ToNextLevelLabel)); } } sb.Append("<hr/>"); } sb = sb.Replace(Environment.NewLine, "<br/>"); lblStatsDetails.Text = sb.ToString(); } }
private bool CalculateGamesWithOnePartner(bool firstTime, Player player, Achievement achievement, TrambambuleDBContextDataContext context, int level, int top, int nextStep, out string comment) { comment = ""; List <TeamMatch> playerMatches = context.TeamMatches.Where(p => p.Result == 1 && p.TeamMatchPlayers.Any(x => x.PlayerId == player.Id)).ToList(); if (playerMatches.Any()) { TeamMatchPlayer playerData = playerMatches.First().TeamMatchPlayers.First(p => p.PlayerId == player.Id); var partnerGames = playerMatches .GroupBy(p => new { Partner = p.TeamMatchPlayers.First(x => x.PlayerId != playerData.PlayerId).Player }) .Select(x => new { PartnerId = x.Key.Partner.Id, Games = x.Count(), }) .OrderByDescending(p => p.Games).ToList(); int topGames = -1; List <int> topPartners = new List <int>(); foreach (var m in partnerGames) { if (topGames == -1) { topGames = m.Games; } if (topGames > m.Games) { break; } else { topPartners.Add(m.PartnerId); } } int t = top - topGames; if (topPartners.Count > 1) { StringBuilder partnersList = new StringBuilder(); for (int i = 0; i < topPartners.Count; i++) { if (i != 0) { partnersList.Append(", {P_" + topPartners[i] + "}"); } else { partnersList.Append("{P_" + topPartners[i] + "}"); } } comment = "Brakuje " + t + " " + GramaticHelper(t) + " z jednym z partnerów: " + partnersList + " do kolejnego poziomu"; } else { comment = "Brakuje " + t + " " + GramaticHelper(t) + " z: " + "{P_" + topPartners[0] + "}" + " do kolejnego poziomu"; } if (t <= 0) { if (level < 3) { if (topPartners.Count > 1) { StringBuilder partnersList = new StringBuilder(); for (int i = 0; i < topPartners.Count; i++) { if (i != 0) { partnersList.Append(", {P_" + topPartners[i] + "}"); } else { partnersList.Append("{P_" + topPartners[i] + "}"); } } comment = "Brakuje " + (nextStep + t) + " " + GramaticHelper(nextStep) + " z jednym z partnerów: " + partnersList + " do kolejnego poziomu"; } else { comment = "Brakuje " + (nextStep + t) + " " + GramaticHelper(nextStep) + " z: " + "{P_" + topPartners[0] + "}" + " do kolejnego poziomu"; } } else { comment = "Zdobyto najwyższy poziom w tym osiągnięciu z partnerem {P_" + topPartners[0] + "}"; } } if (topGames >= top) { return(true); } } else { comment = "Brakuje " + top + " " + GramaticHelper(top) + " z jakimkolwiek partnerem"; } return(false); }