Packets/Login/TheBurningCrusade: Difference between revisions

From wowdev
Jump to navigation Jump to search
(→‎Client: Add link to client page)
(→‎Server: Add link to server page)
Line 57: Line 57:
=== Server ===
=== Server ===


The server answers with a packet composed of a RealmHeader_Server, as many
See [[CMD_REALM_LIST_Server]].
RealmInfo_Server as specified and a RealmFooter_Server.


==== Header ====
{| class="wikitable"
|+ RealmHeader_Server
! Offset
! Size / Endianness
! Type
! Name
! Description
|-
| 0x0 || 1 / - || uint8 || command || REALMLIST (0x10)
|-
| 0x1 || 2 / Little || uint16 || size || Size of the rest of packet, without the command and size fields (3 bytes).
|-
| 0x3 || 4 / - || uint32 || unknown || Not used in public clients. Set to 0.
|-
| 0x7 || 2 / Little || uint16 || num_realms || Number of RealmInfo_Server.
|-
|}
The size value can be computed with the part of the header taken into account
plus the footer (6+2 bytes) and the size of every RealmInfo_Server which is
variable.
==== Body ====
{| class="wikitable"
|+ RealmInfo_Server
! Offset
! Size / Endianness
! Type
! Name
! Description
|-
| 0x0 || 1 / Little || uint8 || realm_type || Mangos just says "realm type (this is second column in Cfg_Configs.dbc)".
|-
| 0x1 || 1 / - || bool || locked || Show realm as locked in client.
|-
| 0x2 || 1 / - || uint8 || realm_flags || See RealmInfo_Server.flags table below.<br>Setting SPECIFY_BUILD requires the additional fields at the bottom.
|-
| 0x3 || - / Big || char[] || realm_name || Zero terminated string; name of the Realm
|-
| || - / Big || char[] || address_port || Zero terminated string; address of the Realm ("ip:port")
|-
| || 4 / Little || float || population || Population value.<br>200 is always green "Recommended", <br>400 is always red "Full",<br>600 is always blue "Recommended".<br>Low/Medium/High are calculated based on the population values sent.
|-
| || 1 / - || uint8 || num_chars || The number of characters the client has on the server.
|-
| || 1 / - || uint8 || realm_category || The language or region of the server.<br>How this is interpreted depends on the locale of the client.<br>It is shown as tabs at the bottom of the realmlist screen.<br>If there are only realms of one category no tabs are shown.<br>See table RealmInfo_Server.realm_category Values.
|-
| || 1 / - || uint8 || realm_id || Used for the initial sorting of the realms. Identical values are not a problem.
|-
!colspan="5"| realm_flags SPECIFY_BUILD fields
|-
| || 1 / - || uint8 || major_version || Major version of the server.
|-
| || 1 / - || uint8 || minor_version || Minor version of the server.
|-
| || 1 / - || uint8 || patch_version || Patch version of the server.
|-
| || 1 / Little || uint16 || revision || [[Rev|Revision]] of the server.<br>Revision is not shown after the name, but mousing over will show it.
|}
{| class="wikitable"
|+ RealmInfo_Server.flags Values
! Value
! Name
! Description
|-
| 0x00 || NONE || No changes.
|-
| 0x01 || INVALID || Color realm name in read.
|-
| 0x02 || OFFLINE || Gray out name and prevent selection.
|-
| 0x04 || SPECIFY_BUILD || Shows the build on the realm list. Requires additional fields in realmlist body.
|-
| 0x08 || UNK1 || Unused.
|-
| 0x10 || UNK2 || Unused.
|-
| 0x20 || FORCE_RECOMMENDED || Forces the client to show the server as "Recommended" in blue text,<br> no matter what the population value is.
|-
| 0x40 || FORCE_NEW_PLAYERS || Forces the client to show the server as "Recommended" in green text,<br> no matter what the population value is.
|-
| 0x80 || FORCE_FULL || Forces the client to show the population as "Full" in red text,<br> no matter what the population value is.
|-
|}
==== Footer ====
{| class="wikitable"
|+ RealmFooter_Server
! Offset
! Size / Endianness
! Type
! Name
! Description
|-
| 0x0 || 2 / ? || uint16 || unknown || Ignored in public clients. Set to 0.
|-
|}


[[Category:Packet]]
[[Category:Packet]]
[[Category:Packet/Login]]
[[Category:Packet/Login]]
[[Category:Login]]
[[Category:Login]]

Revision as of 20:59, 21 May 2021

Opcodes and Errors

See Login Packets. The opcode value corresponds to the packet name.

See Login Packet Results for result values.

See Login Packet Security Flags for security flag values.

Challenge packets

Client

See CMD_AUTH_LOGON_CHALLENGE_Client.

Server

See CMD_AUTH_LOGON_CHALLENGE_Server.

Proof packets

Client

See CMD_AUTH_LOGON_PROOF_Client.

Server

See CMD_AUTH_LOGON_PROOF_Server.

Reconnection challenge packets

Client

The reconnect client packet has the same format as CMD_AUTH_LOGON_CHALLENGE_Client except that the opcode field is 0x2 instead of 0x0.

Server

See CMD_AUTH_RECONNECT_CHALLENGE_Server.

Reconnection proof packets

Client

See CMD_AUTH_RECONNECT_PROOF_Client.

To check if the client proof is correct, the server must calculate SHA1(account_name | proof_data | challenge_data | session_key) and compare it to client_proof.

Server

See CMD_AUTH_RECONNECT_PROOF_Server.

Realm list packets

Client

See CMD_REALM_LIST_Client.

Server

See CMD_REALM_LIST_Server.