Revert "Improve (re)spawn, add cache_block_before_spawn and max_spawn_height settings"
authorShadowNinja <shadowninja@minetest.net>
Tue, 7 Jan 2014 02:17:19 +0000 (21:17 -0500)
committerShadowNinja <shadowninja@minetest.net>
Tue, 7 Jan 2014 02:25:10 +0000 (21:25 -0500)
The commit didn't work because the blocks weren't loaded yet.

This reverts commit 22dbbf0a6fc9547f0dbdb7f6076337b8c6acd48b.

Conflicts:
minetest.conf.example

minetest.conf.example
src/defaultsettings.cpp
src/map.cpp
src/map.h
src/server.cpp

index fa54bde8dc0cdecd9b64c06992b0b06afdd61302..674d253fbd25528c2ebdb91ef3ddcfee7b5237ca 100644 (file)
 #disable_anticheat = false
 # If true, actions are recorded for rollback
 #enable_rollback_recording = false
-# If true, blocks are cached (and generated if not before) before a player is spawned.
-#cache_block_before_spawn = true
-# Defines the maximum height a player can spawn in a map, above water level
-#max_spawn_height = 50
 
 # Profiler data print interval. #0 = disable.
 #profiler_print_interval = 0
index a7187faea9a662868e0669faf2c4954076e26cb0..659682b8f1ee3056c59b2d87425b4b919171295c 100644 (file)
@@ -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");
index 55f91c8a6117f8b982e40c9ba6aa4c36750c9883..4d32ecdfe8418f828ff9109584dd3c298346a855 100644 (file)
@@ -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() {
index fa88109a3a57e2a16823af2a2cfa130a3068b3ef..5ec1a0b9d2f2833b99018345d67f9bb353e454a0 100644 (file)
--- 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
index 0b3eb31a64e39670133e1753ea93b4153a642021..d8bedb260a39a9c7883680d977545e0663eb1a37 100644 (file)
@@ -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);