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

# Gravar estatísticas gerenciadas pelo título

> Código de exemplo da XSAPI que chama XblTitleManagedStatsUpdateStatsAsync para atualizar seletivamente os valores das estatísticas gerenciadas pelo título do XBOX Live de um jogador.

Este tópico fornece código de exemplo que mostra como gravar estatísticas gerenciadas pelo título.

<Note>O valor armazenado da estatística reflete o valor gravado mais recentemente por meio dessas APIs. No entanto, o **leaderboard global dessa estatística mantém somente o maior valor registrado** por jogador, portanto gravar um valor menor não reduz a posição do jogador no leaderboard. Para obter detalhes e alternativas, veja a [visão geral das estatísticas gerenciadas pelo título](/pt-BR/services/xbox-services/player-data/stats-leaderboards/title-managed/live-stats-tm-overview) e a referência de [`XblLeaderboardQuery`](/pt-BR/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery).</Note>

## Atualizar somente as estatísticas gerenciadas pelo título especificadas

Você pode enviar as estatísticas especificadas que deseja atualizar chamando [XblTitleManagedStatsUpdateStatsAsync](/pt-BR/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatsupdatestatsasync), que atualiza seletivamente as estatísticas do usuário chamador.
Uma estatística especificada só será substituída se já existir. Todas as estatísticas não especificadas na chamada para `XblTitleManagedStatsUpdateStatsAsync` permanecem inalteradas.

**API C**

```cpp theme={null}
std::vector<XblTitleManagedStatistic> stats{ s_svd->Stats() };
auto stat1 = std::find_if(stats.begin(), stats.end(), [](const XblTitleManagedStatistic& s)
{
    return std::string{ "AddedStat" } == s.statisticName;
});

auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = Data()->queue;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*
    HRESULT hr = XAsyncGetStatus(asyncBlock, false);
};

HRESULT hr = XblTitleManagedStatsUpdateStatsAsync(
    Data()->xboxLiveContext,
    &(*stat1),
    1,
    asyncBlock.get()
);

if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
    // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
    asyncBlock.release();
}
```

**Referência**

* [XAsyncBlock](/pt-BR/reference/system/xasync/structs/xasyncblock)
* [XAsyncGetStatus](/pt-BR/reference/system/xasync/functions/xasyncgetstatus)
* [XblTitleManagedStatistic](/pt-BR/reference/live/xsapi-c/title_managed_statistics_c/structs/xbltitlemanagedstatistic)
* [XblTitleManagedStatsUpdateStatsAsync](/pt-BR/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatsupdatestatsasync)

## Gravar todas as estatísticas que você deseja manter e excluir as demais

Para gravar somente as estatísticas gerenciadas pelo título que você deseja manter e excluir as demais, chame [XblTitleManagedStatsWriteAsync](/pt-BR/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatswriteasync) com todas as estatísticas que deseja gravar.
Todas as estatísticas não incluídas na chamada serão removidas. Essa chamada substitui o último documento de estatísticas no serviço por um novo documento de estatísticas que contém somente os valores que você enviou.

**API C**

```cpp theme={null}
std::vector<XblTitleManagedStatistic> statList;
statList.push_back(XblTitleManagedStatistic{ "MyStatName1", XblTitleManagedStatType::Number, 200 });
statList.push_back(XblTitleManagedStatistic{ "MyStatName2", XblTitleManagedStatType::String, 0, "SomeValue" });

auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*
    HRESULT hr = XAsyncGetStatus(asyncBlock, false);
};

HRESULT hr = XblTitleManagedStatsWriteAsync(
    xboxLiveContext, 
    xboxUserId, 
    statList.data(), statList.size(), 
    asyncBlock.get());
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
    // If the call fails, the std::unique_ptr will keep ownership and delete the XAsyncBlock*
    asyncBlock.release();
}
```

**Referência**

* [XAsyncGetStatus](/pt-BR/reference/system/xasync/functions/xasyncgetstatus)
* [XblTitleManagedStatistic](/pt-BR/reference/live/xsapi-c/title_managed_statistics_c/structs/xbltitlemanagedstatistic)
* [XblTitleManagedStatsWriteAsync](/pt-BR/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatswriteasync)
* [XblTitleManagedStatType](/pt-BR/reference/live/xsapi-c/title_managed_statistics_c/enums/xbltitlemanagedstattype)


## Related topics

- [Visão geral das estatísticas gerenciadas pelo título](/pt-BR/services/xbox-services/player-data/stats-leaderboards/title-managed/live-stats-tm-overview.md)
- [Código de exemplo de estatísticas e leaderboards gerenciados pelo título](/pt-BR/services/xbox-services/player-data/stats-leaderboards/title-managed/how-to/live-statslb-tm-howto-nav.md)
- [Configurar estatísticas e leaderboards gerenciados pelo título](/pt-BR/services/xbox-services/player-data/stats-leaderboards/title-managed/config/live-tm-leaderboards-portal.md)
- [Instruções](/pt-BR/services/xbox-services/player-data/stats-leaderboards/title-managed/how-to/index.md)
- [Estatísticas baseadas em eventos vs. estatísticas gerenciadas pelo título](/pt-BR/services/xbox-services/player-data/stats-leaderboards/live-stats-eb-vs-tm.md)
