Skip to main content

Reading Pairs

Visible pair access requires ReadPairData:

if (grant.Allows(SnowcloakIpcCapability.ReadPairData))
{
IReadOnlyList<PairInfo> visiblePairs = ipc.GetVisiblePairs();
int reportedVisibleCount = ipc.GetVisiblePairCount();

foreach (var pair in visiblePairs)
{
PairApplicationStatus? status = ipc.GetApplicationStatus(pair.Uid);
}
}

Out-of-range access requires both pair permissions:

var allPairPermissions =
SnowcloakIpcCapability.ReadPairData |
SnowcloakIpcCapability.ReadPairDataOutOfRange;

if (grant.Allows(allPairPermissions))
{
IReadOnlyList<PairInfo> allPairs = ipc.GetAllPairs();
}

GetPairByUid returns an out-of-range pair only when both permissions are granted. ResolvePair(objectIndex) remains an object-based visbility lookup.

PairInfo objects contain:

PropertyMeaning
UidThe player's Snowcloak UID.
AliasVanity ID, when present.
DisplayColourVanity colour, when present.
IsOnlineWhether the paired account is currently online. Useful for detecting connection interruptions.
IsVisibleA valid local game object is currently associated with the pair.
ObjectIndexValid local object index while visible; otherwise null.
IsPausedSyncing is paused.
IsAppliedSynced data is currently applied to the visible character.
IsDirectPairtrue for an individual pair; false when known only through a syncshell. When both, will always be true.
ApplicationStateCurrent effective application state.
ApplicationStateChangedAtUtcTime of the current tracked application state, when available.

PairApplicationStatus contains:

PropertyMeaning
UidSnowcloak UID whose appearance-application state is reported.
StateCurrent SnowcloakApplicationState.
ReasonHuman-readable explanation for a waiting, blocked or failed state, when available.
ChangedAtUtcUTC time at which Snowcloak recorded the current state. Synthetic snapshot states for which no transition time was recorded use DateTimeOffset.UnixEpoch.

SnowcloakApplicationState values are:

StateMeaning
UnknownNo recognised application state is available. Consumers must tolerate this value for compatibility.
IdleNo appearance application is currently active.
WaitingApplication is waiting for the character, an application slot or another prerequisite.
DownloadingRequired appearance files are being downloaded.
ApplyingSnowcloak is applying appearance data through its integrations.
AppliedAppearance data was successfully applied to the visible character.
BlockedApplication was deliberately prevented, for example by pause, combat, performance or safety state. Reason normally explains why.
FailedApplication was attempted but could not complete. Reason normally explains why.

See the event reference for the pair and application events. Re-query PairInfo after lifecycle events when exact current state matters.

Events are invalidation or activity signals. Re-query the relevant snapshot when exact current state matters. PairDataApplied means a visible appearance application completed, adn is unrelated to extension data delivery.