Documentação do Steamworks
Presença rica aprimorada

Visão geral

Com o lançamento do novo cliente de conversa do Steam, aprimoramos os recursos do nosso sistema de presença rica para exibir detalhes das partidas direto na lista de amigos. Vemos esse recurso como uma forma de usuários poderem participar da atividade dos seus amigos. Por exemplo, amigos que possuem o mesmo jogo podem saber a hora certa de entrar em uma partida ou falar sobre ela com o jogador, enquanto aqueles que não possuem podem se interessar ao ver textos que contam mais sobre um jogo que eles não conhecem.

A presença rica é exibida em diversos contextos

Nesta documentação, abordaremos duas configurações que podem ser definidas para controlar como o seu jogo é exibido para amigos dos jogadores:
  • String de presença rica — usada para exibir dados sobre estado do jogador no jogo que podem ser de interesse de amigos;
  • Agrupamento de amigos — usada para agrupar amigos que estejam jogando juntos

String de presença rica controlada pelo jogo


Amigos podem ver mais informações sobre jogos em um relance
O sistema implementado é personalizável, assim a sua equipe pode definir quais dados são de maior interesse para os amigos de um jogador.
Cada jogo tem um conjunto de dados diferente, mas aconselhamos começar pelos pontos a seguir:

Jogos multijogadores

Dependendo do tipo de jogo, os dados que auxiliam amigos a saber quando é a hora de entrar podem variar. Alguns jogos têm partidas cuja duração é determinada pelo tempo, enquanto outros têm partidas que duram até só sobrar um jogador, então esse dado é o mais crucial. Outros jogos têm partidas que acabam assim que um objetivo é cumprido, logo exibir o progresso desse objetivo é o mais útil. Saber o modo de jogo ou mapa também pode ser útil para que os amigos decidam o que fazer.

Jogos para um jogador

Por mais que jogos para um jogador não permitam que amigos participem diretamente, o engajamento também pode ocorrer caso os dados exibidos resultarem em um amigo pedir para assistir, dar dicas sobre estratégias ou perguntar o que o jogador está achando. Informações como a zona, capítulo ou fase do jogador, ou o que ele está fazendo, podem ajudar.

* Para definir qual string exibir na lista de amigos e salas de conversa no Steam, defina o par de chave-valor steam_display por meio da API SetRichPresence. Mais informações e exemplos de chamadas à API estão disponíveis no fim deste documento.

Exemplos de dados para exibir (se aplicáveis)
  • Tempo restante
  • Tempo decorrido
  • Jogadores vivos
  • Nome do mapa ou zona
  • Nível do jogador
  • Classe do jogador
  • Placar da partida
  • Nível de dificuldade
  • Modo de jogo
  • Vagas abertas na partida ou servidor
  • Ação sendo realizada (montando deck, mexendo nos personagens, no menu principal, etc.)
AVISO: Tenha em mente que a string de presença rica deve ser curta para caber em uma linha, sendo exibida abaixo do nome do jogador na lista de amigos. Caso seja longa demais, o fim da linha será truncado ou substituído por reticências.

Agrupamento de amigos


Assim como a linha de informação adicional, a nova lista de amigos pode exibir grupos de amigos que estejam jogando juntos. Amigos que estejam em um mesmo grupo, servidor ou partida serão agrupados na seção do jogo na lista de amigos, conectados por uma linha. Os critérios de agrupamento dependem do que mais faz sentido para o seu jogo. Por exemplo, no Dota 2 é possível criar grupos de até 5 pessoas, então exibiremos apenas os jogadores no grupo que foi formado, e não a equipe de 5 da partida. Por outro lado, no Counter-Strike 2 amigos podem estar jogando no mesmo servidor, mas ao invés de exibir todos os jogadores como parte do grupo, apenas os amigos mútuos são agrupados na lista de amigos.

Quando amigos que estão jogando juntos são agrupados, outros podem saber se há uma vaga para eles

* Para definir quais jogadores agrupar na lista de amigos e salas de conversa no Steam, defina os pares de chave-valor steam_player_group e steam_player_group_size por meio da API SetRichPresence.

API do Steam e localização



Temos um código de exemplo abaixo para ilustrar o quão simples é configurar este recurso.

Trecho de código
/*--------------------------- AMOSTRA -------------------*/ const char *pchEstado; if ( bVencendo && cVencedores > 1 ) { pchEstado = "Empatado"; } else if ( bVencendo ) { pchEstado = "Vencendo"; } else { pchEstado = "Perdendo"; } SteamFriends()->SetRichPresence( "estadopartida", pchEstado ); bool bExibirPontosNaPresencaRica = true; if ( bExibirPontosNaPresencaRica ) { char rgchBuffer[32]; sprintf_safe( rgchBuffer, "%2u", uMeusPontos ); SteamFriends()->SetRichPresence( "pontos", rgchBuffer ); } SteamFriends()->SetRichPresence( "steam_display", bExibirPontosNaPresencaRica ? "#EstadoComPontos" : "#EstadoSemPontos" ); // Exemplo de agrupamento de amigos que estao jogando juntos if ( nQtdMembrosGrupo > 1 && strIdGrupo) { // Se estamos em um grupo com mais de um usuario e temos um ID de grupo valido, entao // informamos ao sistema de presenca rica do Steam. steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group", strIdGrupo ); steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group_size", CNumStr( nQtdMembrosGrupo ) ); } else { // Caso contrario, removemos os dados anteriores; nao estamos em um grupo. steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group", nullptr ); steamapicontext->SteamFriends()->SetRichPresence( "steam_player_group_size", nullptr ); }

O código acima usa localização, que faz uso de tokens em português do Brasil, como no exemplo abaixo:

"lang" { "language" "brazilian" "tokens" { "#EstadoSemPontos" "{#Estado_%estadopartida%}" "#EstadoComPontos" "{#Estado_%estadopartida%}: %pontos%" "#Estado_MenuPrincipal" "No menu principal" "#Estado_BuscandoPartida" "Buscando partida" "#Estado_Vencendo" "Vencendo" "#Estado_Perdendo" "Perdendo" "#Estado_Empatado" "Empatado" } }