const char * mfn_testlock(MFUNARGS) { struct boolexp *lok; dbref who = player; dbref obj = mesg_dbref_local(player, what, perms, argv[0]); if (argc > 2) who = mesg_dbref_local(player, what, perms, argv[2]); if (who == AMBIGUOUS || who == UNKNOWN || who == NOTHING || who == HOME) ABORT_MPI("TESTLOCK","Match failed. (1)"); if (who == PERMDENIED) ABORT_MPI("TESTLOCK","Permission denied. (1)"); if (obj == AMBIGUOUS || obj == UNKNOWN || obj == NOTHING || obj == HOME) ABORT_MPI("TESTLOCK","Match failed. (2)"); if (obj == PERMDENIED) ABORT_MPI("TESTLOCK","Permission denied. (2)"); lok = get_property_lock(obj, argv[1]); if (argc > 3 && lok == TRUE_BOOLEXP) return (argv[3]); if (eval_boolexp(who, lok, obj)) { return "1"; } else { return "0"; } }
const char * mfn_holds(MFUNARGS) { dbref obj1 = mesg_dbref_raw(descr, player, what, perms, argv[0]); dbref obj2 = player; if (argc > 1) obj2 = mesg_dbref_local(descr, player, what, perms, argv[1], mesgtyp); if (obj1 == UNKNOWN || obj1 == AMBIGUOUS || obj1 == NOTHING || obj1 == HOME) ABORT_MPI("HOLDS", "Match failed (1)."); if (obj1 == PERMDENIED) ABORT_MPI("HOLDS", "Permission Denied (1)."); if (obj2 == UNKNOWN || obj2 == AMBIGUOUS || obj2 == NOTHING || obj2 == HOME) ABORT_MPI("HOLDS", "Match failed (2)."); if (obj2 == PERMDENIED) ABORT_MPI("HOLDS", "Permission Denied (2)."); if (obj2 == getloc(obj1)) { return "1"; } else { return "0"; } }
const char * mfn_fullname(MFUNARGS) { dbref obj; obj = tp_compatible_mpi ? mesg_dbref_raw(player, what, perms, argv[0]) : mesg_dbref_local(player, what, perms, argv[0]) ; if (obj == UNKNOWN) ABORT_MPI("NAME","Match failed"); if (obj == PERMDENIED) ABORT_MPI("NAME",NOPERM_MESG); if (obj == NOTHING) { strcpy(buf, "#NOTHING#"); return buf; } if (obj == AMBIGUOUS) { strcpy(buf, "#AMBIGUOUS#"); return buf; } if (obj == HOME) { strcpy(buf, "#HOME#"); return buf; } strcpy(buf, RNAME(obj)); return buf; }
const char * mfn_name(MFUNARGS) { char *ptr; dbref obj; obj = tp_compatible_mpi ? mesg_dbref_raw(player, what, perms, argv[0]) : mesg_dbref_local(player, what, perms, argv[0]) ; if (obj == UNKNOWN) ABORT_MPI("NAME","Match failed"); if (obj == PERMDENIED) ABORT_MPI("NAME",NOPERM_MESG); if (obj == NOTHING) { strcpy(buf, "#NOTHING#"); return buf; } if (obj == AMBIGUOUS) { strcpy(buf, "#AMBIGUOUS#"); return buf; } if (obj == HOME) { strcpy(buf, "#HOME#"); return buf; } strcpy(buf, RNAME(obj)); if (Typeof(obj) == TYPE_EXIT) { ptr = index(buf, ';'); if (ptr) *ptr = '\0'; } return buf; }
const char * mfn_locked(MFUNARGS) { dbref who = mesg_dbref_local(player, what, perms, argv[0]); dbref obj = mesg_dbref_local(player, what, perms, argv[1]); if (who == AMBIGUOUS || who == UNKNOWN || who == NOTHING || who == HOME) ABORT_MPI("LOCKED","Match failed. (1)"); if (who == PERMDENIED) ABORT_MPI("LOCKED","Permission denied. (1)"); if (obj == AMBIGUOUS || obj == UNKNOWN || obj == NOTHING || obj == HOME) ABORT_MPI("LOCKED","Match failed. (2)"); if (obj == PERMDENIED) ABORT_MPI("LOCKED","Permission denied. (2)"); sprintf(buf, "%d", !could_doit(who, obj)); return buf; }
const char * mfn_type(MFUNARGS) { dbref obj = mesg_dbref_local(player, what, perms, argv[0]); if (obj == NOTHING || obj == AMBIGUOUS || obj == UNKNOWN) return("Bad"); if (obj == HOME) return("Room"); if (obj == PERMDENIED) ABORT_MPI("TYPE",NOPERM_MESG); switch(Typeof(obj)) { case TYPE_PLAYER: return "Player"; break; case TYPE_ROOM: return "Room"; break; case TYPE_EXIT: return "Exit"; break; case TYPE_THING: return "Thing"; break; case TYPE_PROGRAM: return "Program"; break; default: return "Bad"; break; } return "Bad"; }
const char * mfn_flags(MFUNARGS) { dbref obj = mesg_dbref_local(descr, player, what, perms, argv[0], mesgtyp); if (obj == UNKNOWN || obj == AMBIGUOUS || obj == NOTHING || obj == HOME) ABORT_MPI("FLAGS", "Match failed."); if (obj == PERMDENIED) ABORT_MPI("FLAGS", "Permission denied."); return unparse_flags(obj); }
const char * mfn_loc(MFUNARGS) { dbref obj; obj = mesg_dbref_local(descr, player, what, perms, argv[0], mesgtyp); if (obj == UNKNOWN || obj == AMBIGUOUS || obj == NOTHING || obj == HOME) ABORT_MPI("LOC", "Match failed."); if (obj == PERMDENIED) ABORT_MPI("LOC", "Permission denied."); return ref2str(getloc(obj), buf, BUFFER_LEN); }
const char * mfn_contents(MFUNARGS) { char buf2[50]; int list_limit = MAX_MFUN_LIST_LEN; dbref obj = mesg_dbref_local(player, what, perms, argv[0]); int typchk, ownroom; int outlen, nextlen; if (obj == AMBIGUOUS || obj == UNKNOWN || obj == NOTHING || obj == HOME) ABORT_MPI("CONTENTS","Match failed"); if (obj == PERMDENIED) ABORT_MPI("CONTENTS",NOPERM_MESG); typchk = NOTYPE; if (argc > 1) { if (!string_compare(argv[1], "Room")) { typchk = TYPE_ROOM; } else if (!string_compare(argv[1], "Exit")) { typchk = TYPE_EXIT; /* won't find any, though */ } else if (!string_compare(argv[1], "Player")) { typchk = TYPE_PLAYER; } else if (!string_compare(argv[1], "Program")) { typchk = TYPE_PROGRAM; } else if (!string_compare(argv[1], "Thing")) { typchk = TYPE_THING; } else { ABORT_MPI("CONTENTS","Type must be 'player', 'room', 'thing', 'program', or 'exit'. (2)"); } } strcpy(buf, ""); outlen = 0; ownroom = controls(perms, obj); obj = DBFETCH(obj)->contents; while (obj != NOTHING && list_limit) { if ((typchk == NOTYPE || Typeof(obj) == typchk) && (ownroom || controls(perms, obj) || !((FLAGS(obj) & DARK) || (FLAGS(getloc(obj)) & DARK) || (Typeof(obj) == TYPE_PROGRAM && !(FLAGS(obj) & LINK_OK)))) && !(Typeof(obj) == TYPE_ROOM && typchk != TYPE_ROOM)) { ref2str(obj, buf2); nextlen = strlen(buf2); if ((outlen + nextlen) >= (BUFFER_LEN - 3)) break; if (outlen) strcat((buf+(outlen++)), "\r"); strcat((buf + outlen), buf2); outlen += nextlen; list_limit--; } obj = DBFETCH(obj)->next; } return buf; }
const char * mfn_pronouns(MFUNARGS) { 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("PRONOUNS", "Match failed."); if (obj == PERMDENIED) ABORT_MPI("PRONOUNS", "Permission Denied."); } return pronoun_substitute(descr, obj, argv[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_awake(MFUNARGS) { dbref obj = mesg_dbref_local(player, what, perms, argv[0]); if (obj == PERMDENIED || obj == AMBIGUOUS || obj == UNKNOWN || obj == NOTHING || obj == HOME) return("0"); if (Typeof(obj) == TYPE_THING && (FLAGS(obj) & ZOMBIE)) { obj = OWNER(obj); } else if (Typeof(obj) != TYPE_PLAYER) { return("0"); } sprintf(buf, "%d", online(obj)); return(buf); }
const char * mfn_ref(MFUNARGS) { dbref obj; char *p; for (p = argv[0]; *p && isspace(*p); p++); if (*p == '#' && number(p+1)) { obj = atoi(p+1); } else { obj = mesg_dbref_local(player, what, perms, argv[0]); if (obj == PERMDENIED) ABORT_MPI("REF",NOPERM_MESG); if (obj == UNKNOWN) obj = NOTHING; } sprintf(buf, "#%d", obj); return buf; }
const char * mfn_dirprops(MFUNARGS) { char propname[BUFFER_LEN]; PropPtr propadr, pptr; char buf2[BUFFER_LEN]; int list_limit = MAX_MFUN_LIST_LEN; dbref obj; int outlen, nextlen; if(argc > 1) { obj = mesg_dbref_local(player, what, perms, argv[1]); if (obj == AMBIGUOUS || obj == UNKNOWN || obj == NOTHING || obj == HOME) ABORT_MPI("DIRPROPS","Match failed"); if (obj == PERMDENIED) ABORT_MPI("DIRPROPS",NOPERM_MESG); } else obj = what; buf[0] = '\0'; outlen = 0; #ifdef DISKBASE fetchprops(obj); #endif propadr = first_prop(obj, argv[0], &pptr, propname); while ((propadr > 0) && *propname) { if ( ( !Prop_Hidden(propname) && !(PropFlags(propadr) & PROP_SYSPERMS)) || (Permlevel(perms) >= tp_hidden_prop_mlevel)) { sprintf(buf2, "%s", propname); nextlen = strlen(buf2); if ((outlen + nextlen) >= (BUFFER_LEN - 3)) break; if (outlen) strcat((buf+(outlen++)), "\r"); strcat((buf + outlen), buf2); outlen += nextlen; list_limit--; } propadr = next_prop(pptr, propadr, propname); } return buf; }
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]; }