Sunucu zamanı

Yandex Oyunlar SDK, sunucu ile senkronize edilmiş zamanı almanıza olanak tanır. Bu yöntem şunlar için yararlıdır:

  • Hile koruması: Kullanıcılar, kendi cihazlarındaki zamanı değiştirerek oyun süreçlerine etki edemeyecekler.
  • Oyun etkinlikleri: Bu temelde, güvenilir bir zaman kaynağı önemli olan aktiviteler ve ödüller ekleyebilirsiniz, örneğin: günlük veya haftalık bonuslar, mevsimlik etkinlikler ve görevler.

ysdk.serverTime()

Bu yöntem, tüm cihazlarda aynı olan, milisaniye cinsinden timestamp, sunucu zamanını döndürür. Sonuç formatı Date.now()'a benzer, ancak sonuncusu, sunucu zamanından farklı olabilecek ve oyuncular tarafından hile yapmaya karşı korunmayan kullanıcının cihazının zamanını döndürür. ysdk.serverTime() yöntemi, cihazdaki sistem saatinin değiştirilmesine karşı dayanıklıdır ve bu nedenle daha güvenilirdir.

Aktüel zamanı her ihtiyaç duyduğunuzda bu yöntemi çağırın.

const ysdk = await YaGames.init();

// Sunucu ile senkronize edilmiş zamanı ms cinsinden döndürür.
ysdk.serverTime(); // Örneğin, 1720613073778.

// Bir süre sonra tekrar çağır.
ysdk.serverTime(); // Örneğin, 1720613132635.

YaGames.init().then(ysdk => {

  // Sunucu ile senkronize edilmiş zamanı döndürür.
  ysdk.serverTime(); // Örneğin, 1720613073778.

  // Zaman geçtikten sonra tekrar çağırın.
  ysdk.serverTime(); // Örneğin, 1720613132635.
});

Günlük ödüllerin uygulanması için örnekler

  • Güvenilir sunucu saatini almak için ysdk.serverTime() kullanılır.
  • Veriler, player.setData() ile saklanır.
  • Ödülün tekrar alınmasına karşı koruma uygulanır.
  • Zaman güvenli bir şekilde karşılaştırılır.

Önemli

Örneklerdeki giveReward() fonksiyonu, oyuncuya ödül vermek için kendi gerçekleştireceğiniz bir fonksiyondur.

Oyunu en son ziyaret ettikten 24 saat sonra ödül

YaGames.init().then(async ysdk => {
    // Oyuncunun başlatılması.
    const player = await ysdk.getPlayer();

    // Kayıtlı verileri alıyoruz.
    const data = await player.getData();

    // Güncel sunucu zamanı.
    const currentTime = ysdk.serverTime();

    // Son ödül alma zamanı (yoksa 0 kullanılır).
    const lastRewardTime = data.lastRewardTime || 0;

    // 24 saat milisaniye cinsinden.
    const DAY_IN_MS = 24 * 60 * 60 * 1000;

    if (currentTime - lastRewardTime >= DAY_IN_MS) {
        // 24 saatten fazla geçmiş — ödül verilebilir.
        await giveReward(); // Ödül verme fonksiyonunuz.

        // Yeni ödül alma zamanını kaydediyoruz.
        await player.setData({
            lastRewardTime: currentTime
        });
    }
});

Ödül, her takvim günü yalnızca bir kez verilir (UTC'ye göre gece yarısında sıfırlanır)

YaGames.init().then(async ysdk => {
    // Oyuncunun başlatılması.
    const player = await ysdk.getPlayer();

    // Kayıtlı verileri alıyoruz.
    const data = await player.getData();

    // Güncel sunucu zamanı.
    const currentTime = ysdk.serverTime();

    // Son ödül tarihini "YYYY-MM-DD" formatında alıyoruz.
    const lastRewardDate = data.lastRewardDate || '';

    // Mevcut tarihi "YYYY-MM-DD" formatında alıyoruz.
    const currentDate = new Date(currentTime).toISOString().split('T')[0];

    if (currentDate !== lastRewardDate) {
        // Bugün ödül henüz alınmadı.
        await giveReward(); // Ödül verme fonksiyonunuz.

        // Ödül alım tarihini kaydediyoruz.
        await player.setData({
            lastRewardDate: currentDate
        });
    }
});

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