BNETDocs: Redux is no longer updated, this subdomain exists for archival purposes only. Visit the main site.


Generate Code: All packets

Packet Information

Message ID:0x11
Direction:Server -> Client (Received)
Used By:Diablo II, Diablo
Format:(BYTE) Ladder type

The 10-byte header:
(WORD) Total response size
(WORD) Current message size
(WORD) Total size of unreceived messages
(WORD) Rank of first entry
(WORD) Unknown (0)
Message data:
(DWORD)Number of entries
(DWORD)Unknown (0x10)
For each entry:
(QWORD) Character experience
(BYTE) Character Flags
(BYTE) Character title
(WORD) Character level
(BYTE) [16] Character name

Total Response Size:
The size of the entire batch of SID_REQUESTLADDERDATA messages, excluding their headers and first bytes.
Current Message Size:
The size of the current message, excluding its header and first byte.
Total size of unreceived messages:
The total size of all the unreceived messages in the batch, excluding their headers and first bytes. In the last packet, this value is 0, since there are no unreceived messages.
Rank of first entry:
Always zero, except in the last message. In the last message, this specifies the zero-based rank of the first entry. (For example if this is 17 in the last packet, then ladder entries 18-33 were retrieved.)
Character Flags (AND 0x07 to get character):
0x00: Amazon
0x01: Sorceress
0x02: Necromancer
0x03: Paladin
0x04: Barbarian
0x05: Druid
0x06: Assassin

0x08: highlight this (if response to C > S [0x16] MCP_CHARRANK
0x10: dead character (hardcore only)
0x20: hardcore character
0x40: expansion character
Character Name:
The character name is always 16 bytes. If the name is shorter than 16 bytes, the string is padded with nulls. The last byte is always null, since character names are limited to 15 chars.
General Remarks:
The server may respond to this packet with one or more of these messages. The client must not handle the data until the last packet in the batch is received.
The messages' data should be concatenated backwards. For example, if 3 packets were received, then the data buffer should contain the data of the 3rd packet, followed by the data of the 2nd packet, followed by the data of the 1st packet. Only after the last packet was received, the data buffer should be parsed.
Important note: If the entry is the last entry in the packet, the character name might be smaller than 16 bytes.In this case, the client MUST add null bytes to the end of the packet, BEFORE adding it to the data buffer.
Ladder packets are NOT SENT IN ANY ORDER - They are often sent completely out of order and must be placed back into the proper order. You have to infer the sequencing based on the 'how big' fields in the 10 byte header.

User Comments

For detailed questions and discussion, visit the Research Forum

Jun 01, 2012
01:00 AM

This information is out of date. I'm not certain of the system the official client uses to store these packets, but I'll attempt to explain what I've discovered -

The 10-byte header is in every packet you receive of this type. However, The size values have an extra 4, 8, or 12 bytes, depending on things....
The first WORD is the total number of bytes in the list (plus 12).
The second WORD is the number of bytes in this set of entries (plus 4 or 8 or 12, depending)
The third WORD is the number of bytes written thus far, not the number remaining. It also has a plus, depending)
The fourth WORD is the rank of the first entry on the first set, and some unknown value on subsequent sets of the same list.
The fifth WORD is null.

The "Message Data" DWORDs only show up on the first set. After that, they're not there. If they are there, the length values for the current packet are +8, if not, +4, and if it's the only set in the list, +12. I don't quite understand the logic behind it, but that's what it seems to do.

After this follow some entries, though not necessarily the "number of entries", unless it's a short list. The Flags values are, in actuality, bitwise, using 0x10 for Dead, 0x20 for Hardcore, and 0x40 for Expansion. The character class can easily be determined using Flags AND 0x0F. The Title values are the act the user has beaten, starting from 0. Note that all normal characters count as Act 1 (0), and act 5 doesn't count, just like D2 statstrings. To determine the "Character Title" from this value, you can use the ranges 00-03 = None, 04-07 = Beat Normal, 08-0B = Beat Nightmare, 0C+ = Beat Hell for classic, and 00-04, 05-09, 0A-0E, 0F+ for expansion. Character names are not strictly null padded, but often will contain junk data after the first null byte.

Finally, the server usually sends these in the right order now, apparently, although, of course, you shouldn't rely on it. You can, however, easily sort by the third WORD in the header.

We recommend you use Firefox to view this site. This site has been optimized for Firefox.

Get Firefox
BNLS Server Status

= Online       = Offline Server Status v1 v2




= Online       = Offline


Site scripts and design copyrights reserved to Don Cullen.
Contents copyrighted to Blizzard and their parent corporation, Vivendi.
Main credits for contents goes to Arta. View the rest of credits.
Demented Minds copyrights reserved to Don Cullen 2003-present.
Copyright infringements will be prosecuted to the fullest extent allowable by law.
Please view our legal disclaimer and terms of service.