forked from Mirrorlandia_minetest/minetest
Fix findSpawnPos()
This commit is contained in:
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user