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"; } }
int test_lock(int descr, dbref player, dbref thing, const char *lockprop) { struct boolexp *lokptr; lokptr = get_property_lock(thing, lockprop); return (eval_boolexp(descr, player, lokptr, thing)); }
bool test_lock_false_default(int descr, dbref player, dbref thing, const char *lockprop) { struct boolexp *lok = get_property_lock(thing, lockprop); if (lok == TRUE_BOOLEXP) return 0; return (eval_boolexp(descr, player, lok, thing)); }
bool could_doit2(int descr, dbref player, dbref thing, char *prop, bool tryprog) { dbref source, dest, owner; if (Typeof(thing) == TYPE_EXIT) { if (DBFETCH(thing)->sp.exit.ndest == 0) { return 0; } owner = OWNER(thing); source = DBFETCH(player)->location; dest = *(DBFETCH(thing)->sp.exit.dest); if (dest == NIL) /* unless its locked, anyone can use #-4 */ return (eval_boolexp(descr, player, GETLOCK(thing), thing)); if (Typeof(dest) == TYPE_PLAYER) { dbref destplayer = dest; dest = DBFETCH(dest)->location; if (!(FLAGS(destplayer) & JUMP_OK) || (FLAGS(dest) & BUILDER)) { return 0; } } /* if (OkObj(thing)) if ( ((FLAG2(player) & F2IMMOBILE) && !(FLAG2(thing) & F2IMMOBILE)) && (!(Typeof(dest) == TYPE_PROGRAM) && !(dest == NIL)) ) { envpropqueue(descr, player, OkObj(player) ? getloc(player) : -1, thing, thing, NOTHING, "@immobile", "Immobile", 1, 1); return 0; } */ if ((dest != HOME) && (Typeof(dest) == TYPE_ROOM) && Guest(player) && (tp_guest_needflag ? !(FLAG2(dest) & F2GUEST) : (FLAG2(dest) & F2GUEST))) { anotify_nolisten(player, CFAIL "Guests aren't allowed there.", 1); return 0; } /* for actions */ if ((DBFETCH(thing)->location != NOTHING) && (Typeof(DBFETCH(thing)->location) != TYPE_ROOM)) { if ((Typeof(dest) == TYPE_ROOM || Typeof(dest) == TYPE_PLAYER) && (FLAGS(source) & BUILDER)) return 0; if (tp_secure_teleport && Typeof(dest) == TYPE_ROOM) { if ((dest != HOME) && (!controls(owner, dest)) && ((FLAGS(dest) & JUMP_OK) == 0)) { return 0; } } } } if (tryprog) return (eval_boolexp(descr, player, get_property_lock(thing, prop), thing)); else return (eval_boolexp2(descr, player, get_property_lock(thing, prop), thing)); }