SMSG_MESSAGECHAT
Client Version 1.7, Client Version 1.8, Client Version 1.9, Client Version 1.10, Client Version 1.11, Client Version 1.12
Wowm Representation
Autogenerated from wowm
file at wow_message_parser/wowm/world/chat/smsg_messagechat.wowm:10
.
smsg SMSG_MESSAGECHAT = 0x0096 {
ChatType chat_type;
Language language;
if (chat_type == MONSTER_WHISPER
|| chat_type == RAID_BOSS_EMOTE
|| chat_type == MONSTER_EMOTE) {
SizedCString monster_name;
Guid monster;
}
else if (chat_type == SAY
|| chat_type == PARTY
|| chat_type == YELL) {
Guid speech_bubble_credit;
Guid chat_credit;
}
else if (chat_type == MONSTER_SAY
|| chat_type == MONSTER_YELL) {
Guid sender1;
SizedCString sender_name;
Guid target;
}
else if (chat_type == CHANNEL) {
CString channel_name;
u32 player_rank;
Guid player;
}
else {
Guid sender2;
}
SizedCString message;
PlayerChatTag tag;
}
Header
SMSG have a header of 4 bytes.
SMSG Header
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x00 | 2 / Big | uint16 | size | Size of the rest of the message including the opcode field but not including the size field. |
0x02 | 2 / Little | uint16 | opcode | Opcode that determines which fields the message contains. |
Body
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
0x04 | 1 / - | ChatType | chat_type | |
0x05 | 4 / - | Language | language |
If chat_type is equal to MONSTER_WHISPER
or
is equal to RAID_BOSS_EMOTE
or
is equal to MONSTER_EMOTE
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
0x09 | - / - | SizedCString | monster_name | |
- | 8 / Little | Guid | monster |
Else If chat_type is equal to SAY
or
is equal to PARTY
or
is equal to YELL
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | 8 / Little | Guid | speech_bubble_credit | This character will have the speech bubble above their head. 0 value credits same as chat_credit . Invalid value credits no one.cmangos/vmangos/mangoszero: chat_credit and speech_bubble_credit are the same |
- | 8 / Little | Guid | chat_credit | This character will be appear to say this in the chat box. 0 value credits no name. cmangos/vmangos/mangoszero: chat_credit and speech_bubble_credit are the same |
Else If chat_type is equal to MONSTER_SAY
or
is equal to MONSTER_YELL
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | 8 / Little | Guid | sender1 | |
- | - / - | SizedCString | sender_name | |
- | 8 / Little | Guid | target |
Else If chat_type is equal to CHANNEL
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | - / - | CString | channel_name | |
- | 4 / Little | u32 | player_rank | |
- | 8 / Little | Guid | player |
Else: | - | 8 / Little | Guid | sender2 | | | - | - / - | SizedCString | message | | | - | 1 / - | PlayerChatTag | tag | |
Examples
Example 1
0, 51, // size
150, 0, // opcode (150)
0, // chat_type: ChatType SAY (0x00)
0, 0, 0, 0, // language: Language UNIVERSAL (0)
5, 0, 0, 0, 0, 0, 0, 0, // speech_bubble_credit: Guid
5, 0, 0, 0, 0, 0, 0, 0, // chat_credit: Guid
23, 0, 0, 0, // SizedCString.length
84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 115, 97, 121, 32, 109, 101, 115, 115, 97, 103, 101, 46, 0, // message: SizedCString
0, // tag: PlayerChatTag NONE (0)
Client Version 2.4.3
Wowm Representation
Autogenerated from wowm
file at wow_message_parser/wowm/world/chat/smsg_messagechat.wowm:84
.
smsg SMSG_MESSAGECHAT = 0x0096 {
ChatType chat_type;
(u32)Language language;
if (chat_type == MONSTER_SAY
|| chat_type == MONSTER_PARTY
|| chat_type == MONSTER_YELL
|| chat_type == MONSTER_WHISPER
|| chat_type == RAID_BOSS_WHISPER
|| chat_type == RAID_BOSS_EMOTE
|| chat_type == MONSTER_EMOTE) {
SizedCString sender;
NamedGuid target1;
}
else if (chat_type == BG_SYSTEM_NEUTRAL
|| chat_type == BG_SYSTEM_ALLIANCE
|| chat_type == BG_SYSTEM_HORDE) {
NamedGuid target2;
}
else if (chat_type == CHANNEL) {
CString channel_name;
Guid target4;
}
else {
Guid target5;
}
SizedCString message;
PlayerChatTag tag;
}
Header
SMSG have a header of 4 bytes.
SMSG Header
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x00 | 2 / Big | uint16 | size | Size of the rest of the message including the opcode field but not including the size field. |
0x02 | 2 / Little | uint16 | opcode | Opcode that determines which fields the message contains. |
Body
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
0x04 | 1 / - | ChatType | chat_type | |
0x05 | 4 / - | Language | language |
If chat_type is equal to MONSTER_SAY
or
is equal to MONSTER_PARTY
or
is equal to MONSTER_YELL
or
is equal to MONSTER_WHISPER
or
is equal to RAID_BOSS_WHISPER
or
is equal to RAID_BOSS_EMOTE
or
is equal to MONSTER_EMOTE
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
0x09 | - / - | SizedCString | sender | |
- | - / - | NamedGuid | target1 |
Else If chat_type is equal to BG_SYSTEM_NEUTRAL
or
is equal to BG_SYSTEM_ALLIANCE
or
is equal to BG_SYSTEM_HORDE
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | - / - | NamedGuid | target2 |
Else If chat_type is equal to CHANNEL
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | - / - | CString | channel_name | |
- | 8 / Little | Guid | target4 |
Else: | - | 8 / Little | Guid | target5 | | | - | - / - | SizedCString | message | | | - | 1 / - | PlayerChatTag | tag | |
Client Version 3.3.5
Wowm Representation
Autogenerated from wowm
file at wow_message_parser/wowm/world/chat/smsg_messagechat.wowm:116
.
smsg SMSG_MESSAGECHAT = 0x0096 {
ChatType chat_type;
(u32)Language language;
Guid sender;
u32 flags;
if (chat_type == MONSTER_SAY
|| chat_type == MONSTER_PARTY
|| chat_type == MONSTER_YELL
|| chat_type == MONSTER_WHISPER
|| chat_type == RAID_BOSS_WHISPER
|| chat_type == RAID_BOSS_EMOTE
|| chat_type == MONSTER_EMOTE
|| chat_type == BATTLENET) {
SizedCString sender1;
NamedGuid target1;
}
else if (chat_type == WHISPER_FOREIGN) {
SizedCString sender2;
Guid target2;
}
else if (chat_type == BG_SYSTEM_NEUTRAL
|| chat_type == BG_SYSTEM_ALLIANCE
|| chat_type == BG_SYSTEM_HORDE) {
NamedGuid target3;
}
else if (chat_type == ACHIEVEMENT
|| chat_type == GUILD_ACHIEVEMENT) {
Guid target4;
}
else if (chat_type == CHANNEL) {
CString channel_name;
Guid target5;
}
else {
Guid target6;
}
SizedCString message;
PlayerChatTag tag;
if (chat_type == ACHIEVEMENT
|| chat_type == GUILD_ACHIEVEMENT) {
u32 achievement_id;
}
}
Header
SMSG have a header of 4 bytes.
SMSG Header
Offset | Size / Endianness | Type | Name | Description |
---|---|---|---|---|
0x00 | 2 OR 3 / Big | uint16 OR uint16+uint8 | size | Size of the rest of the message including the opcode field but not including the size field. Wrath server messages can be 3 bytes. If the first (most significant) size byte has 0x80 set, the header will be 3 bytes, otherwise it is 2. |
- | 2 / Little | uint16 | opcode | Opcode that determines which fields the message contains. |
Body
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | 1 / - | ChatType | chat_type | |
- | 4 / - | Language | language | |
- | 8 / Little | Guid | sender | |
- | 4 / Little | u32 | flags | azerothcore sets to 0. |
If chat_type is equal to MONSTER_SAY
or
is equal to MONSTER_PARTY
or
is equal to MONSTER_YELL
or
is equal to MONSTER_WHISPER
or
is equal to RAID_BOSS_WHISPER
or
is equal to RAID_BOSS_EMOTE
or
is equal to MONSTER_EMOTE
or
is equal to BATTLENET
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | - / - | SizedCString | sender1 | |
- | - / - | NamedGuid | target1 |
Else If chat_type is equal to WHISPER_FOREIGN
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | - / - | SizedCString | sender2 | |
- | 8 / Little | Guid | target2 |
Else If chat_type is equal to BG_SYSTEM_NEUTRAL
or
is equal to BG_SYSTEM_ALLIANCE
or
is equal to BG_SYSTEM_HORDE
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | - / - | NamedGuid | target3 |
Else If chat_type is equal to ACHIEVEMENT
or
is equal to GUILD_ACHIEVEMENT
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | 8 / Little | Guid | target4 |
Else If chat_type is equal to CHANNEL
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | - / - | CString | channel_name | |
- | 8 / Little | Guid | target5 |
Else: | - | 8 / Little | Guid | target6 | | | - | - / - | SizedCString | message | | | - | 1 / - | PlayerChatTag | tag | |
If chat_type is equal to ACHIEVEMENT
or
is equal to GUILD_ACHIEVEMENT
:
Offset | Size / Endianness | Type | Name | Comment |
---|---|---|---|---|
- | 4 / Little | u32 | achievement_id |