> ## 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.

# Tratar uma alteração de estatística baseada em eventos

> Use código da XBOX Services API (XSAPI) para acompanhar alterações de estatísticas baseadas em eventos e limpar manipuladores usando o serviço Real-Time Activity (RTA).

Este tópico fornece código de exemplo para tratar uma alteração de estatística baseada em eventos. Os exemplos são fragmentos de código C++ que usam a API C simples da XBOX Services API (XSAPI). A XSAPI entrega as atualizações de estatísticas por meio do serviço Real-Time Activity (RTA) e gerencia as assinaturas do RTA para você.

## Antes de começar

Os fragmentos de código compartilham um mesmo escopo e pressupõem o seguinte:

* `xboxLiveContext` é um `XblContextHandle` do usuário conectado. Para criar um, chame [XblContextCreateHandle](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/xbox_live_context_c/functions/xblcontextcreatehandle.md).
* `xboxUserId` é a ID de usuário do XBOX (XUID) `uint64_t` do jogador cujas atualizações de estatísticas você deseja receber.
* `scid` é um `const char*` que contém a ID de configuração de serviço (SCID) do seu título.
* `TotalPuzzlesSolved` é um nome de estatística de exemplo. Substitua-o pelo nome de uma estatística baseada em eventos configurada para o seu título.
* `LogToScreen` é uma função de registro em log no estilo `printf` do seu aplicativo.

**Para obter notificações sobre alterações de estatísticas baseadas em eventos**

1. [Adicione um manipulador de alteração de estatística.](#add-a-stat-changed-handler)
2. [Acompanhe as estatísticas das quais você deseja receber atualizações.](#track-the-stats-that-you-want-updates-for)

**Para limpar**

1. [Pare de acompanhar as estatísticas.](#stop-tracking-stats)
2. [Remova um manipulador de alteração de estatística.](#remove-a-stat-changed-handler)

## Adicionar um manipulador de alteração de estatística&#x20;

Registre um manipulador de eventos para notificações de alteração de estatística usando o código de exemplo a seguir.
O manipulador de eventos recebe um objeto [XblStatisticChangeEventArgs](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/structs/xblstatisticchangeeventargs.md). Se *xboxLiveContext* ou o manipulador for nulo, `XblUserStatisticsAddStatisticChangedHandler` retornará 0 e não registrará o manipulador.

```cpp theme={null}
void* context{ nullptr };
XblFunctionContext statisticChangedFunctionContext = XblUserStatisticsAddStatisticChangedHandler(
    xboxLiveContext,
    [](XblStatisticChangeEventArgs eventArgs, void* context) 
    {
        // Handle stat change. 
        LogToScreen("Statistic changed callback: stat changed (%s = %s)",
            eventArgs.latestStatistic.statisticName, 
            eventArgs.latestStatistic.value); 
    },
    context
);

if (statisticChangedFunctionContext == 0)
{
    LogToScreen("XblUserStatisticsAddStatisticChangedHandler failed.");
}
```

## Acompanhar as estatísticas das quais você deseja receber atualizações&#x20;

Seu manipulador recebe atualizações somente das estatísticas que você acompanha. Chame [XblUserStatisticsTrackStatistics](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticstrackstatistics.md) com os usuários e os nomes de estatísticas dos quais você deseja receber atualizações. Você pode alterar o conjunto de estatísticas acompanhadas a qualquer momento, independentemente dos seus manipuladores.

```cpp theme={null}
const char* statisticNames[] = { "TotalPuzzlesSolved" };

HRESULT hr = XblUserStatisticsTrackStatistics(
    xboxLiveContext,
    &xboxUserId,
    1,
    scid,
    statisticNames,
    _countof(statisticNames)
);

if (FAILED(hr))
{
    LogToScreen("XblUserStatisticsTrackStatistics failed: 0x%08X", static_cast<unsigned int>(hr));
}
```

> [!NOTE]
>
> `XblUserStatisticsSubscribeToStatisticChange` e `XblUserStatisticsUnsubscribeFromStatisticChange` foram preteridas. Elas ainda funcionam, mas serão removidas em uma versão futura e, dependendo das configurações do compilador, as chamadas a elas podem gerar avisos de preterição. Em vez delas, use `XblUserStatisticsTrackStatistics` e `XblUserStatisticsStopTrackingStatistics`.

## Parar de acompanhar estatísticas&#x20;

Quando você não precisar mais de atualizações de estatísticas específicas, chame [XblUserStatisticsStopTrackingStatistics](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsstoptrackingstatistics.md) com os mesmos usuários, SCID e nomes de estatísticas que você acompanhou.

```cpp theme={null}
hr = XblUserStatisticsStopTrackingStatistics(
    xboxLiveContext,
    &xboxUserId,
    1,
    scid,
    statisticNames,
    _countof(statisticNames)
);

if (FAILED(hr))
{
    LogToScreen("XblUserStatisticsStopTrackingStatistics failed: 0x%08X", static_cast<unsigned int>(hr));
}
```

Como alternativa, para interromper as atualizações de todas as estatísticas que você acompanha para um conjunto de usuários, chame [XblUserStatisticsStopTrackingUsers](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsstoptrackingusers.md) em vez de `XblUserStatisticsStopTrackingStatistics`.

```cpp theme={null}
hr = XblUserStatisticsStopTrackingUsers(
    xboxLiveContext,
    &xboxUserId,
    1
);

if (FAILED(hr))
{
    LogToScreen("XblUserStatisticsStopTrackingUsers failed: 0x%08X", static_cast<unsigned int>(hr));
}
```

A XSAPI conta as solicitações de acompanhamento. Se você acompanhar a mesma estatística de um usuário mais de uma vez, chame uma função de interrupção do acompanhamento o mesmo número de vezes para interromper as atualizações.

## Remover um manipulador de alteração de estatística&#x20;

Remova um manipulador de eventos para notificações de alteração de estatística usando o código de exemplo a seguir.

```cpp theme={null}
XblUserStatisticsRemoveStatisticChangedHandler(
    xboxLiveContext,
    statisticChangedFunctionContext
);
```

## Confira também

* [Programando o serviço RTA](https://docs.xbox.com/pt-BR/services/xbox-services/fundamentals/rta/how-to/live-programming-rta.md)
* [XblStatisticChangeEventArgs](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/structs/xblstatisticchangeeventargs.md)
* [XblUserStatisticsAddStatisticChangedHandler](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsaddstatisticchangedhandler.md)
* [XblUserStatisticsTrackStatistics](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticstrackstatistics.md)
* [XblUserStatisticsStopTrackingStatistics](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsstoptrackingstatistics.md)
* [XblUserStatisticsStopTrackingUsers](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsstoptrackingusers.md)
* [XblUserStatisticsRemoveStatisticChangedHandler](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsremovestatisticchangedhandler.md)


## Related topics

- [Código de exemplo de estatísticas e leaderboards baseados em eventos (conteúdo)](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-statslb-eb-howto-nav.md)
- [XblUserStatisticsAddStatisticChangedHandler](https://docs.xbox.com/pt-BR/reference/live/xsapi-c/user_statistics_c/functions/xbluserstatisticsaddstatisticchangedhandler.md)
- [Configuração no portal de estatísticas baseadas em eventos](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/stats-leaderboards/event-based/config/live-stats-eb-portal.md)
- [Gravar um evento para alimentar uma estatística baseada em eventos](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-sending-eb-stat.md)
- [Configuração no portal de estatísticas em destaque baseadas em eventos](https://docs.xbox.com/pt-BR/services/xbox-services/player-data/stats-leaderboards/featured-stats/config/live-featuredstats-eb-portal.md)
