Dokumentacja Steamworks
Rozszerzona funkcja rich presence

Wprowadzenie

Dzięki niedawno wydanej wersji znajomych i czatu Steam udało nam się zwiększyć możliwości naszego systemu rich presence, by możliwe było wyświetlanie większej ilości informacji o uruchamianych grach. Uważamy, że rich presence jest sposobem na zainteresowanie znajomych gracza jego poczynaniami. Przykładowo znajomi gracza posiadający tę grę będą dokładnie wiedzieć, kiedy dołączyć do danej gry lub porozmawiać o niej z graczem. A ci, którzy nie posiadają gry, zainteresują się nią, widząc stringi rich presence dotyczące gry, o której zapewne niewiele wiedzą.

Rich presence jest wyświetlane w wielu kontekstach

W tej dokumentacji omówimy dwa ustawienia, które można określić w celu kontroli nad tym, jak twoja gra pojawia się na listach znajomych graczy:
  • String rich presence — służy do wyświetlania informacji o stanie gracza w twojej grze, którymi mogliby się zainteresować jego znajomi.
  • Grupowanie znajomych — służy do grupowania znajomych, którzy grają razem.

String rich presence kontrolowany przez grę


Znajomi na pierwszy rzut oka mogą zobaczyć więcej informacji o grach.
Obecny system posiada możliwość dostosowywania, więc twój zespół może określić informacje, które mogą okazać się najciekawsze dla znajomych gracza.
Dla każdej gry inny rodzaj danych będzie właściwym wyborem do wyświetlania wraz z rozszerzonym rich presence. Na początek jednak musisz wziąć pod uwagę następujące kwestie:

Gry wieloosobowe

W zależności od rodzaju gry wieloosobowej informacje pomagające znajomym określić chwilę, w której mogą dołączyć do gry, mogą się różnić od siebie. Niektóre gry są rozgrywane w rundach określanych czasowo lub liczbą pozostałych graczy, więc wyświetlanie tych informacji będzie najprzydatniejsze. Inne gry wieloosobowe dobiegają końca, gdy osiągnięty zostanie określony cel, więc informacja o poczynionych postępach może być istotna w tym wypadku. Informacje o trybie lub mapie, na której znajduje się gracz, mogą być również przydatne dla jego znajomych, tak by mogli podjąć decyzję o wejście w interakcję z graczem.

Gry jednoosobowe

W grze dla jednego gracza znajomi nie mogą dołączyć do gry, można jednak wzbudzić ich zainteresowanie, jeśli wyświetlana informacja zachęci ich do obejrzenia rozgrywki czy porozmawiania z graczem na temat zastosowanej przez niego strategii lub na temat cech szczególnych gry. Informacje na temat strefy, rozdziału, poziomu gracza lub jego bieżącej aktywności mogą pomóc w osiągnięciu tych celów.

* Aby określić string wyświetlany na liście znajomych i czacie Steam, ustaw parę klucz-wartość steam_display w SetRichPresence. Dodatkowe informacje i przykłady wywołań API znajdują się na końcu dokumentu.

Przykładowe dane do wyświetlenia (jeżeli mają sens w twojej grze)
  • Pozostały czas
  • Czas, który upłynął
  • Wciąż żyjący gracze
  • Nazwa mapy lub strefy
  • Poziom gracza
  • Klasa gracza
  • Wynik w grze
  • Poziom trudności
  • Tryb gry
  • Dostępne miejsca na serwerze
  • Podejmowane działanie (tworzenie talii, zmiana składu, w menu głównym itd.)
UWAGA: pamiętaj, że string rich presence musi zmieścić się w jednej linii i jest on wyświetlany pod nazwą gracza na liście znajomych. Jeżeli będzie za długi, to nie zostanie wyświetlony w całości.

Grupowanie znajomych


Wraz z dodatkową linią zawierającą informacje nowa lista znajomych może wyświetlać grupy znajomych, którzy grają razem. Jeżeli znajdują się w jednym zespole, serwerze lub meczu, to zostaną pogrupowani pod kategorią gry i zostaną połączeni ze sobą linią. Sposób określania grupowania będzie zależał od twojej gry i informacji, jakie jest sens wyświetlać. Na przykład w grze Dota 2 zespoły składają się z maksymalnie 5 osób, więc będziemy wyświetlać sam zespół będący częścią drużyny, a nie całą drużynę stworzoną przez system dobierania graczy. Aczkolwiek w grze Counter-Strike dwaj znajomi mogą grać na tym samym serwerze, ale zamiast pokazywać serwer jako część zespołu, tylko wspólni znajomi grający razem zostaną umieszczeni w tej samej grupie graczy Steam.

Kiedy grający razem znajomi są w jednej grupie, inni będą widzieć, czy jest miejsce, aby dołączyć.

* Aby określić grupowanie graczy na liście znajomych i czacie Steam, ustaw pary klucz-wartość steam_player_group i steam_player_group_size w SetRichPresence.

API Steam i lokalizacja



Poniżej znajduje się przykładowy kod pokazujący prostotę konfiguracji tej funkcji.

Fragment kodu
/*--------------------------- SAMPLE -------------------*/ const char *pchStatus; if ( bWinning && cWinners > 1 ) { pchStatus = "Tied"; } else if ( bWinning ) { pchStatus = "Winning"; } else { pchStatus = "Losing"; } SteamFriends()->SetRichPresence( "gamestatus", pchStatus ); bool bDisplayScoreInRichPresence = true; if ( bDisplayScoreInRichPresence ) { char rgchBuffer[32]; sprintf_safe( rgchBuffer, "%2u", uMyScore ); SteamFriends()->SetRichPresence( "score", rgchBuffer ); } SteamFriends()->SetRichPresence( "steam_display", bDisplayScoreInRichPresence ? "#StatusWithScore" : "#StatusWithoutScore" ); // Przykład grupowania znajomych razem, gdy grają ze sobą if ( nPartyMemberCount > 1 && strPartyID ) { // Jeżeli jesteśmy w zespole składającym się z więcej niż jednego użytkownika, to posiadamy poprawne ID zespołu, po czym // informujemy system rich presence na Steam. steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group", strPartyID ); steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group_size", CNumStr( nPartyMemberCount ) ); } else { // W przeciwnym wypadku wyczyść wszelkie informacje, które posiadaliśmy tam wcześniej – nie jesteśmy w zespole. steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group", nullptr ); steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group_size", nullptr ); }

Powyższy kod używa lokalizacji zawierający stringi w języku angielskim takie jak poniżej:

"lang" { "language" "english" "tokens" { "#StatusWithoutScore" "{#Status_%gamestatus%}" "#StatusWithScore" "{#Status_%gamestatus%}: %SCORE%" "#Status_AtMainMenu" "At the main menu" "#Status_WaitingForMatch" "Waiting for match" "#Status_Winning" "Winning" "#Status_Losing" "Losing" "#Status_Tied" "Tied" } }