X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Femerge.cpp;h=443d70384819de64b90a4f0ef45bea81bd298e7e;hb=35ec3855f689cf2c6b1504a5813b7c3d9697ae14;hp=2c46b0e141cfb5164f608f3b0e9ae5fe9aee79cd;hpb=3f376a092e1c16429fb52f24736e9da98aff4cd5;p=dragonfireclient.git diff --git a/src/emerge.cpp b/src/emerge.cpp index 2c46b0e14..443d70384 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -113,19 +113,18 @@ EmergeManager::EmergeManager(IGameDef *gamedef) { if (!g_settings->getU16NoEx("emergequeue_limit_generate", qlimit_generate)) qlimit_generate = nthreads + 1; + // don't trust user input for something very important like this + if (qlimit_total < 1) + qlimit_total = 1; + if (qlimit_diskonly < 1) + qlimit_diskonly = 1; + if (qlimit_generate < 1) + qlimit_generate = 1; + for (int i = 0; i != nthreads; i++) emergethread.push_back(new EmergeThread((Server *)gamedef, i)); infostream << "EmergeManager: using " << nthreads << " threads" << std::endl; - - loadParamsFromSettings(g_settings); - - if (g_settings->get("fixed_map_seed").empty()) { - params.seed = (((u64)(myrand() & 0xffff) << 0) - | ((u64)(myrand() & 0xffff) << 16) - | ((u64)(myrand() & 0xffff) << 32) - | ((u64)(myrand() & 0xffff) << 48)); - } } @@ -160,6 +159,18 @@ EmergeManager::~EmergeManager() { } +void EmergeManager::loadMapgenParams() { + loadParamsFromSettings(g_settings); + + if (g_settings->get("fixed_map_seed").empty()) { + params.seed = (((u64)(myrand() & 0xffff) << 0) + | ((u64)(myrand() & 0xffff) << 16) + | ((u64)(myrand() & 0xffff) << 32) + | ((u64)(myrand() & 0xffff) << 48)); + } +} + + void EmergeManager::initMapgens() { if (mapgen.size()) return; @@ -364,7 +375,6 @@ void EmergeManager::loadParamsFromSettings(Settings *settings) { params.sparams = createMapgenParams(params.mg_name); if (params.sparams) params.sparams->readParams(settings); - } @@ -373,7 +383,7 @@ void EmergeManager::saveParamsToSettings(Settings *settings) { settings->setU64("seed", params.seed); settings->setS16("water_level", params.water_level); settings->setS16("chunksize", params.chunksize); - settings->setFlagStr("mg_flags", params.flags, flagdesc_mapgen); + settings->setFlagStr("mg_flags", params.flags, flagdesc_mapgen, (u32)-1); if (params.sparams) params.sparams->writeParams(settings); @@ -455,13 +465,15 @@ void *EmergeThread::Thread() { v3s16 last_tried_pos(-32768,-32768,-32768); // For error output v3s16 p; - u8 flags; + u8 flags = 0; map = (ServerMap *)&(m_server->m_env->getMap()); emerge = m_server->m_emerge; mapgen = emerge->mapgen[id]; enable_mapgen_debug_info = emerge->mapgen_debug_info; + porting::setThreadName("EmergeThread"); + while (!StopRequested()) try { if (!popBlockEmerge(&p, &flags)) {