Dokumentacja Steamworks
Krok po kroku: osiągnięcia
W skrócie
Użyj osiągnięć, by nagrodzić graczy, gdy osiągną pewien kamień milowy lub wejdą w jakąś konkretną interakcję z twoją grą.
Poziom integracji
10 minut i mniej niż 10 linii kodu. Integracja z SDK Steamworks jest konieczna.

Wprowadzenie

Osiągnięcia można wykorzystać, by zachęcić oraz nagrodzić gracza za wchodzenie w interakcję z twoją grą oraz za ukończone kamienie milowe. Często używa się ich do zliczania zabójstw, przejechanych kilometrów, otwartych skrzyń lub innych częstych działań w twojej grze. Mogą być one również wykorzystane, by pomóc twoim graczom odkryć różne sposoby, na jakie można grać w twoją grę. Osiągnięcia pojawiają się w rogu okna gracza po zdobyciu oraz zostaną oznaczone na stronie osiągnięć tej osoby.

W miarę rozwoju gry możesz porządkować jej osiągnięcia w zestawach osiągnięć. Zestawy umożliwiają grupowanie osiągnięć w sposób, który ma sens dla twojej gry, dodawanie osiągnięć do DLC bez wpływu na ukończenie gry bazowej oraz wycofywanie osiągnięć z usuniętych treści bez odbierania ich graczom, którzy je zdobyli. Zobacz Zestawy osiągnięć poniżej, by dowiedzieć się więcej.

Uwaga: zestawy osiągnięć są obecnie w fazie testów beta. Podczas tej fazy będziemy nadal wprowadzać usprawnienia, a niniejsza dokumentacja będzie aktualizowana w miarę wprowadzania zmian.

Wprowadzenie techniczne

Poniżej znajduje się szybki poradnik krok po kroku dotyczący integracji najprostszych osiągnięć Steam z twoją aplikacją w mniej niż 10 minut i mniej niż 10 linii kodu w twojej bazie kodu. Sekcja SDK Steamworks zawiera świetny przykład aplikacji o nazwie Spacewar. Pokazuje on całą gamę funkcji Steam w akcji, dlatego zalecamy zapoznanie się z nim. Ten artykuł prezentuje tylko najbardziej podstawowe informacje w oparciu o Spacewar oraz API osiągnięć i statystyk, by kwestia statystyk Steam była jak najbardziej przejrzysta. Zauważ, że statystyki i osiągnięcia pokrywają się w wielu miejscach. Jeśli więc zintegrujesz obie funkcje, wiele wywołań będzie mogło zostać skonsolidowanych.

Zestawy są konfigurowane w całości w Steamworks. Nie wymagają one żadnego dodatkowego kodu, a twoja gra odblokowuje osiągnięcia w zestawie z użyciem tych samych nazw i wywołań z API, które opisano w tym poradniku.

Krok 1 – definiowanie osiągnięć twojej gry

Osiągnięcia są definiowane dla konkretnej aplikacji oraz konfigurowane na stronie osiągnięć w back-endzie administratora aplikacji Steamworks. Poniżej znajduje się lista osiągnięć z przykładowej aplikacji Steamworks o nazwie Spacewar:

spacewar_achievement_examplescreenshot.jpg

Dostęp do edytora osiągnięć

Osiągnięcia są tworzone i zarządzane w edytorze osiągnięć:
  1. Z poziomu strony docelowej swojej aplikacji w Steamworks wybierz opcję Edytuj ustawienia Steamworks.
  2. Wybierz kolejno opcje Statystyki i osiągnięcia > Osiągnięcia.
  3. Kliknij baner u góry strony, aby otworzyć nowy edytor osiągnięć.

Aby korzystać z edytora osiągnięć, musisz mieć uprawnienia do edycji informacji o aplikacji.

Edytor ma dwie zakładki:
  • Zarządzaj osiągnięciami – twórz, edytuj i organizuj swoje zestawy i osiągnięcia.
  • Import/eksport zbiorczy – eksportuj i importuj swoje osiągnięcia w postaci plików CSV oraz przesyłaj ikony zbiorczo. Zobacz sekcję Import/eksport zbiorczy poniżej.

Na górze edytora znajdziesz informację o liczbie osiągnięć i zestawów wykorzystywanych przez grę poza limitem, a także linki do podglądu osiągnięć na twojej własnej stronie osiągnięć.

Tworzenie i edytowanie osiągnięć

Wszystkie twoje osiągnięcia należą do zestawu osiągnięć dla gry bazowej chyba że przypiszesz je do innego zestawu. Aby stworzyć osiągnięcie, kliknij Utwórz osiągnięcie w zestawie, do którego powinno należeć. Aby edytować osiągnięcie, wybierz je w tabeli osiągnięć.

