Niezwiązany

Strona główna Dokumentacja i pomoc
Dokumentacja Steamworks
Statystyki i osiągnięcia

Wprowadzenie

Osiągnięcia i Statystyki Steam są łatwym sposobem, aby zapewnić użytkownikom stałe śledzenie ich osiągnięć i statystyk. Dane użytkownika są skojarzone z kontem Steam, a osiągnięcia i statystyki zostają sformatowane i wyświetlane w ich profilu społeczności Steam.

Zastosowanie

Oprócz zapewniania cennych nagród dla graczy, osiągnięcia są przydatne dla zachęcenia i nagradzanie pracy zespołowej i interakcji między graczami, dostarczając dodatkowego wymiaru do celów gry i satysfakcji użytkowników, wynagradzając ich czas spędzony w grze.

Statystyki śledzą dokładnie określone informacje, takie jak czas gry, liczbę bonusów itp. Można ich używać po prostu do śledzenia danych w grze. Na przykład użytkownik może otrzymać osiągnięcie na podstawie statystyk zebranych w trakcie gry przez kilka sesji na różnych komputerach.

Implementacja

Określ Statystyki i Osiągnięcia w twojej grze

Osiągnięcia są zdefiniowane dla konkretnej aplikacji i są instalowane w sekcji administratora aplikacji w witrynie partnera Steamworks.

Istnieją trzy rodzaje statystyk, które gra można przechowywać:
  • INT — 32-bitowa liczba całkowita ze znakiem (na przykład liczba rozegranych partii)
  • FLOAT — 32-bitowa liczba zmiennoprzecinkowa (na przykład liczba przejechanych kilometrów)
  • AVGRATE — średnia ruchoma. Zobacz: Statystyka AVGRATE

Strona Steamworks Partner zapewnia interfejs do definiowania i aktualizowania statystyk i osiągnięć twojej gry. Używając go, możesz:
  • zdefiniować początkowe Statystyki i Osiągnięcia
  • dodać dodatkowe statystyki i osiągnięcia
  • zaktualizować nazwy, opisy i ikony osiągnięć
  • zaktualizować parametry i ograniczenia (minimalne i maksymalne wartości itd.)
Statystyki mają następujące właściwości:
  • ID — automatycznie generowane ID dla każdej statystyki.
  • Type — typ statystyki - INT, FLOAT albo AVGRATE.
  • API Name — używane do uzyskania dostępu do statystyki używając API.
  • Set By — ustanawia, kto może modyfikować statystykę. Domyślnie — klient. Jeśli chcesz uzyskać więcej informacji, zobacz Statystyki serwerów gry.
  • Increment Only — jeśli ustawiona wartość statystyki może tylko rosnąć z biegiem czasu.
  • Mac Change — jeśli ustawiona nakłada ograniczenie na zmianę wartości wynikającą z pojedynczego wywołania SetStat.
  • Min Value — jeśli ustawione określa minimum dla wartości statystyki. Domyślnie min to minimum dla odpowiedniego typu liczby (INT_MIN lub -FLT_MAX).
  • Max Value — jeśli ustawiona oznacza maksymalną wartość numeryczną dla tej statystyki. Domyślnie max to maksimum dla odpowiedniego typu liczby (INT_MAX lub FLT_MAX).
  • Default Value — jeśli ustawiona domyślna wartość z jaką statystyka zostanie ustawiona dla nowego użytkownika. Jeśli nie zostanie ustawiona, domyślną wartością jest zero.
  • Aggregated — jeśli ustawione Steam zachowa globalne statystyki dla tej statystyki. Zobacz globalne statystyki, aby uzyskać więcej informacji.
  • Display Name — nazwa statystyki wyświetlana w ramach Społeczności Steam. Może być lokalizowana.
AVGRATE: statystyki mają następujące dodatkowe właściwości:
  • Okno — rozmiar „okna przesuwnego” służącego do uśredniania.
Statystyka AVGRATE jest automatycznie uśredniana przez Steam. Przeczytaj AVGRATE, aby uzyskać więcej informacji.

