Пример #1
0
const char *
mfn_force(MFUNARGS)
{
    char *nxt, *ptr;
    dbref obj = mesg_dbref_raw(player, what, perms, argv[0]);
    if (obj == AMBIGUOUS || obj == UNKNOWN || obj == NOTHING || obj == HOME)
        ABORT_MPI("FORCE","Failed match. (arg1)");
    if (obj == PERMDENIED)
        ABORT_MPI("FORCE","Permission denied. (arg1)");
    if (Typeof(obj) != TYPE_THING && Typeof(obj) != TYPE_PLAYER)
        ABORT_MPI("FORCE","Bad object reference. (arg1)");
    if (!*argv[1])
        ABORT_MPI("FORCE","Null command string. (arg2)");
    if (!tp_zombies && !Wizperms(perms))
        ABORT_MPI("FORCE","Permission Denied.");
    if (!Wizperms(perms)) {
	const char *ptr = RNAME(obj);
	char objname[BUFFER_LEN], *ptr2;
	dbref loc = getloc(obj);

	if (Typeof(obj) == TYPE_THING) {
	    if (FLAGS(obj) & DARK)
		ABORT_MPI("FORCE","Cannot force a dark puppet.");
	    if ((FLAGS(OWNER(obj)) & ZOMBIE))
		ABORT_MPI("FORCE","Permission denied.");
	    if (loc != NOTHING && (FLAGS(loc) & ZOMBIE) &&
		    Typeof(loc) == TYPE_ROOM)
		ABORT_MPI("FORCE","Cannot force a Puppet in a no-puppets room.");
	    for (ptr2 = objname; *ptr && !isspace(*ptr);)
		*(ptr2++) = *(ptr++);
	    *ptr2 = '\0';
	    if (lookup_player(objname) != NOTHING)
		ABORT_MPI("FORCE","Cannot force a thing named after a player.");
	}
	if (!(FLAGS(obj) & XFORCIBLE)) {
	    ABORT_MPI("FORCE","Permission denied: forced object not @set Xforcible.");
	}
	if (!test_lock_false_default(perms, obj, "@/flk")) {
	    ABORT_MPI("FORCE","Permission denied: Object not force-locked to trigger.");
	}
    }
    if (God(obj))
	ABORT_MPI("FORCE","Permission denied: You can't force God.");
    if (force_level)
	ABORT_MPI("FORCE","Permission denied: You can't force recursively.");
    strcpy(buf, argv[1]);
    ptr = buf;
    do {
        nxt = index(ptr, '\r');
        if (nxt) *nxt++ = '\0';
        force_level++;
        if (*ptr) process_command(obj, ptr);
        force_level--;
        ptr = nxt;
    } while (ptr);
    *buf = '\0';
    return "";
}
Пример #2
0
int
safeputprop(dbref obj, dbref perms, char *buf, char *val)
{
    char *ptr;
    if (!buf) return 0;
    while (*buf == PROPDIR_DELIMITER) buf++;
    if (!*buf) return 0;
    if (tp_db_readonly) return 0;

    /* disallow CR's and :'s in prop names. */
    for (ptr = buf; *ptr; ptr++)
        if (*ptr == '\r' || *ptr == PROP_DELIMITER) return 0;

    if (!Archperms(perms)) {
        if (Prop_Hidden(buf)) return 0;
    }
    if (!Wizperms(perms)) {
        if (Prop_SeeOnly(buf)) return 0;
    }
    if (!val) {
        remove_property(obj, buf);
    } else {
	add_property(obj, buf, val, 0);
    }
    return 1;
}
Пример #3
0
int
mesg_read_perms(dbref player, dbref perms, dbref obj)
{
    if ((obj == 0) || (obj == player) || (obj == perms)) return 1;
    if (OWNER(perms) == OWNER(obj)) return 1;
    if (Wizperms(perms)) return 1;
    return 0;
}
Пример #4
0
const char *
safegetprop_strict(dbref player, dbref what, dbref perms, const char *inbuf)
{
    const char *ptr;
    char  bbuf[BUFFER_LEN];
    static char  vl[32];

    if (!inbuf) {
        notify_nolisten(player, "PropFetch: Propname required.", 1);
        return NULL;
    }
    while (*inbuf == PROPDIR_DELIMITER)
        inbuf++;
    if (!*inbuf) {
        notify_nolisten(player, "PropFetch: Propname required.", 1);
        return NULL;
    }
    strcpy(bbuf, inbuf);
    ptr = get_property_class(what, bbuf);
    if (!ptr) {
        int i;

	i = get_property_value(what, bbuf);
	if (!i) {
	    dbref dd;

	    dd = get_property_dbref(what, bbuf);
	    if (dd == NOTHING) {
		*vl = '\0';
		ptr = vl;
		return ptr;
	    } else {
		sprintf(vl, "#%d", dd);
		ptr = vl;
	    }
	} else {
	    sprintf(vl, "%d", i);
	    ptr = vl;
	}
    }

#ifdef COMPRESS
    ptr = uncompress(ptr);
#endif

    if (!Wizperms(perms)) {
        if (Prop_Hidden(bbuf)) {
            notify_nolisten(player, "PropFetch: Permission denied.", 1);
            return NULL;
        }
//        if (Prop_Private(bbuf) && OWNER(perms) != OWNER(what)) {
        if (Prop_Private(bbuf) && !controls_nowizperm(OWNER(perms), what)) {
            notify_nolisten(player, "PropFetch: Permission denied.", 1);
            return NULL;
        }
    }
    return ptr;
}
Пример #5
0
int
mesg_read_perms(dbref player, dbref perms, dbref obj)
{
    if (
        Wizperms(perms) ||
        may_read_nowizperm(OWNER(perms), obj))
        return 1;

    return 0;
}
Пример #6
0
dbref
mesg_dbref_strict(int descr, dbref player, dbref what, dbref perms, char *buf)
{
    dbref obj = mesg_dbref_raw(descr, player, what, perms, buf);

    if (obj == UNKNOWN) return obj;
    if (!Wizperms(perms) && OWNER(perms) != OWNER(obj)) {
        obj = PERMDENIED;
    }
    return obj;
}
Пример #7
0
dbref
mesg_dbref_write(dbref player, dbref what, dbref perms, char *buf)
{
    dbref obj = mesg_dbref_raw(player, what, perms, buf);

    if (obj == UNKNOWN) return obj;

    if (!Wizperms(perms) && !controls_nowizperm(OWNER(perms), obj)) {
        obj = PERMDENIED;
    }
    return obj;
}
Пример #8
0
const char *
mfn_delay(MFUNARGS)
{
    char *argchr, *cmdchr;
    int i = atoi(argv[0]);
    if (i < 1) i = 1;
#ifdef WIZZED_DELAY
    if (!Wizperms(perms))
        ABORT_MPI("delay","Permission denied.");
#endif
    cmdchr = get_mvar("cmd");
    argchr = get_mvar("arg");
    i = add_mpi_event(i, player, getloc(player), perms, argv[1], cmdchr, argchr,
		(mesgtyp & MPI_ISLISTENER), (!(mesgtyp & MPI_ISPRIVATE)));
    sprintf(buf, "%d", i);
    return buf;
}