diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/defaultsettings.cpp | 2 | ||||
-rw-r--r-- | src/map.cpp | 78 | ||||
-rw-r--r-- | src/map.h | 2 | ||||
-rw-r--r-- | src/server.cpp | 9 |
4 files changed, 40 insertions, 51 deletions
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index a7187faea..659682b8f 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -189,8 +189,6 @@ void set_default_settings(Settings *settings) settings->setDefault("disallow_empty_password", "false"); settings->setDefault("disable_anticheat", "false"); settings->setDefault("enable_rollback_recording", "false"); - settings->setDefault("cache_block_before_spawn", "true"); - settings->setDefault("max_spawn_height", "50"); settings->setDefault("profiler_print_interval", "0"); settings->setDefault("enable_mapgen_debug_info", "false"); diff --git a/src/map.cpp b/src/map.cpp index 55f91c8a6..4d32ecdfe 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -3185,56 +3185,48 @@ void ServerMap::prepareBlock(MapBlock *block) { } } -/** - * Get the ground level by searching for a non CONTENT_AIR node in a column from top to bottom - */ -s16 ServerMap::findGroundLevel(v2s16 p2d, bool cacheBlocks) +s16 ServerMap::findGroundLevel(v2s16 p2d) { - - s16 level; - - // The reference height is the original mapgen height - s16 referenceHeight = m_emerge->getGroundLevelAtPoint(p2d); - s16 maxSearchHeight = 63 + referenceHeight; - s16 minSearchHeight = -63 + referenceHeight; - v3s16 probePosition(p2d.X, maxSearchHeight, p2d.Y); - v3s16 blockPosition = getNodeBlockPos(probePosition); - v3s16 prevBlockPosition = blockPosition; - - // Cache the block to be inspected. - if(cacheBlocks) { - emergeBlock(blockPosition, true); - } - - // Probes the nodes in the given column - for(; probePosition.Y > minSearchHeight; probePosition.Y--) +#if 0 + /* + Uh, just do something random... + */ + // Find existing map from top to down + s16 max=63; + s16 min=-64; + v3s16 p(p2d.X, max, p2d.Y); + for(; p.Y>min; p.Y--) { - if(cacheBlocks) { - // Calculate the block position of the given node - blockPosition = getNodeBlockPos(probePosition); - - // If the node is in an different block, cache it - if(blockPosition != prevBlockPosition) { - emergeBlock(blockPosition, true); - prevBlockPosition = blockPosition; - } - } - - MapNode node = getNodeNoEx(probePosition); - if (node.getContent() != CONTENT_IGNORE && - node.getContent() != CONTENT_AIR) { + MapNode n = getNodeNoEx(p); + if(n.getContent() != CONTENT_IGNORE) break; - } } - - // Could not determine the ground. Use map generator noise functions. - if(probePosition.Y == minSearchHeight) { - level = referenceHeight; - } else { - level = probePosition.Y; + if(p.Y == min) + goto plan_b; + // If this node is not air, go to plan b + if(getNodeNoEx(p).getContent() != CONTENT_AIR) + goto plan_b; + // Search existing walkable and return it + for(; p.Y>min; p.Y--) + { + MapNode n = getNodeNoEx(p); + if(content_walkable(n.d) && n.getContent() != CONTENT_IGNORE) + return p.Y; } + // Move to plan b +plan_b: +#endif + + /* + Determine from map generator noise functions + */ + + s16 level = m_emerge->getGroundLevelAtPoint(p2d); return level; + + //double level = base_rock_level_2d(m_seed, p2d) + AVERAGE_MUD_AMOUNT; + //return (s16)level; } bool ServerMap::loadFromFolders() { @@ -428,7 +428,7 @@ public: void prepareBlock(MapBlock *block); // Helper for placing objects on ground level - s16 findGroundLevel(v2s16 p2d, bool cacheBlocks); + s16 findGroundLevel(v2s16 p2d); /* Misc. helper functions for fiddling with directory and file diff --git a/src/server.cpp b/src/server.cpp index 0b3eb31a6..d8bedb260 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2300,9 +2300,8 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) } /*infostream<<"Server::ProcessData(): Moved player "<<peer_id<<" to " - <<"("<<position.X<<","<<position.Y<<","<<position.Z<<")" - <<" pitch="<<pitch<<" yaw="<<yaw<<std::endl;*/ - + <<"("<<position.X<<","<<position.Y<<","<<position.Z<<")" + <<" pitch="<<pitch<<" yaw="<<yaw<<std::endl;*/ } else if(command == TOSERVER_GOTBLOCKS) { @@ -5336,10 +5335,10 @@ v3f findSpawnPos(ServerMap &map) -range + (myrand() % (range * 2))); // Get ground height at point - s16 groundheight = map.findGroundLevel(nodepos2d, g_settings->getBool("cache_block_before_spawn")); + s16 groundheight = map.findGroundLevel(nodepos2d); if (groundheight <= water_level) // Don't go underwater continue; - if (groundheight > water_level + g_settings->getS16("max_spawn_height")) // Don't go to high places + if (groundheight > water_level + 6) // Don't go to high places continue; nodepos = v3s16(nodepos2d.X, groundheight, nodepos2d.Y); |