/** * Determines the scale level for a obj, with a character target as a backup * for unscaled objects. * * @param obj_data *obj The object to check. * @param char_data *targ Optional: A character target. * @return int A scale level. */ int get_obj_scale_level(obj_data *obj, char_data *targ) { struct instance_data *inst; int level = 1; room_data *orm = obj_room(obj); if (GET_OBJ_CURRENT_SCALE_LEVEL(obj) > 0) { level = GET_OBJ_CURRENT_SCALE_LEVEL(obj); } else if (orm && COMPLEX_DATA(orm) && (inst = COMPLEX_DATA(orm)->instance)) { if (inst->level) { level = inst->level; } else if (GET_ADV_MIN_LEVEL(inst->adventure) > 0) { level = GET_ADV_MIN_LEVEL(inst->adventure); } else if (GET_ADV_MAX_LEVEL(inst->adventure) > 0) { level = GET_ADV_MAX_LEVEL(inst->adventure) / 2; // average? } } if (!level && targ) { // backup level = get_approximate_level(targ); } return level; }
/** * Determines the scale level for a vehicle, with a character target as a backup * for unscaled vehicles. * * @param vehicle_data *veh The vehicle to check. * @param char_data *targ Optional: A character target. * @return int A scale level. */ int get_vehicle_scale_level(vehicle_data *veh, char_data *targ) { struct instance_data *inst; int level = 1; room_data *orm = IN_ROOM(veh); if (VEH_SCALE_LEVEL(veh) > 0) { level = VEH_SCALE_LEVEL(veh); } else if (orm && COMPLEX_DATA(orm) && (inst = COMPLEX_DATA(orm)->instance)) { if (inst->level) { level = inst->level; } else if (GET_ADV_MIN_LEVEL(inst->adventure) > 0) { level = GET_ADV_MIN_LEVEL(inst->adventure); } else if (GET_ADV_MAX_LEVEL(inst->adventure) > 0) { level = GET_ADV_MAX_LEVEL(inst->adventure) / 2; // average? } } if (!level && targ) { // backup level = get_approximate_level(targ); } return level; }
/** * Determines the scale level for a room, with a character target as a backup * for unscaled rooms. * * @param room_data *room The room to check. * @param char_data *targ Optional: A character target. * @return int A scale level. */ int get_room_scale_level(room_data *room, char_data *targ) { struct instance_data *inst; int level = 1; if (COMPLEX_DATA(room) && (inst = COMPLEX_DATA(room)->instance)) { if (inst->level) { level = inst->level; } else if (GET_ADV_MIN_LEVEL(inst->adventure) > 0) { level = GET_ADV_MIN_LEVEL(inst->adventure); } else if (GET_ADV_MAX_LEVEL(inst->adventure) > 0) { level = GET_ADV_MAX_LEVEL(inst->adventure) / 2; // average? } } // backup if (!level && targ) { level = get_approximate_level(targ); } return level; }