Bağımsız

Giriş Belgelendirme ve Yardım
Steamworks Belgeleri
İstatistikler ve Başarımlar

Genel Bakış

Steam İstatiktikleri ve Başarımları kullanıcılarınız için oyununuzun kalıcı, takibi kolay ve istatistiklerini tutmanın kolay bir yolunu sunar. Kullanıcının verisi Steam hesaplarıyla ilişkilendirilmiştir ve her bir kullanıcının başarımları ve istatistikleri Steam Topluluk Profillerinde gösterilebilir.

Ne sağlarlar

Başarımlar, oyununuzu oynayan oyunculara yüksek değerli ödüller vermesinin yanı sıra, ekip çalışmasını ve oyuncu etkileşimini teşvik etmek içindir. Başarımlar oyundaki amaçlara farklı bir boyut katar ve oyunda daha fazla zaman geçiren oyuncuları ödüllendirir.

İstatistikler oynama süresi, kullanılan güçlendirmelerin sayısı gibi çeşitli bilgilerin takibini yapar. Bunları sadece dâhili veri olarak kullanmak için toplayabileceğiniz gibi bu verileri aynı zamanda oyuncuya, oyuncunun birden fazla bilgisayardaki birden fazla oturumundan toplanan oynama istatistiklerini kullanarak bir başarım vermek için de kullanabilirsiniz.

Entegrasyona Genel Bakış

Oyununuzun İstatistiklerini ve Başarımlarını Belirleyin

Başarımlar uygulamaya özeldir ve Steamworks partner sitesinde yer alan Uygulama Yöneticisi sayfasından belirlenirler.

Oyununuzun saklayabileceği üç tür istatistik bulunmaktadır:
  • INT - Bir 32-bit (imzalı) tam sayı (ör. oynanan oyun sayısı)
  • FLOAT - Bir 32-bit sürekli değişen değer (ör. sürülen kilometre sayısı)
  • AVGRATE - Değişen bir ortalama. Bakınız: AVGRATE istatistik türü

Steamworks Partner internet sitesi oyununuzun istatistiklerini ve başarımlarını tanımlamanız ve güncellemeniz için bir arayüz sunar. Bu arayüzle:
  • İlk istatistikleri ve başarımları belirleyebilir
  • Ek istatistikler ve başarımlar ekleyebilir
  • Başarım adlarını, açıklamalarını ve simgelerini güncelleyebilir
  • İstatistik parametrelerini ve kısıtlamalarını güncelleyebilirsiniz (azami/asgari değerler, değişen ortalama, pencere boyutları vb.)
İstatistikler aşağıdaki özelliklere sahiptir:
  • ID - Her bir istatistik için otomatik olarak oluşturulmuş sayısal bir kimlik.
  • Tür - Bu istatistiğin türü. - INT, FLOAT veya AVGRATE.
  • API Adı - API kullanılarak bu istatistiğe erişmek için kullanılan satır.
  • Ayarlayan - İstatistikleri kimin düzenleyeceğini belirtir. Varsayılan olarak istemcidir. Ayrıntılı bilgi için Oyun Sunucusu İstatistikleri belgelendirmesine göz atın.
  • Sadece Artış - Eğer ayarlıysa bu istatistiğin tuttuğu değer zamanla sadece artacaktır.
  • Azami Değişiklik - Eğer ayarlıysa istatistik değerinin bir SetStat çağrısından diğerine değiştirebileceği miktar için bir sınır belirler.
  • Asgari Değer - Eğer ayarlıysa bu istatistiğin alabileceği en az sayısal değeri belirler. Varsayılan olarak asgari değer, sayısal türünün (INT_MIN veya -FLT_MAX) belirttiği en az değerdir.
  • Azami Değer - Eğer ayarlıysa bu istatistiğin alabileceği en yüksek sayısal değeri belirler. Varsayılan olarak azami değer, sayısal türünün (INT_MIN veya FLT_MAX) belirttiği en yüksek değerdir.
  • Varsayılan Değer - Eğer ayarlıysa bu istatistik için varsayılan değer yeni bir kullanıcı için ilk olarak belirlenecektir. Eğer ayarlı değilse, varsayılan değer sıfırdır.
  • Toplam - Eğer ayarlıysa Steam bu istatistikler için küresel bir toplam tutacaktır. Ayrıntılı bilgi için Küresel İstatistikler sayfasına bakınız.
  • Görünen Ad - Bu istatistiğin Steam Topluluğu'nda görünen adıdır. Yerelleştirilebilir.
