World Packet
Jump to navigation
Jump to search
World Packets are the majority of communication between the client and the world server, in contrast with Login Packets which are used for authentication and realm selection.
World packets consist of a packet size, an Opcode and a body.
Headers
All world packet headers are encrypted using the session key negotiated during login, except for SMSG_AUTH_CHALLENGE and CMSG_AUTH_SESSION.
For server messages (SMSG) the headers look like:
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x0 | 2 / Big | uint16 | size | Size of the packet including the opcode field. |
0x2 | 2 / Little | uint16 | opcode | Opcode for the packet. Determines the structure of the body. |
For client messages (CMSG) the headers look like:
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x0 | 2 / Big | uint16 | size | Size of the packet including the opcode field. |
0x2 | 4 / Little | uint32 | opcode | Opcode for the packet. Determines the structure of the body. |
Process
World packets begin with the client making a TCP to the world server and then:
- The server sends a SMSG_AUTH_CHALLENGE.
- The client sends a CMSG_AUTH_SESSION.
- The server sends a SMSG_AUTH_RESPONSE.
- The client requests a character screen with CMSG_CHAR_ENUM.
- The server responds with a list of characters in a SMSG_CHAR_ENUM.
- The client is now at the character screen.