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

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_WHISPER or is equal to RAID_BOSS_EMOTE or is equal to MONSTER_EMOTE:

OffsetSize / EndiannessTypeNameComment
0x09- / -SizedCStringmonster_name
-8 / LittleGuidmonster

Else If chat_type is equal to SAY or is equal to PARTY or is equal to YELL:

OffsetSize / EndiannessTypeNameComment
-8 / LittleGuidspeech_bubble_creditThis 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 / LittleGuidchat_creditThis 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:

OffsetSize / EndiannessTypeNameComment
-8 / LittleGuidsender1
-- / -SizedCStringsender_name
-8 / LittleGuidtarget

Else If chat_type is equal to CHANNEL:

OffsetSize / EndiannessTypeNameComment
-- / -CStringchannel_name
-4 / Littleu32player_rank
-8 / LittleGuidplayer

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.length84, 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

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

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

Else If chat_type is equal to CHANNEL:

OffsetSize / EndiannessTypeNameComment
-- / -CStringchannel_name
-8 / LittleGuidtarget4

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

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: | - | 8 / Little | Guid | target6 | | | - | - / - | SizedCString | message | | | - | 1 / - | PlayerChatTag | tag | |

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

OffsetSize / EndiannessTypeNameComment
-4 / Littleu32achievement_id