Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Groups

The group resource shows who is adventuring together, who leads the group, and which invitations are waiting for an answer. daRPC follows the same group rules as the game client and lets the server confirm every roster or setting change.

UseRoute or events
Read current group stateGET /clients/{client}/group
Open or close grouping, or leave a groupPOST /clients/{client}/group/toggle
Invite a playerPOST /clients/{client}/group/invite
Answer an invitationPOST /clients/{client}/group/invitations/{id}/accept or /decline
Watch changesgroup.* events on /clients/{client}/events

Read the current group

curl "http://127.0.0.1:2626/clients/ZiLo/group"
GroupSnapshot {
    observation: ObservationMetadata,
    group: GroupState?,
}

GroupState {
    members: Vec<GroupMember>,
    invitations: Vec<GroupInvitation>,
    is_group_open: bool?,
    auto_accept: bool?,
}

GroupMember {
    name: string,
    is_leader: bool,
}

GroupInvitation {
    id: u32,
    inviter: string,
    received_tick_ms: u32?,
}

An empty members array means the character is adventuring alone. The leader is the member with is_leader: true. group is null outside a usable game world.

is_group_open is the last setting confirmed by the server. It can be absent until daRPC observes the character’s self-look data. auto_accept reports the client option when daRPC can infer it from an incoming invitation. A pending invitation found during late attach may not have received_tick_ms because its original packet arrived before daRPC was loaded.

The invitation prompt is local client state rather than a complete server snapshot. daRPC checks for it at most once every 100 milliseconds. Each check walks the open prompt list once, which keeps invitation handling responsive without doing repeated client-memory work on every rendered tick.

The /status response also includes character.is_group_open and character.group_members. group_members is always an array and stays empty when the character is not grouped.

Toggle grouping

curl --request POST "http://127.0.0.1:2626/clients/ZiLo/group/toggle"

The request body is optional. When the character is adventuring alone, the route toggles whether other players may invite them. When the character is already grouped, it leaves the group or disbands it for the leader, then reopens invitations by default:

curl --request POST \
  --header "Content-Type: application/json" \
  --data '{"leave_open":false}' \
  "http://127.0.0.1:2626/clients/ZiLo/group/toggle"

Set leave_open=false to retain the game’s normal single-toggle behavior, which leaves grouping closed. Reopening is a second ordered client command and only runs after the leave command executes. The response describes the last command submitted. Read the updated state or wait for a group event for the server-confirmed result.

Invite a player

curl --request POST \
  --header "Content-Type: application/json" \
  --data '{"target":"OtherPlayer"}' \
  "http://127.0.0.1:2626/clients/ZiLo/group/invite"

target may be a player name or a visible player object ID. A supplied name does not need to be present in the client’s visible objects, which lets a caller invite a known character elsewhere on the same map. Object IDs still require a visible player with a known name. The target cannot be the calling character.

group.invitation_sent means the local client submitted the request. The game does not report a remote decline or acceptance directly. A closed group setting may instead produce the usual system message that the player refuses to join. Membership changes remain authoritative.

Answer an invitation

Pending invitations have a daRPC invitation ID:

curl --request POST \
  "http://127.0.0.1:2626/clients/ZiLo/group/invitations/7/accept"

curl --request POST \
  "http://127.0.0.1:2626/clients/ZiLo/group/invitations/7/decline"

These requests have no body. They require the existing game invitation prompt, submit the answer on the client main thread, and close that prompt normally. An unknown or already closed ID returns 404. group.invitation_closed records the local answer. Acceptance is confirmed later by group.joined or another roster event.

The server messages Group disbanded. and <name> is joining this group. start a 30-second self-look refresh window. Refresh requests use daRPC’s internal self-inspection path: the 0x39 response updates group and legend state but is suppressed before the native handler can open the self-look interface. The self-look roster is Adventuring alone while solo or a newline-delimited list headed by Group members while grouped. The list ends with Total n, and a leading * marks the leader. While grouped, daRPC refreshes the roster every two seconds. This catches joins, departures, and disbands even when the game does not send fresh self-look data to every member at the same moment.

Live group events

Every state-bearing event contains the complete resulting group, so a consumer can replace its retained group value without reconstructing hidden client behavior.

EventMeaning
group.settings_changedThe server-confirmed group-open setting changed.
group.invitation_sentThe local client submitted an invitation request.
group.invitation_receivedA group prompt appeared and can be answered by ID.
group.invitation_closedA prompt was answered, dismissed, or invalidated.
group.joinedA solo character received a nonempty roster.
group.member_joinedA member appeared in an existing roster.
group.member_leftA member disappeared from an existing roster.
group.disbandedThe roster became empty.

Invitation close reasons are accept_requested, declined, and dismissed. See Live events for the common event envelope, ordering, and resynchronization behavior.