예제 #1
0
        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);
        }
예제 #3
0
 /// <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);
 }
예제 #4
0
        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;
        }
예제 #5
0
        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;
                }
            }
        }
예제 #6
0
 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")}";
예제 #7
0
 public static List <string> FormatScores(IEnumerable <Score> scores, RankedStatus status, PlayMode mode) => scores.Select(score => score.ToString(status)).ToList();
예제 #8
0
        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());
        }
예제 #9
0
        /// <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;
            });
        }