Bảng xếp hạng
Điểm số được xếp hạng, tự động đặt lại, lưu trữ các kỳ trước và chống gian lận phía máy chủ.
Chú thích trong mã và tên API được giữ nguyên tiếng Anh để khớp với SDK.
Tạo bảng xếp hạng#
Tạo bảng xếp hạng trên trang Bảng xếp hạng của dự án và dùng slug trong mã.
| Cài đặt | Tùy chọn |
|---|---|
| Slug | Định danh viết thường dùng trong mã, ví dụ coins. |
| Thứ tự sắp xếp | DESC (cao nhất trước) hoặc ASC (thấp nhất trước, ví dụ thời gian đua). |
| Chế độ điểm | BEST giữ điểm tốt nhất của mỗi người chơi; LATEST luôn thay bằng điểm mới. |
| Đặt lại | NONE, DAILY, WEEKLY hoặc MONTHLY. |
| Điểm tối thiểu / tối đa | Điểm tối thiểu và tối đa được chấp nhận (tùy chọn). |
| Thời gian chờ giữa các lần gửi | Số giây tối thiểu giữa hai lần gửi của một người chơi (tùy chọn). |
Gửi điểm#
Tên người chơi được lấy từ tài khoản, nên client không thể gửi điểm thay cho người khác.
var submit = await Majacloud.Leaderboards.SubmitScoreAsync("coins", 340);
if (submit.Ok && submit.Value.Accepted)
Debug.Log("New rank #" + submit.Value.Entry.Rank);var submit := await Majacloud.leaderboards.submit_score("coins", 340)
if submit.ok and submit.value.accepted:
print("New rank #", submit.value.entry.rank)const submit = await mc.leaderboards.submitScore('coins', 340);
if (submit.ok && submit.value.accepted) console.log('New rank #' + submit.value.entry.rank);curl -X POST https://majacloud.majanite.com/v1/leaderboards/coins/scores -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" -d '{"score": 340}'Đọc thứ hạng#
Các mục đứng đầu không cần đăng nhập; thứ hạng của chính người chơi và các mục xung quanh cần người chơi đã đăng nhập.
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);var top := await Majacloud.leaderboards.get_top("coins", 10)
var me := await Majacloud.leaderboards.get_my_rank("coins")
var around := await Majacloud.leaderboards.get_around_me("coins", 3)
if me.ok and me.value.entry != null:
print("You are #%d of %d" % [me.value.entry.rank, me.value.total])const top = await mc.leaderboards.getTop('coins', { limit: 10 });
const me = await mc.leaderboards.getMyRank('coins');
const around = await mc.leaderboards.getAroundMe('coins', { radius: 3 });
if (me.ok && me.value.entry) console.log(`You are #${me.value.entry.rank} of ${me.value.total}`);curl "https://majacloud.majanite.com/v1/leaderboards/coins/entries?limit=10" -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY"
curl https://majacloud.majanite.com/v1/leaderboards/coins/me -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY" \
-H "Authorization: Bearer $TOKEN"
curl "https://majacloud.majanite.com/v1/leaderboards/coins/around-me?radius=3" -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY" \
-H "Authorization: Bearer $TOKEN"Đặt lại và các kỳ trước#
Bảng xếp hạng ngày, tuần (thứ Hai) và tháng được đặt lại lúc 00:00 UTC. Kỳ đã kết thúc được lưu trữ; hãy đọc lại bằng kỳ previous:
var yesterday = await Majacloud.Leaderboards.GetTopAsync("coins", 10, 0, MajacloudLeaderboardPeriod.Previous);var yesterday := await Majacloud.leaderboards.get_top("coins", 10, 0, "previous")const yesterday = await mc.leaderboards.getTop('coins', { limit: 10, period: 'previous' });curl "https://majacloud.majanite.com/v1/leaderboards/coins/entries?period=previous" -H "X-Project-ID: $PROJECT_ID" -H "X-Client-Key: $CLIENT_KEY"Chống gian lận#
- Điểm nằm ngoài mức tối thiểu hoặc tối đa bị từ chối với
validation. - Gửi nhanh hơn thời gian chờ sẽ trả về
rate_limited. - Client chỉ có thể gửi điểm cho người chơi đã đăng nhập.
- Với game có tính cạnh tranh, hãy để máy chủ của bạn quyết định điểm và gửi bằng khóa bí mật.
Gửi điểm từ máy chủ#
Với khóa bí mật, hãy gửi player_id và điểm số. Người chơi phải tồn tại.
// Node.js with secretKey: submit after your server validated the match
await admin.server.submitScore('coins', 'player_3f9c…', 980);curl -X POST https://majacloud.majanite.com/v1/leaderboards/coins/scores \
-H "X-Project-ID: $PROJECT_ID" -H "X-Secret-Key: $SECRET_KEY" \
-H "Content-Type: application/json" -d '{"player_id": "player_3f9c…", "score": 980}'