リーダーボード

自動リセット、過去の期間のアーカイブ、サーバー側のチート対策を備えたスコアランキングです。

コードのコメントと API 名は、SDK と一致させるため英語のままにしています。

このページの内容

リーダーボードを作成する#

プロジェクトのリーダーボードページでリーダーボードを作成し、コードではそのスラッグを使用します。

設定オプション
スラッグコードで使用する小文字の識別子(例: coins)。
並び順DESC(高い順)または ASC(低い順。レースのタイムなど)。
スコアモードBEST は各プレイヤーのベストスコアを保持し、LATEST は常に最新のスコアで置き換えます。
リセットNONE、DAILY、WEEKLY、MONTHLY のいずれか。
最小 / 最大スコア受け付けるスコアの最小値と最大値(任意)。
送信クールダウン同じプレイヤーが 2 回送信する際に必要な最小間隔(秒、任意)。

スコアを送信する#

プレイヤー名はアカウントから取得されるため、クライアントがほかのプレイヤーとしてスコアを送信することはできません。

C#
var submit = await Majacloud.Leaderboards.SubmitScoreAsync("coins", 340);
if (submit.Ok && submit.Value.Accepted)
    Debug.Log("New rank #" + submit.Value.Entry.Rank);

ランキングを読み取る#

上位のエントリーはログインなしで取得できます。プレイヤー自身の順位とその前後のエントリーを取得するには、プレイヤーがログインしている必要があります。

C#
var top = await Majacloud.Leaderboards.GetTopAsync("coins", limit: 10);
var me = await Majacloud.Leaderboards.GetMyRankAsync("coins");
var around = await Majacloud.Leaderboards.GetAroundMeAsync("coins", radius: 3);

if (me.Ok && me.Value.Entry != null) Debug.Log("You are #" + me.Value.Entry.Rank + " of " + me.Value.Total);

リセットと過去の期間#

毎日、毎週(月曜日)、毎月のリーダーボードは 00:00 UTC にリセットされます。終了した期間はアーカイブされ、previous 期間として読み取れます。

C#
var yesterday = await Majacloud.Leaderboards.GetTopAsync("coins", 10, 0, MajacloudLeaderboardPeriod.Previous);
保持される過去の期間の数と、リーダーボードが返すエントリー数はプランによって異なります(制限を参照)。

チート対策#

  • 最小値または最大値の範囲外のスコアは validation で拒否されます。
  • クールダウンより短い間隔で送信すると、rate_limited が返されます。
  • クライアントは、ログイン中のプレイヤーのスコアしか送信できません。
  • 競技性の高いゲームでは、サーバーでスコアを決定し、シークレットキーを使って送信してください。

サーバーから送信する#

シークレットキーを使い、player_id とスコアを送信します。プレイヤーがすでに存在している必要があります。

JavaScript
// Node.js with secretKey: submit after your server validated the match
await admin.server.submitScore('coins', 'player_3f9c…', 980);

ページタイトル、見出し、本文を検索します。

↑↓ で移動 ↵ で開く Esc で閉じる