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

# タイトル管理の統計の書き込み

> XblTitleManagedStatsUpdateStatsAsync を呼び出して、プレイヤーのタイトル管理型 XBOX Live 統計値を選択的に更新する XSAPI サンプル コード。

このトピックでは、タイトル管理の統計を書き込む方法を示すサンプル コードを提供します。

> [!NOTE]
>
> 格納されている統計値には、これらの API を通じて最後に書き込まれた値が反映されます。ただし、**その統計のグローバル リーダーボードは、プレイヤーごとに記録された最高値のみを保持する** ため、より小さい値を書き込んでもプレイヤーのリーダーボード上の位置は下がりません。詳細と代替手段については、[タイトル管理の統計の概要](https://docs.xbox.com/ja-jp/services/xbox-services/player-data/stats-leaderboards/title-managed/live-stats-tm-overview.md) と [`XblLeaderboardQuery`](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery) リファレンスを参照してください。

## 指定したタイトル管理の統計のみを更新する

[XblTitleManagedStatsUpdateStatsAsync](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatsupdatestatsasync.md) を呼び出すことで、更新したい統計を指定して送信し、呼び出し元ユーザーの統計を選択的に更新できます。
指定した統計は、既に存在する場合にのみ上書きされます。`XblTitleManagedStatsUpdateStatsAsync` の呼び出しで指定されていない統計は変更されません。

**C API**

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

**リファレンス**

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

## 保持したい統計をすべて書き込み、残りを削除する

保持したいタイトル管理の統計のみを書き込み、残りを削除するには、書き込みたいすべての統計を指定して [XblTitleManagedStatsWriteAsync](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatswriteasync.md) を呼び出します。
呼び出しに含まれていない統計はすべて削除されます。この呼び出しは、サービス上の最後の統計ドキュメントを、送信された値のみを含む新しい統計ドキュメントで置き換えます。

**C API**

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

**リファレンス**

* [XAsyncGetStatus](https://docs.xbox.com/ja-jp/reference/system/xasync/functions/xasyncgetstatus.md)
* [XblTitleManagedStatistic](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/title_managed_statistics_c/structs/xbltitlemanagedstatistic.md)
* [XblTitleManagedStatsWriteAsync](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatswriteasync.md)
* [XblTitleManagedStatType](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/title_managed_statistics_c/enums/xbltitlemanagedstattype.md)


## Related topics

- [タイトル管理の統計の概要](https://docs.xbox.com/ja-jp/services/xbox-services/player-data/stats-leaderboards/title-managed/live-stats-tm-overview.md)
- [タイトル管理の統計とリーダーボードのサンプル コード (目次)](https://docs.xbox.com/ja-jp/services/xbox-services/player-data/stats-leaderboards/title-managed/how-to/live-statslb-tm-howto-nav.md)
- [Partner Center でのタイトル管理の注目の統計とリーダーボードの構成](https://docs.xbox.com/ja-jp/services/xbox-services/player-data/stats-leaderboards/title-managed/config/live-tm-leaderboards-portal.md)
- [イベント ベースの統計とタイトル管理の統計の比較](https://docs.xbox.com/ja-jp/services/xbox-services/player-data/stats-leaderboards/live-stats-eb-vs-tm.md)
- [タイトル管理の統計とリーダーボード (目次)](https://docs.xbox.com/ja-jp/services/xbox-services/player-data/stats-leaderboards/title-managed/live-statslb-tm-nav.md)
