aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/defaultsettings.cpp2
-rw-r--r--src/map.cpp78
-rw-r--r--src/map.h2
-rw-r--r--src/server.cpp9
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() {
diff --git a/src/map.h b/src/map.h
index fa88109a3..5ec1a0b9d 100644
--- a/src/map.h
+++ b/src/map.h
@@ -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);