Messages Friendship - NexusTomorrow/server GitHub Wiki

reference, committed verified 2026-10-23 dev 4933089

Every message in the Friendship area: its opcode, direction, how far it is verified, and its fields.

[!NOTE] Generated from the message declarations at dev 4933089 by Tools/NexusTomorrow.ProtocolReference. Don't edit it by hand: change the declaration's documentation and regenerate.

Server to client

0x0399 FriendshipAccountUpdate

Sets an account friend's presence and merges in its characters.

Opcode Direction Verified to Mark
0x0399 to client fields
Field Bits Encoding Meaning
AccountId 32 unsigned The account friend, by AccountId.
Presence 3 unsigned The friend's presence, which add-ons read as nPresenceState.
Characters count 32 unsigned
Characters array, counted by Characters count The friend's characters, merged into those the client holds; FriendshipAccountCharacterRemoved removes one.
Characters[].Name varies wide string The character's name.
Characters[].CharacterId the fields below The character, by realm and character id. FriendshipAccountCharacterRemoved, FriendshipAccountCharacterLevel and FriendshipAccountCharacterZones name the character by it.
Characters[].CharacterId.RealmId 14 unsigned The realm the id belongs to.
Characters[].CharacterId.Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.
Characters[].ClassId 14 unsigned The character's class id, which add-ons read as nClassId.
Characters[].RaceId 14 unsigned The character's race id, which add-ons read as nRaceId.
Characters[].PathId 32 unsigned The character's path id, which add-ons read as nPathId.
Characters[].Level 32 unsigned The character's level, which add-ons read as nLevel.
Characters[].WorldZoneId 15 unsigned The zone the character is in, a WorldZone table id, which add-ons see as strWorldZone.
Characters[].FactionId 14 unsigned The character's faction id, which add-ons read as nFactionId.

The client merges Characters into the characters it holds for the friend: one it already holds, matched on CharacterId, has its level and zone refreshed, a new one is added, and none is dropped. It then raises FriendshipAccountDataUpdate.

0x039A FriendshipAccountCharacterRemoved

Removes a character from an account friend's characters.

Opcode Direction Verified to Mark
0x039A to client fields
Field Bits Encoding Meaning
AccountId 32 unsigned The account friend, by AccountId.
CharacterId the fields below The character, by CharacterId.
CharacterId.RealmId 14 unsigned The realm the id belongs to.
CharacterId.Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.

The client raises FriendshipAccountDataUpdate.

0x039C FriendshipAccountDisplayName

Sets an account's display name.

Opcode Direction Verified to Mark
0x039C to client fields
Field Bits Encoding Meaning
AccountId 32 unsigned The account, by id: the player's own, or an account friend's AccountId.
DisplayName varies wide string The new display name.

For the player's own account the client sets the player's own display name, which FriendshipLib.GetPersonalStatus returns as strDisplayName; for an account friend it sets the friend's.

0x039F FriendshipAccountInviteList

Lists the account friend invites the player has received.

Opcode Direction Verified to Mark
0x039F to client purpose
Field Bits Encoding
Unknown0 32 unsigned
Invites count 32 unsigned
Invites array, counted by Invites count
Invites[].Id 64 unsigned
Invites[].InviteType 2 unsigned
Invites[].DisplayName varies wide string
Invites[].Note varies wide string
Invites[].DaysUntilExpired 32 float
Invites[].Flags 32 unsigned

The client files each invite and raises FriendshipAccountInvitesRecieved with them as tInviteList.

0x03A0 FriendshipAccountInviteRemove

Removes an account friend invite.

Opcode Direction Verified to Mark
0x03A0 to client fields
Field Bits Encoding Meaning
Unknown0 32 unsigned The client gives this value no meaning.
Id 64 unsigned The invite, by Id.

0x03A3 FriendshipAccountList

Lists the player's account friends.