Osiągnięcia mają następujące właściwości:
  • ID — Automatycznie generowane ID dla każdego osiągnięcia.
  • API Name — używane do uzyskania dostępu do statystyki używając API.
  • Progress Stat — określa statystyki, które są używane jako pasek postępu dla tego osiągnięcia w Społeczności. Osiągnięcie zostanie automatycznie odblokowane, kiedy statystyka osiągnie wartość odblokowującą.
  • Display Name — nazwa osiągnięcia, która będzie pokazywana w Społeczności i w wyskakujących powiadomieniach. Może być lokalizowana.
  • Description — opis osiągnięcia wyświetlany w Społeczności. Może być lokalizowana.
  • Set By — ustawia, kto może odblokować osiągnięcie. Domyślnie to klient. Jeśli chcesz uzyskać więcej informacji, zobacz Statystyki serwerów gry.
  • Hidden — jeśli prawda, osiągnięcie „hidden” nie pokazuje się na stronie Społeczności użytkownika (w ogóle), aż do czasu, kiedy zostanie zdobyte.
  • Achieved Icon — ikona wyświetlana, kiedy osiągnięcie zostanie zdobyte.
  • Unachieved Icon — ikona wyświetlana, kiedy osiągnięcie nie zostało zdobyte.

Lista osiągnięć z Steamworks API Example Application (SpaceWar):
achievements_spacewar.png

Jak ich używać?

Dostęp do Statystyk i Osiągnięć z twojej gry:

Statystyka AVGRATE

Statystyki tego typu są unikalne i funkcjonalne, ale wymagają dokładnego wytłumaczenia.

Załóżmy, że chcesz śledzić średnią statystykę, na przykład „Punkty zdobyte na godzinę”. Jedną możliwością byłoby posiadanie dwóch statystyk, INT „WszystkiePunkty” oraz FLOAT „Czasspędzonywgrze”, a później podzielić punkty przez czas, aby uzyskać punkty zdobyte na godzinę.

Minusem tego podejścia będzie bardzo wolna zmiana tej średniej, kiedy użytkownik będzie posiadał wysoki czas w grze. Im więcej użytkownik będzie grał, tym wolniej ta średnia będzie się zmieniać. Jeśli gracz spędził w grze 100 godzin, obliczona średnia będzie około 50 godzin „do tyłu”. Jeśli umiejętności gracza podniosą się, nie zobaczy on oczekiwanej zmiany w Punktach na godzinę.

AVGRATE pozwala ustawić efekt „przesuwnego okna” dla średniej. Na przykład możesz korzystać tylko z kilku ostatnich godzin spędzonych w grze danego użytkownika, aby dokładniej odzwierciedlić jego obecne umiejętności.

Aby stworzyć statystykę AVGRATE, w którym tylko poprzednie 20 godzin rozgrywki ma wpływ na „punkty na godzinę” należy:
  • zwrócić uwagę, że ponieważ średnia będzie „na godzinę” to jednostką czasu dla wszystkich parametrów powiązanych z tą statystyką będzie „godzina”. Dotyczy to zarówno właściwości „okna” statystyki, jak i parametru „SessionLength” przekazanego w UpdateAvgRateStat poniżej.
  • utworzyć statystykę „AvgPointsPerHour” z oknem o wartości 20.0 (pamiętaj, że wartość jest podana w „godzinach”)
  • w odpowiednim momencie gry wywołać ISteamUserStats::UpdateAvgRateStat z następującymi parametrami:
    • pchName — „AvgPointsPerHour”
    • flCountThisSession — liczba punktów zdobytych przez gracza od ostatniego wywołania funkcji UpdateAvgRateStat.
    • dSessionLength — czas gry od ostatniego wywołania funkcji UpdateAvgRateStat. Jednostka powinna być taka sama jak jednostka we właściwościach Okna. W tym przypadku to „godziny”.
  • Na przykład jeśli gracz zdobył 77 punktów w ostatniej rundzie, która trwała 0.225 hours (13.5 minuty), będzie to SteamUserStats()->UpdateAvgRateStat("AvgPointsPerHour", 77, 0.225 )
W powyższym przykładzie Steam weźmie średnią wartość obecnej rundy 342.2 punktów na godzinę (77 podzielone przez 0.0225) i złączy z poprzednią wartością. Wynikiem będzie średnia z ostatnich 20 godzin w grze danego użytkownika. Jeśli byłby to pierwszy raz, kiedy ta statystyka zostałaby zaktualizowana dla danego użytkownika, wartość wynosiłaby 342.2.

W tym przykładzie „godziny” są jednostką czasu, ale możesz użyć innej jednostki czasu. Pamiętaj tylko, że musisz konsekwentnie używać wybranej jednostki jako swojej bazy dla „dSessionLength” oraz jako wartości Okna.

Statystyki dla innych graczy

Możesz użyć ISteamUserStats::RequestUserStats, aby otrzymać statystyki dla innego użytkownika. Następnie możesz użyć ISteamUserStats::GetUserStat,ISteamUserStats::GetUserAchievement i ISteamUserStats::GetUserAchievementAndUnlockTime, aby uzyskać dane dla tego użytkownika. Te dane nie są aktualizowane automatycznie, kiedy inny użytkownik przesyła nowe statystyki. Aby odświeżyć dane wywołaj ponownie ISteamUserStats::RequestUserStats.

