SMSG CHAR ENUM
Jump to navigation
Jump to search
SMSG_CHAR_ENUM is a World Packet that is sent after a CMSG_CHAR_ENUM from the client. It takes the client to the character selection screen.
Packet Layout
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. Always 0x03B. |
The packet consists of:
- The SMSG header that all World Packets have.
- A header field that describes how many characters are in the packet.
- Fields for as many characters as the header describes.
Character Header
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x0 | 1 / - | uint8 | amount_of_characters | How many character bodies are repeated below. If 0 the packet ends here. More than 10 will lead to an "Error retrieving character list" error. |
Character
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x0 | 8 / Little | uint64 | character_guid | Unique GUID of the character. Later used in CMSG_PLAYER_LOGIN to login in. |
0x8 | - / Big | uint8 | character_name | UTF-8 encoded null terminated string. |
- | 1 / - | uint8 | character_race | Gotten from ChrRaces.ID in the DBC. |
- | 1 / - | uint8 | character_class | Gotten from ChrClasses.ID in the DBC. |
- | 1 / - | uint8 | character_gender | 1 for female, 0 for male. |
- | 1 / - | uint8 | character_skin | |
- | 1 / - | uint8 | character_face | |
- | 1 / - | uint8 | character_hairstyle | |
- | 1 / - | uint8 | character_haircolor | |
- | 1 / - | uint8 | character_facialhair | |
- | 1 / - | uint8 | character_level | Level of the character. |
- | 4 / Little | uint32 | character_area | Zone the character is shown to be in. Gotten from AreaTable.Id in the DBC. |
- | 4 / Little | uint32 | character_map | Map the character is shown to be in. Gotten from WorldMapArea.MapId or Map.ID in the DBC. |
- | 4 / Little | float | character_position_x | |
- | 4 / Little | float | character_position_y | |
- | 4 / Little | float | character_position_z | |
- | 4 / Little | uint32 | character_guild_id | |
- | 4 / Little | uint32 | character_flags | See table below. |
- | 1 / - | bool | character_first_login | If 1 shows tutorial popups on login. If 0 does not show tutorial popups on login. |
- | 4 / Little | uint32 | character_pet_display_id | |
- | 4 / Little | uint32 | character_pet_level | |
- | 4 / Little | uint32 | character_pet_family |
Name | Value |
---|---|
NONE | 0x000, |
UNKNOWN1 | 0x001, |
UNKNOWN2 | 0x002, |
LOCKED_FOR_TRANSFER | 0x004, |
UNKNOWN4 | 0x008, |
UNKNOWN5 | 0x010, |
UNKNOWN6 | 0x020, |
UNKNOWN7 | 0x040, |
UNKNOWN8 | 0x080, |
UNKNOWN9 | 0x100, |
UNKNOWN10 | 0x200, |
HIDE_HELM | 0x400, |
HIDE_CLOAK | 0x800, |
UNKNOWN13 | 0x1000, |
GHOST | 0x2000, |
RENAME | 0x4000 |
This is followed by 19 entries that specify the equipment of the character in the order:
- Head
- Neck
- Shoulders
- Body
- Chest
- Waist
- Legs
- Feet
- Wrists
- Hands
- Finger1
- Finger2
- Trinket1
- Trinket2
- Back
- Mainhand
- Offhand
- Ranged
- Tabard
All zeros displays a character without gear.
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x0 | 4 / Little | uint32 | character_equipment_display_id | Taken from ItemDisplayInfo.dbc. |
0x4 | 1 / - | uint8 | character_inventory_type | See table below. |
Name | Value |
---|---|
NON_EQUIP | 0 |
HEAD | 1 |
NECK | 2 |
SHOULDERS | 3 |
BODY | 4 |
CHEST | 5 |
WAIST | 6 |
LEGS | 7 |
FEET | 8 |
WRISTS | 9 |
HANDS | 10 |
FINGER | 11 |
TRINKET | 12 |
WEAPON | 13 |
SHIELD | 14 |
RANGED | 15 |
CLOAK | 16 |
2HWEAPON | 17 |
BAG | 18 |
TABARD | 19 |
ROBE | 20 |
WEAPONMAINHAND | 21 |
WEAPONOFFHAND | 22 |
HOLDABLE | 23 |
AMMO | 24 |
THROWN | 25 |
RANGEDRIGHT | 26 |
QUIVER | 27 |
RELIC | 2 |
Finally there is bag information.
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
- | 4 / - | uint32 | character_first_bag_display_id | Statically set to 0 by Mangos. |
- | 1 / - | uint8 | character_first_bag_inventory_type | Statically set to 0 by Mangos. |