AVGRATE istatistikleri aşağıdaki ek özelliklere sahiptir:
  • Pencere - Verinizin ortalamasında kullanılan "kaydırmalı pencere"nin boyutu.
Bir AVGRATE istatistiği Steam tarafından otomatik olarak ortalaması alınan bir değerdir. Ayrıntılı bilgi için AVGRATE belgelendirmesine göz atın.

Başarımlar aşağıdaki özelliklere sahiptir:
  • ID - Her bir başarım için otomatik olarak oluşturulmuş sayısal bir kimlik.
  • API Adı - API kullanılarak bu başarıma erişmek için kullanılan satır.
  • İlerleme İstatistiği - Bu başarım için Topluluk'ta ilerleme çubuğu olarak kullanılan bir istatistik belirtir. Bu başarım ayrıca, istatistik değeri başarım açma değerine ulaştığında otomatik olarak açılır.
  • Görünen Ad - Bu başarımın bildirim kutucuğunda ve Topluluk'ta görünen adıdır. Yerelleştirilebilir.
  • Açıklama - Bu başarımın Topluluk'ta gösterilecek açıklamasıdır. Yerelleştirilebilir.
  • Ayarlayan - Başarımları kimin açabileceğini belirtir. Varsayılan olarak istemcidir. Ayrıntılı bilgi için Oyun Sunucusu İstatistikleri belgelendirmesine göz atın.
  • Gizli - Eğer seçiliyse, "gizli" başarım kazanılana kadar kullanıcının Topluluk sayfasında (hiçbir yerinde) görünmeyecektir.
  • Başarım Simgesi - Başarım kazanıldığında gösterilecek simgedir.
  • Kazanılmayan Başarım Simgesi - Başarım kazanılmadığında gösterilecek simgedir.

Aşağıdaki başarımlar Steamworks API Example Application (SpaceWar) oyunundan alınmıştır:
spacewar_achievements.png

Kullanım şekli

Başarımlara ve İstatistiklere oyununuzdan erişim:

AVGRATE istatistik türü

Bu tür istatistikler bazı eşsiz ve oldukça kullanışlı işlevsellikler sağlar; ancak açıklaması biraz karışıktır.

"Saatte kazanılan puan" gibi bir ortalama istatistiği tutmak istediğinizi varsayalım. Bununla birlikte, birisi INT "TotalPoints" diğeri FLOAT "TotalPlayTimeHours" olmak üzere iki istatistik olacaktır ve puanı zamana bölerek Saatte Kazanılan Puan hesaplanır.

Bu uygulamanın olumsuz tarafı, oyuncu belirli bir saat oynadığında hesaplanan ortalama saatin oldukça yavaş değişmesidir. Aslında, ne kadar kullanıcı oyunu oynarsa ortalama da o kadar az doğru sonucu verir. Eğer kullanıcı 100 saat oyun oynamışsa, hesaplanan ortalama saat bunun 50 saat gerisinde kalacaktır. Eğer yeteneklerini geliştirirlerse, bekledikleri Saate Kazanılan Puan artışını göremeyeceklerdir.

AVGRATE istatistik türü size ortalama üzerinde "kayan pencere" uygulamanıza imkân tanımaktadır. Örneğin, sadece önceki birkaç saat oynama süresini değerlendirebilir ve böylece bu istatistiğin kullanıcının mevcut yetenek seviyesine daha doğru etki etmesini sağlayabilirsiniz.