PoleOpis
Nazwa z APIUnikalna nazwa, którą gra przekazuje do API Steamworks, np. ACH_WIN_ONE_GAME. Wymagana.
Wyświetlana nazwaNazwa osiągnięcia widoczna dla graczy. Można ją zlokalizować.
OpisOpis osiągnięcia widoczny dla graczy. Można go zlokalizować.
IkonyIkona zdobytego oraz niezdobytego osiągnięcia. Zobacz Ikony poniżej.
Ustawiane przezKto może odblokować osiągnięcie: klient, serwer gry czy oficjalny serwer gry.
Statystyka postępuOpcjonalna. Statystyka wyświetlająca postęp w kierunku tego osiągnięcia, wraz z zakresem statystyk, który odpowiada postępowi od 0% do 100%.
WidocznośćWidoczne lub Spoiler, aby ukryć szczegóły osiągnięcia do czasu jego odblokowania.
Opcjonalny statusDostępne lub Zarchiwizowane, jeśli osiągnięcia nie można już zdobyć.
W zestawieZestaw, do którego należy to osiągnięcie.

Tabela osiągnięć zawiera także identyfikator każdego osiągnięcia, jego zestaw, sposób ustawienia oraz globalny wskaźnik odblokowania. Użyj pola Filtruj na pasku narzędzi, aby wyszukać osiągnięcia według nazwy, opisu lub nazwy z API.

Usunięcie osiągnięcia spowoduje jego usunięcie dla wszystkich, w tym dla graczy, którzy już je odblokowali. Jeśli osiągnięcie zostało już zdobyte przez graczy, edytor zaleci zamiast tego jego zarchiwizowanie. Zobacz sekcję Archiwizowanie poniżej.

Ikony

Aby uzyskać najlepsze rezultaty, ikony osiągnięć powinny być grafikami PNG o rozdzielczości 256 × 256 pikseli. Mogą mieć rozmiar nawet 64 × 64, ale zalecamy używanie większego rozmiaru. Ikony muszą być kwadratowe, a większe ikony są skalowane do rozmiaru 256 × 256. Grafiki JPG są również akceptowane.

Zalecamy, aby ikony dla zdobytych osiągnięć były kolorowe, a te dla niezdobytych w odcieniach szarości. Nie musisz samodzielnie tworzyć ikony dla niezdobytego osiągnięcia kliknij opcję Generuj w edytorze osiągnięć lub użyj opcji Automatycznie generuj ikony niezdobytych osiągnięć podczas przesyłania zbiorczego, aby utworzyć ikonę dla niezdobytego osiągnięcia w skali szarości z ikony dla zdobytego. W każdej chwili możesz zastąpić wygenerowaną ikonę swoją własną.

Lokalizacja

Użyj selektora Język na pasku narzędzi, aby wyświetlić i edytować swoje osiągnięcia w każdym z języków twojej gry. Gdy w niektórych językach brakuje zlokalizowanego tekstu, na pasku narzędzi wyświetlana jest ikona ostrzeżenia, a każde osiągnięcie lub zestaw, w którym brakuje tekstu, zostaje oznaczony w edytorze.

Aby wybrać języki obsługiwane przez twoje osiągnięcia, kliknij przycisk edycji obok opcji Język na pasku narzędzi lub kliknij opcję Skonfiguruj języki w zakładce Import/eksport zbiorczy. Języki te są używane w edytorze i w plikach CSV lokalizacji. Gdy przesyłasz zapytanie o osiągnięcia poprzez API, Steam zwraca tekst dla żądanego języka.

Limity

ElementLimit
Osiągnięcia na aplikację5000 (100 dla aplikacji, które nie zostały jeszcze sprawdzone).
Zestawy na aplikację40 (wliczając zestaw dla gry bazowej).

Zarchiwizowane osiągnięcia liczą się do limitu osiągnięć.

Krok 2 – enkapsulacja osiągnięć

Poniższy kod działa we wszystkich grach i możesz go zaimplementować wedle uznania. Ta klasa jest w pełni funkcjonalna sama w sobie, ale w razie potrzeby można ją łatwo rozszerzyć. Cały kod pochodzi bezpośrednio ze Spacewar z plików StatsAndAchievements.cpp/h.

Plik nagłówkowy

Zaczynamy od zdefiniowania struktury, która będzie przechowywać nasze dane na temat osiągnięć otrzymane od Steam. Następnie zapewniamy makra do tworzenia obiektów tego typu. Dane te odnoszą się bezpośrednio do tego, co znajduje się na stronie konfiguracji osiągnięć.
#define _ACH_ID( id, name ) { id, #id, name, "", 0, 0 } struct Achievement_t { int m_eAchievementID; const char *m_pchAchievementID; char m_rgchName[128]; char m_rgchDescription[256]; bool m_bAchieved; int m_iIconImage; };

