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:

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

leaderboardName

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

appID

Uygulama tanımlayıcısı.

default

Eğer true ise, skor tablosu ana tablodur.

invert_sort_order

Sıralama yönü:

  • false: azalan şeklinde sıralanır,
  • true: artan şeklinde sıralanır.

decimal_offset

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.

type

Skor tablosu sonucunun türü. Kullanılabilir parametreler: numeric (sayı), time (saniye).

name

Skor tablosu adı.

title

Yerelleştirilmiş adlar. Olası dizi parametreleri: ru, en, be, uk, kk, uz, tr.

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

leaderboardName

Skor tablosu adı.

score

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.

extraData

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

leaderboardName

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

score

Sonucun 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.

extraData

Kullanıcı açıklaması. İsteğe bağlı parametre.

getAvatarSrc

Kullanıcının profil resminin URL'sini döndürür. Olası değerler size, small, medium ve large şeklindedir.

getAvatarSrcSet

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.

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

leaderboardName

Skor tablosu adı.

includeUser

Giriş yapmış bir kullanıcının yanıta dahil edilip edilmeyeceğini belirler:

  • true: Yanıta dahil edilsin,
  • false (varsayılan): Dahil edilmesin.

quantityAround

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.

quantityTop

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

leaderboard

Skor tablosu açıklaması.

ranges

Yanıttaki aralıklar.

start

Sıralamadaki yeri. Puanlama sıfırdan yapılır, bu nedenle 1. sıra sıfır eleman olarak kabul edilir.

size

Talep edilen kayıt sayısı. Veriler eksikse, yanıtla eşleşmeyebilir.

userRank

Sıralamada kullanıcı sırası. Eğer mevcut değilse veya en iyiler listesi kullanıcıyı içermiyorsa 0'dır.

entries

Sorguya göre sonuçlar.

score

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.

extraData

Kullanıcı açıklaması. İsteğe bağlı parametre.

getAvatarSrc

Kullanıcının profil resminin URL'sini döndürür. Olası değerler size, small, medium ve large şeklindedir.

getAvatarSrcSet

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.

Yöntem Kısıtlamaları

Yöntem

Açıklama

Sınır

Kullanıcı Kimliği Doğrulaması

lb.setLeaderboardScore()

Oyuncunun yeni skorunu ayarlar

1 saniyede 1 istek

Zorunlu

lb.getLeaderboardPlayerEntry()

Bir kullanıcının derecesini alır

5 dakikada 60 istek

Zorunlu

lb.getLeaderboardEntries()

Birden fazla kullanıcının derecesini alır

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:

Sohbete yaz