Haydi sadece oynanan en son 20 saatin değere etki ettiği bir "saatte kazanılan puan" istatistiğini uygulayalım. Bunu yapmak için:
  • Ortalama süre "saatte" olacağından bu istatistikle ilişkili tüm zaman parametrelerindeki zaman birimleri "saat" olacaktır. Bu, istatistiğin kendisindeki Pencere ve UpdateAvgRateStat'ın altında olan "dSessionLength" paremetresi için uygulanır.
  • "AvgPointsPerHour" adlı bir AVGRATE istatistiği ve bir 20.0 Pencere özelliği oluşturun (bunun"saat" olduğunu unutmayın).
  • Oyununuzun uygun bir noktasında aşağıdaki parametrelerle ISteamUserStats::UpdateAvgRateStat'ı çağırın:
    • pchName - "AvgPointsPerHour"
    • flCountThisSession - UpdateAvgRateStat'a yapılan son çağrıdan sonra oyuncunun kazandığı puan sayısı.
    • dSessionLength - UpdateAvgRateStat'a yapılan son çağrıdan sonra oynanan oyun süresi. Bu birim, birimin Pencere özelliğindeki birimle aynı olmalıdır. Bu durumunda bu "saat"tir.
  • Örneğin, eğer oyuncu 0,225 saat (13,5 dakika) süren son turda 77 puan kazanmışsa formül SteamUserStats()->UpdateAvgRateStat( "AvgPointsPerHour", 77, 0.225 ) olacaktır.
Yukarıdaki örnekte Steam, mevcut tur ortalamasını saat başına 342,2 olarak alacak (77 bölü 0,0225) ve bir önceki değerle karıştıracaktır. Sonuç, oyuncunun son 20 saatlik oyun süresindeki toplam ortalamasını yansıtacaktır. Eğer kullanıcının istatistiğinin yüklendiği ilk seferse, bu değer 342,2 olacaktır.

Bu örnekte zaman birimi olarak "saat" kullanılmıştır; ancak siz istediğiniz zaman birimini kullanabilirsiniz. "dSessionLength" ve Pencere özelliğinde kullandığınız aynı birimi sürekli kullanmayı aklınızda bulundurun.

Diğer Kulllanıcılardan İstatistik Almak

Diğer kullanıcının istatistiklerini almak için ISteamUserStats::RequestUserStats'ı kullanabilirsiniz. Daha sonra o kullanıcının verisini almak için ISteamUserStats::GetUserStat, ISteamUserStats::GetUserAchievement ve ISteamUserStats::GetUserAchievementAndUnlockTime'ı kullanabilirsiniz. Bu veri diğer kullanıcı yeni istatistikler yüklediğinde otomatik olarak güncellenmeyecektir. Bu yüzden veriyi yenilemek için yeniden ISteamUserStats::RequestUserStats'ı çağırın.

Çok fazla bellek kullanmaktan kaçınmak için bir En Son Kullanılanlar (LRU) belleği korunur ve diğer kullanıcının istatistiği zaman zaman boşaltılır. Bu işlem gerçekleştiğinde otomatik olarak bir ISteamUserStats::UserStatsUnloaded_t geri çağrısı gönderilir. Bu geri çağrı gönderildiğinde, belirtilen kullanıcının istatistikleri ISteamUserStats::RequestUserStats yeniden çağrılana kadar erişilemez olacaktır.

Çevrimdışı Modu

Steam, istatistiklerin ve başarımların verisini yerel bir önbellekte saklar ve böylece API'lar çevrimdışı modda normal bir şekilde kullanılabilir. İşlenemeyen tüm istatistikler kullanıcının bir sonraki çevrimiçi olmasına kadar saklanır. Birden fazla makinede değişikliklerin olması durumunda, Steam otomatik olarak bu başarımları birleştirir ve daha fazla ilerleme kaydeden istatistik kaynağını seçer. Steam, yerel bir istatistik verisi önbelleği sakladığından, oyunun verilerinin bir önbelleğini yerel bir diskte tutulması da gerekmemektedir. Bu tür önbellekler sık sık çatışma içindedir ve bu gibi durumlarda kullanıcılara ilerlemelerinin geri alınmış gibi gösterilmesi sinir bozucu bir deneyime neden olacaktır.

Oyun Sunucusu İstatistikleri

