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