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

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

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

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

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

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

[XblTitleManagedStatsUpdateStatsAsync](/reference/live/xsapi-c/title_managed_statistics_c/functions/xbltitlemanagedstatsupdatestatsasync) を呼び出すことで、更新したい統計を指定して送信し、呼び出し元ユーザーの統計を選択的に更新できます。
指定した統計は、既に存在する場合にのみ上書きされます。`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](/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)

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

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

**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](/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

- [タイトル管理型 Stats およびリーダーボードのサンプル コード](/ja-jp/services/xbox-services/player-data/stats-leaderboards/title-managed/how-to/live-statslb-tm-howto-nav.md)
- [タイトル管理型 Stats およびリーダーボードの構成](/ja-jp/services/xbox-services/player-data/stats-leaderboards/title-managed/config/live-tm-leaderboards-portal.md)
- [イベント ベース Stats とタイトル管理型 Stats の比較](/ja-jp/services/xbox-services/player-data/stats-leaderboards/live-stats-eb-vs-tm.md)
- [XBOX サービスの構成](/ja-jp/publishing/game-publishing/concepts/xbox-services.md)
- [ハウツー](/ja-jp/services/xbox-services/player-data/stats-leaderboards/title-managed/how-to/index.md)
