Merge remote-tracking branch 'upstream/master'

Conflicts:
	src/server.cpp
master
ValkaTR 2011-11-13 18:33:35 +02:00
commit ef32209c51
1 changed files with 28 additions and 20 deletions

View File

@ -4136,8 +4136,7 @@ v3f findSpawnPos(ServerMap &map)
{ {
//return v3f(50,50,50)*BS; //return v3f(50,50,50)*BS;
v2s16 nodepos; v3s16 nodepos;
s16 groundheight = 0;
#if 0 #if 0
nodepos = v2s16(0,0); nodepos = v2s16(0,0);
@ -4150,13 +4149,11 @@ 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
nodepos = v2s16(-range + (myrand()%(range*2)), v2s16 nodepos2d = v2s16(-range + (myrand()%(range*2)),
-range + (myrand()%(range*2))); -range + (myrand()%(range*2)));
v2s16 sectorpos = getNodeSectorPos(nodepos); //v2s16 sectorpos = getNodeSectorPos(nodepos2d);
// Get sector (NOTE: Don't get because it's slow)
//m_env.getMap().emergeSector(sectorpos);
// Get ground height at point (fallbacks to heightmap function) // Get ground height at point (fallbacks to heightmap function)
groundheight = map.findGroundLevel(nodepos) + 1; s16 groundheight = map.findGroundLevel(nodepos2d) + 1;
// Don't go underwater // Don't go underwater
if(groundheight < WATER_LEVEL) if(groundheight < WATER_LEVEL)
{ {
@ -4169,22 +4166,33 @@ v3f findSpawnPos(ServerMap &map)
//infostream<<"-> Underwater"<<std::endl; //infostream<<"-> Underwater"<<std::endl;
continue; continue;
} }
// Found a good place nodepos = v3s16(nodepos2d.X, groundheight-2, nodepos2d.Y);
//infostream<<"Searched through "<<i<<" places."<<std::endl; bool is_good = false;
break; s32 air_count = 0;
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){
air_count++;
if(air_count >= 2){
is_good = true;
nodepos.Y -= 1;
break;
}
}
nodepos.Y++;
}
if(is_good){
// Found a good place
//infostream<<"Searched through "<<i<<" places."<<std::endl;
break;
}
} }
#endif #endif
// If no suitable place was not found, go above water at least. return intToFloat(nodepos, BS);
if(groundheight < WATER_LEVEL)
groundheight = WATER_LEVEL;
return intToFloat(v3s16(
nodepos.X,
groundheight + 3,
nodepos.Y
), BS);
} }
Player *Server::emergePlayer(const char *name, const char *password, u16 peer_id) Player *Server::emergePlayer(const char *name, const char *password, u16 peer_id)