diff --git a/osu.Game/Screens/Ranking/SoloResultsScreen.cs b/osu.Game/Screens/Ranking/SoloResultsScreen.cs index 7d57bc80aa..1d09654063 100644 --- a/osu.Game/Screens/Ranking/SoloResultsScreen.cs +++ b/osu.Game/Screens/Ranking/SoloResultsScreen.cs @@ -74,6 +74,12 @@ namespace osu.Game.Screens.Ranking // this simplifies handling later. if (clonedScore.Equals(Score) || clonedScore.MatchesOnlineID(Score)) { + // this is a precautionary guard that prevents `Score` from appearing multiple times in the list. + // that can occur in rare cases wherein two local scores have the same online ID but different replay contents + // (this is possible e.g. in cases of client-side vs server-side recorded replays, see https://github.com/ppy/osu-server-spectator/issues/193) + if (sortedScores.Contains(Score)) + continue; + Score.Position = clonedScore.Position; sortedScores.Add(Score); }