Resumo
Use conquistas para recompensar jogadores que alcançarem certos marcos ou interagirem com o jogo de formas específicas.Nível de integração
10 minutos e menos de 10 linhas de código. Requer integração com o SDK do Steamworks.Introdução
Conquistas podem ser usadas para encorajar e recompensar interações e marcos de jogadores no jogo. Elas costumam ser usadas para contar a quantidade de vítimas, quilômetros percorridos, tesouros abertos ou outras ações comuns no jogo, mas também servem para ajudar os jogadores a descobrir formas diferentes de jogar o jogo. Quando uma conquista é alcançada, uma notificação é exibida no canto da janela, e ela fica registrada na página de conquistas do jogador.
À medida que o seu jogo crescer, você pode organizar as conquistas em
conjuntos. Os conjuntos permitem agrupar as conquistas de formas que fazem sentido para o seu jogo, adicionar conquistas para conteúdos adicionais sem afetar o progresso do jogo base e arquivar conquistas de conteúdos que foram removidos sem tirá-las dos usuários que as alcançaram. Consulte a seção
Conjuntos de conquistas abaixo para detalhes.
Aviso: os conjuntos de conquistas estão em beta. Continuaremos a fazer melhorias durante o beta, e esta documentação será atualizada de acordo.
Visão geral técnica
A seguir, apresentamos um guia passo a passo rápido para integrar conquistas Steam bem básicas no seu aplicativo em menos de 10 minutos e com menos de 10 linhas de código integradas à sua base de código. O
SDK do Steamworks vem com um ótimo aplicativo de exemplo, denominado
Spacewar, que demonstra os diversos recursos do Steam e deve ser a sua referência para ver todos os recursos do Steam em funcionamento. Com a finalidade de ser o mais direto possível, este tutorial detalha apenas as informações encontradas no Spacewar e na API de estatísticas e conquistas necessárias para estatísticas. Lembre-se de que há muita coisa em comum entre estatísticas e conquistas. Logo, se estiver integrando ambas, esteja ciente de que muitas chamadas podem ser consolidadas.
Os conjuntos são configurados inteiramente no Steamworks. Não é necessário nenhuma linha de código adicional, e o jogo marcará as conquistas de um conjunto como alcançadas usando os mesmos nomes e chamadas da API descritos neste guia.
1º passo — Definição das conquistas do jogo
Conquistas são separadas por aplicativo e configuradas na página de
configuração de conquistas no backend de administração de aplicativo do Steamworks. Confira abaixo a lista de conquistas de Spacewar, o aplicativo de exemplo do Steamworks:

