From a40230da4b7fd5484ac7f3821cdecdb29ad87d3c Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Tue, 28 Oct 2025 19:35:15 +0900 Subject: [PATCH 1/2] Ensure to never display "0th" placement --- osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanel.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanel.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanel.cs index e86a546533..0eaf6c7a81 100644 --- a/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanel.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanel.cs @@ -414,6 +414,9 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.Match if (!matchmakingState.Users.UserDictionary.TryGetValue(User.Id, out MatchmakingUser? userScore)) return; + if (userScore.Placement == 0) + return; + rankText.Text = userScore.Placement.Ordinalize(CultureInfo.CurrentCulture); rankText.FadeColour(SubScreenResults.ColourForPlacement(userScore.Placement)); scoreText.Text = $"{userScore.Points} pts"; From c524bf54325589393d48ce30ff49861815e7e4e3 Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Tue, 28 Oct 2025 20:39:09 +0900 Subject: [PATCH 2/2] Make `MachmakingUser.Placement` nullable --- .../MatchTypes/Matchmaking/MatchmakingUser.cs | 2 +- .../OnlinePlay/Matchmaking/Match/PlayerPanel.cs | 6 +++--- .../Matchmaking/Match/PlayerPanelOverlay.cs | 4 ++-- .../Matchmaking/Match/Results/SubScreenResults.cs | 13 ++++++++----- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUser.cs b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUser.cs index f596f2473e..ac97b114d8 100644 --- a/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUser.cs +++ b/osu.Game/Online/Multiplayer/MatchTypes/Matchmaking/MatchmakingUser.cs @@ -23,7 +23,7 @@ namespace osu.Game.Online.Multiplayer.MatchTypes.Matchmaking /// The aggregate room placement (1-based). /// [Key(1)] - public int Placement { get; set; } + public int? Placement { get; set; } /// /// The aggregate points. diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanel.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanel.cs index 0eaf6c7a81..e2455eb020 100644 --- a/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanel.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanel.cs @@ -414,11 +414,11 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.Match if (!matchmakingState.Users.UserDictionary.TryGetValue(User.Id, out MatchmakingUser? userScore)) return; - if (userScore.Placement == 0) + if (userScore.Placement == null) return; - rankText.Text = userScore.Placement.Ordinalize(CultureInfo.CurrentCulture); - rankText.FadeColour(SubScreenResults.ColourForPlacement(userScore.Placement)); + rankText.Text = userScore.Placement.Value.Ordinalize(CultureInfo.CurrentCulture); + rankText.FadeColour(SubScreenResults.ColourForPlacement(userScore.Placement.Value)); scoreText.Text = $"{userScore.Points} pts"; }); diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanelOverlay.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanelOverlay.cs index 9fb5d258a8..4b97400ebe 100644 --- a/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanelOverlay.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Match/PlayerPanelOverlay.cs @@ -239,8 +239,8 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.Match if (client.Room?.MatchState is not MatchmakingRoomState matchmakingState) continue; - if (matchmakingState.Users.UserDictionary.TryGetValue(panels[i].User.Id, out MatchmakingUser? user)) - SetLayoutPosition(Children[i], user.Placement); + if (matchmakingState.Users.UserDictionary.TryGetValue(panels[i].User.Id, out MatchmakingUser? user) && user.Placement != null) + SetLayoutPosition(Children[i], user.Placement.Value); else SetLayoutPosition(Children[i], float.MaxValue); } diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Match/Results/SubScreenResults.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Match/Results/SubScreenResults.cs index 797519a53c..b533a84b28 100644 --- a/osu.Game/Screens/OnlinePlay/Matchmaking/Match/Results/SubScreenResults.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Match/Results/SubScreenResults.cs @@ -201,13 +201,16 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.Match.Results return; } - int overallPlacement = state.Users[client.LocalUser!.UserID].Placement; + int? overallPlacement = state.Users[client.LocalUser!.UserID].Placement; - placementText.Text = overallPlacement.Ordinalize(CultureInfo.CurrentCulture); - placementText.Colour = ColourForPlacement(overallPlacement); + if (overallPlacement != null) + { + placementText.Text = overallPlacement.Value.Ordinalize(CultureInfo.CurrentCulture); + placementText.Colour = ColourForPlacement(overallPlacement.Value); - int overallPoints = state.Users[client.LocalUser!.UserID].Points; - addStatistic(overallPlacement, $"Overall position ({overallPoints} points)"); + int overallPoints = state.Users[client.LocalUser!.UserID].Points; + addStatistic(overallPlacement.Value, $"Overall position ({overallPoints} points)"); + } var accuracyOrderedUsers = state.Users.Select(u => (user: u, avgAcc: u.Rounds.Select(r => r.Accuracy).DefaultIfEmpty(0).Average())) .OrderByDescending(t => t.avgAcc)