Opcode Direction Verified to Mark
0x03A3 to client purpose
Field Bits Encoding
Accounts count 32 unsigned
Accounts array, counted by Accounts count
Accounts[].AccountId 32 unsigned
Accounts[].Id 64 unsigned
Accounts[].PublicNote varies wide string
Accounts[].LastOnline 32 float
Accounts[].PrivateNote varies wide string
Accounts[].DisplayName varies wide string
Accounts[].Presence 3 unsigned
Accounts[].Characters count 32 unsigned
Accounts[].Characters array, counted by Accounts[].Characters count
Accounts[].Characters[].Name varies wide string
Accounts[].Characters[].CharacterId the fields below
Accounts[].Characters[].CharacterId.RealmId 14 unsigned
Accounts[].Characters[].CharacterId.Id 64 unsigned
Accounts[].Characters[].ClassId 14 unsigned
Accounts[].Characters[].RaceId 14 unsigned
Accounts[].Characters[].PathId 32 unsigned
Accounts[].Characters[].Level 32 unsigned
Accounts[].Characters[].WorldZoneId 15 unsigned
Accounts[].Characters[].FactionId 14 unsigned

The client files each account friend with its characters and raises FriendshipAccountFriendsRecieved.

0x03A4 FriendshipAccountCharacterZones

Sets the zones that characters on account friends' accounts are in.

Opcode Direction Verified to Mark
0x03A4 to client fields
Field Bits Encoding Meaning
Zones count 16 unsigned
Zones array, counted by Zones count The characters and their zones.
Zones[].Id 64 unsigned The account friend, by Id.
Zones[].CharacterId the fields below The character, by CharacterId.
Zones[].CharacterId.RealmId 14 unsigned The realm the id belongs to.
Zones[].CharacterId.Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.
Zones[].WorldZoneId 15 unsigned The zone the character is in, a WorldZone table id.

0x03A5 FriendshipIgnoreStrangersState

Sets whether the player ignores invites from strangers.

Opcode Direction Verified to Mark
0x03A5 to client fields
Field Bits Encoding Meaning
Flags 32 unsigned Flags. Bit 1 (value 2) is ignore-strangers, and the client keeps only that bit, which FriendshipLib.GetPersonalStatus returns as bIgnoreStrangerInvites.

A server sends 2 to turn it on and 0 to turn it off; a 1 leaves it off.

0x03A6 FriendshipPersonalStatus

Sets the player's own friendship status, which FriendshipLib.GetPersonalStatus returns.

Opcode Direction Verified to Mark
0x03A6 to client fields
Field Bits Encoding Meaning
PublicNote varies wide string The player's public note, which GetPersonalStatus returns as strPublicNote.
DisplayName varies wide string The player's display name, which GetPersonalStatus returns as strDisplayName.
Presence 3 unsigned The player's presence.
IgnoreStrangers 1 unsigned Whether the player ignores invites from strangers, which GetPersonalStatus returns as bIgnoreStrangerInvites.

0x03AA FriendshipAccountPresence

Sets an account's presence.

Opcode Direction Verified to Mark
0x03AA to client fields
Field Bits Encoding Meaning
AccountId 32 unsigned The account, by id: the player's own, or an account friend's AccountId.
Presence 3 unsigned The new presence.

For an account friend the client sets the friend's presence. For the player's own account it stores the presence as stated, and copies it to the player's chosen presence only while that is 4, a value no AccountPresenceState member has. It prints a line only on a change to Available from Away or Busy. When the stated and chosen presences differ it sends the chosen one again; otherwise it raises FriendshipAccountPersonalStatusUpdate.

0x03AD FriendshipAccountPublicNote

Sets an account's public note.

Opcode Direction Verified to Mark
0x03AD to client fields
Field Bits Encoding Meaning
AccountId 32 unsigned The account, by id: the player's own, or an account friend's AccountId.
PublicNote varies wide string The new public note.

For the player's own account the client sets the player's own public note, which FriendshipLib.GetPersonalStatus returns as strPublicNote; for an account friend it sets the friend's.

