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

# É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 des services XBOX 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](https://docs.xbox.com/fr/services/xbox-services/player-data/stats-leaderboards/title-managed/live-stats-tm-overview.md) et la référence [`XblLeaderboardQuery`](https://docs.xbox.com/fr/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery).

## 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](https://docs.xbox.com/fr/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatsupdatestatsasync.md), 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}
// "HighScore" represents a stat that your game already wrote for this user.
XblTitleManagedStatistic stats[] =
{
    { "HighScore", XblTitleManagedStatType::Number, 1200.0, nullptr }
};

auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue; // Your game's task 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);
    if (FAILED(hr))
    {
        // The outcome of the update isn't confirmed. Keep the stat values in your game's data and
        // submit them again later.
    }
};

// xboxLiveContext is the XblContextHandle for the user whose stats you're updating.
HRESULT hr = XblTitleManagedStatsUpdateStatsAsync(
    xboxLiveContext,
    stats,
    _countof(stats),
    asyncBlock.get()
);

if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* since the callback will take over ownership.
    asyncBlock.release();
}
else
{
    // The request didn't start, and the std::unique_ptr deletes the XAsyncBlock*.
    // Keep the stat values in your game's data and submit them again later.
}
```

Si l'appel échoue pour quelque raison que ce soit, il incombe à votre jeu de soumettre à nouveau la requête.

**Référence**

* [XAsyncBlock](https://docs.xbox.com/fr/reference/system/xasync/structs/xasyncblock.md)
* [XAsyncGetStatus](https://docs.xbox.com/fr/reference/system/xasync/functions/xasyncgetstatus.md)
* [XblTitleManagedStatistic](https://docs.xbox.com/fr/reference/live/xsapi-c/title_managed_statistics_c/structs/xbltitlemanagedstatistic.md)
* [XblTitleManagedStatsUpdateStatsAsync](https://docs.xbox.com/fr/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatsupdatestatsasync.md)

## É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](https://docs.xbox.com/fr/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatswriteasync.md) 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.
L'argument `xboxUserId` doit correspondre à l'utilisateur pour lequel le `XblContextHandle` a été créé ; sinon, l'appel retourne `E_INVALIDARG`.

**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](https://docs.xbox.com/fr/reference/system/xasync/functions/xasyncgetstatus.md)
* [XblTitleManagedStatistic](https://docs.xbox.com/fr/reference/live/xsapi-c/title_managed_statistics_c/structs/xbltitlemanagedstatistic.md)
* [XblTitleManagedStatsWriteAsync](https://docs.xbox.com/fr/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatswriteasync.md)
* [XblTitleManagedStatType](https://docs.xbox.com/fr/reference/live/xsapi-c/title_managed_statistics_c/enums/xbltitlemanagedstattype.md)


## Related topics

- [Vue d'ensemble des statistiques gérées par le titre](https://docs.xbox.com/fr/services/xbox-services/player-data/stats-leaderboards/title-managed/live-stats-tm-overview.md)
- [Données des joueurs](https://docs.xbox.com/fr/services/xbox-services/player-data/stats-leaderboards/title-managed/how-to/index.md)
- [Configurer les statistiques mises en avant et les classements gérés par le titre dans Partner Center](https://docs.xbox.com/fr/services/xbox-services/player-data/stats-leaderboards/title-managed/config/live-tm-leaderboards-portal.md)
- [Statistiques basées sur les événements et statistiques gérées par le titre](https://docs.xbox.com/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](https://docs.xbox.com/fr/services/xbox-services/player-data/stats-leaderboards/featured-stats/config/live-featuredstats-tm-portal.md)
