> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Gravando um evento para viabilizar uma conquista baseada em eventos

> Código de exemplo de XblEventsWriteInGameEvent que dispara um evento do jogo para que as regras de estatísticas dos serviços do XBOX atualizem as estatísticas e desbloqueiem conquistas baseadas em eventos.

Este tópico mostra um código de exemplo de como gravar um evento no jogo.

Quando o evento é disparado, as estatísticas baseadas em eventos no serviço são atualizadas de acordo com as regras de estatísticas que você definiu no Partner Center.
Essas estatísticas, por sua vez, viabilizam as conquistas baseadas em eventos.

## Antes de começar

* Seu produto usa o conjunto completo de recursos dos serviços do XBOX. Novos produtos começam com serviços do XBOX limitados, e as conquistas e o gamerscore não ficam disponíveis até que seu produto seja integrado. Para obter mais informações, consulte [Solicitar a integração do produto para habilitar os serviços do XBOX completos](https://docs.xbox.com/pt-BR/home/onboarding.md#request-product-onboarding-to-enable-full-xbox-services).
* Você configurou o evento, as regras de estatísticas e a conquista no Partner Center e publicou a configuração dos serviços do XBOX na sua área restrita de desenvolvimento.
* Seu kit de desenvolvimento ou Windows PC usa a mesma área restrita de desenvolvimento, e você entra com uma conta de teste que tem acesso a essa área restrita. Para obter mais informações, consulte [Visão geral das áreas restritas dos serviços do XBOX](https://docs.xbox.com/pt-BR/services/xbox-services/fundamentals/sandboxes/live-setup-sandbox.md).
* Seu jogo inicializou o Gaming Runtime e, em seguida, chamou [XblInitialize](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/xbox_live_global_c/functions/xblinitialize.md) com uma estrutura [XblInitArgs](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/xbox_live_global_c/structs/xblinitargs.md) cujo membro `scid` contém sua ID de configuração de serviço (SCID). A SCID diferencia maiúsculas de minúsculas. Para obter mais informações, consulte [Como usar as APIs dos serviços do XBOX](https://docs.xbox.com/pt-BR/services/xbox-services/fundamentals/xbox-services-api/live-gs-xbl-apis.md).
* Você conectou um usuário e criou um `XblContextHandle` para esse usuário chamando [XblContextCreateHandle](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/xbox_live_context_c/functions/xblcontextcreatehandle.md).

Para redefinir as conquistas e estatísticas de uma conta de teste entre execuções de teste, use a [Ferramenta de redefinição de dados do jogador (XblPlayerDataReset.exe)](https://docs.xbox.com/pt-BR/tools/tools-services/live-player-data-reset.md). Para redefinir um jogador por XUID, a conta de desenvolvedor com a qual você entra usando XblDevAccount.exe precisa da permissão Tools Access no nível do produto.

## Gravar o evento

O exemplo a seguir usa a API C simples. `LogToScreen` representa a função de registro em log do seu aplicativo.

```cpp theme={null}
HRESULT hr = XblEventsWriteInGameEvent(
    xboxLiveContext,
    "PuzzleSolved",
    R"({"DifficultyLevelId":100, "GameplayModeId":"Adventure"})",
    R"({"LocationX":1,"LocationY":1})"
);
if (FAILED(hr))
{
    // Log the failure. Don't retry the call in a loop.
    LogToScreen("XblEventsWriteInGameEvent failed: 0x%08X", static_cast<unsigned int>(hr));
}
```

Para obter mais informações, veja [XblEventsWriteInGameEvent](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/events_c/functions/xbleventswriteingameevent.md).

## Solução de problemas

* **A chamada retorna `E_INVALIDARG`.** *xboxLiveContext* ou o nome do evento é nulo.
* **A chamada retorna `E_XBL_NOT_INITIALIZED`.** Chame `XblInitialize` antes de gravar eventos.
* **A chamada retorna `E_NOTIMPL`.** O recurso XGameEvent do Gaming Runtime não está disponível. Em um Windows PC, o Gaming Runtime Services instalado precisa incluir o recurso XGameEvent.
* **A chamada é bem-sucedida, mas a estatística ou a conquista não muda.** O nome do evento e os nomes dos campos do evento precisam corresponder aos nomes na configuração de serviço do seu título. Os nomes não diferenciam maiúsculas de minúsculas. Se o nome do evento não corresponder a um evento na configuração de serviço, o serviço descartará o evento sem notificar o seu jogo.
* **Os valores dos campos estão no lugar errado.** Coloque os campos que têm um conjunto finito de valores numéricos ou de cadeia de caracteres, como nível de dificuldade ou modo de jogo, nas dimensões. Coloque as métricas numéricas escalares, como pontuação, tempo ou posição, nas medidas.
* **As atualizações levam tempo.** Os eventos são gravados localmente no dispositivo, mesmo quando ele está offline, e são carregados quando o dispositivo fica online. Se o dispositivo estiver online, as estatísticas baseadas em eventos normalmente são atualizadas de 5 a 20 segundos após a gravação do evento.


## Related topics

- [Código de exemplo de conquistas baseadas em eventos](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/achievements/event-based/how-to/live-achievements-eb-howto-nav.md)
- [Exemplos de conquistas baseadas em eventos](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/achievements/event-based/how-to/index.md)
- [Visão geral da API Achievements Manager do XBOX](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/achievements/achievements-manager/live-achievements-manager-overview.md)
- [Cenários para criar conquistas baseadas em eventos](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/achievements/event-based/concepts/live-achievements-scenarios.md)
- [Conquistas baseadas em eventos vs. gerenciadas pelo título](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/achievements/live-achievements-eb-vs-tm.md)
