Skor tabloları
Oyun sayfasında en iyi oyuncuların sonuçlarını ve giriş yapmış kullanıcının sıralamadaki konumunu içeren kişiselleştirilmiş skor tabloları gösterebilirsiniz.
Aşağıda açıklanan sorguların çalışabilmesi için koşulların karşılanıp karşılanmadığını kontrol edin:
- SDK'yı bağlanmış ve ayarlanmış olmalıdır ve nesnesi
ysdk
değişkeni aracılığıyla erişilebilirdir, - Geliştirici konsolunda skor tablosu oluşturulmuştur.
Dikkat
Konsol Skor tablosu teknik adı alanında uygun ada sahip bir skor tablosu yoksa, sorgular 404 hatası verir.
Skor tabloları ile çalışmak için lb
nesnesi kullanılır.
Başlatma
lb
nesnesini başlatmak için ysdk.getLeaderboards()
yöntemini kullanın:
var lb;
ysdk.getLeaderboards()
.then(_lb => lb = _lb);
Skor tablosu açıklaması
Skor tablosu açıklamasını adına göre almak için getLeaderboardDescription
yöntemini kullanın:
getLeaderboardDescription(
leaderboardName: string
)
Parametre |
Açıklama |
|
Skor tablosu adı. |
ysdk.getLeaderboards()
.then(lb => lb.getLeaderboardDescription('leaderboard2021'))
.then(res => console.log(res));
const work = async () => {
const lb = await ysdk.getLeaderboards();
const res = await lb.getLeaderboardDescription('leaderboard2021');
console.log(res);
}
work();
Yanıt formatı
{
appID: string,
dеfault: boolean,
description: {
invert_sort_order: boolean,
score_format: {
options: {
decimal_offset: integer
},
type: string
}
},
name: string,
title: {
en: string,
ru: string
}
}
Parametre |
Açıklama |
|
Uygulama tanımlayıcısı. |
|
Eğer |
|
Sıralama yönü:
|
|
Sayının ondalık kısmının boyutu. Örneğin, |
|
Skor tablosu sonucunun türü. Kullanılabilir parametreler: |
|
Skor tablosu adı. |
|
Yerelleştirilmiş adlar. Olası dizi parametreleri: |
Yeni sonuç
Dikkat
Sadece yetkilendirilmiş kullanıcılar için bu istek geçerlidir. Gerekirse yetkilendirme işleminden faydalanın.
Kullanıcı için yöntemin erişilebilirliğini kontrol etmek için ysdk.isAvailableMethod('leaderboards.setLeaderboardScore')
yöntemini kullanabilirsiniz. Bu yöntem, erişilebilirliği gösteren bir Promise<Boolean>
döndürür.
Sonuçların yetkilendirmeye bakılmaksızın tüm kullanıcılar için kaydedilmesini istiyorsanız, uygulama kodunda özel bir liderlik tablosu belirtmenizi öneririz. Teknoloji seçimi sınırlı değildir.
Oyuncunun yeni skorunu ayarlamak için setLeaderboardScore()
yöntemini kullanın:
setLeaderboardScore(
leaderboardName: string,
score: number,
extraData?: string
)
Parametre |
Açıklama |
|
Skor tablosu adı. |
|
Sonuç değeri. Yalnızca |
|
Kullanıcı açıklaması. İsteğe bağlı parametre. |
Not
Bir sorgu saniyede en fazla bir kez gönderilebilir. Aksi takdirde, bir hata ile reddedilir.
ysdk.getLeaderboards()
.then(lb => {
// extraData olmadan
lb.setLeaderboardScore('leaderboard2021', 120);
// extraData ile
lb.setLeaderboardScore('leaderboard2021', 120, 'My favourite player!');
});
const work = async () => {
const lb = await ysdk.getLeaderboards();
// extraData olmadan
await lb.setLeaderboardScore('leaderboard2021', 120);
// extraData ile
await lb.setLeaderboardScore('leaderboard2021', 120, 'My favourite player!');
}
work();
Puan alınması
Dikkat
Sorgu yalnızca yetkilendirilmiş kullanıcılar için kullanılabilir. Gerekirse yetkilendirme işleminden faydalanın.
Kullanıcı için yöntemin erişilebilirliğini kontrol etmek için ysdk.isAvailableMethod('leaderboards.getLeaderboardPlayerEntry')
metodunu kullanabilirsiniz. Bu metod, erişilebilirliği gösteren Promise<Boolean>
döndürür.
Erişim yetkilendirmesinden bağımsız olarak sonuçların tüm kullanıcılar için kaydedilmesini sağlamak için uygulama kodunda özel lider tablosunu kendiniz tanımlamanızı öneririz. Teknoloji seçimi sınırlı değildir.
Kullanıcı puanını almak için getLeaderboardPlayerEntry
yöntemini kullanın:
getLeaderboardPlayerEntry(
leaderboardName: string
)
Parametre |
Açıklama |
|
Skor tablosu adı. |
Not
İstekler 5 dakikada en fazla 60 kez gönderilebilir. Aksi takdirde hata ile reddedilecektir.
ysdk.getLeaderboards()
.then(lb => lb.getLeaderboardPlayerEntry('leaderboard2021'))
.then(res => console.log(res))
.catch(err => {
if (err.code === 'LEADERBOARD_PLAYER_NOT_PRESENT') {
// Oyuncunun skor tablosunda hiç kaydı yoksa tetiklenir
}
});
const work = async () => {
const lb = await ysdk.getLeaderboards();
try {
const res = await lb.getLeaderboardPlayerEntry('leaderboard2021');
} catch (err) {
if (err.code === 'LEADERBOARD_PLAYER_NOT_PRESENT') {
// Oyuncunun skor tablosunda hiç kaydı yoksa tetiklenir
}
}
console.log(res);
}
work();
Yanıt formatı
{
score: integer,
extraData: string,
rank: integer,
player: {
getAvatarSrc: (size: string) => string,
getAvatarSrcSet: (size: string) => string,
lang: string,
publicName: string,
scopePermissions: {
avatar: string,
public_name: string
},
uniqueID: string,
},
formattedScore: string
}
Parametre |
Açıklama |
|
Sonucun değeri. Yalnızca |
|
Kullanıcı açıklaması. İsteğe bağlı parametre. |
|
Kullanıcının profil resminin URL'sini döndürür. Olası değerler |
|
Retina ekranlar için uygun olan kullanıcı profil resminin srcset'ini döndürür. Olası değerler |
Skor tablosu kayıtları
Kullanıcı sıralamasını çıkarmak için getLeaderboardEntries
yöntemini kullanın:
getLeaderboardEntries(
leaderboardName: string,
{
includeUser: boolean,
quantityAround: integer,
quantityTop: integer
}
)
Parametre |
Açıklama |
|
Skor tablosu adı. |
|
Giriş yapmış bir kullanıcının yanıta dahil edilip edilmeyeceğini belirler:
|
|
Yanıt olarak gelecek skor tablosunda kullanıcının altındaki ve üstündeki girişlerin sayısı. Minimum değer 1 ve maksimum değer 10. Varsayılan olarak 5 değerini döndürür. |
|
Skor tablosunun en üstündeki giriş sayısı. Minimum değer 1 ve maksimum değer 20. Varsayılan olarak 5 değerini döndürür. |
Not
İstek, 5 dakikada en fazla 20 kez gönderilebilir. Aksi takdirde bir hata ile reddedilecektir.
ysdk.getLeaderboards()
.then(lb => {
// Tüm varsayılan değerleri kullanarak
lb.getLeaderboardEntries('leaderboard2021')
.then(res => console.log(res));
// En iyi 10 skor sahibinin alınması
lb.getLeaderboardEntries('leaderboard2021', { quantityTop: 10 })
.then(res => console.log(res));
// En iyi 10 skor sahibinin ve kullanıcıya yakın 3 kaydın alınması
lb.getLeaderboardEntries('leaderboard2021', { quantityTop: 10, includeUser: true, quantityAround: 3 })
.then(res => console.log(res));
});
const work = async () => {
const lb = await ysdk.getLeaderboards();
let res;
// Tüm varsayılan değerleri kullanarak
res = await lb.getLeaderboardEntries('leaderboard2021');
console.log(res);
// En iyi 10 skor sahibinin alınması
res = await lb.getLeaderboardEntries('leaderboard2021', { quantityTop: 10 });
console.log(res);
// En iyi 10 skor sahibinin ve kullanıcıya yakın 3 kaydın alınması
res = await lb.getLeaderboardEntries('leaderboard2021', { quantityTop: 10, includeUser: true, quantityAround: 3 });
console.log(res);
}
work();
Yanıt formatı
{
leaderboard: {
...
},
ranges: [
{
start: integer,
size: integer
}
],
userRank: integer,
entries: [
{
score: integer,
extraData: string,
rank: integer,
player: {
getAvatarSrc: (size: string) => string,
getAvatarSrcSet: (size: string) => string,
lang: string,
publicName: string,
scopePermissions: {
avatar: string,
public_name: string
},
uniqueID: string,
},
formattedScore: string
},
...
]
}
Parametre |
Açıklama |
|
|
|
Yanıttaki aralıklar. |
|
Sıralamadaki yeri. Puanlama sıfırdan yapılır, bu nedenle 1. sıra sıfır eleman olarak kabul edilir. |
|
Talep edilen kayıt sayısı. Veriler eksikse, yanıtla eşleşmeyebilir. |
|
Sıralamada kullanıcı sırası. Eğer mevcut değilse veya en iyiler listesi kullanıcıyı içermiyorsa 0'dır. |
|
Sorguya göre sonuçlar. |
|
Sonuç değeri. Yalnızca |
|
Kullanıcı açıklaması. İsteğe bağlı parametre. |
|
Kullanıcının profil resminin URL'sini döndürür. Olası değerler |
|
Retina ekranlar için uygun olan kullanıcı profil resminin srcset'ini döndürür. Olası değerler |
Yöntem Kısıtlamaları
Yöntem |
Açıklama |
Sınır |
Kullanıcı Kimliği Doğrulaması |
|
1 saniyede 1 istek |
Zorunlu |
|
|
5 dakikada 60 istek |
Zorunlu |
|
|
5 dakikada 20 istek |
Opsiyonel |
Diğer istekler için sınır: 5 dakikada 20 istek.
Liderlik Tablolarıyla İlgili Sorunlar
Öneri
ysdk.isAvailableMethod()
ve lb.setLeaderboardScore()
yöntemlerinin kombinasyonunu kullandığınızda yetkilendirilmemiş kullanıcılar liderlik tablosuna dahil olmaz ve ilerlemelerini göremezler. Her türlü kullanıcının sonuçlarını saklayan ve herkese gösteren ayrı bir liderlik tablosu oluşturmanızı tavsiye ederiz. Uygulama kodunda özel liderlik tabloları oluşturabilir, teknoloji seçiminizde sınırlama yoktur.
Obje zaten mevcut
Yeni bir liderlik tablosu oluşturulmaya çalışıldığında eski bir isimle hata oluşur. Daha önce kullanılmamış bir isim girin.
Kullanıcı Gizli
"Kullanıcı Gizli" yazısı, kullanıcının Yandex'te ad ve avatar erişimine izin verilmediğinde veya kullanıcının bunları kullanımını kabul etmediğinde görüntülenir.
Kullanıcının bilgilerini isteğinizde ysdk.getPlayer({ scopes: true })
kullanarak aldığınızdan emin olun. scopes: false
parametresini kullanıyorsanız, oyun adı ve avatarını istemeyecektir.
Kullanıcı izin verme talebini reddederse, tarayıcı oturumunda izni tekrar talep edemezsiniz.
Oyuncu önbelleği temizlerse ve çerezleri silerse, gizli modda girer veya farklı bir tarayıcı kullanırsa, o zaman tekrar kimlik doğrulama ve izin istenebilir. Oyuncu verileri hakkında nasıl bir diyalog kutusu açılacağını öğrenmek için Oyuncu Verileri makalesine bakabilirsiniz.
Hata 404
Liderlik tablosu için SDK yöntemlerini çağırmaya çalışırken 404 hatası alıyorsanız, geliştirici konsolunda Technical leaderboard name alanında uygun adla liderlik tablosunun oluşturulduğundan emin olun.
Not
Destek ekibi, hazır oyunu Yandex Oyun platformuna yerleştirmenize yardımcı olur. Geliştirme ve test etme konularındaki uygulamalı sorulara ise diğer geliştiriciler Discord Topluluğu yanıt verir.
Yandex Games SDK kullanırken sorunla karşılaşırsanız veya sorunuz varsa, lütfen destek ekibiyle iletişime geçin:
Skor tablosunun adı.
Uygulama tanımlayıcısı.
true
ise, skor tablosu ana skor tablosudur.
Sıralama yönü:
false
: azalan şeklinde sıralanır,true
: artan şeklinde sıralanır.
Sayının ondalık kısmının boyutu.
Örneğin, decimal_offset: 2
olduğunda 1234 sayısı 12.34 olarak görüntülenecektir.
Lider tablosu türü. Kullanılabilir parametreler: numeric
(sayı), time
(saniye).
Yerelleştirilmiş adlar. Olası dizi parametreleri: ru
, en
, be
, uk
, kk
, uz
, tr
.
Sonuç değeri. Yalnızca integer
türü kabul edilir. Negatif olamaz. Skor tablosu türü time
ise, değerler milisaniye cinsinden aktarılmalıdır.
Kullanıcı açıklaması. İsteğe bağlı parametre.
Skor tablosu sonucunun türü. Kullanılabilir parametreler: numeric
(sayı), time
(saniye).
Kullanıcı profil resminin URL'sini döndürür. Olası değerler size
, small
, medium
ve large
şeklindedir.
Retina ekranlar için uygun olan kullanıcı profil resminin srcset'ini döndürür. Olası değerler size
, small
, medium
ve large
şeklindedir.
Giriş yapmış bir kullanıcının yanıta dahil edilip edilmeyeceğini belirtir:
true
: Yanıta dahil edilsin,false
(varsayılan): Dahil edilmesin.
Yanıt olarak gelecek skor tablosunda kullanıcının altındaki ve üstündeki girişlerin sayısı. Minimum değer 1, maksimum değer 10. Varsayılan olarak 5 değerini döndürür.
Skor tablosunun en üstünden itibaren giriş sayısı. Minimum değer 1 ve maksimum değer 20. Varsayılan olarak 5 değerini döndürür.
Yanıttaki yerlerin aralıkları.
Sıralamadaki konumu. Puanlama sıfırdan yapılır, bu nedenle 1. sıra sıfır eleman olarak kabul edilir.
Talep edilen kayıt sayısı. Veriler eksikse, yanıtla eşleşmeyebilir.
Kullanıcının sıralamadaki konumu. Eğer mevcut değilse veya en iyiler listesi kullanıcıyı içermiyorsa 0'dır.
Sorguya göre sonuçlar.