Better spawn position finding and checking
This commit is contained in:
parent
bc0e5c0063
commit
7372282a72
@ -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);
|
s16 groundheight = map.findGroundLevel(nodepos2d);
|
||||||
// Don't go underwater
|
// Don't go underwater
|
||||||
if(groundheight < WATER_LEVEL)
|
if(groundheight < WATER_LEVEL)
|
||||||
{
|
{
|
||||||
@ -4170,21 +4167,32 @@ v3f findSpawnPos(ServerMap &map)
|
|||||||
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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user