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>Public Members
Section titled “Public Members”| 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%). |
Remarks
Section titled “Remarks”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.
See Also
Section titled “See Also”- namespace Stellar.Abstractions.Domain