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

# Écrire des statistiques gérées par le titre

> Exemple de code XSAPI qui appelle XblTitleManagedStatsUpdateStatsAsync pour mettre à jour de manière sélective les valeurs des statistiques XBOX Live gérées par le titre d'un joueur.

Cette rubrique fournit un exemple de code montrant comment écrire des statistiques gérées par le titre.

<Note>La valeur de statistique stockée reflète la dernière valeur écrite au moyen de ces API. Toutefois, le **classement global de cette statistique ne conserve que la valeur la plus élevée enregistrée** pour chaque joueur ; l'écriture d'une valeur inférieure ne fait donc pas baisser la position du joueur dans le classement. Pour plus de détails et pour connaître les alternatives, consultez la [vue d'ensemble des statistiques gérées par le titre](/fr/services/xbox-services/player-data/stats-leaderboards/title-managed/live-stats-tm-overview) et la référence [`XblLeaderboardQuery`](/fr/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery).</Note>

## Mettre à jour uniquement les statistiques gérées par le titre spécifiées

Vous pouvez envoyer les statistiques spécifiées que vous souhaitez mettre à jour en appelant [XblTitleManagedStatsUpdateStatsAsync](/fr/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatsupdatestatsasync), qui met à jour de manière sélective les statistiques de l'utilisateur appelant.
Une statistique spécifiée n'est remplacée que si elle existe déjà. Les statistiques non spécifiées dans l'appel à `XblTitleManagedStatsUpdateStatsAsync` restent inchangées.

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

**Référence**

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

## Écrire toutes les statistiques à conserver et supprimer les autres

Pour écrire uniquement les statistiques gérées par le titre que vous souhaitez conserver et supprimer les autres, appelez [XblTitleManagedStatsWriteAsync](/fr/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatswriteasync) avec toutes les statistiques que vous souhaitez écrire.
Toutes les statistiques non incluses dans l'appel seront supprimées. Cet appel remplace le dernier document de statistiques du service par un nouveau document de statistiques qui ne contient que les valeurs que vous avez envoyées.

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

**Référence**

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


## Related topics

- [Vue d'ensemble des statistiques gérées par le titre](/fr/services/xbox-services/player-data/stats-leaderboards/title-managed/live-stats-tm-overview.md)
- [Configurer les statistiques et classements gérés par le titre](/fr/services/xbox-services/player-data/stats-leaderboards/title-managed/config/live-tm-leaderboards-portal.md)
- [Procédures](/fr/services/xbox-services/player-data/stats-leaderboards/title-managed/how-to/index.md)
- [Statistiques basées sur les événements et statistiques gérées par le titre](/fr/services/xbox-services/player-data/stats-leaderboards/live-stats-eb-vs-tm.md)
- [Configuration dans le portail des statistiques mises en avant gérées par le titre](/fr/services/xbox-services/player-data/stats-leaderboards/featured-stats/config/live-featuredstats-tm-portal.md)
