예제 #1
0
파일: mfuns.c 프로젝트: rhencke/fuzzball
const char *
mfn_nearby(MFUNARGS)
{
	dbref obj;
	dbref obj2;

	obj = mesg_dbref_raw(descr, player, what, perms, argv[0]);
	if (obj == UNKNOWN || obj == AMBIGUOUS || obj == NOTHING)
		ABORT_MPI("NEARBY", "Match failed (arg1).");
	if (obj == PERMDENIED)
		ABORT_MPI("NEARBY", "Permission denied (arg1).");
	if (obj == HOME)
		obj = PLAYER_HOME(player);
	if (argc > 1) {
		obj2 = mesg_dbref_raw(descr, player, what, perms, argv[1]);
		if (obj2 == UNKNOWN || obj2 == AMBIGUOUS || obj2 == NOTHING)
			ABORT_MPI("NEARBY", "Match failed (arg2).");
		if (obj2 == PERMDENIED)
			ABORT_MPI("NEARBY", "Permission denied (arg2).");
		if (obj2 == HOME)
			obj2 = PLAYER_HOME(player);
	} else {
		obj2 = what;
	}
	if (!(mesgtyp & MPI_ISBLESSED) && !isneighbor(obj, what) && !isneighbor(obj2, what) &&
		!isneighbor(obj, player) && !isneighbor(obj2, player)
			) {
		ABORT_MPI("NEARBY", "Permission denied.  Neither object is local.");
	}
	if (isneighbor(obj, obj2)) {
		return "1";
	} else {
		return "0";
	}
}
예제 #2
0
int
mesg_local_perms(dbref player, dbref perms, dbref obj)
{
    if (OWNER(perms) == OWNER(getloc(obj))) return 1;
    if (isneighbor(perms, obj)) return 1;
    if (isneighbor(player, obj)) return 1;
    if (Mageperms(perms)) return 1;
    if (mesg_read_perms(player, perms, obj)) return 1;
    return 0;
}
예제 #3
0
int
mesg_local_perms(dbref player, dbref perms, dbref obj, int mesgtyp)
{
	if (getloc(obj) != NOTHING && OWNER(perms) == OWNER(getloc(obj)))
		return 1;
	if (isneighbor(perms, obj))
		return 1;
	if (isneighbor(player, obj))
		return 1;
	if (mesg_read_perms(player, perms, obj, mesgtyp))
		return 1;
	return 0;
}
예제 #4
0
int
mesg_proximity_perms(dbref player, dbref perms, dbref obj)
{

    if (obj == player) return 1;
    if (isneighbor(player, obj)) return 1;
    if (isneighbor(perms, obj)) return 1;
    if ((getloc(obj) != NOTHING) && 
         may_read_nowizperm(OWNER(perms), getloc(obj)))
        return 1;
    if (mesg_read_perms(player, perms, obj)) return 1;
    return 0;
}