Następnie definiujemy klasę pomocniczą, która będzie opakowywać wszystkie wywołania API statystyk Steam oraz tworzyć wszystkie wywołania zwrotne Steam.
class CSteamAchievements { private: int64 m_iAppID; // Nasze obecne ID aplikacji. Achievement_t *m_pAchievements; // Dane osiągnięć. int m_iNumAchievements; // Liczba osiągnięć. bool m_bInitialized; // Czy jesteśmy gotowi na użycie API? public: CSteamAchievements(Achievement_t *Achievements, int NumAchievements); ~CSteamAchievements(); bool Initialize(); bool SetAchievement(const char* ID); STEAM_CALLBACK( CSteamAchievements, OnUserStatsStored, UserStatsStored_t, m_CallbackUserStatsStored ); STEAM_CALLBACK( CSteamAchievements, OnAchievementStored, UserAchievementStored_t, m_CallbackAchievementStored ); };

Plik kodu

Konstruktor

Parametry – argumentami konstruktora są wskaźnik do tablicy osiągnięć oraz długość tablicy. Format tej tablicy zostanie pokazany w głównym kodzie gry poniżej.
Zwraca – nie dotyczy.
Zastosowanie – konstruktor inicjalizuje kilka pól i równocześnie pobiera AppID bieżącej aplikacji. Oprócz tego łączy on metody wywołań zwrotnych w celu obsługi wywołań asynchronicznych przekazywanych do Steam. Na koniec wykonuje wstępne wywołanie funkcji Initialize(), by sprawdzić, czy API jest gotowe.
CSteamAchievements::CSteamAchievements(Achievement_t *Achievements, int NumAchievements): m_iAppID( 0 ), m_bInitialized( false ), m_CallbackUserStatsStored( this, &CSteamAchievements::OnUserStatsStored ), m_CallbackAchievementStored( this, &CSteamAchievements::OnAchievementStored ) { m_iAppID = SteamUtils()->GetAppID(); m_pAchievements = Achievements; m_iNumAchievements = NumAchievements; m_bInitialized = Initialize(); }

Initialize()

Parametry – brak.
Zwraca – wartość bool wskazującą, czy wywołanie powiodło się. Jeśli wywołanie nie powiodło się, najprawdopodobniej Steam nie został zainicjalizowany. Musisz upewnić się, że klient Steam jest otwarty w momencie wykonywania tego wywołania i że wcześniej wywołano funkcję SteamAPI_Init.
Zastosowanie – zapewnia, że Steam jest wczytany oraz że kontekst użytkownika jest zalogowany.
bool CSteamAchievements::Initialize() { // Czy Steam został wczytany? Jeśli nie, to nie możemy uzyskać statystyk. if ( NULL == SteamUserStats() || NULL == SteamUser() ) { return false; } // Czy użytkownik jest zalogowany? Jeśli nie, to nie możemy uzyskać dostępu do statystyk. if ( !SteamUser()->BLoggedOn() ) { return false; } return true; }

SetAchievement()

Parametry – identyfikator typu string osiągnięcia, którego wartość chcesz ustawić (np. „ACH_WIN_ONE_GAME”).
Zwraca – wartość bool wskazującą, czy wywołanie powiodło się. Jeśli wywołanie nie powiodło się, to Steam nie został zainicjalizowany.
Zastosowanie – ta metoda ustawia status danego osiągnięcia na zdobyte i przesyła wynik do Steam. Status osiągnięcia można ustawiać wiele razy, więc nie musisz martwić się innymi osiągnięciami, które nie zostały jeszcze ustawione jako zdobyte. Jest to wywołanie asynchroniczne, które aktywuje dwa wywołania zwrotne: OnUserStatsStored() i OnAchievementStored().
bool CSteamAchievements::SetAchievement(const char* ID) { // Czy otrzymaliśmy już wywołanie zwrotne od Steam? if (m_bInitialized) { SteamUserStats()->SetAchievement(ID); return SteamUserStats()->StoreStats(); } // Jeśli nie, to nie możemy jeszcze ustawić osiągnięć. return false; }

OnUserStatsStored()

Parametry – nie dotyczy.
Zwraca – nic.
Zastosowanie – ta metoda to wywołanie zwrotne wykonywane za każdym razem, gdy próbujesz zapisać statystyki na Steam.
void CSteamAchievements::OnUserStatsStored( UserStatsStored_t *pCallback ) { // Możliwe, że otrzymamy wywołania zwrotne o nadejściu statystyk innych gier, zignoruj je. if ( m_iAppID == pCallback->m_nGameID ) { if ( k_EResultOK == pCallback->m_eResult ) { OutputDebugString( "Stored stats for Steam\n" ); } else { char buffer[128]; _snprintf( buffer, 128, "StatsStored - failed, %d\n", pCallback->m_eResult ); OutputDebugString( buffer ); } } }

OnAchievementStored()

Parametry – nie dotyczy.
Zwraca – nic.
Zastosowanie – ta metoda to wywołanie zwrotne wykonywane za każdym razem, gdy osiągnięcia zostają pomyślnie zapisane na Steam.
void CSteamAchievements::OnAchievementStored( UserAchievementStored_t *pCallback ) { // Możliwe, że otrzymamy wywołania zwrotne o nadejściu statystyk innych gier, zignoruj je. if ( m_iAppID == pCallback->m_nGameID ) { OutputDebugString( "Stored Achievement for Steam\n" ); } }

Krok 3 – integracja w twojej grze

Poniżej znajduje się pełna lista fragmentów kodu, które należy zintegrować z twoją grą w odpowiednich miejscach.

Definicje i zmienne globalne

Poniżej znajduje się lista dyrektyw #include wymaganych dla obiektu Achievements, typ wyliczeniowy naszych osiągnięć dla danej gry oraz globalny wskaźnik do naszego obiektu pomocniczego. Pamiętaj, że osiągnięcia są zbieżne z tymi wymienionymi na stronie administratora Steamworks.
... #include "steam_api.h" // Definiujemy nasze osiągnięcia. enum EAchievements { ACH_WIN_ONE_GAME = 0, ACH_WIN_100_GAMES = 1, ACH_TRAVEL_FAR_ACCUM = 2, ACH_TRAVEL_FAR_SINGLE = 3, }; // Tablica osiągnięć, która będzie przechowywać dane o osiągnięciach oraz ich stanie. Achievement_t g_Achievements[] = { _ACH_ID( ACH_WIN_ONE_GAME, "Winner" ), _ACH_ID( ACH_WIN_100_GAMES, "Champion" ), _ACH_ID( ACH_TRAVEL_FAR_ACCUM, "Interstellar" ), _ACH_ID( ACH_TRAVEL_FAR_SINGLE, "Orbiter" ), }; // Globalny dostęp do obiektu Achievements. CSteamAchievements* g_SteamAchievements = NULL; ...

Inicjalizacja

Wywołanie SteamAPI_Init całościowo inicjalizuje Steam i musi zostać wykonane jako pierwsze. Jeśli będzie ono pomyślne, to następnie tworzymy obiekt pomocniczy, przekazując do niego tablicę osiągnięć wraz z jej rozmiarem.
... // Zainicjalizuj Steam. bool bRet = SteamAPI_Init(); // Stwórz obiekt SteamAchievements, jeśli Steam został pomyślnie zainicjalizowany. if (bRet) { g_SteamAchievements = new CSteamAchievements(g_Achievements, 4); } ...

Obsługa wywołań zwrotnych

Aby upewnić się, że obsłużymy wszystkie wywołania zwrotne Steam, musimy regularnie sprawdzać, czy nie pojawiły się nowe komunikaty. Aby to zrobić, należy dodać to wywołanie do pętli gry.
... SteamAPI_RunCallbacks(); ...

Aktywacja osiągnięć

Aktywacja osiągnięcia jest prosta. Potrzebne jest tylko jedno wywołanie, które przekazuje identyfikator osiągnięcia.
... if (g_SteamAchievements) g_SteamAchievements->SetAchievement("ACH_WIN_100_GAMES"); ...

Uwaga: Steam nie odblokuje osiągnięcia w zestawie DLC dla gracza, który nie może grać w dane DLC, ani osiągnięcia w zarchiwizowanym zestawie. Upewnij się, że gra przyznaje osiągnięcia za DLC tylko graczom, którzy je posiadają i że przestanie przyznawać osiągnięcia po ich zarchiwizowaniu. Sprawdź Zestawy osiągnięć poniżej.

Zamykanie

Wywołanie SteamAPI_Shutdown najprawdopodobniej znajduje się już w twoim kodzie. Zamyka ono Steam i musi zostać ono wywołane przed zamknięciem twojej aplikacji. Na końcu usuwamy poprzednio utworzony obiekt pomocniczy.
... // Zamknij Steam. SteamAPI_Shutdown(); // Usuń obiekt SteamAchievements. if (g_SteamAchievements) delete g_SteamAchievements; ...

Krok 4 – testowanie i rozwiązywanie problemów


Aby ustawić lub wyczyścić statystyki lub osiągnięcie bez dodawania kodu do twojej gry, możesz użyć konsoli klienta Steam. Uruchom steam.exe z parametrem -console, a następnie:
  • achievement_clear <ID aplikacji> <nazwa osiągnięcia>
  • reset_all_stats <ID aplikacji>

Podgląd i publikacja

Zmiany wprowadzone w edytorze osiągnięć zostaną zapisane w wersji roboczej konfiguracji aplikacji. Aby je aktywować, opublikuj swoje zmiany w zakładce Publikacja w menu Edytuj ustawienia Steamworks, tak jak w przypadku każdego innego ustawienia Steamworks.

Przed wydaniem możesz zobaczyć podgląd swoich osiągnięć na swojej własnej stronie osiągnięć Steam dostępnej w górnej części edytora. Użyj zestawów wyłącznie dla producentów, aby przetestować nowe osiągnięcia bez pokazywania ich graczom.

Aby w pełni włączyć osiągnięcia i ukończyć listę kontrolną wydania, musisz także zaznaczyć opcję Osiągnięcia Steam w sekcji Obsługiwane funkcje na stronie podstawowych informacji dla strony twojej gry w sklepie. Aby zaliczyć listę kontrolną wydania, każde osiągnięcie musi mieć nazwę w każdym ze skonfigurowanych języków oraz ikonę.

Zestawy osiągnięć

Zestawy osiągnięć umożliwiają porządkowanie osiągnięć gry w nazwane grupy, śledzenie ukończenia poszczególnych zestawów przez graczy oraz dodawanie i wycofywanie osiągnięć z czasem bez odbierania graczowi zdobycia 100% postępu. Dzięki zestawom osiągnięć możesz:
  • Grupować osiągnięcia w sposób mający sens dla gry, np. według trybu, postaci, rozdziału lub wydarzenia.
  • Dodawać osiągnięcia dla DLC, które liczą się do ukończenia tylko dla graczy posiadających to DLC.
  • Archiwizować osiągnięcia i zestawy dla treści, które zostały wycofane bez usuwania ich graczom, którzy je zdobyli.
  • Tworzyć i testować osiągnięcia w zestawach dostępnych wyłącznie dla producentów, które są ukryte przed graczami.
  • Zarządzać zbiorczo definicjami osiągnięć, przydzielaniem zestawów, ikonami i lokalizacją przy użyciu plików CSV i obrazów.

Zestaw dla gry bazowej

Każda gra ma zestaw osiągnięć dla gry bazowej. Osiągnięcia, które nie są przydzielone do innego zestawu, należą do zestawu dla gry bazowej, więc jeśli nie utworzysz żadnych dodatkowych zestawów, wszystkie twoje osiągnięcia znajdą się właśnie w tym zestawie. W przypadku większości gier zestaw ten będzie zawierał większość osiągnięć.

W przypadku zestawu dla gry bazowej nie można zmienić jego nazwy, usunąć go, ani zmienić kolejności. Zawsze jest on wyświetlany jako pierwszy, chyba że jest pusty. W takim wypadku nie będzie wyświetlany (ale będzie nadal liczony do limitu).

Zestawy niestandardowe

Możesz tworzyć dodatkowe zestawy, aby porządkować swoje osiągnięcia. Każdy zestaw ma nazwę, która jest wyświetlana graczom oraz opcjonalne ograniczenie:

OgraniczenieKto może zdobywać osiągnięcia z zestawu
Wszyscy gracze gryKażdy, kto może grać w tę grę.
Posiadacze (DLC)Tylko gracze mogący grać w wybrane DLC.

Gracze widzą postęp dla każdego zestawu, a jego ukończenie jest śledzone osobno od postępów ukończenia reszty gry.

Zestawy dla DLC

Zestaw ograniczony do posiadaczy DLC to zestaw dla DLC. Garść informacji o nich:
  • Mogą je przeglądać wszyscy gracze na stronie osiągnięć gry, ale zdobyć je mogą tylko gracze, którzy mogą grać w to DLC.
  • Nie liczą się do ukończenia bazowej wersji gry ani do żadnego innego zestawu.
  • Pozostają ukryte przed graczami do momentu wydania DLC. Umożliwia ci to konfigurowanie i testowanie osiągnięć dla nadchodzących DLC przed ich premierą.
  • Użyj grafiki ze strony w sklepie dla DLC oraz linku do strony w sklepie na stronie osiągnięć. Jeśli DLC nie ma opublikowanej strony w sklepie, zamiast niej użyte zostaną grafiki i link do strony w sklepie gry bazowej, a edytor ostrzeże cię o tym fakcie.
  • Są wyświetlane w panelu osiągnięć na stronie DLC w sklepie.

Nazwa zestawu będzie wyświetlana z prefiksem „DLC”, więc nie musisz dodawać tego skrótowca do nazwy samodzielnie.

Zestawy tylko dla producentów

Zestaw oznaczony jako Tylko dla producentów jest widoczny wyłącznie dla twórców aplikacji, niezależnie od tego, czy została ona wydana, czy nie. Tylko producenci mogą odblokować osiągnięcia w zestawie przeznaczonym tylko dla nich. Zestawy tylko dla producentów są przydatne do tworzenia i testowania nowych osiągnięć, zanim będą gotowe do wydania.

Archiwizowanie

Czasami tryb gry zostaje zastąpiony, sezonowe wydarzenie dobiega końca lub osiągnięcia nie można już zdobyć. Zamiast usuwać osiągnięcia zdobyte przez graczy, możesz je zarchiwizować.
  • Zarchiwizowane osiągnięcia pozostają widoczne dla graczy, którzy je odblokowali i nadal mogą być wyróżniane na ich profilach. Gracze, którzy nie odblokowali zarchiwizowanego osiągnięcia, nie zobaczą go, a jego brak nie będzie wliczany do ukończenia zestawu, do którego należy.
  • Zarchiwizowane zestawy są widoczne tylko dla graczy, którzy wcześniej odblokowali w nich osiągnięcie. Nie można odblokować żadnego osiągnięcia ze zarchiwizowanego zestawu. Gracze, którzy odblokowali osiągnięcia ze zarchiwizowanego zestawu, nadal mogą zobaczyć wszystkie osiągnięcia wchodzące w jego skład.

Archiwizacja nie zmienia twojej gry. Archiwizując osiągnięcie, upewnij się, że twoja gra już go nie przyznaje.

Osiągnięcia ze spoilerami

Osiągnięcia wcześniej oznaczone jako Ukryte są teraz nazywane osiągnięciami Ze spoilerami. Aby nie zepsuć rozgrywki, nazwa i opis osiągnięcia zawierającego spoiler nie są wyświetlane graczom, dopóki go nie odblokują lub nie zdecydują się go ujawnić. Osiągnięcia ze spoilerami i zarchiwizowane nie są wyświetlane w panelu osiągnięć na stronie w sklepie.

Ukończenie

Postęp ukończenia jest śledzony dla każdego zestawu:
  • Gracz kończy zestaw poprzez odblokowanie każdego osiągnięcia wchodzącego w jego skład, które nadal jest dostępne. Zarchiwizowane osiągnięcia, których gracz nie odblokował, nie są wymagane.
  • Gdy gracz ukończy zestaw, pozostaje on ukończony, nawet jeśli później dodasz osiągnięcia do tego zestawu.
  • Zestawy dla DLC zaliczają się na poczet ukończenia przez gracza tylko wtedy, jeśli posiada on dane DLC.

Gracze mogą pochwalić się na swoim profilu Steam liczbą ukończonych gier i zestawów. Gra kwalifikuje się do prezentacji w gablocie perfekcjonisty na profilu gracza, gdy ukończy on dowolny z zestawów gry.

Tworzenie zestawu

  1. W zakładce Zarządzaj osiągnięciami kliknij opcję Utwórz nowy zestaw.
  2. Uzupełnij pole Nazwa zestawu. Nazwa jest wyświetlana graczom.
  3. W sekcji Ograniczenia wybierz opcję Wszyscy gracze gry lub wybierz DLC, aby ograniczyć zestaw do posiadaczy tego DLC. Lista DLC zawiera DLC wymienione dla twojej gry wraz z ich ID aplikacji.
  4. Opcjonalnie oznacz zestaw jako Tylko dla producentów.
  5. Zapisz zestaw.

Zestaw bez żadnych osiągnięć nie będzie dla nikogo widoczny.

Edycja zestawu

Otwórz menu zestawu i wybierz opcję Edytuj zestaw, aby zmienić jego nazwę, ograniczenia, status widoczności tylko dla producentów lub oznaczyć go jako Zarchiwizowany.

Każdy zestaw ma w edytorze wartość dla pola Widoczność:

WidocznośćZnaczenie
WidocznyGracze mogą zobaczyć ten zestaw.
Ukryty przez ograniczeniaGracze nie widzą jeszcze tego zestawu, na przykład dlatego, że ma status tylko dla producentów lub jego DLC nie zostało jeszcze wydane.
Będzie widoczny po opublikowaniuGracze zobaczą ten zestaw po opublikowaniu wprowadzonych zmian.

Zmiana kolejności zestawów

Kliknij opcję Zmień kolejność zestawów na pasku narzędzi, a następnie przeciągnij i upuść zestawy, aby wybrać kolejność, w jakiej będą widoczne dla graczy. Zestawu dla gry bazowej nie da się przenieść.

Usunięcie zestawu

Otwórz menu zestawu i wybierz opcję Usuń zestaw. Musisz przenieść lub usunąć wszystkie osiągnięcia w zestawie, zanim będziesz mógł go usunąć. Jeśli chcesz wycofać zestaw bez usuwania osiągnięć graczom, którzy je zdobyli, to go zarchiwizuj zamiast usuwać.

Przenoszenie osiągnięć między zestawami

Aby przenieść pojedyncze osiągnięcie, zmień dla niego zawartość w polu W zestawie. Aby przenieść wiele osiągnięć naraz, użyj opcji Przeniesienie zbiorcze:
  1. Kliknij opcję Przeniesienie zbiorcze w nagłówku tabeli osiągnięć.
  2. Zaznacz osiągnięcia, które chcesz przenieść. Liczba wybranych osiągnięć jest wyświetlana na dole strony.
  3. Wybierz zestaw docelowy lub wybierz opcję Utwórz nowy zestaw…, aby go utworzyć.
  4. Kliknij opcję Przenieś.
Na przykład możesz włączyć tryb przeniesienia zbiorczego, użyć pola wyszukiwania, aby odfiltrować osiągnięcia według nazwy z API, a następnie kliknąć pole wyboru w nagłówkach kolumn, aby zaznaczyć wszystkie widoczne osiągnięcia w grupie do przeniesienia. Ten sposób pracy jest stosunkowo prosty i może zaoszczędzić sporo czasu.

Edytor ostrzeże cię przed przeniesieniem, którego skutki mogą wpłynąć na graczy:
  • Przeniesienie osiągnięć z zestawu widocznego do zestawu ukrytego lub niewydanego spowoduje ukrycie ich przed graczami, którzy już je odblokowali.
  • Przeniesienie osiągnięć do zestawu, w którym gracze mają już postępy, może zepsuć postępy do ukończenia dla tych graczy.

Uwaga: dodanie osiągnięcia do zestawu, który został już wydany, nie zepsuje postępów jego ukończenia dla graczy, ale to, jak będzie ono wyświetlane, nie będzie oczekiwane. Zamiast tego rozważ dodanie nowego zestawu.

Import/eksport zbiorczy

Zakładka Import/Eksport zbiorczy umożliwia zarządzanie osiągnięciami jako pliki: eksportuj pliki CSV, edytuj je w arkuszu kalkulacyjnym i przesyłaj z powrotem wraz z ikonami.

Przebieg pracy

  1. Kliknij Eksportuj definicje (CSV), Eksportuj lokalizację (CSV)i/lub Eksportuj lokalizację zestawu (CSV), aby pobrać bieżące dane.
  2. Edytuj pliki. Wiersze nagłówka zawierają uwagi w nawiasach opisujące każdą kolumnę, na przykład Spoiler (prawda lub fałsz). Te uwagi są ignorowane podczas przesyłania pliku.
  3. Przeciągnij pliki .csv i .png do pola przesyłania lub kliknij Wybierz pliki… Możesz przesłać wiele plików jednocześnie.
  4. Sprawdź listę przesłanych plików pod kątem błędów. Usunięcie pliku cofa wszystkie zmiany, które wprowadził. Aby zastąpić plik, popraw go i prześlij ponownie.
  5. Przejrzyj oczekujące zmiany. Nic nie zostanie zapisane, dopóki nie klikniesz Zapisz zaimportowane dane.

Jeśli w twojej grze nie ma jeszcze żadnych osiągnięć, definicje i eksporty lokalizacji będą szablonami zawierającymi kilka przykładowych wierszy zaczynających się od EXAMPLE_. Możesz je nadpisać, usunąć lub przesłać szablon w jego obecnej postaci, aby zobaczyć, jak działa importowanie.

Definicje osiągnięć w formacie CSV

Eksportowane jako <ID aplikacji>-achievements-definitions.csv. Każdy wiersz definiuje jedno osiągnięcie.

KolumnaOpis
api_nameWymagane, unikalne. Nazwa, którą twoja gra przekazuje do API.
setidOpcjonalne. ID istniejącego zestawu. Pozostaw puste dla zestawu dla gry bazowej.
permissionJedna z wartości Client, GameServer lub OfficialGameServer.
spoilertrue lub false.
archivedtrue lub false.
progress_stat_nameOpcjonalne. Nazwa istniejącej statystyki, do której ma zostać dodany pasek postępu. Pozostaw puste, jeśli paska postępu ma nie być.
progress_stat_minLiczba, nie niższa niż minimum danej statystyki. Musi być liczbą całkowitą, jeśli statystyka zlicza według liczb całkowitych.
progress_stat_maxLiczba większa od tej w progress_stat_min i nie większa od maksymalnej wartości danej statystyki. Musi być liczbą całkowitą, jeśli statystyka zlicza według liczb całkowitych.

Po przesłaniu definicji osiągnięć w formacie CSV zostaną one porównane z istniejącymi osiągnięciami według nazwy z API:
  • Do dodania – wiersze, które nie pasują do istniejącej nazwy z API, są dodawane jako nowe osiągnięcia. Jeśli chcesz zmienić nazwę z API istniejącego osiągnięcia, najpierw zmień ją w edytorze, w przeciwnym razie stare dane zostaną usunięte.
  • Do zmodyfikowania – istniejące osiągnięcia, których wartości uległy zmianie, są aktualizowane.
  • Nie zmodyfikowano – istniejące osiągnięcia, których wartości nie uległy zmianie, pozostają nienaruszone.
  • Brak w pliku CSV – istniejące osiągnięcia, których nie ma w pliku, zostaną zachowane, chyba że zaznaczysz opcję Usuń te osiągnięcia. Zachowaj ostrożność, usuwając osiągnięcia, ponieważ nie można po prostu dodać ich ponownie, gdy zostaną usunięte.

Uwaga: nazwy i opisy osiągnięć nie są częścią definicji osiągnięć w formacie CSV. Aby je ustawić, użyj pliku CSV z lokalizacją.

Uwaga: statystyka postępu musi już istnieć i musi mieć takie same uprawnienia co osiągnięcie. Aby utworzyć nowe statystyki, najpierw edytuj swoje.

Plik CSV z lokalizacją osiągnięć

Eksportowany jako <ID aplikacji>-achievements-localization.csv. Każde osiągnięcie ma dwa wiersze: jeden na nazwę i jeden na opis.

KolumnaOpis
api_nameWymagane. Musi odpowiadać wartości api_name z definicji osiągnieć w formacie CSV lub istniejącego osiągnięcia. Nazwy z API w tym miejscu rozróżniają wielkość liter.
fieldname lub description.
(pojedyncza kolumna na język)Tekst dla danego języka, na przykład english, french, german.

Kolumny języków odpowiadają językom skonfigurowanym dla twoich osiągnięć. Jeśli dopiero zaczynasz prace nad lokalizacją, najpierw skonfiguruj swoje języki, aby wyeksportowany plik CSV zawierał te kolumny dla języków.

Jeśli prześlesz jednocześnie plik CSV z definicjami i plik CSV z lokalizacją, lokalizacja osiągnięć, których brakuje w pliku CSV z definicjami, nie zostanie zaktualizowana.

Plik CSV z lokalizacją zestawu

Eksportowany jako <ID aplikacji>-achievement-sets-localization.csv. Każdy wiersz zawiera nazwę jednego zestawu.

KolumnaOpis
setidWymagane. ID istniejącego zestawu.
(pojedyncza kolumna na język)Nazwa zestawu w danym języku. english jest wymagany.

Zestawy muszą zostać utworzone w edytorze, zanim będzie można je tutaj zlokalizować. W przypadku zestawu dla gry bazowej nie można zmienić jego nazwy.

Pliki ikon

Nazwij pliki ikon, używając nazwy z API osiągnięcia, po której nastąpi _ACHIEVED lub _UNACHIEVED, na przykład LEVEL_20_ACHIEVED.png i LEVEL_20_UNACHIEVED.png. Ikony są automatycznie przypisywane do odpowiedniego osiągnięcia.

Zaznacz opcję Automatycznie generuj ikony niezdobytych osiągnięć, aby utworzyć ikony w skali szarości wszystkich przesłanych przez ciebie ikon dla odblokowanych osiągnięć.

Jeśli prześlesz definicje w formacie CSV wraz z ikonami, to ikony zostaną przypisane tylko do osiągnięć zawartych w tym pliku CSV. Aby przesłać same ikony, prześlij je bez pliku CSV z definicjami.

Co widzą gracze

Strona osiągnięć

Gracze widzą twoje osiągnięcia na stronie osiągnięć Steam, w kliencie Steam oraz na stronie Społeczności Steam. Strona osiągnięć:
  • Pokazuje postęp i poziom ukończenia każdego zestawu, włączając w to zestawy DLC.
  • Umożliwia graczom porównywanie swoich osiągnięć z maksymalnie 3 znajomymi.
  • Pokazuje globalny wskaźnik odblokowania każdego osiągnięcia i wyróżnia rzadkie osiągnięcia.
  • Umożliwia graczom wyszukiwanie osiągnięć i filtrowanie ich według stanu odblokowania lub zestawu.

Możesz odesłać graczy bezpośrednio do osiągnięć w swojej grze:

Adres URLCo pokazuje
https://steamcommunity.com/achievements/<ID_aplikacji>Osiągnięcia twojej gry, bez informacji o postępach konkretnego gracza. Dostępne niezależnie od tego, czy gracz posiada grę.

Strony w sklepie

Panel osiągnięć na stronie w sklepie wyświetla osiągnięcia z twojej gry, z wyłączeniem spoilerów i osiągnięć zarchiwizowanych. Osiągnięcia z danego zestawu DLC można znaleźć na stronie w sklepie tego DLC.

Profile

Gracze mogą pochwalić się liczbą ukończonych gier i zestawów w gablocie osiągnięć na swoim profilu. Po ukończeniu dowolnego zestawu gry mogą również prezentować je w gablocie perfekcjonisty.

Najlepsze praktyki

  • Dodawaj nowe zestawy dla nowej zawartości. Dodawanie osiągnięć do zestawu, który gracze już ukończyli, może być mylące dla graczy, ponieważ zestaw będzie oznaczony jako ukończony, ale będzie miał nieodblokowane osiągnięcia. Gdy tworzysz nowy zestaw dla nowej zawartości, takiej jak DLC, aktualizacja lub nowy tryb, gracze zachowują jasny podgląd swoich postępów.
  • Archiwizuj zamiast usuwać. Jeśli gracze zdobyli osiągnięcie, zarchiwizuj je zamiast usuwać, aby gracze mogli zachować to, co zdobyli.
  • Użyj zestawów dla DLC do osiągnięć DLC. Dzięki temu ukończenie bazowej wersji gry będzie oddzielne, więc gracze nieposiadający DLC nie będą mieli problemu z ukończeniem gry.
  • Nazwy zestawów powinny być krótkie i opisowe. Nazwy zestawów są wyświetlane graczom w wielu różnych miejscach, w tym w kliencie Steam.
  • Zlokalizuj nazwy zestawów dla każdego języka obsługiwanego przez twoją grę, korzystając z pliku CSV lokalizacji zestawu lub edytora.
  • Przetestuj zestawy dostępne tylko dla producentów przed udostępnieniem graczom nowych osiągnięć.

Najczęściej zadawane pytania

Czy muszę zaktualizować grę lub SDK Steamworks, aby korzystać z zestawów osiągnięć?

Nie. Zestawy są konfigurowane w Steamworks, a gra odblokowuje osiągnięcia, korzystając z tych samych nazw z API i wywołań, co wcześniej.

Co stanie się z moimi istniejącymi osiągnięciami?

Wszystkie znajdują się w zestawie dla gry bazowej. Jeśli nie utworzysz żadnych innych zestawów, gracze zobaczą twoje osiągnięcia jako pojedynczą listę na nowej stronie osiągnięć.

Czy gracze stracą stan ukończenia, jeśli dodam nowe osiągnięcia?

Gracze, którzy już ukończyli dany zestaw, zachowują to ukończenie. Jednak dodanie osiągnięć do wydanego już zestawu oznacza, że ​​gracze, którzy go jeszcze nie ukończyli, będą mieli więcej do zrobienia, dlatego zalecamy dodawanie nowych zestawów dla nowej zawartości.

Jaka jest różnica między archiwizowaniem a usuwaniem osiągnięć?

Zarchiwizowane osiągnięcia pozostają widoczne dla graczy, którzy je odblokowali i nie są już wliczane do ukończenia gry dla tych, którzy ich nie odblokowali. Usunięte osiągnięcia zostają usunięte u wszystkich graczy.

Czy mogę przenieść osiągnięcia do innego zestawu po jego wydaniu?

Tak, ale edytor ostrzeże cię, jeśli ta zmiana mogłaby spowodować ukrycie osiągnięcia przed graczami, którzy je zdobyli, lub wpłynąć na poziom ukończenia.

Ile zestawów mogę stworzyć?

Maksymalnie 40, wliczając zestaw dla gry bazowej.