So after the Lobby Server send the ip adress and port to the client to connect to the CharacterServer, here are some info about opcode and some internal structures related to the CharacterServer. (Informations related to version eso.live.1.0.0.714440)
If you don't know why I'm talking about a second server used for characters, you should read all the other posts, regarding my work.
Before starting just some reminder, and some definitions
Each network operations require the server to read 4 bytes for the full lenght of the paquet.
Code:
SIZE_PAQUET : [DWORD]
Then come the HEADER (that can change if encryption is ON or OFF)
Code:
DATA_SIZE_INCLUDE_HEADER : [DWORD] // If encryption is ON or OFF
NS_VERSION : [WORD]
NS_STREAMID : [WORD]
DATA_SIZE : [DWORD]
Then come the DATA, different for every OPCODE
Some definitions / typing :
[TESO_BUFFER] type is :
Code:
SIZE_BUFFER : [WORD]
DATA : [BYTE] * SIZE_BUFFER
NULL_BYTE (\x00) : [BYTE]
[ZLIB_BUFFER] type is :
Code:
UNCOMP_SIZE : [DWORD]
COMP_SIZE : [DWORD]
DATA_ZLIB : [BYTE] * COMP_SIZE
Character Opcode list :
Opcode 0x0110
First packet received by the CharacterServer from the client, after it connects.
Code:
OPCODE (0x0110) : [WORD]
UID : [TESO_BUFFER]
LANGAGE : [TESO_BUFFER]
LOBBY_PROTOCOL : [DWORD]
KEYX_PUBLIC : [ZLIB_BUFFER]
UNK_BYTE_00 : [BYTE]
UNK_DWORD_00 : [DWORD]
UNK_DWORD_01 : [DWORD]
KEYX_PUBLIC : [ZLIB_BUFFER]
KEYX_PUBLIC : [ZLIB_BUFFER]
KEYX_PUBLIC : [ZLIB_BUFFER]
KEYX_PUBLIC : [ZLIB_BUFFER]
REGION_PROTOCOL : [DWORD]
VERSION : [TESO_BUFFER]
UUID : [TESO_BUFFER]
Opcode 0x010A
Client send this packet to server to say that the communication is now encrypted with the CharacterServer
Code:
OPCODE (0x010A) : [WORD]
UNK_BYTE_00 : [BYTE]
Opcode 0x0114
Ask connection to World / Region
Code:
OPCODE (0x0114) : [WORD]
UNK_BYTE_00 : [BYTE]
ID_CHARACTER : [QWORD]
Opcode 0x0115
Send informations related to character already created by the player
Code:
OPCODE (0x0115) : [WORD]
UNK_QWORD_00 : [QWORD] // LAST ID_CHARACTER USED ?
MAX_NB_CHARACTER_ALLOWED : [BYTE]
UNK_QWORD_01 : [QWORD]
UNK_BYTE_01 : [BYTE]
NB_CHARACTER : [BYTE]
CHARACTER : [CHARACTER_STRUCT] * NB_CHARACTER
The [CHARACTER_STRUCT] is explained further in this post.
Opcode 0x0116
Delete character
Code:
OPCODE (0x0116) : [WORD]
ID_CHARACTER : [QWORD]
Opcode 0x0117
Create Character
Code:
OPCODE (0x0117) : [WORD]
ALLIANCE : [DWORD]
CLASS : [DWORD]
SEX : [DWORD]
RACE : [DWORD]
BODY_OPTIONS : [QWORD]
SIZE_ATTRIBUTE_FACE : [BYTE]
ATTRIBUTE_FACE : [BYTE] * SIZE_ATTRIBUTE_FACE
UNK_DWORD_04 : [DWORD]
NAME : [TESO_BUFFER]
ALLIANCE
- 0x01 : The aldmeri dominion
- 0x02 : The ebonheart pact
- 0x03 : The daggerfall covenant
SEX
RACE
- 0x01 : Breton
- 0x02 : RedGuard
- 0x03 : Orc
- 0x04 : Dark Elf
- 0x05 : Nord
- 0x06 : Argonian
- 0x07 : High Elf
- 0x08 : Wood Elf
- 0x09 : Khajiit
CLASS
- 0x01 : Dragon knight
- 0x02 : Sorcerer
- 0x03 : Nightblade
- 0x04 : ???
- 0x05 : ???
- 0x06 : Templar
BODY_OPTIONS
TODO
Opcode 0x0118
Creation Character OK
Code:
OPCODE (0x0118) : [WORD]
NB_CHARACTER : [BYTE] // If NB_CHARACTER > 1 goto error
CHARACTER : [CHARACTER_STRUCT] * NB_CHARACTER
CHARACTER_STRUCT
Code:
ID_CHARACTER : [QWORD]
LEVEL : [DWORD]
NAME : [TESO_BUFFER]
CLASS : [DWORD]
RACE : [DWORD]
SEX : [DWORD]
UNK_DWORD_00 : [DWORD]
LOCATION : [DWORD]
ALLIANCE : [DWORD]
UNK_QWORD_01 : [QWORD]
UNK_WORD_00 : [WORD]
UNK_DWORD_01 : [DWORD]
UNK_QWORD_02 : [QWORD]
UNK_WORD_01 : [WORD]
UNK_DWORD_02 : [DWORD]
UNK_QWORD_03 : [QWORD]
UNK_WORD_02 : [WORD]
BODY_OPTIONS : [QWORD]
SIZE_ATTRIBUTE_FACE : [BYTE]
ATTRIBUTE_FACE : [BYTE] * SIZE_ATTRIBUTE_FACE
UNK_BYTE_00 : [BYTE]
for i in range(0, 22) // Maybe related to inventory
UNK_DWORD_00 : [DWORD]
UNK_DWORD_01 : [DWORD]
UNK_BYTE_00 : [BYTE]
UNK_BYTE_01 : [BYTE]
UNK_DWORD_02 : [DWORD]
UNK_DWORD_03 : [DWORD]
UNK_DWORD_04 : [DWORD]
UNK_QWORD_04 : [QWORD]
UNK_DWORD_05 : [DWORD]
LOCATION
- 0x123 : Razak's Wheel
- 0x164 : Thibaut's Cairn
- 0x1AD : Khenarthin's roost
- 0x1DD : The Wailing Prison
- TODO MORE
Opcode 0x0220
Kind of PING.
You have to transmit the message to Lobby Server, in order than the Lobby Server send the packet 0x2B0D to answer to the PING.
Code:
OPCODE (0x0220) : [WORD]
UNK_DWORD : [DWORD]
There is more opcodes for Character Server, but that's the only ones I know so far for eso.live.1.0.0.714440.