示例#1
0
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";
    }
}
示例#2
0
文件: mfuns.c 项目: rhencke/fuzzball
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";
	}
}
示例#3
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;
}
示例#4
0
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;
}
示例#5
0
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;
}
示例#6
0
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";
}
示例#7
0
文件: mfuns.c 项目: rhencke/fuzzball
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);
}
示例#8
0
文件: mfuns.c 项目: rhencke/fuzzball
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);
}
示例#9
0
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;
}
示例#10
0
文件: mfuns.c 项目: rhencke/fuzzball
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]);
}
示例#11
0
文件: mfuns.c 项目: rhencke/fuzzball
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];
}
示例#12
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);
}
示例#13
0
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;
}
示例#14
0
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;
}
示例#15
0
文件: mfuns.c 项目: rhencke/fuzzball
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];
}