Aby nie zużywać zbyt dużo pamięci, wykorzystuje się algorytm stronicowania (LRU), a statystyki innych użytkowników będą od czasu do czasu rozładowywane. Kiedy to się stanie, odpowiedź zwrotna ISteamUserStats::UserStatsUnloaded_t zostanie wysłana automatycznie. Gdy odpowiedź zwrotna zostanie wysłana, statystyki użytkownika nie będą dostępne aż do kolejnego wywołania ISteamUserStats::RequestUserStats.

Tryb offline

Steam trzyma lokalną pamięć podręczną statystyk i osiągnięć danych tak, żeby można było używać API normalnie w trybie offline. Reszta statystyk zostanie zapisana do następnego razu, kiedy użytkownik będzie online. W przypadku modyfikacji na jednym lub więcej komputerach Steam będzie automatycznie łączył osiągnięcia i wybierał zestaw statystyk, który ma większy postęp. Ponieważ Steam przechowuje lokalną kopię pamięci podręcznej statystyk, nie jest konieczne, aby gra również trzymała pamięć podręczną na dysku. W takich przypadkach może dojść do konfliktu, co wygląda jakby postęp został cofnięty, co jest frustrującym doświadczeniem dla użytkownika.

Statystyki serwerów gry

Równolegle do ISteamUserStats istnieje ISteamGameServerStats dla serwerów gry. Mogą one uzyskiwać statystyki dla użytkowników w ten sam sposób, co klienci (tak jak opisano wyżej). Ale tylko wtedy, gdy „Ustaw wg” jest ustawione jako GS (game server) albo Official GS. Różnica między serwerami gry a oficjalnym serwerem gry jest taka, że oficjalny serwer gry to tak, który ty hostujesz i kontrolujesz. Korzystanie z oficjalnych serwerów zapewnia lepszą ochronę przez oszustami, którzy mogą być w stanie modyfikować swoje własne serwery gier albo „naciągnąć” dane na serwerze. Aby zdefiniować oficjalne serwery gry, wpisz IP serwera tutaj.

Statystyki i osiągnięcia ustawiane na serwerach gry nie mogą być ustawiane przez klientów. Serwery gier mogą ustawić statystyki i osiągnięcia tylko dla użytkowników, którzy w danym czasie grają na serwerze. Jeśli użytkownik opuści serwer, istnieje krótki okres, w którym można ustawić końcowe statystyki, ale po tym wgranie nowych danych nie będzie możliwe. Zapewnia to spójność i pomaga uniknąć sytuacji, w której poprzez oszustwo można w każdej chwili zmienić statystyki dla graczy. Biorąc pod uwagę to ograniczenie, jest ważne aby nie czekać do końca rundy z aktualizacją statystyki. Definiuj je w ciągły sposób tak, abyś mógł je trzymać, kiedy użytkownik opuści grę.

Klienci otrzymają automatyczną aktualizację, kiedy serwer gry zmieni ich statystyki. Jednak podobnie jak statystyki klienta, statystyki załadowane przez serwer dla innych użytkowników, nie są odświeżane automatycznie i mogą nie być aktualne.

Resetowanie statystyk

Podczas rozwijania, często istnieje potrzeba wyczyszczenia statystyki i osiągnięć z konta/ wszystkich kont dla testów. Aby to zrobić, wywołaj ISteamUserStats::ResetAllStats z bAchievementsToo ustaw true, aby wyczyścić również osiągnięcia. Po wywołaniu musisz przejść przez wszystkie osiągnięcia i statystyki, aby zresetować swój status w pamięci gry. Nie ma możliwości aby wyczyścić statystyki i osiągnięcia dla wszystkich użytkowników. Jednym z powodów, dla których nie można tego zrobić, jest to, że nawet gdyby miało dojść do globalnego zresetowania, toczące się gry mogłyby tego nie zauważyć i zapisać na nowo istniejące wartości. Na szczęście istnieje prosty sposób na zbudowanie systemu globalnego czyszczenia do twojej gry. Aby to zrobić:
  • zdefiniuj statystykę o nazwie „Version”
  • umieść w grze hardcode numer wersji statystyki
  • kiedy zmiany zostaną załadowane, porównaj „Version” z wersją hardcode number
  • Jeśli nie pasują, wywołaj ISteamUserStats::ResetAllStats i ustaw "Version" do harcode number.
