A fix for this: I just add a condition to not add a supplementary %s if it is in text emote. So you can correct text and keep compatibility with old emote ...
--- a/src/game/Object.cpp
+++ b/src/game/Object.cpp
@@ -1478,7 +1478,7 @@ void WorldObject::MonsterWhisper(int32 textId, uint64 receiver, bool IsBossWhisp
void WorldObject::BuildMonsterChat(WorldPacket *data, uint8 msgtype, char const* text, uint32 language, char const* name, uint64 targetGuid) const
{
- bool pre = (msgtype==CHAT_MSG_MONSTER_EMOTE || msgtype==CHAT_MSG_RAID_BOSS_EMOTE);
+ bool pre = (msgtype==CHAT_MSG_MONSTER_EMOTE || msgtype==CHAT_MSG_RAID_BOSS_EMOTE) && !strstr(text,"%s");
*data << (uint8)msgtype;
*data << (uint32)language;