Skip to main content

Profiles and Pair Requests

Profile summary reads and window actions use different grants.

if (grant.Allows(SnowcloakIpcCapability.ReadProfileData))
{
ProfileSummary? summary = ipc.GetProfileSummary(uid);
}

if (grant.Allows(SnowcloakIpcCapability.OpenProfileWindow))
{
SnowcloakOperationResult result = ipc.OpenProfileWithResult(uid);
}

ProfileSummary contains:

PropertyMeaning
UidUID represented by the profile.
OverviewCached profile description when the full profile is available; otherwise the available profile tagline.
ContentRatingNumeric content rating: 0 General, 1 Mature or 2 Adult.
TagsProfile tags encoded as type:value strings. Treat unknown types and values as additive.
RevisionCached profile revision. A summary-only result can report zero when no full cached revision is available.
UpdatedAtUtcCached profile update time, when available.
IsDisabledWhether the cached profile is disabled.

It's important to note that a UIDs active profile may change based on the specific in-game character the player is using currently, if they share UIDs between them. Listen to ProfileUpdated(uid) and re-query as required - this also works for regular profile changes.

A plugin with OpenPairRequestWindow can ask Snowcloak to open a pair request confirmation for a targeted player:

SnowcloakOperationResult result = ipc.OpenPairRequest(target.ObjectIndex);

Plugins cannot send pair requests directly. Snowcloak validates the selected target if visible, no-actions on existing pairs, and leaves the final confirmation to the user.

MCDF application is intentionally narrow:

SnowcloakOperationResult result =
await ipc.LoadMcdfToObjectWithResultAsync(path, gposeObjectIndex);

It requires ApplyMcdf permissions, an existing local file, GPose mode to be active, a GPose-range object index, and a valid target character.