0x03AE FriendshipAccountPrivateNote

Sets the private note on an account friend.

Opcode Direction Verified to Mark
0x03AE to client fields
Field Bits Encoding Meaning
Id 64 unsigned The account friend, by Id.
PrivateNote varies wide string The new private note, which add-ons read as strPrivateNote.

0x03B0 FriendshipAccountRemoved

Removes an account friend.

Opcode Direction Verified to Mark
0x03B0 to client fields
Field Bits Encoding Meaning
Id 64 unsigned The account friend, by Id.

The client raises FriendshipAccountFriendRemoved.

0x03B1 FriendshipAccountLastOnline

Sets when an account friend was last online.

Opcode Direction Verified to Mark
0x03B1 to client purpose
Field Bits Encoding
AccountId 32 unsigned
LastOnline 32 float

A nonzero time marks the friend offline: the client clears its characters, sets its presence to Invisible and raises FriendshipAccountDataUpdate.

0x03B2 FriendshipAccountCharacterLevel

Sets the level of a character on an account friend's account.

Opcode Direction Verified to Mark
0x03B2 to client fields
Field Bits Encoding Meaning
AccountId 32 unsigned The account friend, by AccountId.
CharacterId the fields below The character, by CharacterId.
CharacterId.RealmId 14 unsigned The realm the id belongs to.
CharacterId.Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.
Level 8 unsigned The character's new level.

The client raises FriendshipAccountCharacterLevelUpdate only when the level changed.

0x03B5 FriendshipAdd

Adds one friendship to the player's list.

Opcode Direction Verified to Mark
0x03B5 to client fields
Field Bits Encoding Meaning
Friend the fields below The friendship.
Friend.Id 64 unsigned The friendship's id, by which FriendshipRemove, FriendshipNoteUpdate, FriendshipTypeUpdate and FriendshipLocations name it. An id below 2^48 marks a temporary entry, and the client shows the friend as temporary, so a lasting friendship takes an id with a bit at or above bit 48 set.
Friend.CharacterId the fields below The character, by realm and character id. FriendshipLevelUpdate and FriendshipLastOnlineUpdate name the friendship by it, and FriendshipGetLocations sends it.
Friend.CharacterId.RealmId 14 unsigned The realm the id belongs to.
Friend.CharacterId.Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.
Friend.Note varies wide string The friendship's note, which add-ons read as strNote; FriendshipNoteUpdate replaces it.
Friend.Type 4 unsigned The kind of friendship. The client sets the friend's bFriend for Friend, bIgnore for Ignore, bRival for Rival, and both bFriend and bRival for FriendAndRival; FriendshipTypeUpdate changes it.

The client files it and requests its character's details as it does for each of Friends, then raises FriendshipAdd.

0x03BA FriendshipInviteList

Lists the friend invites the player has received.

Opcode Direction Verified to Mark
0x03BA to client purpose
Field Bits Encoding
Invites count 16 unsigned
Invites array, counted by Invites count
Invites[].Id 64 unsigned
Invites[].Unknown1 the fields below
Invites[].Unknown1.RealmId 14 unsigned
Invites[].Unknown1.Id 64 unsigned
Invites[].SeenState 3 unsigned
Invites[].DaysUntilExpired 32 float
Invites[].Note varies wide string
Invites[].Name varies wide string
Invites[].ClassId 14 unsigned
Invites[].PathId 3 unsigned
Invites[].Level 8 unsigned

The client files each invite and raises FriendshipInvitesRecieved with their tables.

0x03BB FriendshipInviteRemove

Removes a friend invite.

Opcode Direction Verified to Mark
0x03BB to client fields
Field Bits Encoding Meaning
Id 64 unsigned The invite, by Id.

The client raises FriendshipInviteRemoved.

0x03BE FriendshipList

Lists the player's friendships with characters.

