ลีดเดอร์บอร์ด
อันดับคะแนนพร้อมการรีเซ็ตอัตโนมัติ คลังรอบที่ผ่านมา และระบบกันโกงฝั่งเซิร์ฟเวอร์
คอมเมนต์ในโค้ดและชื่อ API ยังคงเป็นภาษาอังกฤษเพื่อให้ตรงกับ SDK
สร้างลีดเดอร์บอร์ด#
สร้างลีดเดอร์บอร์ดในหน้า ลีดเดอร์บอร์ด ของโปรเจกต์ แล้วใช้ slug ในโค้ด
| การตั้งค่า | ตัวเลือก |
|---|---|
| Slug | ตัวระบุตัวพิมพ์เล็กที่ใช้ในโค้ด เช่น coins |
| ลำดับการจัดเรียง | DESC (สูงสุดก่อน) หรือ ASC (ต่ำสุดก่อน เช่น เวลาแข่ง) |
| โหมดคะแนน | BEST เก็บคะแนนดีที่สุดของผู้เล่นแต่ละคน ส่วน LATEST จะแทนที่ด้วยคะแนนล่าสุดเสมอ |
| รีเซ็ต | NONE, DAILY, WEEKLY หรือ MONTHLY |
| คะแนนต่ำสุด / สูงสุด | คะแนนต่ำสุดและสูงสุดที่ยอมรับ (ไม่บังคับ) |
| คูลดาวน์การส่งคะแนน | จำนวนวินาทีขั้นต่ำระหว่างการส่งคะแนนสองครั้งของผู้เล่นคนเดียวกัน (ไม่บังคับ) |
ส่งคะแนน#
ชื่อผู้เล่นมาจากบัญชี ไคลเอนต์จึงส่งคะแนนแทนผู้อื่นไม่ได้
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}'อ่านอันดับ#
รายการอันดับต้นๆ อ่านได้โดยไม่ต้องเข้าสู่ระบบ ส่วนอันดับของผู้เล่นเองและรายการรอบๆ อันดับนั้นต้องมีผู้เล่นที่เข้าสู่ระบบแล้ว
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"การรีเซ็ตและรอบก่อนหน้า#
ลีดเดอร์บอร์ดรายวัน รายสัปดาห์ (วันจันทร์) และรายเดือนจะรีเซ็ตเวลา 00:00 UTC รอบที่จบแล้วจะถูกเก็บถาวร และอ่านได้ด้วยรอบ 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"จำนวนรอบที่ผ่านมาที่เก็บไว้ และจำนวนรายการที่ลีดเดอร์บอร์ดคืนค่า ขึ้นอยู่กับแพ็กเกจ (ดู ขีดจำกัด)
การกันโกง#
- คะแนนที่อยู่นอกช่วงต่ำสุดหรือสูงสุดจะถูกปฏิเสธด้วย
validation - การส่งเร็วกว่าคูลดาวน์จะได้
rate_limited - ไคลเอนต์ส่งคะแนนได้เฉพาะของผู้เล่นที่เข้าสู่ระบบอยู่เท่านั้น
- สำหรับเกมแนวแข่งขัน ให้เซิร์ฟเวอร์ของคุณเป็นผู้ตัดสินคะแนนและส่งด้วยคีย์ลับ
ส่งคะแนนจากเซิร์ฟเวอร์#
เมื่อใช้คีย์ลับ ให้ส่ง player_id และคะแนน ผู้เล่นต้องมีอยู่ในระบบแล้ว
// 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}'