Editor de conquistas
As conquistas são criadas e gerenciadas no editor de conquistas:
- A partir da página inicial do aplicativo no Steamworks, selecione Editar configurações do Steamworks.
- Selecione Estatísticas e conquistas > Conquistas.
- Clique no banner na parte superior da página para abrir o novo editor de conquistas.
É necessária a permissão "Editar metadados do aplicativo" para usar o editor de conquistas.
O editor tem duas abas:
- Gerenciar conquistas: criar, editar e organizar os seus conjuntos e conquistas.
- Importação e exportação em lote: exporte e importe as suas conquistas como arquivos CSV e envie os ícones em lote. Consulte a seção Importação e exportação em lote abaixo para mais detalhes.
A parte superior do editor apresenta quantas conquistas e conjuntos o jogo está usando em relação aos limites, além de links para pré-visualizar as suas conquistas na sua própria página de conquistas.
Criação e edição de conquistas
Todas as suas conquistas estarão no conjunto
Jogo base, a menos que as atribua a outro conjunto. Para criar uma conquista, clique em
Criar conquista no conjunto ao qual ela deve pertencer. Para editar uma conquista, selecione-a na tabela de conquistas.
| Campo | Descrição |
|---|
| Nome na API | Um nome exclusivo que o jogo passa para a API do Steamworks, como CONQ_VENCER_UMA_PARTIDA. Obrigatório. |
| Nome de exibição | O nome da conquista exibido aos usuários. Traduzível. |
| Descrição | A descrição da conquista exibida aos usuários. Traduzível. |
| Ícones | O ícone de alcançada e o ícone de não alcançada. Consulte a seção Ícones abaixo para mais detalhes. |
| Definida por | Quem pode marcar a conquista como alcançada: o cliente, um servidor do jogo ou um servidor oficial do jogo. |
| Estatística de progresso | Opcionalmente, uma estatística usada para exibir o progresso nesta conquista, bem como o Intervalo da conquista para mapear o progresso de 0% a 100%. |
| Visibilidade | Visível ou Spoiler para ocultar os detalhes da conquista até que seja alcançada. |
| Estado opcional | Disponível ou Arquivada se a conquista não puder mais ser alcançada. |
| No conjunto | O conjunto ao qual esta conquista pertence. |
A tabela de conquistas também apresenta, para cada conquista: o ID, o conjunto, como é definida e a porcentagem global de usuários que a alcançaram. Use o campo
Filtrar na barra de ferramentas para buscar conquistas por nome de exibição, descrição ou nome na API.
Excluir uma conquista a remove para todos, incluindo os usuários que já a alcançaram. Se uma conquista tiver sido alcançada por um ou mais usuários, o editor recomendará arquivar em vez de excluir. Consulte a seção
Arquivamento abaixo para mais detalhes.
Ícones
Para melhores resultados, os ícones das conquistas devem ser imagens em formato PNG de 256 x 256 px. Imagens de 64 x 64 px serão aceitas, mas recomendamos que usem imagens maiores. Os ícones devem ser quadrados, e ícones maiores que 256x256 serão automaticamente redimensionados. Imagens JPG também são aceitas.
Também recomendamos que os ícones sejam em tons de cinza para conquistas que ainda não foram alcançadas e coloridos para as que já foram alcançadas. Não é necessário criar o ícone de não alcançada manualmente: clique em
Gerar no editor de conquistas ou use a opção
Gerar versões não alcançadas dos ícones automaticamente ao enviar em lote para criar uma versão não alcançada em tons de cinza a partir da versão alcançada do ícone. Você pode substituir a versão gerada por um ícone criado manualmente a qualquer momento.
Tradução
Use o seletor
Idioma na barra de ferramentas para editar as suas conquistas em cada um dos idiomas do jogo. Um ícone de aviso é exibido na barra de ferramentas quando houver idiomas sem texto traduzido, e todas as conquistas e conjuntos sem texto traduzido estarão marcados no editor.
Para escolher em quais idiomas as conquistas estarão traduzidas, clique no botão de edição ao lado de
Idioma na barra de ferramentas ou clique em
Configurar idiomas na aba
Importação e exportação em lote. Esses são os idiomas usados no editor e nos arquivos CSV de tradução. Ao consultar as conquistas pela API, o Steam retornará o texto no idioma solicitado.
Limites
| Item | Limite |
|---|
| Conquistas por aplicativo | 5.000 (100 por aplicativos ainda não avaliados) |
| Conjuntos por aplicativo | 40, incluindo o conjunto do jogo base |
As conquistas arquivadas contam para o limite de conquistas.
2º passo — Encapsulamento do funcionamento de conquistas
O código a seguir independe do jogo e pode ser adicionado ao seu jogo da forma que achar melhor. A classe é completamente funcional, mas pode ser estendida para atender a necessidades adicionais. O código foi extraído dos arquivos de exemplo do Spacewar
StatsAndAchievements.cpp/h. Strings literais e comentários foram traduzidos para uma melhor compreensão.
Arquivo de cabeçalho
Primeiro definimos uma estrutura para armazenar os dados de conquista recebidos do Steam e um atalho para criar objetos do tipo. Esses dados são mapeados diretamente aos existentes na página de
configuração de conquistas.
#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;
};
Em seguida, definimos uma classe auxiliar que encapsulará todas as chamadas à API de estatísticas do Steam, assim como criará todos os
retornos de chamada do Steam.
class CSteamAchievements
{
private:
int64 m_iAppID; // O AppID do aplicativo atual
Achievement_t *m_pAchievements; // Os dados das conquistas
int m_iNumAchievements; // A quantidade de conquistas
bool m_bInitialized; // Estamos prontos para usar a 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 );
};
Arquivo de código
Construtor
Parâmetros — O construtor recebe um ponteiro para um vetor de conquistas e o tamanho do mesmo. A formatação do vetor será abordada no código principal do jogo, mais adiante.
Retorna — Nada
O que faz — O construtor inicializa alguns membros e recupera o AppID em execução. Além disso, ele associa os métodos de retorno de chamada para tratar chamadas assíncronas feitas ao Steam. Por último, realiza uma chamada inicial à função
Initialize() para verificar se a API está pronta.
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()
Parâmetros — Nenhum
Retorna — um bool que representa o sucesso da chamada. Se a chamada falhou, a causa comum é a não inicialização do Steam. Confirme que há uma instância do cliente Steam aberta ao realizar esta chamada e que a função
SteamAPI_Init foi chamada anteriormente.
O que faz — Garante que o Steam esteja carregado e que haja um contexto de usuário com sessão iniciada.
bool CSteamAchievements::Initialize()
{
// O Steam está carregado? Caso contrário, não podemos recuperar as estatísticas.
if ( NULL == SteamUserStats() || NULL == SteamUser() )
{
return false;
}
// A sessão do usuário foi iniciada? Caso contrário, não podemos acessar as estatísticas.
if ( !SteamUser()->BLoggedOn() )
{
return false;
}
return true;
}
SetAchievement()
Parâmetros — A string que identifica a conquista a ser definida (ex.: "CONQ_VENCER_UMA_PARTIDA").
Retorna — um bool que representa o sucesso da chamada. Se a chamada falhou, isso significa que o Steam não foi inicializado.
O que faz — Este método define uma dada conquista como alcançada e envia os resultados ao Steam. É possível definir uma dada conquista várias vezes, então não se preocupe em definir conquistas já alcançadas. Esta é uma chamada assíncrona que disparará dois retornos de chamada:
OnUserStatsStored() e
OnAchievementStored().
bool CSteamAchievements::SetAchievement(const char* ID)
{
// Já recebemos um retorno de chamada do Steam?
if (m_bInitialized)
{
SteamUserStats()->SetAchievement(ID);
return SteamUserStats()->StoreStats();
}
// Caso contrário, ainda não podemos definir as conquistas
return false;
}
OnUserStatsStored()
Parâmetros — Nenhum
Retorna — Nada
O que faz — Este método é um retorno de chamada disparado sempre que o jogo tentar armazenar estatísticas no Steam.
void CSteamAchievements::OnUserStatsStored( UserStatsStored_t *pCallback )
{
// Podemos receber retornos de chamada de estatísticas de outros jogos, e temos que ignorá-los
if ( m_iAppID == pCallback->m_nGameID )
{
if ( k_EResultOK == pCallback->m_eResult )
{
OutputDebugString( "Estatísticas do Steam armazenadas\n" );
}
else
{
char buffer[128];
_snprintf( buffer, 128, "StatsStored falhou, %d\n", pCallback->m_eResult );
OutputDebugString( buffer );
}
}
}
OnAchievementStored()
Parâmetros — Nenhum
Retorna — Nada
O que faz — Este método é um retorno de chamada, disparado sempre que conquistas forem armazenadas com sucesso no Steam.
void CSteamAchievements::OnAchievementStored( UserAchievementStored_t *pCallback )
{
// Podemos receber retornos de chamada de estatísticas de outros jogos, e temos que ignorá-los
if ( m_iAppID == pCallback->m_nGameID )
{
OutputDebugString( "Conquista do Steam armazenada\n" );
}
}
3º passo — Integração com o jogo
Segue uma listagem completa de trechos de códigos que precisam ser integrados ao jogo nos locais apropriados.
Defines e globais
A seguir, está uma lista de
includes necessários para a construção com conquistas, uma enumeração com as conquistas específicas do jogo e um ponteiro global ao nosso objeto auxiliar. Observe que as conquistas devem ter o mesmo nome que o "Nome na API" na página de administração do Steamworks.
...
#include "steam_api.h"
// Definição das conquistas
enum EAchievements
{
ACH_WIN_ONE_GAME = 0,
ACH_WIN_100_GAMES = 1,
ACH_TRAVEL_FAR_ACCUM = 2,
ACH_TRAVEL_FAR_SINGLE = 3,
};
// Vetor de conquistas, que armazenará os dados e o estado das conquistas
Achievement_t g_Achievements[] =
{
_ACH_ID( ACH_WIN_ONE_GAME, "Vencedor" ),
_ACH_ID( ACH_WIN_100_GAMES, "Campeão" ),
_ACH_ID( ACH_TRAVEL_FAR_ACCUM, "Interestelar" ),
_ACH_ID( ACH_TRAVEL_FAR_SINGLE, "Orbitador" ),
};
// Acesso global ao objeto de conquistas
CSteamAchievements* g_SteamAchievements = NULL;
...
Inicialização
Esta chamada à função
SteamAPI_Init inicializará a base do Steam e deve ser chamada antes de qualquer outra função da API. Se for bem-sucedida, então criamos o objeto auxiliar passando o vetor de conquistas e o tamanho do vetor.
...
// Inicialização do Steam
bool bRet = SteamAPI_Init();
// Criação do objeto SteamAchievements se o Steam foi inicializado com sucesso
if (bRet)
{
g_SteamAchievements = new CSteamAchievements(g_Achievements, 4);
}
...
Processamento de retornos de chamada
Para garantir o processamento de todos os retornos de chamada do Steam, precisamos sempre verificar se há novas mensagens. Para tal, adicionamos a chamada a seguir ao ciclo de vida do jogo.
...
SteamAPI_RunCallbacks();
...
Disparo de conquistas
Disparar uma conquista é tão simples quanto chamar uma função com o identificador da mesma.
...
if (g_SteamAchievements)
g_SteamAchievements->SetAchievement("ACH_WIN_100_GAMES");
...
Atenção: o Steam não marcará como alcançada uma conquista arquivada ou que pertence a um conjunto de um conteúdo adicional que o usuário não tem. Certifique-se de que o jogo só solicite à API para marcar como alcançadas as conquistas de conteúdos adicionais para quem os tiver, e não solicite à API para marcar como alcançada uma conquista arquivada. Consulte a seção
Conjuntos de conquistas abaixo para detalhes.
Encerramento
O seu código já deve ter uma chamada à função
SteamAPI_Shutdown. Ela encerra o Steam e deve ser chamada antes do encerramento do aplicativo. Por último, excluímos o objeto auxiliar criado.
...
// Encerramento do Steam
SteamAPI_Shutdown();
// Exclusão do objeto SteamAchievements
if (g_SteamAchievements)
delete g_SteamAchievements;
...
4º passo — Testes e solução de problemas
Para alterar ou remover o valor de uma estatística ou conquista sem adicionar código ao jogo, use o console do cliente Steam. Inicie o cliente Steam por meio do comando "steam.exe -console" e então execute os seguintes comandos no console:
- achievement_clear <AppID> <nome da conquista> (para definir a conquista como não alcançada)
- reset_all_stats <AppID> (para zerar todas as estatísticas)
Pré-visualização e publicação
As alterações feitas no editor de conquistas são salvas na configuração de rascunho do aplicativo. Para colocá-las no ar, publique as alterações na aba
Publicar da página
Editar configurações do Steamworks, assim como qualquer outra outra configuração do Steamworks.
Antes do lançamento, é possível pré-visualizar as conquistas na sua própria página de Conquistas Steam, usando o link na parte superior do editor. Use os conjuntos apenas para desenvolvimento para testar novas conquistas sem exibi-las aos usuários.
Para ativar as conquistas e concluir os passos de lançamento, também é necessário ativar a opção
Conquistas Steam na seção
Recursos disponíveis da página de dados básicos da página na loja. Para que o passo de lançamento seja marcado como concluído, cada conquista precisa ter um ícone e um nome em cada um dos idiomas configurados.
Conjuntos de conquistas
Os conjuntos permitem organizar as conquistas do jogo em grupos nomeados, acompanhar a porcentagem de conclusão dos jogadores por conjunto, e adicionar ou arquivar conquistas ao longo do tempo sem afetar os jogadores que as alcançaram. Com os conjuntos de conquistas, é possível:
- Agrupar conquistas de maneiras que façam sentido para o jogo, como modo, personagem, capítulo ou evento.
- Adicionar conquistas para conteúdos adicionais que são contabilizadas apenas para quem os tiver.
- Arquivar conquistas e conjuntos de conteúdos removidos, sem removê-las dos usuários que as alcançaram.
- Criar e testar conquistas em conjuntos apenas para desenvolvimento, que ficam ocultos para os usuários.
- Gerenciar as definições das conquistas, conjuntos, ícones e traduções em lote, usando arquivos CSV e de imagem.
Conjunto do jogo base
Cada jogo tem um conjunto de
conquistas do jogo base. As conquistas que não forem atribuídas a outro conjunto pertencem ao conjunto do jogo base, portanto, se não criar nenhum outro conjunto, todas as suas conquistas ficarão no conjunto do jogo base. Para a maioria dos jogos, esse conjunto terá a maioria das suas conquistas.
Não é possível renomear, excluir, nem alterar a posição do conjunto do jogo base. Ele sempre é exibido primeiro, a menos que esteja vazio — nesse caso, ele não será exibido (mas ainda contará para o limite).
Conjuntos personalizados
É possível criar conjuntos adicionais para organizar as suas conquistas. Cada conquista tem um nome, que é exibido para os usuários, e uma restrição opcional:
| Restrição | Quem pode alcançar as conquistas do conjunto |
|---|
| Todos os jogadores | Qualquer um que possa jogar o jogo. |
| Proprietários de (conteúdo adicional) | Apenas quem puder jogar o conteúdo adicional selecionado. |
Os usuários veem o progresso separado por conjunto, e completar um conjunto não afeta o resto do jogo.
Conjuntos de conteúdos adicionais
Um conjunto restrito a quem tiver um conteúdo adicional é um
conjunto de conteúdo adicional. Conjuntos de conteúdos adicionais:
- Podem ser vistos por todos os usuários na página de conquistas do jogo, mas apenas quem puder jogar o conteúdo adicional pode alcançar as suas conquistas.
- Não contam para a conclusão do conjunto do jogo base nem de qualquer outro conjunto.
- Ficam ocultos dos usuários até o lançamento do conteúdo adicional associado. Isso permite que configure e teste as conquistas de conteúdos adicionais futuros antes do lançamento.
- Exibem, na página de conquistas, a arte e o link do conteúdo adicional na loja. Se o conteúdo adicional não tiver uma página publicada na loja, a arte e o link do jogo base na loja são usados no lugar, e o editor avisará você sobre isso.
- São exibidos no painel de conquistas da página do conteúdo adicional na loja.
O nome do conjunto será exibido com o prefixo "Conteúdo adicional", então não é necessário incluir esse termo no nome.
Conjuntos apenas para desenvolvimento
Um conjunto marcado como
Apenas para desenvolvimento é visível apenas para os desenvolvedores do aplicativo, independentemente de ele ter sido lançado ou não. Apenas os desenvolvedores podem alcançar as conquistas de um conjunto apenas para desenvolvimento. Os conjuntos apenas para desenvolvimento são úteis para criar e testar novas conquistas antes que estejam prontas para o lançamento.
Arquivamento
Às vezes, um modo de jogo é substituído, um evento sazonal termina ou uma conquista não pode ser mais alcançada. Em vez de excluir conquistas que os usuários alcançaram, é possível arquivá-las.
- Conquistas alcançadas permanecem visíveis aos usuários que as alcançaram, e ainda podem ser adicionadas a um destaque do perfil. Os usuários que não alcançaram uma conquista arquivada não a verão, e ela não contará para a conclusão do conjunto ao qual ela pertence.
- Conjuntos arquivados só são visíveis aos usuários que alcançaram uma ou mais das suas conquistas. Não é possível alcançar nenhuma conquista de um conjunto arquivado. Os usuários que alcançaram conquistas de um conjunto arquivado ainda podem ver todas as conquistas dele.
O arquivamento não altera o código do jogo. Quando arquivar uma conquista, certifique-se de que o jogo não faz nenhuma chamada para marcá-la como alcançada.
Conquistas spoiler
As conquistas anteriormente marcadas como
ocultas agora são chamadas de conquistas
spoiler. Para evitar spoilers, o nome e a descrição de uma conquista spoiler não são exibidos aos usuários até que a alcancem ou escolham revelá-la. Conquistas spoiler e arquivadas não são exibidas no painel de conquistas da página na loja.
Conclusão
A porcentagem de conclusão é separada por conjunto:
- Um usuário completa um conjunto ao alcançar todas as suas conquistas que ainda estejam disponíveis. Conquistas arquivadas que o usuário não alcançou não são necessárias para concluir o conjunto.
- Quando um usuário completa um conjunto, ele permanece completado, mesmo se adicionar conquistas a ele depois.
- O conjunto de um conteúdo adicional só conta para a conclusão de um usuário se ele tiver o conteúdo adicional.
Os usuários podem destacar no seu Perfil Steam quantos jogos e conjuntos concluíram. Um jogo pode ser exibido no destaque de perfeccionista do perfil quando o usuário tiver concluído cada um dos seus conjuntos.
Criação de um conjunto
- Na aba Gerenciar conquistas, clique em Criar novo conjunto.
- Informe o nome do conjunto. Esse nome é exibido aos usuários.
- Em Restrições, escolha Todos os jogadores ou selecione um conteúdo adicional para restringi-lo aos seus proprietários. Essa lista apresenta os conteúdos adicionais listados para o seu jogo, bem como os seus AppIDs.
- Opcionalmente, marque o conjunto como apenas para desenvolvimento.
- Salve o conjunto.
Um conjunto sem conquistas não será exibido a ninguém.
Edição de um conjunto
Abra o menu do conjunto e escolha
Editar conjunto para alterar o nome, restrições, se é apenas para desenvolvimento ou marcá-lo como
arquivado.
Cada conjunto exibe a sua
visibilidade no editor:
| Visibilidade | Significado |
|---|
| Visível | Os usuários podem ver este conjunto. |
| Oculto por restrições | Os usuários ainda não podem ver este conjunto (ex.: é apenas para desenvolvimento ou está associado a um conteúdo adicional que ainda não foi lançado). |
| Ficará visível mediante publicação | Os usuários poderão ver este conjunto após publicar as suas alterações. |
Reordenação dos conjuntos
Clique em
Reordenar conjuntos na barra de ferramentas e, em seguida, arraste e solte os conjuntos para escolher a ordem de exibição para os usuários. O conjunto do jogo base não pode ser movido.
Exclusão de conjunto
Abra o menu do conjunto e escolha
Excluir conjunto. É necessário mover ou excluir todas as conquistas de um conjunto antes de poder excluí-lo. Caso deseje desativar um conjunto sem remover as conquistas dos usuários que as alcançaram, arquive em vez de excluir.
Transferência de conquistas entre conjuntos
Para mover uma única conquista, altere o seu campo
No conjunto. Para mover várias conquistas de uma vez, use a
transferência em massa:
- Clique em Transferência em massa no cabeçalho da tabela de conquistas.
- Assinale as conquistas que deseja transferir. A quantidade de conquistas selecionadas é exibida na parte inferior da página.
- Escolha o conjunto de destino ou Criar novo conjunto... para criar um.
- Clique em Mover.
Por exemplo, você pode ativar o modo de transferência em massa, usar o campo de busca para filtrar as conquistas pelo nome na API e então clicar na caixa de seleção no cabeçalho para selecionar todas as conquistas visíveis de um grupo para transferir. Esse fluxo de trabalho é relativamente simples e pode economizar bastante tempo.
O editor exibirá um aviso antes de qualquer transferência que possa afetar os usuários:
- Transferir conquistas de um conjunto visível para um oculto ou não lançado as ocultará dos usuários que já as alcançaram.
- Transferir conquistas para um conjunto no qual usuários têm progresso pode afetar a porcentagem de conclusão deles.
Aviso: adicionar uma conquista a um conjunto que já foi lançado não afetará a conclusão de usuários, mas ela pode não ser exibida naturalmente. Considere adicionar um novo conjunto em vez disso.
Importação e exportação em lote
A aba
Importação e exportação em lote permite que você gerencie as suas conquistas como arquivos: exporte arquivos CSV, edite-os em uma ferramenta de planilha e envie-os de volta com os ícones.
Fluxo de trabalho
- Clique em Exportar definições (.csv), Exportar tradução (.csv), e/ou Exportar tradução dos conjuntos (.csv) para baixar os dados atuais.
- Edite os arquivos. Cada célula da linha de cabeçalho inclui uma descrição em parênteses, por exemplo
spoiler ("true" ou "false"). Esses parênteses são ignorados ao enviar o arquivo.
- Arraste os arquivos
.csv e .png no campo de envio ou clique em Selecionar arquivos.... É possível enviar vários arquivos de uma só vez.
- Revise a lista Arquivos enviados em busca de erros. Remover um arquivo desfaz todas as alterações originadas por ele. Para substituir um arquivo, corrija-o e envie-o novamente.
- Revise as Alterações pendentes. Nada será salvo até clicar em Salvar dados importados.
Se o seu jogo ainda não tiver nenhuma conquista, os arquivos de definição e tradução exportados serão modelos com algumas linhas de exemplo, todas começando com
EXAMPLE_. Você pode sobrescrevê-las, excluí-las ou enviar o arquivo de modelo sem mexer em nada para ver como a importação funciona.
CSV de definições de conquistas
Exportado como
<AppID>-achievements-definitions.csv. Cada linha define uma conquista.
| Coluna | Descrição |
|---|
api_name | Obrigatório; único; o nome informado pelo jogo à API. |
setid | (Opcional) O ID de um conjunto existente. Deixe em branco para atribuir ao conjunto do jogo base. |
permission | Quem pode marcar a conquista como alcançada. Valores possíveis: Client (cliente), GameServer (servidor do jogo) ou OfficialGameServer (servidor oficial do jogo). |
spoiler | Se a conquista é um spoiler. true se verdadeiro ou false se falso. |
archived | Se a conquista é arquivada. true se verdadeiro ou false se falso. |
progress_stat_name | (Opcional) O nome de uma estatística existente para usar em uma barra de progresso. Deixe em branco para não exibir nenhuma barra de progresso. |
progress_stat_min | Um número não inferior ao mínimo da própria estatística. Deve ser um número inteiro se a estatística for do tipo INT. |
progress_stat_max | Um número maior que progress_stat_min e não superior que o máximo da própria estatística. Deve ser um número inteiro se a estatística for do tipo INT. |
Ao enviar um CSV de definições, as conquistas são comparadas às existentes pelo nome na API:
- Para adicionar: as linhas sem nome na API correspondente entre as conquistas existentes serão adicionadas como conquistas novas. Se a intenção era renomear o nome na API de uma conquista existente, altere-o no editor primeiro, senão os dados antigos serão removidos.
- Para modificar: as conquistas existentes cujos valores foram alterados serão atualizadas.
- Não modificadas: as conquistas existentes cujos valores não foram alterados serão mantidas como estão.
- Ausentes do CSV: as conquistas existentes que não têm uma linha no arquivo são mantidas, a menos que ative a opção Excluir essas conquistas. Tenha cautela ao remover conquistas, porque não é possível simplesmente adicioná-las novamente.
Aviso: o nome e a descrição das conquistas não fazem parte do CSV de definições. Use o CSV de tradução para defini-los.
Aviso: uma estatística de progresso já deve existir e ter a mesma permissão que a conquista. Para criar uma nova estatística, edite as estatísticas do jogo primeiro.
CSV de tradução de conquistas
Exportado como
<AppID>-achievements-localization.csv. Cada conquista tem duas linhas: uma para o nome e outra para a descrição.
| Coluna | Descrição |
|---|
api_name | Obrigatório. Deve ser igual ao api_name do CSV de definições ou de uma conquista existente. A correspondência do nome da API diferencia maiúsculas de minúsculas. |
field | name se for o nome da conquista description, se for a descrição. |
| (uma coluna por idioma) | O texto no idioma indicado no cabeçalho da coluna, seguindo o nome do idioma na API (english, brazilian, german etc.). |
Haverá uma coluna por idioma configurado para as conquistas. Caso seja a primeira tradução, configure os idiomas primeiro para que o CSV exportado inclua as colunas.
Ao enviar um CSV de definições e um de tradução juntos, a tradução das conquistas ausentes do CSV de definições não será atualizada.
CSV de tradução de conjuntos
Exportado como
<AppID>-achievement-sets-localization.csv. Cada linha contém o nome de um conjunto.
| Coluna | Descrição |
|---|
setid | Obrigatório. O ID de um conjunto existente. |
| (uma coluna por idioma) | O nome do conjunto no idioma indicado no cabeçalho da coluna. A coluna english é obrigatória. |
É necessário criar um conjunto no editor antes de traduzi-lo no CSV. O conjunto do jogo base não pode ser renomeado.
Arquivos de ícones
Nomeie os arquivos de ícones com o nome na API seguido de
_ACHIEVED se for a versão alcançada ou
_UNACHIEVED se for a não alcançada. Por exemplo,
NIVEL_20_ACHIEVED.png e
NIVEL_20_UNACHIEVED.png. Os ícones são automaticamente atribuídos à conquista correspondente.
Ative a opção
Gerar versões não alcançadas dos ícones automaticamente para gerar automaticamente versões em tons de cinza, para uso quando não alcançadas, para as versões alcançadas dos ícones que enviar.
Ao enviar um CSV de definições junto com os ícones, apenas os ícones das conquistas no CSV serão atribuídos. Para enviar os ícones separadamente, envie-os sem um CSV de definições.
O que os usuários veem
Página de conquistas
Os usuários veem as suas conquistas na página de Conquistas Steam disponível no cliente Steam e no site da Comunidade Steam. A página de conquistas:
- Exibe o progresso e a porcentagem de conclusão por conjunto, incluindo os conjuntos de conteúdos adicionais.
- Permite comparar as próprias conquistas com até três amigos.
- Exibe a porcentagem de usuários que alcançaram cada conquista e destaca as conquistas raras.
- Permite que os usuários busquem conquistas e as filtrem por estado ou conjunto.
Cada jogo tem um URL dedicado para as conquistas:
| URL | Exibe |
|---|
https://steamcommunity.com/achievements/<AppID> | As conquistas do jogo, sem o progresso de nenhum usuário específico. Acessível independentemente de o usuário ter o jogo ou não. |
|
Páginas na loja
O painel de conquistas da página na loja exibe as conquistas do jogo, exceto as spoiler e arquivadas. As páginas de conteúdos adicionais exibem as conquistas do respectivo conjunto.
Perfis
Os usuários podem exibir quantos jogos e conjuntos eles concluíram no destaque de conquistas do perfil, e listar jogos no destaque de perfeccionista se tiver concluído qualquer um dos seus conjuntos.
Práticas recomendadas
- Adicione novos conjuntos para conteúdos novos: adicionar uma conquista a um conjunto que já foi lançado pode causar confusão nos usuários, pois o conjunto estará marcado como concluído, mas com conquistas não alcançadas. Criar um novo conjunto para um conteúdo novo, como um conteúdo adicional, atualização ou modo novo, mantém o progresso claro para os usuários.
- Arquive em vez de excluir: se os usuários tiverem alcançado uma conquista, arquive-a em vez de excluí-la, para que os usuários mantenham o que conquistaram.
- Use conjuntos de conteúdos adicionais para conquistas de conteúdos adicionais: isso mantém a conclusão do jogo base separada, assim quem não tiver o conteúdo adicional não fica impossibilitado de concluir o jogo.
- Use nomes curtos e descritivos para os conjuntos: os nomes dos conjuntos aparecem em vários lugares, incluindo no cliente Steam.
- Traduza os nomes dos conjuntos para cada idioma disponível no jogo usando o CSV de tradução ou o editor.
- Teste com conjuntos apenas para desenvolvimento antes de lançar novas conquistas para os usuários.
Perguntas frequentes
Preciso atualizar o jogo ou o SDK do Steamworks para usar os conjuntos de conquistas?
Não. Os conjuntos são configurados no Steamworks, e o jogo marca as conquistas como alcançadas usando os mesmos nomes e chamadas da API de antes.
O que acontece com as conquistas existentes?
Todas estão no conjunto do jogo base. Caso não crie nenhum outro conjunto, os usuários verão as conquistas do jogo como uma única lista na nova página de conquistas.
Se eu adicionar novas conquistas a um conjunto, quem o concluiu vai perder esse estado?
Os usuários que já concluíram um conjunto não perdem esse estado. No entanto, adicionar conquistas a um conjunto lançado significa que quem não o tiver concluído precisará fazer mais, então recomendamos criar novos conjuntos para conteúdos novos.
Qual é a diferença entre arquivar e excluir uma conquista?
Conquistas arquivadas permanecem visíveis a quem as alcançou, e não conta mais para a conclusão dos usuários que não as alcançaram. Conquistas excluídas são removidas para todos.
Posso transferir uma conquista para um conjunto diferente após o lançamento?
Sim, mas o editor avisará se a transferência resultará na ocultação da conquista dos usuários que a alcançaram ou na conclusão dos usuários.
Quantos conjuntos posso criar?
Até 40, incluindo o conjunto do jogo base.