> For the complete documentation index, see [llms.txt](https://docs.msquared.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.msquared.io/creation/unreal-development/features-and-tutorials/player-profile-data-providers.md).

# Player Profile Data Providers

{% hint style="success" %}
verified: 2025-12-04 version: 1.0
{% endhint %}

The Morpheus platform by default stores a limited set of data about each player (the "player profile"), and provides built in functions to get and set this data. This data is currently limited to:

* Player Display Name
* MML Avatar URL
* User ID (get only)

Use an `M2_WebServicesProfileDataProvider` to get and set this data, and to configure exactly how the data is stored.

See `WBP_M2Example_SettingsMenu` for an example of loading and saving the player name and avatar.

## Configuring a Profile Data Provider

Profile data is just a series of key-value pairs. The default Morpheus implementation is in `BP_M2_ProfileDataProvider` and uses the `M2_KVStoreService` to store data.

The default data provider can be changed in the World Settings by providing your own child blueprint of `M2_WebServicesProfileDataProvider` and overriding the relevant functions. See `BP_M2_ProfileDataProvider` as a reference implementation.

<figure><img src="https://1456550285-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoWTlPaoHd1McSakqMigu%2Fuploads%2FQbm7t12u78JfIqnlwNol%2Fimage.png?alt=media&amp;token=175da32e-6a24-407b-994a-535af9995547" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1456550285-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoWTlPaoHd1McSakqMigu%2Fuploads%2FinDIwkY3JUJwbIM6SrQW%2Fimage.png?alt=media&amp;token=9a122790-fefd-4871-ab42-fc032e34118a" alt=""><figcaption></figcaption></figure>

## Accessing profile data

Get the `M2_WebServicesProfileDataProvider` world service to access profile data:

<figure><img src="https://1456550285-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoWTlPaoHd1McSakqMigu%2Fuploads%2Fl0evp3IKchBH1FgoQLHa%2Fimage.png?alt=media&amp;token=b10a817a-a3a9-49d4-94a9-4f31eff3a80b" alt=""><figcaption></figcaption></figure>

The profile data is loaded as part of bootflow, so the `HasProfileBeenLoaded` check is only necessary if called before bootflow completes.

The `LocalUserIndex` will usually be `0` (this exists to support e.g. multiple bots running on the same client)

## Saving profile data

To save new name and avatar data, use the `M2_WebServicesProfileDataProvider` world service again:

<figure><img src="https://1456550285-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoWTlPaoHd1McSakqMigu%2Fuploads%2FZeTv5MKuwd5WXdvdwt2h%2Fimage.png?alt=media&amp;token=9e5d2906-c698-4b48-ac08-e5d849e899c8" alt=""><figcaption></figcaption></figure>
