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

# Escritura de estadísticas administradas por el título

> Código de ejemplo de XSAPI que llama a XblTitleManagedStatsUpdateStatsAsync para actualizar de forma selectiva los valores de las estadísticas de XBOX Live administradas por el título de un jugador.

Este tema proporciona código de ejemplo que muestra cómo escribir estadísticas administradas por el título.

<Note>El valor de la estadística almacenada refleja el valor escrito más recientemente mediante estas API. Sin embargo, la **tabla de clasificación global de esa estadística conserva solo el valor más alto registrado** por jugador, por lo que escribir un valor más bajo no reduce la posición del jugador en la tabla de clasificación. Para obtener más detalles y alternativas, consulte la [información general sobre las estadísticas administradas por el título](/services/xbox-services/player-data/stats-leaderboards/title-managed/live-stats-tm-overview) y la referencia de [`XblLeaderboardQuery`](/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery).</Note>

## Actualización solo de las estadísticas administradas por el título especificadas

Puede enviar las estadísticas especificadas que quiera actualizar llamando a [XblTitleManagedStatsUpdateStatsAsync](/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatsupdatestatsasync), que actualiza de forma selectiva las estadísticas del usuario que realiza la llamada.
Una estadística especificada solo se sobrescribirá si ya existe. Todas las estadísticas que no se especifiquen en la llamada a `XblTitleManagedStatsUpdateStatsAsync` permanecen sin cambios.

**API de 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();
}
```

**Referencia**

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

## Escritura de todas las estadísticas que quiera conservar y eliminación del resto

Para escribir solo las estadísticas administradas por el título que quiera conservar y eliminar el resto, llame a [XblTitleManagedStatsWriteAsync](/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatswriteasync) con todas las estadísticas que quiera escribir.
Todas las estadísticas que no se incluyan en la llamada se quitarán. Esta llamada reemplaza el último documento de estadísticas del servicio por un nuevo documento de estadísticas que contiene solo los valores que envió.

**API de 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();
}
```

**Referencia**

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


## Related topics

- [Información general sobre las estadísticas administradas por el título](/es/services/xbox-services/player-data/stats-leaderboards/title-managed/live-stats-tm-overview.md)
- [Código de ejemplo de Estadísticas y tablas de clasificación administradas por el título](/es/services/xbox-services/player-data/stats-leaderboards/title-managed/how-to/live-statslb-tm-howto-nav.md)
- [Configurar las estadísticas y tablas de clasificación administradas por el título](/es/services/xbox-services/player-data/stats-leaderboards/title-managed/config/live-tm-leaderboards-portal.md)
- [Procedimientos](/es/services/xbox-services/player-data/stats-leaderboards/title-managed/how-to/index.md)
- [Estadísticas basadas en eventos frente a estadísticas administradas por el título](/es/services/xbox-services/player-data/stats-leaderboards/live-stats-eb-vs-tm.md)