Opcode Direction Verified to Mark
0x03BE to client fields
Field Bits Encoding Meaning
Friends count 16 unsigned
Friends array, counted by Friends count The friendships.
Friends[].Id 64 unsigned The friendship's id, by which FriendshipRemove, FriendshipNoteUpdate, FriendshipTypeUpdate and FriendshipLocations name it. An id below 2^48 marks a temporary entry, and the client shows the friend as temporary, so a lasting friendship takes an id with a bit at or above bit 48 set.
Friends[].CharacterId the fields below The character, by realm and character id. FriendshipLevelUpdate and FriendshipLastOnlineUpdate name the friendship by it, and FriendshipGetLocations sends it.
Friends[].CharacterId.RealmId 14 unsigned The realm the id belongs to.
Friends[].CharacterId.Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.
Friends[].Note varies wide string The friendship's note, which add-ons read as strNote; FriendshipNoteUpdate replaces it.
Friends[].Type 4 unsigned The kind of friendship. The client sets the friend's bFriend for Friend, bIgnore for Ignore, bRival for Rival, and both bFriend and bRival for FriendAndRival; FriendshipTypeUpdate changes it.

The client files each friendship and requests its character's details and realm, then raises FriendshipLoaded.

0x03C0 FriendshipLocations

Sets the zones the player's friends are in.

Opcode Direction Verified to Mark
0x03C0 to client fields
Field Bits Encoding Meaning
Count 8 unsigned; counts Ids, WorldZoneIds How many entries the two lists hold.
Ids array, counted by Count The friendships, by Id.
Ids[] 64 unsigned
WorldZoneIds array, counted by Count Each id's zone in the same order, a WorldZone table id, which add-ons see as strWorldZone.
WorldZoneIds[] 32 unsigned

Each id is a friendship's Id, not one of the character ids FriendshipGetLocations sends. The client skips an id it does not hold, and the id and zone pairs after it shift. It reaches an account friend's character only through the found friendship's CharacterId. It then raises FriendshipLocation.

0x03C3 FriendshipRemove

Removes a friendship from the player's list.

Opcode Direction Verified to Mark
0x03C3 to client fields
Field Bits Encoding Meaning
Id 64 unsigned The friendship, by Id.

The client raises FriendshipRemove and then FriendshipPostRemove.

0x03C4 FriendshipOperationResult

Reports the result of a friendship operation.

Opcode Direction Verified to Mark
0x03C4 to client purpose
Field Bits Encoding
Unknown0 varies wide string
Result 6 unsigned

FriendsList reads the result as eResult. For ThrottledRequest the client also sends the player's presence again.

0x03C6 FriendshipLevelUpdate

Sets the level of a friendship's character.

Opcode Direction Verified to Mark
0x03C6 to client fields
Field Bits Encoding Meaning
CharacterId the fields below The friendship, by CharacterId.
CharacterId.RealmId 14 unsigned The realm the id belongs to.
CharacterId.Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.
Level 32 unsigned The character's level, which add-ons read as nLevel.

The client raises FriendshipUpdate. Any answer to the client's player-info request (Client0597) overwrites the friend's level and last-online time, so this level must agree with what the server answers there.

0x03C9 FriendshipNoteUpdate

Replaces a friendship's note.

Opcode Direction Verified to Mark
0x03C9 to client fields
Field Bits Encoding Meaning
Id 64 unsigned The friendship, by Id.
Note varies wide string The new note, which add-ons read as strNote.

The client raises FriendshipUpdate.

0x03CA FriendshipLastOnlineUpdate

Sets when a friendship's character was last online.

Opcode Direction Verified to Mark
0x03CA to client purpose
Field Bits Encoding
CharacterId the fields below
CharacterId.RealmId 14 unsigned
CharacterId.Id 64 unsigned
LastOnline 32 float

The client stores the time and then asks for the character's player info (Client0597); the answer raises FriendshipUpdate and FriendshipUpdateOnline. Any answer to that request overwrites the friend's level and last-online time, so this time must agree with what the server answers there.

