diff options
author | kwolekr <kwolekr@minetest.net> | 2013-04-21 15:39:34 -0400 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2013-04-21 15:39:34 -0400 |
commit | daddd3770663655c3723ff9a4f4aba6010b1645c (patch) | |
tree | 0ac9889438443ed4e4aa069fab739be1030630c6 | |
parent | 14ba94ad6a0e2176106af08e41d99ad81b03e9e4 (diff) | |
download | minetest-daddd3770663655c3723ff9a4f4aba6010b1645c.tar.gz minetest-daddd3770663655c3723ff9a4f4aba6010b1645c.tar.bz2 minetest-daddd3770663655c3723ff9a4f4aba6010b1645c.zip |
Fix findSpawnPos()
-rw-r--r-- | src/server.cpp | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/src/server.cpp b/src/server.cpp index 241826ba2..7fad623c2 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -4951,36 +4951,28 @@ v3f findSpawnPos(ServerMap &map) { s32 range = 1 + i; // We're going to try to throw the player to this position - v2s16 nodepos2d = v2s16(-range + (myrand()%(range*2)), - -range + (myrand()%(range*2))); - //v2s16 sectorpos = getNodeSectorPos(nodepos2d); - // Get ground height at point (fallbacks to heightmap function) + v2s16 nodepos2d = v2s16( + -range + (myrand() % (range * 2)), + -range + (myrand() % (range * 2))); + + // Get ground height at point s16 groundheight = map.findGroundLevel(nodepos2d); - // Don't go underwater - if(groundheight <= water_level) - { - //infostream<<"-> Underwater"<<std::endl; + if (groundheight <= water_level) // Don't go underwater continue; - } - // Don't go to high places - if(groundheight > water_level + 6) - { - //infostream<<"-> Underwater"<<std::endl; + if (groundheight > water_level + 6) // Don't go to high places continue; - } - nodepos = v3s16(nodepos2d.X, groundheight-2, nodepos2d.Y); + nodepos = v3s16(nodepos2d.X, groundheight, nodepos2d.Y); bool is_good = false; s32 air_count = 0; - for(s32 i=0; i<10; i++){ + for (s32 i = 0; i < 10; i++) { v3s16 blockpos = getNodeBlockPos(nodepos); map.emergeBlock(blockpos, true); - MapNode n = map.getNodeNoEx(nodepos); - if(n.getContent() == CONTENT_AIR){ + content_t c = map.getNodeNoEx(nodepos).getContent(); + if (c == CONTENT_AIR || c == CONTENT_IGNORE) { air_count++; - if(air_count >= 2){ + if (air_count >= 2){ is_good = true; - nodepos.Y -= 1; break; } } |