steam_download_scores(lb_name, start_idx, end_idx);
Argument | Description |
---|---|
lb_name | The name of the leaderboard that you are downloading the scores from (a string). |
start_idx | The start position within the leaderboard. |
end_idx | The end position within the leaderboard. |
Returns: Real
This function is used retrieve a sequential range of leaderboard
entries by leaderboard ranking. The start_idx and
end_idx parameters control the requested range of ranks,
for example, you can display the top 10 on a leaderboard for your
game by setting the start value to 1 and the end value to 10. The
leaderboard name is a string that was defined when you created the
leaderboard using the function steam_create_leaderboard,
and the function will return a value which can then be used to
identify the call-back in the
Steam Async Event, or it will return -1 if it has failed.
In this extended example we will request the top ten ranking for the given leaderboard and parse its results in the Steam Async Event. to start with we need to request the scores with the following code:
score_get = steam_download_scores("Game Scores", 1,
10);
This will send off a request to the Steam Server for the scores from the leaderboard "Game Scores", storing the async id of the request in the variable "score_get". this will then be handled in the Steam Async Event in the following way:
var async_id = ds_map_find_value(async_load,
"id");
if async_id == score_get
{
var entries = ds_map_find_value(async_load,
"entries");
var map = json_decode(entries);
if ds_map_exists(map, "default")
{
ds_map_destroy(map);
exit;
}
else
{
var list =
ds_map_find_value(map, "entries");
var len =
ds_list_size(list);
var entry;
for(var i = 0; i < len;
i++;)
{
entry =
ds_list_find_value(list, i );
steam_name[i]
= ds_map_find_value(entry, "name");
steam_score[i]
= ds_map_find_value(entry, "score");
steam_rank[i]
= ds_map_find_value(entry, "rank");
ds_map_destroy(entry);
}
ds_list_destroy(list)
}
ds_map_destroy(map)
}
What we do here is first check the "id" key of the special
async_load ds_map. If this value is the same as the
value of the original call-back function (stored in the "score_get"
variable) we then continue to process the data. The first thing we
do is parse the async_load ds_map for the key "entries"
which will contain a JSON object containing the leaderboard data.
This JSON object is then decoded (see json_decode) as
another ds_map, and this new map id is stored in the variable
"map".
This map is checked for the key "default" and if that is found then
the map is destroyed and the event is exited. If no "default" key
is found, the code will then parse the map to extract the necessary
information about the leaderboard, by first extracting a ds_list
from the "entries" key of the ds_map, and then looping through each
entry of the list to get another ds_map with the name, score
and rank of each entry. These values are then stored to arrays and
the map destroyed.
Once the loop has finished, the entries list is destroyed as is the
map that it was taken from. There is no need to destroy the
async_load ds_map as this is handled for you by
GameMaker: Studio.