示例#1
0
bool loadGameConfAndInitWorld(const std::string &path, const SubgameSpec &gamespec)
{
	// Override defaults with those provided by the game.
	// We clear and reload the defaults because the defaults
	// might have been overridden by other subgame config
	// files that were loaded before.
	g_settings->clearDefaults();
	set_default_settings(g_settings);
	Settings game_defaults;
	getGameMinetestConfig(gamespec.path, game_defaults);
	override_default_settings(g_settings, &game_defaults);

	infostream << "Initializing world at " << path << std::endl;

	fs::CreateAllDirs(path);

	// Create world.mt if does not already exist
	std::string worldmt_path = path + DIR_DELIM "world.mt";
	if (!fs::PathExists(worldmt_path)) {
		std::ostringstream ss(std::ios_base::binary);
		ss << "gameid = " << gamespec.id
			<< "\nbackend = sqlite3"
			<< "\ncreative_mode = " << g_settings->get("creative_mode")
			<< "\nenable_damage = " << g_settings->get("enable_damage")
			<< "\n";
		if (!fs::safeWriteToFile(worldmt_path, ss.str()))
			return false;

		infostream << "Wrote world.mt (" << worldmt_path << ")" << std::endl;
	}

	// Create map_meta.txt if does not already exist
	std::string map_meta_path = path + DIR_DELIM + "map_meta.txt";
	if (!fs::PathExists(map_meta_path)){
		verbosestream << "Creating map_meta.txt (" << map_meta_path << ")" << std::endl;
		fs::CreateAllDirs(path);
		std::ostringstream oss(std::ios_base::binary);

		Settings conf;
		MapgenParams params;

		params.load(*g_settings);
		params.save(conf);
		conf.writeLines(oss);
		oss << "[end_of_params]\n";

		fs::safeWriteToFile(map_meta_path, oss.str());
	}
	return true;
}