All the docs I've checked state that the echo method prints its string to the console.
I don't see any obvious bugs in the me method. One thing to consider when using this method is that initiator is going to be the client who started execution of the script - location of the initiator is the center of the area where the emote is visible.
You could change me to center the emote on the NPC involved in the quest which is probably the behavior most would expect:
Code:
void QuestManager::me(const char *str) {
entity_list.MessageClose(npc, false, 200, 10, str);
}