void notify_except(dbref first, dbref exception, const char *msg, dbref who) { dbref room, srch; if (first != NOTHING) { srch = room = DBFETCH(first)->location; if (tp_listeners) { notify_from_echo(who, srch, msg, 0); if (tp_listeners_env) { srch = DBFETCH(srch)->location; while (srch != NOTHING) { notify_from_echo(who, srch, msg, 0); srch = getparent(srch); } } } DOLIST(first, first) { if ((Typeof(first) != TYPE_ROOM) && (first != exception)) { /* don't want excepted player or child rooms to hear */ notify_from_echo(who, first, msg, 0); } } }
const char * mfn_otell(MFUNARGS) { char buf2[BUFFER_LEN]; char *ptr, *ptr2; dbref obj = getloc(player); dbref eobj = player; dbref thing; if (argc > 1) obj = mesg_dbref_local(descr, player, what, perms, argv[1], mesgtyp); if (obj == UNKNOWN || obj == AMBIGUOUS || obj == NOTHING || obj == HOME) ABORT_MPI("OTELL", "Match failed."); if (obj == PERMDENIED) ABORT_MPI("OTELL", "Permission denied."); if ((mesgtyp & MPI_ISLISTENER) && (Typeof(what) != TYPE_ROOM)) ABORT_MPI("OTELL", "Permission denied."); if (argc > 2) eobj = mesg_dbref_raw(descr, player, what, perms, argv[2]); strcpyn(buf2, sizeof(buf2), argv[0]); for (ptr = buf2; *ptr; ptr = ptr2) { ptr2 = index(ptr, '\r'); if (ptr2) { *ptr2 = '\0'; } else { ptr2 = ptr + strlen(ptr); } if (((OWNER(what) == OWNER(obj) || isancestor(what, obj)) && (Typeof(what) == TYPE_ROOM || (Typeof(what) == TYPE_EXIT && Typeof(getloc(what)) == TYPE_ROOM))) || string_prefix(argv[0], NAME(player))) { strcpyn(buf, buflen, ptr); } else { snprintf(buf, BUFFER_LEN, "%.16s%s%.4078s", NAME(player), ((*argv[0] == '\'' || isspace(*argv[0])) ? "" : " "), ptr); } thing = DBFETCH(obj)->contents; while (thing != NOTHING) { if (thing != eobj) { notify_from_echo(player, thing, buf, 0); } thing = DBFETCH(thing)->next; } } return argv[0]; }
const char * mfn_tell(MFUNARGS) { char buf2[BUFFER_LEN]; char *ptr, *ptr2; dbref obj = player; if (argc > 1) obj = mesg_dbref_local(descr, player, what, perms, argv[1], mesgtyp); if (obj == UNKNOWN || obj == AMBIGUOUS || obj == NOTHING || obj == HOME) ABORT_MPI("TELL", "Match failed."); if (obj == PERMDENIED) ABORT_MPI("TELL", "Permission denied."); if ((mesgtyp & MPI_ISLISTENER) && (Typeof(what) != TYPE_ROOM)) ABORT_MPI("TELL", "Permission denied."); *buf = '\0'; strcpyn(buf2, sizeof(buf2), argv[0]); for (ptr = buf2; (ptr != NULL) && *ptr != '\0'; ptr = ptr2) { ptr2 = index(ptr, '\r'); if (ptr2 != NULL) { *ptr2++ = '\0'; } else { ptr2 = ptr + strlen(ptr); } if (Typeof(what) == TYPE_ROOM || OWNER(what) == obj || player == obj || (Typeof(what) == TYPE_EXIT && Typeof(getloc(what)) == TYPE_ROOM) || string_prefix(argv[0], NAME(player))) { snprintf(buf, BUFFER_LEN, "%s%.4093s", ((obj == OWNER(perms) || obj == player) ? "" : "> "), ptr); } else { snprintf(buf, BUFFER_LEN, "%s%.16s%s%.4078s", ((obj == OWNER(perms) || obj == player) ? "" : "> "), NAME(player), ((*argv[0] == '\'' || isspace(*argv[0])) ? "" : " "), ptr); } notify_from_echo(player, obj, buf, 1); } return argv[0]; }