Sunucu zamanı

Yandex Oyun SDK'sı, sunucuyla senkronize edilmiş zamanı almanızı sağlar. Metot şunlar için faydalıdır:

  • Hile koruması: kullanıcılar cihazlarındaki saati değiştirerek oyun süreçlerini etkileyemez.
  • Oyun etkinlikleri: buna dayanarak, güvenilir bir zaman kaynağı gerektiren etkinlikler ve ödüller ekleyebilirsiniz (örneğin, günlük veya haftalık bonuslar, mevsimsel 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.

1const ysdk = await YaGames.init();
2
3// Sunucu ile senkronize edilmiş zamanı ms cinsinden döndürür.
4ysdk.serverTime(); // Örneğin, 1720613073778.
5
6// Bir süre sonra tekrar çağır.
7ysdk.serverTime(); // Örneğin, 1720613132635.
1YaGames.init()
2    .then((ysdk) => {
3        // Sunucu ile senkronize edilmiş zamanı döndürür.
4        ysdk.serverTime(); // Örneğin, 1720613073778.
5
6        // Zaman geçtikten sonra tekrar çağırın.
7        ysdk.serverTime(); // Örneğin, 1720613132635.
8    });

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

 1YaGames.init()
 2    .then(async (ysdk) => {
 3        // Oyuncunun başlatılması.
 4        const player = await ysdk.getPlayer();
 5
 6        // Kayıtlı verileri alıyoruz.
 7        const data = await player.getData();
 8
 9        // Güncel sunucu zamanı.
10        const currentTime = ysdk.serverTime();
11
12        // Son ödül alma zamanı (yoksa 0 kullanılır).
13        const lastRewardTime = data.lastRewardTime || 0;
14
15        // 24 saat milisaniye cinsinden.
16        const DAY_IN_MS = 24 * 60 * 60 * 1000;
17
18        if (currentTime - lastRewardTime >= DAY_IN_MS) {
19            // 24 saatten fazla geçmiş — ödül verilebilir.
20            await giveReward(); // Ödül verme fonksiyonunuz.
21
22            // Yeni ödül alma zamanını kaydediyoruz.
23            await player.setData({
24                lastRewardTime: currentTime
25            });
26        }
27    });

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

 1YaGames.init()
 2    .then(async (ysdk) => {
 3        // Oyuncunun başlatılması.
 4        const player = await ysdk.getPlayer();
 5
 6        // Kayıtlı verileri alıyoruz.
 7        const data = await player.getData();
 8
 9        // Güncel sunucu zamanı.
10        const currentTime = ysdk.serverTime();
11
12        // Son ödül tarihini "YYYY-MM-DD" formatında alıyoruz.
13        const lastRewardDate = data.lastRewardDate || '';
14
15        // Mevcut tarihi "YYYY-MM-DD" formatında alıyoruz.
16        const currentDate = new Date(currentTime).toISOString().split('T')[0];
17
18        if (currentDate !== lastRewardDate) {
19            // Bugün ödül henüz alınmadı.
20            await giveReward(); // Ödül verme fonksiyonunuz.
21
22            // Ödül alım tarihini kaydediyoruz.
23            await player.setData({
24                lastRewardDate: currentDate
25            });
26        }
27    });

Not

Destek ekibi, hazır bir oyunun Yandex Oyunlar platformunda yayınlanmasına yardımcı olur. Geliştirme ve test etmeyle ilgili uygulamalı sorulara Discord topluluğunda diğer geliştiriciler yanıt verir.

Yandex Oyun SDK'sını kullanırken bir sorunla karşılaşırsanız veya bir sorunuz olursa destek ekibiyle iletişime geçin:

Sohbete yaz