Skip to content
Version 2.11.0
↓ Get the launcher

PartyMember structure

One party member’s snapshot. Composed from wire deliveries on the GrpcTeamNtf service. Immutable; rebuilt by PartyService whenever any field changes.

public struct PartyMember : IEquatable<PartyMember>
name description
PartyMember(…) One party member’s snapshot. Composed from wire deliveries on the GrpcTeamNtf service. Immutable; rebuilt by PartyService whenever any field changes.
CharId { get; set; }
EntityId { get; } Combat entity id derived from CharId under the Phase 4 identity assumption (`CharId << 16
FastSyncState { get; set; } Raw TeamMemberFastSyncData.state (field 6) from the member’s latest fast-sync — a live per-member status signal the game client itself discards (TeamData.UpdateFastSyncData reads only pos/hp/scene). 0 until the first fast-sync. Enum semantics are calibrated empirically (2026-07-17 sync spec, Part A2 — see the calibration notes in the devkit’s docs/recon/); consumers MUST treat unmapped values as “no signal” and fall back to IsOnline / HP-based inference rather than assuming a meaning. Init-only so plugins compiled against older Abstractions keep binary compatibility.
GroupId { get; set; }
HalfBodyUrl { get; set; }
Hp { get; set; }
IsOnline { get; set; }
IsSelf { get; set; }
Level { get; set; }
MaxHp { get; set; }
Name { get; set; }
Position { get; set; }
Profession { get; set; }
ProfileUrl { get; set; }
SceneId { get; set; }
Slot { get; set; }
Talent { get; set; }
IsLowHp(…) True when current HP fraction is below threshold (default 30%).

CharId — Wire char_id. Also EntityId.Uid under the Phase 4 identity assumption.

Name — TeamMemberSocialData.basic_data.name. null until first social sync arrives.

Profession — Raw profession id from TeamMemberSocialData.profession_data. Phase 5 IGameData will translate to a name.

Level — Character level from TeamMemberSocialData.basic_data.

Hp — Live HP from TeamMemberFastSyncData.

MaxHp — Maximum HP from TeamMemberFastSyncData.

SceneId — Scene id from fast-sync. When this differs from the local scene, the member is out-of-AOI but HP is still tracked via wire.

Position — World-space position of the member.

IsOnline — TeamMemData.online_status == 1.

IsSelf — True when CharId matches the local player. False until ICombatSnapshot.LocalEntityId becomes non-None — known v1 quirk if joining a party before first combat.

GroupId — TeamMemData.group_id. 0 in non-raid parties; meaningful only when PartyType == Raid20.

Slot — 0-based position WITHIN the group (the member’s order in the team’s slot list), from NotifyTeamGroupUpdate (TeamMemberGroupInfo.char_ids ordering). -1 when not yet known. Lets the raid grid place each member at their exact Team×Slot instead of roster order.

DPS aggregation — query ICombatLookup.GetLiveDps(member.EntityId) instead of a per-member DPS field. The combat service aggregates per source EntityId for every entity in AOI, so the same call works for party members, mobs, and randoms uniformly.

ProfileUrl / HalfBodyUrl — CDN URLs of the member’s 2D profile / half-body pictures from TeamMemberSocialData.avatar_info; empty until the first social sync or when the player has none.