Documentação do Steamworks
Presença detalhada

Vista geral

Com o lançamento das novas funcionalidades de amigos e chat do Steam, melhorámos as capacidades do nosso sistema de presença detalhada para que sejam mostrados mais detalhes sobre jogos enquanto um utilizador estiver a jogar. Vemos a presença detalhada como uma forma de utilizadores poderem participar em atividades de amigos. Por exemplo, amigos que tiverem o mesmo jogo podem saber a altura certa para entrar na partida ou falar sobre o jogo com o jogador; utilizadores que não tiverem o jogo poderão ficar interessados ao ver textos de presença detalhada que revelam mais sobre um jogo que desconhecem.

A presença detalhada é exibida em vários contextos

Neste documento, iremos abordar duas definições que pode configurar para controlar como o seu jogo aparece na lista de amigos dos jogadores:
  • String de presença detalhada – Usada para exibir informações sobre o estado do jogador no jogo, que podem ser do interesse dos respetivos amigos.
  • Agrupamento de amigos – Usado para agrupar amigos que estejam a jogar o jogo juntos.

String de presença detalhada controlada pelo jogo


Qualquer amigo pode ver de relance mais informações sobre o jogo
O sistema implementado é personalizável, logo a sua equipa pode decidir apresentar as informações que achar mais interessantes para os amigos dos jogadores.
O seu jogo terá um conjunto próprio de dados específicos com as informações certas para serem usadas no sistema de presença rica detalhada. No entanto, recomendamos que comece com os seguintes pontos em mente:

Jogos multijogador

Dependendo do tipo do jogo multijogador, as informações que ajudam amigos a saber quando é a melhor altura para entrar no jogo podem variar. Alguns jogos são jogados em partidas ou rondas determinadas pelo tempo ou pelo número de jogadores restantes. Logo, apresentar esse tipo de informações é o mais útil. Outros jogos multijogador têm partidas que acabam quando um objetivo é cumprido e mostrar o progresso para esse objetivo pode ser útil. Saber o modo de jogo ou o mapa que o utilizador está a jogar também pode ser útil para ajudar os amigos a decidir como interagir.

Jogos para um só jogador

Embora amigos não se possam juntar a um utilizador que esteja a jogar um jogo para um só jogador, a interação ainda é possível se as informações mostradas levarem amigos a assistir ao utilizador a jogar, a falar com ele sobre estratégias ou a perguntar-lhe o que está a achar do jogo, por exemplo. Informações como a zona, capítulo ou nível em que o jogador se encontra (ou o que ele está a fazer no jogo) podem ajudar a alcançar estes objetivos.

* Para definir a string apresentada na lista de amigos e no chat do Steam, defina o par de chave/valor steam_display através de SetRichPresence. Mais informações sobre as chamadas à API e exemplos estão disponíveis no fim deste documento.

Exemplos de dados para exibir (caso aplicáveis)
  • Tempo restante
  • Tempo decorrido
  • Jogadores vivos
  • Nome do mapa ou da zona
  • Nível do jogador
  • Classe do jogador
  • Pontuação na partida
  • Dificuldade
  • Tipo ou modo de jogo
  • Vagas livres
  • A ação a ser realizada (a criar um baralho, a mudar de personagem, no menu principal, etc.)
Atenção: Tenha em mente que esta string de presença detalhada terá de ser curta e de caber numa só linha, pois aparece por baixo do nome do jogador na lista de amigos. Se for demasiado longa, o fim do texto será truncado ou substituído por reticências.

Agrupamento de amigos


Além da linha de informação adicional, a nova lista de amigos pode mostrar grupos de amigos que estejam a jogar juntos. Amigos no mesmo lobby, servidor ou partida serão agrupados numa secção do jogo na lista de amigos, ligados por uma linha. A forma como o agrupamento é realizado irá depender do seu jogo e do que faz mais sentido mostrar. Por exemplo, no Dota 2, é possível criar grupos de até 5 pessoas, logo iremos mostrar os jogadores do grupo que formaram, não a equipa inteira de 5 jogadores que é formada pelo matchmaking. Porém, no Counter-Strike, 2 amigos podem estar a jogar juntos no mesmo servidor e, em vez de mostrar todos os jogadores no servidor como parte do grupo, só os amigos mútuos que estão a jogar juntos serão agrupados na lista de amigos.

Quando amigos que estão a jogar juntos são agrupados, outros podem saber se há espaço para eles entrarem

* Para configurar o agrupamento de jogadores na lista de amigos e no chat do Steam, defina os pares de chave/valor steam_player_group e steam_player_group_size através de SetRichPresence.

API do Steam e tradução



Segue-se um excerto de código de exemplo que demonstra como esta funcionalidade é simples de configurar.

Excerto de código
/*--------------------------- EXEMPLO -------------------*/ 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" ); // Exemplo de agrupamento de amigos que estão a jogar juntos if ( nPartyMemberCount > 1 && strPartyID ) { // Se estamos num grupo com mais de um utilizador e temos um ID de grupo válido, então // informamos o sistema de presença detalhada do Steam. steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group", strPartyID ); steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group_size", CNumStr( nPartyMemberCount ) ); } else { // Caso contrário, removemos as informações anteriores; não estamos num grupo. steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group", nullptr ); steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group_size", nullptr ); }

O código acima usa tokens de tradução da versão inglesa como os seguintes:

"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" } }