ISteamGameServerStats, ISteamUserStats'in paralelidir ve kullanıcılar yerine oyun sunucuları için kullanılır. Bunlar kullanıcıların oyun istatistiklerini, tıpkı istemciler gibi alabilir (yukarıda açıklanmıştır). Aynı zamanda istatistikleri ve ödül başarımlarını da alırlar; ancak sadece "Ayarlayan" olarak OS (oyun sunucusu) veya Resmî OS belirtilmişse mümkündür. Oyun sunucusuyla resmî oyun sunucusu arasındaki fark, resmî oyun sunucularının sizin sunuculuğunuzda ve kontrolünüzde olmasıdır. İstatistikleri belirlemek için resmî oyun sunucularını kullanmak hileye karşı gelişmiş güvenlik sağlar. Kullanıcılar kendi oyun sunucularını değiştirebilir veya oyun sunucusu olarak taklit edebilirler. Resmî oyun sunucusunu belirlemek için sunucuların IP aralıklarını buraya girin.

Oyun sunucunuz tarafından ayarlanabilir olan istatistikler ve başarımlar istemci tarafından ayarlanamaz. Oyun sunucuları, yalnızca o anda sunucuda oynayan kullanıcılar için istatistikleri ve başarımları ayarlayabilir. Eğer kullanıcı sunucuyu terk ettiğinde en son istatistiklerin ayarlanması için bir süre vardır ve bu süreden sonra yapılacak yeni yüklemeler reddedilir. Bu, tutarlılığın sağlanmasına yardımcı olmakta ve kötü niyetli bir oyun sunucusunun herhangi birinin istediği zaman istatistiklerini belirlemesini engellemektedir. Kısıtlamalar göz önüne alındığında, istatistikleri ayarlamak için bir turun sonuna kadar beklememek önemlidir. Kullanıcı çıktıktan sonra verilerini saklayabilmek için bu işlemi daimi olarak ayarlayın.

İstemciler, oyun sunucusu istatistiklerini değiştirdiğinde otomatik olarak güncellenecektir. Ancak, istemcilerde olduğu gibi, diğer kullanıcılar için sunucu tarafından yüklenen istatistikler yenilenmeyecek ve eskiyebilecektir.

İstatistikleri Sıfırlamak

Geliştirme sürecinde, test amaçlı olarak bir hesabın ya da tüm hesapların istatistiklerini ve başarımlarını tamamen silmek sıklıkla gerçekleşmektedir. Bir hesabın istatistiklerini silmek için bAchievementsToo ile ISteamUserStats::ResetAllStats çağırın ve başarımları da silmek için true olarak ayarlayın. Bir kez çağrıldığında, istatistiklerinizi ve başarılarınızı yinelemeyi ve iç bellek oyun durumunuzu sıfırlamayı unutmayın. Tüm kullanıcılar için istatistikleri ve başarımları küresel olarak silmenin bir yolu yoktur. Bunun nedenlerinden biri, eğer küresel bir silme gerçekleşirse hâlihazırda oynanan oyunlar bundan etkilenmeyecek ve iç bellek değerlerini geri yazacaklardır. Neyse ki oyununuza küresel silme sistemini eklemenin kolay bir yolu bulunmaktadır. Bunun için:
  • "Sürüm" gibi bir istatistik adı belirleyin
  • Oyunun içine gömülü sabit kodlu (hardcoded) bir istatistik sürüm numarası ekleyin
  • İstatistikler yüklendiğinde gömülü sabit kodlu sürümünüzün istatistiklerini "Sürüm"ün istatistikleriyle karşılaştırın
  • Eğer eşleşmezlerde ISteamUserStats::ResetAllStats'ı çağırın ve "Sürüm" istatistiklerini gömülü sabit kod numarasına ayarlayın.
Bu yolla, küresel bir temizlik istediğinizde sadece gömülü sabit kodun istatistik numarasını değiştirebilirsiniz. Küresel silme, kullanıcılar yeni yapıyı edindiklerinde gerçekleşecektir.

İstatistiklerin Tutarlılığı

İlgili istatistiklerin nasıl tutarsız hale gelebileceğini düşünmek en iyi yöntemdir. Örneğin, "GamesWon", "GamesLost" ve "GamesPlayed" olarak üç istatistiğiniz olsun. En iyi şekilde düşünsek bile, istatistiklerin birbirleriyle olan senkronizasyonları bozulabilir. Bu durumda, oyunların kazanılması ve kaybedilmesi toplam oyun süresine yansımayacaktır. Eğer bu "GamesLost" istatistiğini kaldırıp ve bunun yerine "GamesPlayed" - "GamesWon" hesaplayarak çözülürse, bir tutarsızlık "GamesLost" sayısının negatif olmasına neden olabilir. Bu durumda, yapılacak en iyi şey "GamesPlayed" istatistiğini düşürmek ve "GamesWon" + "GamesLost" olarak hesaplamak olacaktır.

