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;
    }
}

SMSG have a header of 4 bytes.

SMSG Header

OffsetSize / EndiannessTypeNameDescription
0x002 / Biguint16sizeSize of the rest of the message including the opcode field but not including the size field.
0x022 / Littleuint16opcodeOpcode that determines which fields the message contains.

Body

OffsetSize / EndiannessTypeNameComment
0x041 / -ChatTypechat_type
0x054 / -Languagelanguage

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:

OffsetSize / EndiannessTypeNameComment
0x09- / -SizedCStringsender
-- / -NamedGuidtarget1
-- / -SizedCStringmessage1
-1 / -PlayerChatTagchat_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:

OffsetSize / EndiannessTypeNameComment
-- / -NamedGuidtarget2
-- / -SizedCStringmessage2
-1 / -PlayerChatTagchat_tag2

Else If chat_type is equal to CHANNEL:

OffsetSize / EndiannessTypeNameComment
-- / -CStringchannel_name
-8 / LittleGuidtarget4
-- / -SizedCStringmessage3
-1 / -PlayerChatTagchat_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

OffsetSize / EndiannessTypeNameDescription
0x002 OR 3 / Biguint16 OR uint16+uint8sizeSize 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 / Littleuint16opcodeOpcode that determines which fields the message contains.

Body

OffsetSize / EndiannessTypeNameComment
-1 / -ChatTypechat_type
-4 / -Languagelanguage
-8 / LittleGuidsender
-4 / Littleu32flagsazerothcore 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:

OffsetSize / EndiannessTypeNameComment
-- / -SizedCStringsender1
-- / -NamedGuidtarget1

Else If chat_type is equal to WHISPER_FOREIGN:

OffsetSize / EndiannessTypeNameComment
-- / -SizedCStringsender2
-8 / LittleGuidtarget2

Else If chat_type is equal to BG_SYSTEM_NEUTRAL or is equal to BG_SYSTEM_ALLIANCE or is equal to BG_SYSTEM_HORDE:

OffsetSize / EndiannessTypeNameComment
-- / -NamedGuidtarget3

Else If chat_type is equal to ACHIEVEMENT or is equal to GUILD_ACHIEVEMENT:

OffsetSize / EndiannessTypeNameComment
-8 / LittleGuidtarget4

Else If chat_type is equal to CHANNEL:

OffsetSize / EndiannessTypeNameComment
-- / -CStringchannel_name
-8 / LittleGuidtarget5

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:

OffsetSize / EndiannessTypeNameComment
-4 / Littleu32achievement_id