Facepunch.Steamworks Wiki

Revision Difference

Leaderboards#526651

<cat>code.general</cat> <title>Leaderboards</title> # Creating a Leaderboard Creating a leaderboard is really easy. ``` using Steamworks; using Steamworks.Data; ... var leaderboard = await SteamUserStats.FindOrCreateLeaderboardAsync( "MyLeaderboard", LeaderboardSort.Ascending, LeaderboardDisplay.Numeric ); ``` Here you've created a leaderboard named "MyLeaderboard" which is sorted in ascending (highest first) and is number based (high score etc) rather than time based (fastest lap etc). # Getting a Leaderboard You can safely get a leaderboard with the same function. If you only want to get one that exists you can use: ``` var leaderboard = await SteamUserStats.FindLeaderboardAsync( "MyLeaderboard" ); ``` <note>FindLeaderboardAsync and FindOrCreateLeaderboardAsync return a nullable. If for whatever reason the board cannot be found - it'll be null. This means you should check it first via `leaderboard.HasValue` and then the real leaderboard is in `leaderboard.Value`.</note> # Submitting a Score ``` var result = await lb.SubmitScoreAsync( 576 ); ``` This function will only replace your last score if the new one is better. On success (`result.HasValue`) this function will return a <page>Data.LeaderboardUpdate</page>. You can force your score to be replace, even if it's worse, using: ``` var result = await lb.ReplaceScoreAsync( 576 ); ``` # Getting Scores ``` // Get top 20 scores var globalScores = await lb.GetScoresAsync( 20 ); foreach ( var e in globalScores) { Console.WriteLine( $"{e.GlobalRank}: {e.Score} {e.User}" ); } // Get scores from friends var friendScores = await lb.GetScoresFromFriendsAsync(); foreach ( var e in friendScores ) { Console.WriteLine( $"{e.GlobalRank}: {e.Score} {e.User}" ); } // Get scores around current user var surroundScores = await lb.GetScoresAroundUserAsync( -10, 10 ); foreach ( var e in surroundScores ) { Console.WriteLine( $"{e.GlobalRank}: {e.Score} {e.User}" ); } ```