Küresel İstatistikler

Steam'e bütün kullanıcıların o istatistik için değerlerini toplamasını söylemek istiyorsanız yönetici paneline giderek istatistikleri toplam olarak işaretleyin. Bunu ekonomideki toplam para, toplam lei sayısı, favori silahlar, favori haritalar ve hangi takımların daha iyi performans gösterdiği gibi bilgileri toplamak için kullanabilirsiniz. Bir diğer taraftan da bu, "En fazla leş" gibi istatistikler için kullanılmamalıdır çünkü bu sayıyı birden fazla kullanıcı için toplamak pek bir anlam ifade etmeyecektir. İstatistikler oyuncuların elinde olduğundan ötürü bu veri manipülasyona açıktır. Bundan hareketle, toplam istatistikleri kullanırken bunlar için uygun asgari değer, azami değer, sadece artış (eğer uygunsa) ve azami değişim değerlerini belirlemelisiniz. Azami değişim, toplam istatistikler için özel bir anlama sahiptir. Yeni bir değer yüklendiği zaman küresel değer azami değişim değerinden fazla değişmez. Bu, bir hilecinin küresel toplamları etkileme hızını kısıtlar.

Küresel toplamlara erişmek için önce ISteamUserStats::RequestGlobalStats'ı çağırın ardından her bir küresel istatistik için ISteamUserStats::GetGlobalStat'ı çağırın. Belirli bir gün aralığı geçmişi için ayrıca ISteamUserStats::RequestGlobalStats'ı çağırabiirsiniz. Geçmiş, o istatistiğin her günkü değişim miktarıdır. Bu geçmişe ISteamUserStats::GetGlobalStatHistory ile erişebilirsiniz.

Ayrıca, istemciden küresel başarım tamamlama yüzdelerini de talep edebilirsiniz. Bunu yapmak için önce ISteamUserStats::RequestGlobalAchievementPercentages'ı çağırın. Ardından ISteamUserStats::GetMostAchievedAchievementInfo'yu ve ISteamUserStats::GetNextMostAchievedAchievementInfo'yu çağırarak başarımları en fazla tamamlayanlardan en az tamamlayanlara doğru olacak sırada inceleyin. Belirli bir başarım için tamamlama yüzdesini almak istiyorsanız ISteamUserStats::GetAchievementAchievedPercent'ı da çağırabilirsiniz.

Steam Topluluğu

Oyununuz yayınlandıktan sonra bireysel ve küresel başarım ilerlemesi hakkındaki bilgiler Steam Topluluğu'nda gösterilecektir. Her bir oyuncunun Topluluk profillerinden hangi başarımı kazanıp hangilerini henüz kazanamadıkları başarı vitrinine erişimleri olacaktır.
NOT: Başarımlarınız, uygulamanız bir şekilde topluluğa görünür olana kadar gösterilmeyecektir.

Her bir başarım Steamworks yönetim panelinden belirlediğiniz ona uygun bir simge, isim ve açıklama ile listelenecektir. Eğer başarımın adı ve açıklaması kullanıcının seçtiği dile yerelleştirilmişse, başarım o dilde görüntülenecektir.

Ayrıca bu sayfada ve oyununuzun Steam sayfasında oyununuzun küresel başarım istatistiklerinin bulunduğu bir bağlantı olacaktır. Oyununuzun her bir başarımını kazanmış Steam oyuncularının yüzdelik oranını en yaygından en nadir başarıma göre gösterecektir. Bunu görmek oyuncular için eğlenceli ve geliştiriciler için de önemli bir kaynaktır. Özel zorluklarınız yeterince zorlayıcı mı? Ya da çok mu zor? (Bu bilgiye aynı zamanda Satışlar ve Etkinleştirme Raporları sayfasından da erişilebilir.)

Daha Fazla Sorunuz Mu Var?

İstatistikler ve Başarımlar tartışma forumnda sorularınızı sorabilirsiniz.