From 91cfbe2891a3fbec2aac019ccfba74b667d94fc4 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 26 Jun 2011 15:48:56 +0300 Subject: reorganized a lot of stuff and modified mapgen and objects slightly while doing it --- src/mapgen.cpp | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 86 insertions(+), 10 deletions(-) (limited to 'src/mapgen.cpp') diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 801dd72b1..285f76781 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -23,8 +23,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "noise.h" #include "mapblock.h" #include "map.h" -#include "serverobject.h" #include "mineral.h" +//#include "serverobject.h" +#include "content_sao.h" namespace mapgen { @@ -503,7 +504,7 @@ static void make_corridor(VoxelManipulator &vmanip, v3s16 doorplace, else length = random.range(1,6); length = random.range(1,13); - u32 partlength = random.range(1,length); + u32 partlength = random.range(1,13); u32 partcount = 0; s16 make_stairs = 0; if(random.next()%2 == 0 && partlength >= 3) @@ -672,14 +673,63 @@ public: continue; v3s16 roomplace; // X east, Z north, Y up +#if 0 + if(doordir == v3s16(1,0,0)) // X+ + roomplace = doorplace + v3s16(0,-1,-roomsize.Z/2+ + m_random.range(-roomsize.Z/2+1,roomsize.Z/2-1)); + if(doordir == v3s16(-1,0,0)) // X- + roomplace = doorplace + v3s16(-roomsize.X+1,-1,-roomsize.Z/2 + +m_random.range(-roomsize.Z/2+1,roomsize.Z/2-1)); + if(doordir == v3s16(0,0,1)) // Z+ + roomplace = doorplace + v3s16(-roomsize.X/2 + +m_random.range(-roomsize.X/2+1,roomsize.X/2-1),-1,0); + if(doordir == v3s16(0,0,-1)) // Z- + roomplace = doorplace + v3s16(-roomsize.X/2 + +m_random.range(-roomsize.X/2+1,roomsize.X/2-1),-1, + -roomsize.Z+1); +#endif +#if 0 + if(doordir == v3s16(1,0,0)) // X+ + roomplace = doorplace + v3s16(0,-1,-roomsize.Z/2+ + m_random.range(-roomsize.Z/2+(roomsize.Z%2==0?2:1), + roomsize.Z/2-1)); + if(doordir == v3s16(-1,0,0)) // X- + roomplace = doorplace + v3s16(-roomsize.X+1,-1,-roomsize.Z/2 + +m_random.range(-roomsize.Z/2+(roomsize.Z%2==0?2:1), + roomsize.Z/2-1)); + if(doordir == v3s16(0,0,1)) // Z+ + roomplace = doorplace + v3s16(-roomsize.X/2 + +m_random.range(-roomsize.X/2+(roomsize.X%2==0?2:1), + roomsize.X/2-1),-1,0); + if(doordir == v3s16(0,0,-1)) // Z- + roomplace = doorplace + v3s16(-roomsize.X/2 + +m_random.range(-roomsize.X/2+(roomsize.X%2==0?2:1), + roomsize.X/2-1),-1, -roomsize.Z+1); +#endif +#if 1 + if(doordir == v3s16(1,0,0)) // X+ + roomplace = doorplace + + v3s16(0,-1,m_random.range(-roomsize.Z+1,-2)); + if(doordir == v3s16(-1,0,0)) // X- + roomplace = doorplace + + v3s16(-roomsize.X+1,-1,m_random.range(-roomsize.Z+1,-2)); + if(doordir == v3s16(0,0,1)) // Z+ + roomplace = doorplace + + v3s16(m_random.range(-roomsize.X+1,-2),-1,0); + if(doordir == v3s16(0,0,-1)) // Z- + roomplace = doorplace + + v3s16(m_random.range(-roomsize.X+1,-2),-1,-roomsize.Z+1); +#endif +#if 0 if(doordir == v3s16(1,0,0)) // X+ - roomplace = doorplace + v3s16(0,-1,-roomsize.Z/2+m_random.range(-roomsize.Z/2+1,roomsize.Z/2-1)); + roomplace = doorplace + v3s16(0,-1,-roomsize.Z/2); if(doordir == v3s16(-1,0,0)) // X- - roomplace = doorplace + v3s16(-roomsize.X+1,-1,-roomsize.Z/2+m_random.range(-roomsize.Z/2+1,roomsize.Z/2-1)); + roomplace = doorplace + v3s16(-roomsize.X+1,-1,-roomsize.Z/2); if(doordir == v3s16(0,0,1)) // Z+ - roomplace = doorplace + v3s16(-roomsize.X/2+m_random.range(-roomsize.X/2+1,roomsize.X/2-1),-1,0); + roomplace = doorplace + v3s16(-roomsize.X/2,-1,0); if(doordir == v3s16(0,0,-1)) // Z- - roomplace = doorplace + v3s16(-roomsize.X/2+m_random.range(-roomsize.X/2+1,roomsize.X/2-1),-1,-roomsize.Z+1); + roomplace = doorplace + v3s16(-roomsize.X/2,-1,-roomsize.Z+1); +#endif // Check fit bool fits = true; @@ -790,7 +840,7 @@ static void make_dungeon1(VoxelManipulator &vmanip, PseudoRandom &random) // Determine walker start position - bool start_in_last_room = (random.range(0,1)==0); + bool start_in_last_room = (random.range(0,2)!=0); //bool start_in_last_room = true; v3s16 walker_start_place; @@ -858,7 +908,9 @@ NoiseParams get_cave_noise1_params(u64 seed) { /*return NoiseParams(NOISE_PERLIN_CONTOUR, seed+52534, 5, 0.7, 200, CAVE_NOISE_SCALE);*/ - return NoiseParams(NOISE_PERLIN_CONTOUR, seed+52534, 4, 0.7, + /*return NoiseParams(NOISE_PERLIN_CONTOUR, seed+52534, 4, 0.7, + 100, CAVE_NOISE_SCALE);*/ + return NoiseParams(NOISE_PERLIN_CONTOUR, seed+52534, 5, 0.6, 100, CAVE_NOISE_SCALE); } @@ -866,7 +918,9 @@ NoiseParams get_cave_noise2_params(u64 seed) { /*return NoiseParams(NOISE_PERLIN_CONTOUR_FLIP_YZ, seed+10325, 5, 0.7, 200, CAVE_NOISE_SCALE);*/ - return NoiseParams(NOISE_PERLIN_CONTOUR_FLIP_YZ, seed+10325, 4, 0.7, + /*return NoiseParams(NOISE_PERLIN_CONTOUR_FLIP_YZ, seed+10325, 4, 0.7, + 100, CAVE_NOISE_SCALE);*/ + return NoiseParams(NOISE_PERLIN_CONTOUR_FLIP_YZ, seed+10325, 5, 0.6, 100, CAVE_NOISE_SCALE); } @@ -1054,6 +1108,7 @@ double get_sector_maximum_ground_level(u64 seed, v2s16 sectorpos, double p) v2s16 node_min = sectorpos*MAP_BLOCKSIZE; v2s16 node_max = (sectorpos+v2s16(1,1))*MAP_BLOCKSIZE-v2s16(1,1); double a = -31000; + // Corners a = MYMAX(a, find_ground_level_from_noise(seed, v2s16(node_min.X, node_min.Y), p)); a = MYMAX(a, find_ground_level_from_noise(seed, @@ -1062,8 +1117,18 @@ double get_sector_maximum_ground_level(u64 seed, v2s16 sectorpos, double p) v2s16(node_max.X, node_max.Y), p)); a = MYMAX(a, find_ground_level_from_noise(seed, v2s16(node_min.X, node_min.Y), p)); + // Center a = MYMAX(a, find_ground_level_from_noise(seed, v2s16(node_min.X+MAP_BLOCKSIZE/2, node_min.Y+MAP_BLOCKSIZE/2), p)); + // Side middle points + a = MYMAX(a, find_ground_level_from_noise(seed, + v2s16(node_min.X+MAP_BLOCKSIZE/2, node_min.Y), p)); + a = MYMAX(a, find_ground_level_from_noise(seed, + v2s16(node_min.X+MAP_BLOCKSIZE/2, node_max.Y), p)); + a = MYMAX(a, find_ground_level_from_noise(seed, + v2s16(node_min.X, node_min.Y+MAP_BLOCKSIZE/2), p)); + a = MYMAX(a, find_ground_level_from_noise(seed, + v2s16(node_max.X, node_min.Y+MAP_BLOCKSIZE/2), p)); return a; } @@ -1074,6 +1139,7 @@ double get_sector_minimum_ground_level(u64 seed, v2s16 sectorpos, double p) v2s16 node_min = sectorpos*MAP_BLOCKSIZE; v2s16 node_max = (sectorpos+v2s16(1,1))*MAP_BLOCKSIZE-v2s16(1,1); double a = 31000; + // Corners a = MYMIN(a, find_ground_level_from_noise(seed, v2s16(node_min.X, node_min.Y), p)); a = MYMIN(a, find_ground_level_from_noise(seed, @@ -1082,8 +1148,18 @@ double get_sector_minimum_ground_level(u64 seed, v2s16 sectorpos, double p) v2s16(node_max.X, node_max.Y), p)); a = MYMIN(a, find_ground_level_from_noise(seed, v2s16(node_min.X, node_min.Y), p)); + // Center a = MYMIN(a, find_ground_level_from_noise(seed, v2s16(node_min.X+MAP_BLOCKSIZE/2, node_min.Y+MAP_BLOCKSIZE/2), p)); + // Side middle points + a = MYMIN(a, find_ground_level_from_noise(seed, + v2s16(node_min.X+MAP_BLOCKSIZE/2, node_min.Y), p)); + a = MYMIN(a, find_ground_level_from_noise(seed, + v2s16(node_min.X+MAP_BLOCKSIZE/2, node_max.Y), p)); + a = MYMIN(a, find_ground_level_from_noise(seed, + v2s16(node_min.X, node_min.Y+MAP_BLOCKSIZE/2), p)); + a = MYMIN(a, find_ground_level_from_noise(seed, + v2s16(node_max.X, node_min.Y+MAP_BLOCKSIZE/2), p)); return a; } @@ -1328,7 +1404,7 @@ void make_block(BlockMakeData *data) If block is deep underground, this is set to true and ground density noise is not generated, for speed optimization. */ - bool all_is_ground_except_caves = (minimum_ground_depth > 16); + bool all_is_ground_except_caves = (minimum_ground_depth > 40); /* Create a block-specific seed -- cgit v1.2.3 From af6860f6f41d2cc589e0efc0a83cf4e5f6aa9c81 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 26 Jun 2011 18:51:35 +0300 Subject: tuned mapgen --- src/mapgen.cpp | 82 ++++++++++++++++++++++------------------------------------ 1 file changed, 31 insertions(+), 51 deletions(-) (limited to 'src/mapgen.cpp') diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 285f76781..e481ee30c 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -673,52 +673,19 @@ public: continue; v3s16 roomplace; // X east, Z north, Y up -#if 0 - if(doordir == v3s16(1,0,0)) // X+ - roomplace = doorplace + v3s16(0,-1,-roomsize.Z/2+ - m_random.range(-roomsize.Z/2+1,roomsize.Z/2-1)); - if(doordir == v3s16(-1,0,0)) // X- - roomplace = doorplace + v3s16(-roomsize.X+1,-1,-roomsize.Z/2 - +m_random.range(-roomsize.Z/2+1,roomsize.Z/2-1)); - if(doordir == v3s16(0,0,1)) // Z+ - roomplace = doorplace + v3s16(-roomsize.X/2 - +m_random.range(-roomsize.X/2+1,roomsize.X/2-1),-1,0); - if(doordir == v3s16(0,0,-1)) // Z- - roomplace = doorplace + v3s16(-roomsize.X/2 - +m_random.range(-roomsize.X/2+1,roomsize.X/2-1),-1, - -roomsize.Z+1); -#endif -#if 0 - if(doordir == v3s16(1,0,0)) // X+ - roomplace = doorplace + v3s16(0,-1,-roomsize.Z/2+ - m_random.range(-roomsize.Z/2+(roomsize.Z%2==0?2:1), - roomsize.Z/2-1)); - if(doordir == v3s16(-1,0,0)) // X- - roomplace = doorplace + v3s16(-roomsize.X+1,-1,-roomsize.Z/2 - +m_random.range(-roomsize.Z/2+(roomsize.Z%2==0?2:1), - roomsize.Z/2-1)); - if(doordir == v3s16(0,0,1)) // Z+ - roomplace = doorplace + v3s16(-roomsize.X/2 - +m_random.range(-roomsize.X/2+(roomsize.X%2==0?2:1), - roomsize.X/2-1),-1,0); - if(doordir == v3s16(0,0,-1)) // Z- - roomplace = doorplace + v3s16(-roomsize.X/2 - +m_random.range(-roomsize.X/2+(roomsize.X%2==0?2:1), - roomsize.X/2-1),-1, -roomsize.Z+1); -#endif #if 1 if(doordir == v3s16(1,0,0)) // X+ roomplace = doorplace + - v3s16(0,-1,m_random.range(-roomsize.Z+1,-2)); + v3s16(0,-1,m_random.range(-roomsize.Z+2,-2)); if(doordir == v3s16(-1,0,0)) // X- roomplace = doorplace + - v3s16(-roomsize.X+1,-1,m_random.range(-roomsize.Z+1,-2)); + v3s16(-roomsize.X+1,-1,m_random.range(-roomsize.Z+2,-2)); if(doordir == v3s16(0,0,1)) // Z+ roomplace = doorplace + - v3s16(m_random.range(-roomsize.X+1,-2),-1,0); + v3s16(m_random.range(-roomsize.X+2,-2),-1,0); if(doordir == v3s16(0,0,-1)) // Z- roomplace = doorplace + - v3s16(m_random.range(-roomsize.X+1,-2),-1,-roomsize.Z+1); + v3s16(m_random.range(-roomsize.X+2,-2),-1,-roomsize.Z+1); #endif #if 0 if(doordir == v3s16(1,0,0)) // X+ @@ -899,10 +866,18 @@ static void make_dungeon1(VoxelManipulator &vmanip, PseudoRandom &random) Noise functions. Make sure seed is mangled differently in each one. */ -// This affects the shape of the contour +/* + Scaling the output of the noise function affects the overdrive of the + contour function, which affects the shape of the output considerably. +*/ +#define CAVE_NOISE_SCALE 12.0 //#define CAVE_NOISE_SCALE 10.0 //#define CAVE_NOISE_SCALE 7.5 -#define CAVE_NOISE_SCALE 5.0 +//#define CAVE_NOISE_SCALE 5.0 +//#define CAVE_NOISE_SCALE 1.0 + +//#define CAVE_NOISE_THRESHOLD (2.5/CAVE_NOISE_SCALE) +#define CAVE_NOISE_THRESHOLD (1.5/CAVE_NOISE_SCALE) NoiseParams get_cave_noise1_params(u64 seed) { @@ -910,8 +885,13 @@ NoiseParams get_cave_noise1_params(u64 seed) 200, CAVE_NOISE_SCALE);*/ /*return NoiseParams(NOISE_PERLIN_CONTOUR, seed+52534, 4, 0.7, 100, CAVE_NOISE_SCALE);*/ - return NoiseParams(NOISE_PERLIN_CONTOUR, seed+52534, 5, 0.6, - 100, CAVE_NOISE_SCALE); + /*return NoiseParams(NOISE_PERLIN_CONTOUR, seed+52534, 5, 0.6, + 100, CAVE_NOISE_SCALE);*/ + /*return NoiseParams(NOISE_PERLIN_CONTOUR, seed+52534, 5, 0.3, + 100, CAVE_NOISE_SCALE);*/ + return NoiseParams(NOISE_PERLIN_CONTOUR, seed+52534, 4, 0.5, + 50, CAVE_NOISE_SCALE); + //return NoiseParams(NOISE_CONSTANT_ONE); } NoiseParams get_cave_noise2_params(u64 seed) @@ -920,13 +900,13 @@ NoiseParams get_cave_noise2_params(u64 seed) 200, CAVE_NOISE_SCALE);*/ /*return NoiseParams(NOISE_PERLIN_CONTOUR_FLIP_YZ, seed+10325, 4, 0.7, 100, CAVE_NOISE_SCALE);*/ - return NoiseParams(NOISE_PERLIN_CONTOUR_FLIP_YZ, seed+10325, 5, 0.6, - 100, CAVE_NOISE_SCALE); + /*return NoiseParams(NOISE_PERLIN_CONTOUR_FLIP_YZ, seed+10325, 5, 0.3, + 100, CAVE_NOISE_SCALE);*/ + return NoiseParams(NOISE_PERLIN_CONTOUR_FLIP_YZ, seed+10325, 4, 0.5, + 50, CAVE_NOISE_SCALE); + //return NoiseParams(NOISE_CONSTANT_ONE); } -//#define CAVE_NOISE_THRESHOLD (2.5/CAVE_NOISE_SCALE) -#define CAVE_NOISE_THRESHOLD (2.0/CAVE_NOISE_SCALE) - NoiseParams get_ground_noise1_params(u64 seed) { return NoiseParams(NOISE_PERLIN, seed+983240, 5, @@ -963,13 +943,13 @@ bool val_is_ground(double ground_noise1_val, v3s16 p, u64 seed) { //return ((double)p.Y < ground_noise1_val); - double f = 0.8 + noise2d_perlin( + double f = 0.55 + noise2d_perlin( 0.5+(float)p.X/250, 0.5+(float)p.Z/250, seed+920381, 3, 0.5); if(f < 0.01) f = 0.01; else if(f >= 1.0) - f *= 2.0; + f *= 1.6; double h = WATER_LEVEL + 10 * noise2d_perlin( 0.5+(float)p.X/250, 0.5+(float)p.Z/250, seed+84174, 4, 0.5); @@ -1431,13 +1411,13 @@ void make_block(BlockMakeData *data) /* Cave noise */ - +#if 1 noisebuf_cave.create(get_cave_noise1_params(data->seed), minpos_f.X, minpos_f.Y, minpos_f.Z, maxpos_f.X, maxpos_f.Y, maxpos_f.Z, - 4, 3, 4); - + 2, 2, 2); noisebuf_cave.multiply(get_cave_noise2_params(data->seed)); +#endif /* Ground noise -- cgit v1.2.3 From 3fccc67eb7c530c280e9b496e22288ffa772152d Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 26 Jun 2011 21:53:11 +0300 Subject: fixed block unloading from memory (a better fix coming next) --- src/client.cpp | 10 +++--- src/defaultsettings.cpp | 1 + src/environment.cpp | 3 ++ src/map.cpp | 95 ++++++++++++++++++++----------------------------- src/map.h | 15 +++++--- src/mapblock.cpp | 2 +- src/mapgen.cpp | 2 +- src/server.cpp | 16 +++++---- 8 files changed, 70 insertions(+), 74 deletions(-) (limited to 'src/mapgen.cpp') diff --git a/src/client.cpp b/src/client.cpp index 248cd8a4c..449b0c2f2 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -333,16 +333,16 @@ void Client::step(float dtime) true, &deleted_blocks);*/ // Delete whole sectors - u32 num = m_env.getMap().unloadUnusedData + m_env.getMap().unloadUnusedData (delete_unused_sectors_timeout, - false, &deleted_blocks); + &deleted_blocks); - if(num > 0) + if(deleted_blocks.size() > 0) { /*dstream<getBlockNoCreateNoEx(p); if(block==NULL) continue; + + // Reset block usage timer + block->resetUsageTimer(); // Set current time as timestamp block->setTimestampNoChangedFlag(m_game_time); diff --git a/src/map.cpp b/src/map.cpp index 5bf278667..2cf7bb2e5 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1388,8 +1388,6 @@ bool Map::dayNightDiffed(v3s16 blockpos) */ void Map::timerUpdate(float dtime) { - //JMutexAutoLock lock(m_sector_mutex); // Bulk comment-out - core::map::Iterator si; si = m_sectors.getIterator(); @@ -1407,38 +1405,27 @@ void Map::timerUpdate(float dtime) } } -void Map::deleteSectors(core::list &list, bool only_blocks) +void Map::deleteSectors(core::list &list) { core::list::Iterator j; for(j=list.begin(); j!=list.end(); j++) { MapSector *sector = m_sectors[*j]; - if(only_blocks) - { - sector->deleteBlocks(); - } - else - { - /* - If sector is in sector cache, remove it from there - */ - if(m_sector_cache == sector) - { - m_sector_cache = NULL; - } - /* - Remove from map and delete - */ - m_sectors.remove(*j); - delete sector; - } + // If sector is in sector cache, remove it from there + if(m_sector_cache == sector) + m_sector_cache = NULL; + // Remove from map and delete + m_sectors.remove(*j); + delete sector; } } -u32 Map::unloadUnusedData(float timeout, bool only_blocks, +void Map::unloadUnusedData(float timeout, core::list *deleted_blocks) { core::list sector_deletion_queue; + u32 deleted_blocks_count = 0; + u32 saved_blocks_count = 0; core::map::Iterator si = m_sectors.getIterator(); for(; si.atEnd() == false; si++) @@ -1453,14 +1440,18 @@ u32 Map::unloadUnusedData(float timeout, bool only_blocks, i != blocks.end(); i++) { MapBlock *block = (*i); - + if(block->getUsageTimer() > timeout) { // Save if modified if(block->getModified() != MOD_STATE_CLEAN) + { saveBlock(block); + saved_blocks_count++; + } // Delete from memory sector->deleteBlock(block); + deleted_blocks_count++; } else { @@ -1474,36 +1465,14 @@ u32 Map::unloadUnusedData(float timeout, bool only_blocks, } } -#if 0 - core::map::Iterator i = m_sectors.getIterator(); - for(; i.atEnd() == false; i++) - { - MapSector *sector = i.getNode()->getValue(); - /* - Delete sector from memory if it hasn't been used in a long time - */ - if(sector->usage_timer > timeout) - { - sector_deletion_queue.push_back(i.getNode()->getKey()); + deleteSectors(sector_deletion_queue); - if(deleted_blocks != NULL) - { - // Collect positions of blocks of sector - MapSector *sector = i.getNode()->getValue(); - core::list blocks; - sector->getBlocks(blocks); - for(core::list::Iterator i = blocks.begin(); - i != blocks.end(); i++) - { - deleted_blocks->push_back((*i)->getPos()); - } - } - } - } -#endif + dstream<<"Map: Unloaded "<vmanip.print(dstream);*/ @@ -2095,10 +2066,11 @@ MapBlock* ServerMap::finishBlockMake(mapgen::BlockMakeData *data, //TimeTaker timer("finishBlockMake() blitBackAll"); data->vmanip->blitBackAll(&changed_blocks); } -#if 1 - dstream<<"finishBlockMake: changed_blocks.size()=" - < &list, bool only_blocks); + // If deleted sector is in sector cache, clears cache + void deleteSectors(core::list &list); - // Returns count of deleted sectors - u32 unloadUnusedData(float timeout, bool only_blocks=false, + /* + Unload unused data + = flush changed to disk and delete from memory, if usage timer of + block is more than timeout + */ + void unloadUnusedData(float timeout, core::list *deleted_blocks=NULL); // For debug printing diff --git a/src/mapblock.cpp b/src/mapblock.cpp index 7036cd035..c125e67c8 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -38,7 +38,7 @@ MapBlock::MapBlock(Map *parent, v3s16 pos, bool dummy): m_generated(false), m_objects(this), m_timestamp(BLOCK_TIMESTAMP_UNDEFINED), - m_usage_timer(BLOCK_TIMESTAMP_UNDEFINED) + m_usage_timer(0) { data = NULL; if(dummy == false) diff --git a/src/mapgen.cpp b/src/mapgen.cpp index e481ee30c..4a2a39aec 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -1389,7 +1389,7 @@ void make_block(BlockMakeData *data) /* Create a block-specific seed */ - u32 blockseed = (data->seed%0x100000000) + full_node_min.Z*38134234 + u32 blockseed = (u32)(data->seed%0x100000000) + full_node_min.Z*38134234 + full_node_min.Y*42123 + full_node_min.X*23; /* diff --git a/src/server.cpp b/src/server.cpp index 2ee94f345..b65f0bdb5 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1831,17 +1831,21 @@ void Server::AsyncRunStep() JMutexAutoLock lock(m_env_mutex); if(((ServerMap*)(&m_env.getMap()))->isSavingEnabled() == true) { + // Unload unused data (delete from memory) + m_env.getMap().unloadUnusedData( + g_settings.getFloat("server_unload_unused_sectors_timeout")); + /*u32 deleted_count = m_env.getMap().unloadUnusedData( + g_settings.getFloat("server_unload_unused_sectors_timeout")); + */ + // Save only changed parts m_env.getMap().save(true); - // Delete unused sectors - u32 deleted_count = m_env.getMap().unloadUnusedData( - g_settings.getFloat("server_unload_unused_sectors_timeout")); - if(deleted_count > 0) + /*if(deleted_count > 0) { dout_server<<"Server: Unloaded "<