diff options
author | paramat <mat.gregory@virginmedia.com> | 2015-10-29 00:17:48 +0000 |
---|---|---|
committer | paramat <mat.gregory@virginmedia.com> | 2015-10-29 20:03:15 +0000 |
commit | c0a7c670a465b4c05d90a8a4e8001797ec4e628a (patch) | |
tree | 4bc48c7c9cf8b80925564e2ea48f94726c0e3f18 /src | |
parent | 182b3fd2831a7deb22d709e7c285eca3a57a5678 (diff) | |
download | minetest-c0a7c670a465b4c05d90a8a4e8001797ec4e628a.tar.gz minetest-c0a7c670a465b4c05d90a8a4e8001797ec4e628a.tar.bz2 minetest-c0a7c670a465b4c05d90a8a4e8001797ec4e628a.zip |
findSpawnPos: Add setting for max height above water level
Increase default from 6 to 16 to help with mgv7 and mgfractal
Large-scale or alternative mapgens can result in a lowland spawn point not
being found, causing a spawn at (0, 0, 0) possibly buried underground
The max height is now settable to allow correct player spawn
in any mapgen or when using custom noise parameters
Diffstat (limited to 'src')
-rw-r--r-- | src/defaultsettings.cpp | 1 | ||||
-rw-r--r-- | src/server.cpp | 8 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index ac62b2060..4a420445c 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -245,6 +245,7 @@ void set_default_settings(Settings *settings) settings->setDefault("default_privs", "interact, shout"); settings->setDefault("player_transfer_distance", "0"); settings->setDefault("enable_pvp", "true"); + settings->setDefault("vertical_spawn_range", "16"); settings->setDefault("disallow_empty_password", "false"); settings->setDefault("disable_anticheat", "false"); settings->setDefault("enable_rollback_recording", "false"); diff --git a/src/server.cpp b/src/server.cpp index 1e039631c..09675dae3 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3269,7 +3269,7 @@ v3f Server::findSpawnPos() } s16 water_level = map.getWaterLevel(); - + s16 vertical_spawn_range = g_settings->getS16("vertical_spawn_range"); bool is_good = false; // Try to find a good place a few times @@ -3282,9 +3282,9 @@ v3f Server::findSpawnPos() // 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 + // Don't go underwater or to high places + if (groundheight <= water_level || + groundheight > water_level + vertical_spawn_range) continue; v3s16 nodepos(nodepos2d.X, groundheight, nodepos2d.Y); |