0x03CB FriendshipTypeUpdate

Changes a friendship's kind.

Opcode Direction Verified to Mark
0x03CB to client fields
Field Bits Encoding Meaning
Id 64 unsigned The friendship, by Id.
Type 4 unsigned The new kind of friendship, as Type gives it.

The client requests the character's details again and raises FriendshipUpdate.

Client to server

0x00B8 FriendshipSetLock

Sets the player's friendship lock: the request FriendshipLib.SetLock sends, and its slash command.

Opcode Direction Verified to Mark
0x00B8 to server fields
Field Bits Encoding Meaning
Locked 1 unsigned True to set the lock, false to clear it.

0x0397 FriendshipAccountAddByEmail

Adds an account friend by email address.

Opcode Direction Verified to Mark
0x0397 to server fields
Field Bits Encoding Meaning
Email varies wide string The account's email address.
Note varies wide string The note that goes with the request.

The client sends it only when both strings pass its checks.

0x0398 FriendshipAccountUpgradeFromFriend

Asks to make a character friend an account friend.

Opcode Direction Verified to Mark
0x0398 to server fields
Field Bits Encoding Meaning
CharacterId the fields below The friend, by CharacterId.
CharacterId.RealmId 14 unsigned The realm the id belongs to.
CharacterId.Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.
Note varies wide string The note that goes with the request.

0x039B FriendshipSetPublicDisplayName

Sets the player's public display name.

Opcode Direction Verified to Mark
0x039B to server fields
Field Bits Encoding Meaning
DisplayName varies wide string The display name.

0x039D FriendshipAccountSetPrivateData

Sets the player's private data on an account friend.

Opcode Direction Verified to Mark
0x039D to server purpose
Field Bits Encoding
Id 64 unsigned
Unknown1 32 unsigned
PrivateNote varies wide string

The client always writes 2 in Unknown1.

0x039E FriendshipSetIgnoreStrangers

Sets whether the player ignores invites from strangers.

Opcode Direction Verified to Mark
0x039E to server fields
Field Bits Encoding Meaning
IgnoreStrangers 1 unsigned True to ignore invites from strangers, false to allow them.

0x03A1 FriendshipAccountInviteResponse

Answers an account friend invite.

Opcode Direction Verified to Mark
0x03A1 to server fields
Field Bits Encoding Meaning
Id 64 unsigned The invite, by Id.
Accepted 1 unsigned True to accept the invite, false to decline it.

0x03A2 FriendshipAccountInviteMarkSeen

Marks an account friend invite seen: the request AccountInviteMarkSeen sends.

Opcode Direction Verified to Mark
0x03A2 to server fields
Field Bits Encoding Meaning
Id 64 unsigned The invite, by Id.

The client sets bit 0 of the invite's Flags itself.

0x03A7 FriendshipPresenceChange

Sets the player's presence.

Opcode Direction Verified to Mark
0x03A7 to server fields
Field Bits Encoding Meaning
Presence 3 unsigned The presence the player has chosen, which FriendshipLib.GetPersonalStatus returns as nPresenceState.

0x03AC FriendshipSetPublicNote

Sets the player's public note.

Opcode Direction Verified to Mark
0x03AC to server fields
Field Bits Encoding Meaning
PublicNote varies wide string The public note.

0x03AF FriendshipAccountRemove

Removes an account friend.

Opcode Direction Verified to Mark
0x03AF to server fields
Field Bits Encoding Meaning
Id 64 unsigned The account friend, by Id.

0x03B3 FriendshipAddByIdentity

Adds a friendship with a character, by character id.

Opcode Direction Verified to Mark
0x03B3 to server fields
Field Bits Encoding Meaning
CharacterId the fields below The character, by realm and character id.
CharacterId.RealmId 14 unsigned The realm the id belongs to.
CharacterId.Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.
Type 4 unsigned The kind of friendship to add.
Note varies wide string The friendship's note.

