/** Autoreply messages for pages (HAVEN, IDLE, AWAY). * \param player the paging player. * \param target the paged player. * \param type type of message to return. * \param message name of attribute containing the message. * \param def default message to return. */ void page_return(dbref player, dbref target, const char *type, const char *message, const char *def) { char buff[BUFFER_LEN]; struct tm *ptr; if (message && *message) { if (call_attrib(target, message, buff, player, NULL, NULL)) { if (*buff) { ptr = (struct tm *) localtime(&mudtime); notify_format(player, T("%s message from %s: %s"), type, AName(target, AN_SYS, NULL), buff); if (!Haven(target)) notify_format(target, T("[%d:%02d] %s message sent to %s."), ptr->tm_hour, ptr->tm_min, type, AName(player, AN_SYS, NULL)); } } else if (def && *def) notify(player, def); } }
/** The say command. * \param player the enactor. * \param message the message to say. * \param pe_info pe_info to eval speechmod with */ void do_say(dbref player, const char *message, NEW_PE_INFO *pe_info) { dbref loc; PE_REGS *pe_regs; char modmsg[BUFFER_LEN]; char says[BUFFER_LEN]; char *sp; int mod = 0; loc = speech_loc(player); if (!GoodObject(loc)) return; if (!Loud(player) && !eval_lock_with(player, loc, Speech_Lock, pe_info)) { fail_lock(player, loc, Speech_Lock, T("You may not speak here!"), NOTHING); return; } if (*message == SAY_TOKEN && CHAT_STRIP_QUOTE) message++; pe_regs = pe_regs_create(PE_REGS_ARG, "do_say"); pe_regs_setenv_nocopy(pe_regs, 0, message); pe_regs_setenv_nocopy(pe_regs, 1, "\""); modmsg[0] = '\0'; if (call_attrib(player, "SPEECHMOD", modmsg, player, pe_info, pe_regs) && *modmsg != '\0') mod = 1; pe_regs_free(pe_regs); /* notify everybody */ notify_format(player, T("You say, \"%s\""), (mod ? modmsg : message)); sp = says; safe_format(says, &sp, T("%s says, \"%s\""), spname(player), (mod ? modmsg : message)); *sp = '\0'; notify_except(player, loc, player, says, NA_INTER_HEAR); }