Exemple #1
0
int has_power(dbref player, dbref it, char *powername)
{
    POWERENT *fp;
    POWER fv;
    fp = find_power(it, powername);

    if (fp == NULL) {
	return 0;
    }

    if (fp->powerpower & POWER_EXT) {
	fv = Powers2(it);
    } else {
	fv = Powers(it);
    }

    if (fv & fp->powervalue) {
	if ((fp->listperm & CA_WIZARD) && !Wizard(player)) {
	    return 0;
	}

	if ((fp->listperm & CA_GOD) && !God(player)) {
	    return 0;
	}

	return 1;
    }

    return 0;
}
Exemple #2
0
void power_set(dbref target, dbref player, char *power, int key)
{
    POWERENT *fp;
    int negate, result;
    /*
     * Trim spaces, and handle the negation character
     */
    negate = 0;

    while (*power && isspace(*power)) {
	power++;
    }

    if (*power == '!') {
	negate = 1;
	power++;
    }

    while (*power && isspace(*power)) {
	power++;
    }

    /*
     * Make sure a power name was specified
     */

    if (*power == '\0') {
	if (negate) {
	    notify(player, "You must specify a power to clear.");
	} else {
	    notify(player, "You must specify a power to set.");
	}

	return;
    }

    fp = find_power(target, power);

    if (fp == NULL) {
	notify(player, "I don't understand that power.");
	return;
    }

    /*
     * Invoke the power handler, and print feedback
     */
    result = fp->handler(target, player, fp->powervalue, fp->powerpower, negate);

    if (!result) {
	notify(player, NOPERM_MESSAGE);
    } else if (!(key & SET_QUIET) && !Quiet(player)) {
	notify(player, (negate ? "Cleared." : "Set."));
	s_Modified(target);
    }

    return;
}
/*
 * Load vehicle from a json blob that might just exceed player in size.
 */
void vehicle::deserialize(JsonIn &jsin)
{
    JsonObject data = jsin.get_object();

    int fdir, mdir;

    data.read("type", type);
    data.read("posx", posx);
    data.read("posy", posy);
    data.read("levx", levx);
    data.read("levy", levy);
    data.read("om_id", om_id);
    data.read("faceDir", fdir);
    data.read("moveDir", mdir);
    data.read("turn_dir", turn_dir);
    data.read("velocity", velocity);
    data.read("cruise_velocity", cruise_velocity);
    data.read("cruise_on", cruise_on);
    data.read("engine_on", engine_on);
    data.read("has_pedals", has_pedals);
    data.read("tracking_on", tracking_on);
    data.read("lights_on", lights_on);
    data.read("overhead_lights_on", overhead_lights_on);
    data.read("fridge_on", fridge_on);
    data.read("recharger_on", recharger_on);
    data.read("skidding", skidding);
    data.read("turret_mode", turret_mode);
    data.read("of_turn_carry", of_turn_carry);

    face.init (fdir);
    move.init (mdir);
    data.read("name",name);

    data.read("parts", parts);
/*
    for(int i=0;i < parts.size();i++ ) {
       parts[i].setid(parts[i].id);
    }
*/
    /* After loading, check if the vehicle is from the old rules and is missing
     * frames. */
    if ( savegame_loading_version < 11 ) {
        add_missing_frames();
    }
    find_horns ();
    find_parts ();
    find_power ();
    find_fuel_tanks ();
    find_exhaust ();
    insides_dirty = true;
    precalc_mounts (0, face.dir());

    data.read("tags",tags);
}
Exemple #4
0
int cf_power_access(int *vp, char *str, long extra, dbref player, char *cmd)
{
    char *fstr, *permstr, *tokst;
    POWERENT *fp;
    fstr = strtok_r(str, " \t=,", &tokst);
    permstr = strtok_r(NULL, " \t=,", &tokst);

    if (!fstr || !*fstr) {
	return -1;
    }

    if ((fp = find_power(GOD, fstr)) == NULL) {
	cf_log_notfound(player, cmd, "No such power", fstr);
	return -1;
    }

    /*
     * Don't change the handlers on special things.
     */

    if ((fp->handler != ph_any) && (fp->handler != ph_wizroy) && (fp->handler != ph_wiz) && (fp->handler != ph_god) && (fp->handler != ph_restrict_player) && (fp->handler != ph_privileged)) {
	log_write(LOG_CONFIGMODS, "CFG", "PERM", "Cannot change access for power: %s", fp->powername);
	return -1;
    }

    if (!strcmp(permstr, (char *) "any")) {
	fp->handler = ph_any;
    } else if (!strcmp(permstr, (char *) "royalty")) {
	fp->handler = ph_wizroy;
    } else if (!strcmp(permstr, (char *) "wizard")) {
	fp->handler = ph_wiz;
    } else if (!strcmp(permstr, (char *) "god")) {
	fp->handler = ph_god;
    } else if (!strcmp(permstr, (char *) "restrict_player")) {
	fp->handler = ph_restrict_player;
    } else if (!strcmp(permstr, (char *) "privileged")) {
	fp->handler = ph_privileged;
    } else {
	cf_log_notfound(player, cmd, "Power access", permstr);
	return -1;
    }

    return 0;
}