Game Maker Language リファレンス > 組み込み関数 用途別 > Steam API > steam_download_scores
リーダーボードのすべて、または部分的なスコアをダウンロードします
steam_download_scores(lb_name, start_idx, end_idx);
この関数はリーダーボードのランキングでエントリされているスコアの連続した範囲を取得することができます。引数start_idxとend_idxの範囲、例えば1〜10に値を設定すると、ゲームライキングのトップ10を表示することができます。リーダーボード名"lb_name"はあらかじめsteam_create_leaderboard()を呼び出したときに指定した名前となります。この関数は非同期処理のため、戻り値はコールバックを識別するidを返します。「-1」を返す場合は失敗となります。
この例では、"game scores"のトップ10の取得を要求し、steam非同期イベントで結果を解析します。
score_get = steam_download_scores("game scores", 1, 10);
これは変数"score_get"にリクエストの非同期idを格納し、steamサーバーにスコア取得の要求を送ります。その後、次のようにしてsteam非同期イベントを処理します
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) }
ここでやっていることは最初に非同期処理用の特別なds_map変数"async_load"に格納されている"id"と変数"score_get" を比較しています。これが一致すればsteamの非同期イベントとなります。取得した値"entries"はjson形式のデータであるため、json_encode()を使用して、ds_mapに変換しています。
このds_mapに"default"が存在しない場合、不正な値のため処理を中断します。正しく取得できれば、さらにこのds_mapから"entries"を取り出します。この値はds_listとなり、名前・ランキング・スコアに対応したds_mapを取得できます。
情報を取得できたら、ds_list / ds_map は不要なので削除します。async_loadはGameMaker:Studioが管理する領域なので、破棄する必要はありません