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"; } }
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; }
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; }
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; }