public static Score FromDb(DbScore dbScore, RankedStatus status, DbScore[] scores = null) { var score = new Score { ScoreId = dbScore.Id, User = Base.UserCache[dbScore.UserId], Date = dbScore.Date, UserId = dbScore.UserId, FileChecksum = dbScore.FileChecksum, ReplayChecksum = dbScore.ReplayChecksum, TotalScore = dbScore.TotalScore, PerformancePoints = dbScore.PerformancePoints, MaxCombo = dbScore.MaxCombo, Count50 = dbScore.Count50, Count100 = dbScore.Count100, Count300 = dbScore.Count300, CountMiss = dbScore.CountMiss, CountKatu = dbScore.CountKatu, CountGeki = dbScore.CountGeki, Perfect = dbScore.Perfect, Mods = dbScore.Mods }; score.Relaxing = (score.Mods & Mods.Relax) != 0; score.CalculateLeaderboardRank(scores, status); return(score); }
public static RankStatus ConvertToTRankStatus(RankedStatus rankedStatus) { var result = RankStatus.Unranked; switch (rankedStatus) { case RankedStatus.Unranked: result = RankStatus.Unranked; break; case RankedStatus.Ranked: result = RankStatus.Ranked; break; case RankedStatus.Qualified: result = RankStatus.Qualified; break; case RankedStatus.Queued: result = RankStatus.Queued; break; default: break; } return(result); }
/// <summary> /// Updates the banner with a new map. /// </summary> /// <param name="map"></param> private void UpdateText(Map map) { MapDifficultyName.Text = $"\"{map.DifficultyName}\""; SongTitle.Text = map.Title; SongArtist.Text = map.Artist; MapCreator.Text = $"Created by: {map.Creator}"; RankedStatus.UpdateMap(map); Metadata.UpdateAndAlignMetadata(map); }
public BeatmapSet(IEnumerable <Beatmap> maps) { var diff = maps.ElementAt(0); Artist = diff.Artist; Title = diff.Title; Creator = diff.Creator; Status = diff.Status; Id = diff.SetId; Maps = maps.ToArray(); Count = Maps.Length; }
public void CalculateLeaderboardRank(IReadOnlyList <DbScore> scores, RankedStatus status) { var orderedScores = scores.OrderByDescending ( x => x.Relaxing && status != RankedStatus.Loved ? x.PerformancePoints : x.TotalScore ).ToArray(); for (var i = 0; i < orderedScores.Length; i++) { if (orderedScores[i].UserId == UserId) { Rank = i + 1; break; } } }
public string ToString(RankedStatus status) => $"{ScoreId}|{User.Username}|{(Relaxing && status != RankedStatus.Loved ? (int)PerformancePoints : TotalScore)}|{MaxCombo}|{Count50}|{Count100}|{Count300}|{CountMiss}|{CountKatu}" + $"|{CountGeki}|{Perfect}|{(int)Mods}|{User.Id}|{Rank}|{Date.ToUnixTimestamp()}|{(string.IsNullOrEmpty(ReplayChecksum) ? "0" : "1")}";
public static List <string> FormatScores(IEnumerable <Score> scores, RankedStatus status, PlayMode mode) => scores.Select(score => score.ToString(status)).ToList();
public static async Task <Score[]> GetRawScores(string beatmapMd5, PlayMode mode, RankedStatus status, LeaderboardMode lbMode) { IEnumerable <DbScore> scores = null; await using (var db = MySqlProvider.GetDbConnection()) { scores = await db.QueryAsync <DbScore>($"SELECT *, Scores.Id AS Id FROM Scores " + $"JOIN Users ON Users.Id = Scores.UserId " + $"WHERE Users.Privileges & {(int) Privileges.Normal} > 0 " + $"AND FileChecksum = '{beatmapMd5}' " + $"AND Completed = {(int) CompletedStatus.Best} " + $"AND PlayMode = {(int) mode} " + $"AND Relaxing = {lbMode == LeaderboardMode.Relax} " + $"ORDER BY {(lbMode == LeaderboardMode.Relax ? "PerformancePoints" : "TotalScore")} DESC " + $"LIMIT 50"); } var dbScores = scores as DbScore[] ?? scores.ToArray(); return(dbScores.Select(score => FromDb(score, status, dbScores)).ToArray()); }
/// <summary> /// </summary> public void SearchForMapsets(string query, GameMode mode, RankedStatus status, bool addToBottom) { Logger.Important($"Searching for mapsets w/ query: {mode} | {status} | {query}...", LogType.Network); // Make sure all buttons aren't clickable and that we're searching. Button.IsGloballyClickable = false; IsSearching.Value = true; TextMapsetsFound.Text = "Searching..."; var screen = (DownloadScreen)View.Screen; // Destroy all existing mapsets & reset the current page. if (!addToBottom) { View.ScrollContainer.ClearMapsets(); screen.CurrentPage = 0; } // Increment the current page since we're adding more sets. else { screen.CurrentPage++; } // Cancel the already existing token. Source?.Cancel(); Source?.Dispose(); Source = new CancellationTokenSource(); // Start searching for new sets. Task.Run(async() => { try { Source.Token.ThrowIfCancellationRequested(); await Task.Delay(300, Source.Token); Source.Token.ThrowIfCancellationRequested(); var mapsets = OnlineManager.Client?.SearchMapsets(mode, status, query, screen.CurrentPage); if (mapsets == null) { IsSearching.Value = false; screen.LastSearchedCount = 0; return; } screen.LastSearchedCount = mapsets["mapsets"].Count(); View.ScrollContainer.AddMapsets(mapsets["mapsets"] .Select(mapset => new DownloadableMapset(View.ScrollContainer, mapset)).ToList(), addToBottom); UpdateMapsetsFoundText(mapsets); Logger.Important($"Found {mapsets["mapsets"].Count()} mapsets w/ status code: {mapsets["status"]}", LogType.Network); } catch (Exception e) { // ignored. Logger.Error(e, LogType.Runtime); screen.LastSearchedCount = 0; } IsSearching.Value = false; Button.IsGloballyClickable = true; }); }