Pular para o conteúdo principal
No XBOX Game Development Kit (GDK) e no Steam, as conquistas têm informações como nome, descrição, ícone, se foram desbloqueadas para o usuário atual e, opcionalmente, o progresso para concluí-las. O Steam também tem uma API de estatísticas usada pelos jogos para comparar o progresso de um usuário com alguma meta predeterminada e desbloquear conquistas quando essas metas são superadas. Na verdade, o XBOX Game Development Kit (GDK) tem duas APIs de conquistas: baseada em eventos (anteriormente chamada de Achievements 2013) e gerenciada pelo título (anteriormente chamada de Achievements 2017). Embora os dois sistemas sejam opções viáveis, as conquistas/estatísticas gerenciadas pelo título serão muito mais familiares para você se estiver vindo do Steam e corresponderão à lógica existente que provavelmente já está presente no seu jogo. Por esse motivo, descreveremos essa API neste tópico. Para obter mais informações sobre as diferenças entre as duas APIs, consulte Conquistas baseadas em eventos e gerenciadas pelo título. As seções a seguir descrevem as diferenças entre as conquistas na API do Steamworks e no XBOX Game Development Kit (GDK). Para usar as APIs de conquistas gerenciadas pelo título, você precisa criar um identificador de contexto dos XBOX services. Isso pode ser feito usando a função XblContextCreateHandle e um XUserHandle da API XUserAddResult (do tópico Autenticação de usuários e propriedade).

Acompanhando o progresso das conquistas

Na API do Steam, você pode usar a API ISteamUserStats::GetStat/ISteamUser::SetStat para acompanhar o progresso de um usuário em direção a uma conquista, tornando os valores armazenados na API Steam Stats a fonte de verdade para o valor de progresso atual. Com as conquistas gerenciadas pelo título, seu jogo é a única fonte de verdade e deve acompanhar o progresso atual do usuário por conta própria. A atualização do progresso atual na nuvem com uma chamada de API é feita como uma espécie de “check-in” e é usada para mostrar o progresso de um usuário em algumas superfícies do ecossistema XBOX. Não há orientação específica sobre onde o valor de progresso atual deve ficar, mas muitos jogos optam por armazená-lo no arquivo de salvamento (e na nuvem), enquanto outros podem armazená-lo no próprio serviço de back-end. Certifique-se de manter os valores entre a nuvem e o sistema interno de gerenciamento de estatísticas do seu jogo sincronizados entre si.

Enumerando todas as conquistas

Para obter todas as estatísticas de um usuário com a API do Steamworks, normalmente você chamaria ISteamUserStats::RequestUserStats para extrair as estatísticas mais recentes do servidor. Depois que o retorno de chamada correspondente fosse disparado, você poderia iterar por cada conquista pelo nome da API usando as funções ISteamUserStats::GetStat/ISteamUserStats::GetAchievement e inicializar o estado do jogo usando os dados retornados. Com o XBOX Game Development Kit (GDK), você pode simplesmente usar a função XblAchievementsGetAchievementsForTitleIdAsync e, em seguida, usar os dados de cada objeto de conquista na matriz fornecida como parâmetro de saída de XblAchievementsResultGetAchievements para inicializar o estado do jogo. Cada conquista é fornecida como uma struct XblAchievement. Para obter mais informações sobre os dados que ela contém, consulte o tópico de referência.

Steamworks

XBOX Game Development Kit (GDK)

Para obter mais informações sobre conquistas gerenciadas pelo título, consulte Obtendo conquistas gerenciadas pelo título.

Atualizando o progresso de uma conquista e desbloqueando conquistas

No XBOX Game Development Kit (GDK) e no Steam, o código do jogo determina quando uma conquista deve ser desbloqueada. Com o XBOX Game Development Kit (GDK), definir o progresso de uma conquista como 100 a desbloqueia. As seções a seguir descrevem as etapas necessárias para atualizar o progresso de um usuário em uma conquista especificada com as duas APIs. Veja a seguir um exemplo de código de um método UpdateAchievement, implementado nos dois SDKs, que recebe uma ID/nome de API da conquista (e o nome de API da estatística no Steam), o quanto incrementar a conquista e qual é o valor de destino para desbloquear essa conquista, e atualiza o progresso e o status de desbloqueio da conquista de acordo.

Steamworks

XBOX Game Development Kit (GDK)

Para obter mais informações sobre conquistas gerenciadas pelo título, consulte Atualizando conquistas gerenciadas pelo título.

Conquistas offline

Desbloquear uma conquista do XBOX não exige uma conexão de rede. Ela é desbloqueada automaticamente no servidor mais tarde, sem código adicional, se o usuário não estiver conectado à rede XBOX (também conhecida como XBOX Live).

Obtendo as conquistas de outro usuário

Para obter as conquistas de outro usuário, você pode simplesmente chamar as funções XblAchievementsGetAchievementsForTitleAsync/XblAchievementsGetAchievementAsync com a XBOX User ID (XUID) do usuário cujas conquistas você deseja buscar. Isso é semelhante a usar as funções ISteamUser::RequestUserStats, ISteamUserStats::GetUserStat e ISteamUserStats::GetUserAchievement no Steam.

Redefinindo conquistas

Ao contrário de ISteamUserStats::ResetAllStats da API do Steamworks, que pode ser usada para redefinir o progresso do usuário em todas as estatísticas e, se especificado, nas conquistas, o XBOX Game Development Kit (GDK) não tem nenhuma capacidade documentada de redefinir programaticamente o progresso ou o status de desbloqueio das conquistas. Tentar chamar XblAchievementsUpdateAchievementAsync com um valor de progresso 0 deixa o valor de progresso inalterado. No entanto, você pode usar a ferramenta Player Data Reset (XblPlayerDataReset.exe) durante os testes para fazer isso.

Limitação de taxa

Ao atualizar o progresso das conquistas, tome cuidado para evitar chamar a XBOX Services API (XSAPI) com muita frequência, pois isso pode fazer com que seu jogo atinja o limite de taxa. Isso pode causar um comportamento inesperado e uma experiência ruim para seus usuários. Para conquistas que acompanham estatísticas atualizadas com frequência, tente agrupar as chamadas de API para que sejam disparadas depois que um determinado número de eventos ocorrer ou para atualizar no servidor em um determinado intervalo de tempo. Você pode depurar suas chamadas de API usando o XBOX services Trace Analyzer (XblTraceAnalyzer.exe). Para obter mais informações sobre a limitação de taxa nos XBOX services, consulte Limitação de taxa refinada.
Última modificação em 6 de outubro de 2026