Fix findSpawnPos()

This commit is contained in:
kwolekr 2013-04-21 15:39:34 -04:00
parent 14ba94ad6a
commit daddd37706

@ -4951,36 +4951,28 @@ v3f findSpawnPos(ServerMap &map)
{ {
s32 range = 1 + i; s32 range = 1 + i;
// We're going to try to throw the player to this position // We're going to try to throw the player to this position
v2s16 nodepos2d = v2s16(-range + (myrand()%(range*2)), v2s16 nodepos2d = v2s16(
-range + (myrand()%(range*2))); -range + (myrand() % (range * 2)),
//v2s16 sectorpos = getNodeSectorPos(nodepos2d); -range + (myrand() % (range * 2)));
// Get ground height at point (fallbacks to heightmap function)
s16 groundheight = map.findGroundLevel(nodepos2d);
// Don't go underwater
if(groundheight <= water_level)
{
//infostream<<"-> Underwater"<<std::endl;
continue;
}
// Don't go to high places
if(groundheight > water_level + 6)
{
//infostream<<"-> Underwater"<<std::endl;
continue;
}
nodepos = v3s16(nodepos2d.X, groundheight-2, nodepos2d.Y); // Get ground height at point
s16 groundheight = map.findGroundLevel(nodepos2d);
if (groundheight <= water_level) // Don't go underwater
continue;
if (groundheight > water_level + 6) // Don't go to high places
continue;
nodepos = v3s16(nodepos2d.X, groundheight, nodepos2d.Y);
bool is_good = false; bool is_good = false;
s32 air_count = 0; s32 air_count = 0;
for(s32 i=0; i<10; i++){ for (s32 i = 0; i < 10; i++) {
v3s16 blockpos = getNodeBlockPos(nodepos); v3s16 blockpos = getNodeBlockPos(nodepos);
map.emergeBlock(blockpos, true); map.emergeBlock(blockpos, true);
MapNode n = map.getNodeNoEx(nodepos); content_t c = map.getNodeNoEx(nodepos).getContent();
if(n.getContent() == CONTENT_AIR){ if (c == CONTENT_AIR || c == CONTENT_IGNORE) {
air_count++; air_count++;
if(air_count >= 2){ if (air_count >= 2){
is_good = true; is_good = true;
nodepos.Y -= 1;
break; break;
} }
} }