From 120f02e20b941969be241363b93e2d918bb9e7a6 Mon Sep 17 00:00:00 2001 From: proller Date: Sat, 6 Apr 2013 19:32:59 +0400 Subject: Don't flow finite liquid into an unloaded chunk --- src/map.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/map.cpp') diff --git a/src/map.cpp b/src/map.cpp index 5d6b79fb0..39f5e30fb 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1763,6 +1763,11 @@ void Map::transformLiquidsFinite(std::map & modified_blocks) total_level = LIQUID_LEVEL_SOURCE * can_liquid_same_level; } + // prevent lakes in air under unloaded blocks + if (p0.Y > water_level && neighbors[D_BOTTOM].n.getContent() == CONTENT_IGNORE) { + total_level = 0; + } + // calculate self level 5 blocks u8 want_level = total_level >= LIQUID_LEVEL_SOURCE * can_liquid_same_level @@ -1807,8 +1812,8 @@ void Map::transformLiquidsFinite(std::map & modified_blocks) } for (u16 ii = 0; ii < 7; ii++) // infinity and cave flood optimization - if (liquid_levels_want[ii] >= 0 && - (neighbors[ii].i || + if ( neighbors[ii].i || + (liquid_levels_want[ii] >= 0 && (fast_flood && p0.Y < water_level && (initial_size >= 1000 && ii != D_TOP @@ -1916,8 +1921,7 @@ void Map::transformLiquidsFinite(std::map & modified_blocks) if(!suspect.empty()){ // Blame suspect - RollbackScopeActor rollback_scope(m_gamedef->rollback(), - suspect, true); + RollbackScopeActor rollback_scope(m_gamedef->rollback(), suspect, true); // Get old node for rollback RollbackNode rollback_oldnode(this, p0, m_gamedef); // Set node -- cgit v1.2.3 From 453d79e3a201a4186dae386d0bce209f75be742c Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 6 Apr 2013 13:36:31 -0400 Subject: Don't re-write entire map_meta.txt if a setting is missing --- src/map.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/map.cpp') diff --git a/src/map.cpp b/src/map.cpp index 39f5e30fb..c9f473dc2 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -3466,8 +3466,16 @@ void ServerMap::loadMapMeta() break; params.parseConfigLine(line); } - - MapgenParams *mgparams = m_emerge->getParamsFromSettings(¶ms); + + MapgenParams *mgparams; + try { + mgparams = m_emerge->getParamsFromSettings(¶ms); + } catch (SettingNotFoundException &e) { + infostream << "Couldn't get a setting from map_meta.txt: " + << e.what() << std::endl; + mgparams = NULL; + } + if (mgparams) { if (m_mgparams) delete m_mgparams; -- cgit v1.2.3 From d50b2ede92bb33d6f471be34cd7e64efc6434c6b Mon Sep 17 00:00:00 2001 From: proller Date: Sat, 6 Apr 2013 23:07:06 +0400 Subject: Adjusting water removing above unloaded blocks --- src/map.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/map.cpp') diff --git a/src/map.cpp b/src/map.cpp index c9f473dc2..a8201f3ee 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1763,9 +1763,9 @@ void Map::transformLiquidsFinite(std::map & modified_blocks) total_level = LIQUID_LEVEL_SOURCE * can_liquid_same_level; } - // prevent lakes in air under unloaded blocks + // prevent lakes in air above unloaded blocks if (p0.Y > water_level && neighbors[D_BOTTOM].n.getContent() == CONTENT_IGNORE) { - total_level = 0; + --total_level; } // calculate self level 5 blocks -- cgit v1.2.3