The client sends it only with a note that passes its check, and otherwise reports InvalidNote itself.

0x03B4 FriendshipAddByName

Adds a friendship with a character, by the character's name.

Opcode Direction Verified to Mark
0x03B4 to server fields
Field Bits Encoding Meaning
CharacterName varies wide string The character's name.
RealmName varies wide string The name of the character's realm.
Type 4 unsigned The kind of friendship to add.
Note varies wide string The friendship's note.

The client sends it only with a note that passes its check, and otherwise reports InvalidNote itself.

0x03B7 FriendshipSetAutoResponse

Sets the player's away and busy messages.

Opcode Direction Verified to Mark
0x03B7 to server fields
Field Bits Encoding Meaning
AwayMessage varies wide string The message for when the player is away, which FriendshipLib.GetPersonalStatus returns as strAwayMsg.
BusyMessage varies wide string The message for when the player is busy, which FriendshipLib.GetPersonalStatus returns as strBusyMsg.

0x03BC FriendshipInviteResponse

Answers a friend invite: the request RespondToInvite sends.

Opcode Direction Verified to Mark
0x03BC to server fields
Field Bits Encoding Meaning
Id 64 unsigned The invite, by Id.
Response 3 unsigned The answer.

0x03BD FriendshipInviteMarkSeen

Marks friend invites seen: the request InviteMarkSeen sends.

Opcode Direction Verified to Mark
0x03BD to server fields
Field Bits Encoding Meaning
Ids count 8 unsigned
Ids array, counted by Ids count The invites, by Id.
Ids[] 64 unsigned

0x03BF FriendshipGetLocations

Asks for the zones the player's friends are in: the request FriendshipLib.GetLocations sends.

Opcode Direction Verified to Mark
0x03BF to server fields
Field Bits Encoding Meaning
CharacterIds count 8 unsigned
CharacterIds array, counted by CharacterIds count The friendships, by CharacterId.
CharacterIds[].RealmId 14 unsigned The realm the id belongs to.
CharacterIds[].Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.
AccountFriendIds count 8 unsigned
AccountFriendIds array, counted by AccountFriendIds count The account friends, by Id.
AccountFriendIds[] 64 unsigned

0x03C1 FriendshipRemoveByIdentity

Removes a friendship with a character, by character id: the request FriendshipLib.Remove sends.

Opcode Direction Verified to Mark
0x03C1 to server fields
Field Bits Encoding Meaning
CharacterId the fields below The character, by realm and character id.
CharacterId.RealmId 14 unsigned The realm the id belongs to.
CharacterId.Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.
Type 4 unsigned The kind of friendship to remove.

0x03C2 FriendshipRemoveByName

Removes a friendship with a character, by the character's name.

Opcode Direction Verified to Mark
0x03C2 to server fields
Field Bits Encoding Meaning
CharacterName varies wide string The character's name.
RealmName varies wide string The name of the character's realm.
Type 4 unsigned The kind of friendship to remove.

0x03C7 FriendshipSetNoteByIdentity

Sets a friendship's note, by the character's id.

Opcode Direction Verified to Mark
0x03C7 to server fields
Field Bits Encoding Meaning
CharacterId the fields below The character, by realm and character id.
CharacterId.RealmId 14 unsigned The realm the id belongs to.
CharacterId.Id 64 unsigned The id within its realm. What it identifies, a character or a residence, depends on the member that holds it.
Note varies wide string The new note.

0x03C8 FriendshipSetNoteByName

Sets a friendship's note, by the character's name.

Opcode Direction Verified to Mark
0x03C8 to server fields
Field Bits Encoding Meaning
CharacterName varies wide string The character's name.
RealmName varies wide string The name of the character's realm.
Note varies wide string The new note.

Where the code lives

Piece Path
Message declarations Source/NexusTomorrow.Network.World/Message/Model/Friendship/
This page's generator Tools/NexusTomorrow.ProtocolReference/