From: kwolekr Date: Sun, 21 Apr 2013 19:39:34 +0000 (-0400) Subject: Fix findSpawnPos() X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=daddd3770663655c3723ff9a4f4aba6010b1645c;p=zefram%2Fminetest%2Fminetest_engine.git Fix findSpawnPos() --- diff --git a/src/server.cpp b/src/server.cpp index 241826ba..7fad623c 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"< water_level + 6) - { - //infostream<<"-> Underwater"< 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; } }