W ten sposób, jeśli będziesz chciał dokonać globalnego czyszczenia, po prostu zmień numer wersji hardcode. Kiedy użytkownicy otrzymają nowy build nastąpi ogólny reset.

Integralność statystyk

Zaleca się wziąć pod uwagę fakt, jak powiązane statystyki mogą stać się niespójne. Na przykład możesz mieć trzy statystyki „GamesWon”,„GamesLost” i „GamesPlayed”. Statystyki mogą się rozsynchronizować. W takich przypadkach może to prowadzić to wygranych i przegranych gier nie włączonych do średniej. Jeśli problem zostanie rozwiązany poprzez usunięcie „GamesLost” i zastąpienie tego wskaźnika przez różnicę między liczbą rozegranych i wygranych gier, może pojawić się sytuacja gdzie liczba gier przegranych będzie ujemna. Dlatego lepiej odrzucić „GamesPlayed” i obliczyć ją jako sumę wygranych i przegranych gier.

Statystyki globalne

Statystyki mogą zostać zaznaczone jako zagregowane na stronie administratora, aby Steam zachował ogólne wartości statystyk dla wszystkich użytkowników. Może to służyć w celu uzyskania danych o ilości wydanych pieniędzy, całkowitej liczbie zabójstw, ulubionej broni, ulubionych mapach oraz informacji o tym, która drużyna radzi sobie lepiej. Z drugiej strony, nie powinno się ich używać do statystyk takich jak „MostKills”, ponieważ suma tych wyników dla wielu użytkowników nie miałaby sensu. Jako, że statystyki są w rękach użytkowników, będą oni mogli manipulować danymi. Dlatego ważne jest, przy użyciu zagregowanej statystyki ustawić dobre granice dla wartości minimalnych, maksymalnych, przyrostu (jeśli właściwe) i maksymalnej zmiany. Zmiana maksymalna ma specjalne znaczenie dla zagregowanych statystyk. Po przekazaniu nowej wartości, wartość globalna zmieni się nie więcej niż wartość maksymalnej zmiany. Ogranicza to szybkość, z jaką oszust może mieć wpływ na statystyki globalne.

Aby uzyskać dostęp do globalnej sumy, wywołajISteamUserStats::RequestGlobalStats , a następnie ISteamUserStats::GetGlobalStat dla każdego globalnej statystyki. Możesz również wywołać ISteamUserStats::RequestGlobalStats , dla określonej liczby dni. Historyczne dane pokazują znaczenie danej statystyki na ten lub inny dzień. Możesz uzyskać dostęp do tej historii poprzez ISteamUserStats::GetGlobalStatHistory.

Możesz również zażądać danych dotyczących globalnych statystyk osiągnięć z klienta. Aby to zrobić, musisz najpierw wywołać ISteamUserStats::RequestGlobalAchievementPercentages. Następnie dojdzie to iteracji osiągnięć w porządku od najbardziej dokończonego do najmniej poprzez wywołanie ISteamUserStats::GetMostAchievedAchievementInfo i ISteamUserStats::GetNextMostAchievedAchievementInfo. Możesz również otrzymać dane dla konkretnego osiągnięcia poprzez wywołanie ISteamUserStats::GetAchievementAchievedPercent.

Społeczność Steam

Po wydaniu gry informacja o postępach w indywidualnych i globalnych osiągnięciach zostanie wyświetlona w Społeczności Steam. Każdy gracz będzie miał link z profilu społeczności, który będzie prowadził do strony pokazującej co już osiągnęli, a co pozostało do odblokowania.
UWAGA: Twoje osiągnięcia nie będą pokazane do czasu, kiedy aplikacja nie jest widoczna dla społeczności.

Każde osiągnięcie ma odpowiednią ikonę, nazwę i opis, tak jak ustawiono w panelu kontroli Steamworks. Jeśli nazwa i opis osiągnięcia zostały zlokalizowane na język wybrany przez użytkownika, zostaną wyświetlone w tym języku.

Z tej strony oraz ze strony głównej twojej gry na Steam, będą linki do globalnej statystyki osiągnięć dla gry. Będzie ona wyświetlała procent użytkowników Steam danej gry, którzy posiadają to osiągnięcie, w porządku od najbardziej do najmniej popularnego. To interesujące dla graczy oraz również świetne dla deweloperów, aby dowiedzieć się czy twoje specjalne wyzwania są wystarczająco trudne? A może za trudne? (te informacje są również dostępne na stronie sprzedaży i aktywacji).

Więcej pytań?

Jeśli masz jakieś pytania, możesz je zadać poprzez forum dyskusyjne Steam dotyczące statystyk i osiągnięć