Beispiel #1
0
static package
bf_clear_prop(Var arglist, Byte next, void *vdata, Objid progr)
{				/* (object, prop-name) */
    Objid oid = arglist.v.list[1].v.obj;
    const char *pname = arglist.v.list[2].v.str;
    db_prop_handle h;
    Var value;
    enum error e;

    if (!valid(oid))
	e = E_INVARG;
    else {
	h = db_find_property(oid, pname, 0);
	if (!h.ptr)
	    e = E_PROPNF;
	else if (h.built_in
		 || (progr != db_property_owner(h) && !is_wizard(progr)))
	    e = E_PERM;
	else if (h.definer == oid)
	    e = E_INVARG;
	else {
	    value.type = TYPE_CLEAR;
	    db_set_property_value(h, value);
	    e = E_NONE;
	}
    }

    free_var(arglist);
    if (e == E_NONE)
	return no_var_pack();
    else
	return make_error_pack(e);
}
Beispiel #2
0
void
incr_quota(Objid player)
{
    db_prop_handle h;
    Var v;

    if (!valid(player))
	return;

    h = db_find_property(player, quota_name, &v);
    if (!h.ptr)
	return;

    if (v.type != TYPE_INT)
	return;

    v.v.num++;
    db_set_property_value(h, v);
}
Beispiel #3
0
int
decr_quota(Objid player)
{
    db_prop_handle h;
    Var v;

    if (!valid(player))
	return 1;

    h = db_find_property(player, quota_name, &v);
    if (!h.ptr)
	return 1;

    if (v.type != TYPE_INT)
	return 1;

    if (v.v.num <= 0)
	return 0;

    v.v.num--;
    db_set_property_value(h, v);
    return 1;
}