SMSG CHAR ENUM

From wowdev
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

SMSG Header
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:

  1. The SMSG header that all World Packets have.
  2. A header field that describes how many characters are in the packet.
  3. Fields for as many characters as the header describes.

Character Header

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

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
character_flags Values
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:

  1. Head
  2. Neck
  3. Shoulders
  4. Body
  5. Chest
  6. Waist
  7. Legs
  8. Feet
  9. Wrists
  10. Hands
  11. Finger1
  12. Finger2
  13. Trinket1
  14. Trinket2
  15. Back
  16. Mainhand
  17. Offhand
  18. Ranged
  19. Tabard

All zeros displays a character without gear.

Character 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.


Inventory Types From Mangos
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.

Character Bags
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.