SMSG_GM_MESSAGECHAT
Client Version 2.4.3
Wowm Representation
Autogenerated from wowm file at wow_message_parser/wowm/world/chat/smsg_gm_messagechat.wowm:1.
smsg SMSG_GM_MESSAGECHAT = 0x03B2 {
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;
SizedCString message1;
PlayerChatTag chat_tag1;
}
else if (chat_type == BG_SYSTEM_NEUTRAL
|| chat_type == BG_SYSTEM_ALLIANCE
|| chat_type == BG_SYSTEM_HORDE) {
NamedGuid target2;
SizedCString message2;
PlayerChatTag chat_tag2;
}
else if (chat_type == CHANNEL) {
CString channel_name;
Guid target4;
SizedCString message3;
PlayerChatTag chat_tag3;
}
else {
Guid target5;
SizedCString message4;
PlayerChatTag chat_tag4;
SizedCString sender_name;
}
}
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 | |
| - | - / - | SizedCString | message1 | |
| - | 1 / - | PlayerChatTag | chat_tag1 |
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 | |
| - | - / - | SizedCString | message2 | |
| - | 1 / - | PlayerChatTag | chat_tag2 |
Else If chat_type is equal to CHANNEL:
| Offset | Size / Endianness | Type | Name | Comment |
|---|---|---|---|---|
| - | - / - | CString | channel_name | |
| - | 8 / Little | Guid | target4 | |
| - | - / - | SizedCString | message3 | |
| - | 1 / - | PlayerChatTag | chat_tag3 |
Else: | - | 8 / Little | Guid | target5 | | | - | - / - | SizedCString | message4 | | | - | 1 / - | PlayerChatTag | chat_tag4 | | | - | - / - | SizedCString | sender_name | |
Client Version 3.3.5
Wowm Representation
Autogenerated from wowm file at wow_message_parser/wowm/world/chat/smsg_gm_messagechat.wowm:40.
smsg SMSG_GM_MESSAGECHAT = 0x03B3 {
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 {
SizedCString sender_name;
Guid target6;
}
SizedCString message;
PlayerChatTag chat_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: | - | - / - | SizedCString | sender_name | | | - | 8 / Little | Guid | target6 | | | - | - / - | SizedCString | message | | | - | 1 / - | PlayerChatTag | chat_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 |