]> git.lizzy.rs Git - minetest.git/blobdiff - src/server.cpp
Add '/clearobjects quick'
[minetest.git] / src / server.cpp
index f6faccb1f2f455287577e3b4c4a2dd2043def6a2..572533146555d9d923b17aed3e52297634978773 100644 (file)
@@ -3034,7 +3034,8 @@ bool Server::hudSetFlags(Player *player, u32 flags, u32 mask)
                return false;
 
        SendHUDSetFlags(player->peer_id, flags, mask);
-       player->hud_flags = flags;
+       player->hud_flags &= ~mask;
+       player->hud_flags |= flags;
 
        PlayerSAO* playersao = player->getPlayerSAO();
 
@@ -3382,26 +3383,24 @@ v3f Server::findSpawnPos()
                return nodeposf * BS;
        }
 
-       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
-       for(s32 i = 0; i < 1000 && !is_good; i++) {
+       for(s32 i = 0; i < 4000 && !is_good; i++) {
                s32 range = 1 + i;
                // We're going to try to throw the player to this position
                v2s16 nodepos2d = v2s16(
                                -range + (myrand() % (range * 2)),
                                -range + (myrand() % (range * 2)));
 
-               // Get ground height at point
-               s16 groundheight = map.findGroundLevel(nodepos2d);
-               // Don't go underwater or to high places
-               if (groundheight <= water_level ||
-                               groundheight > water_level + vertical_spawn_range)
+               // Get spawn level at point
+               s16 spawn_level = m_emerge->getSpawnLevelAtPoint(nodepos2d);
+               // Continue if MAX_MAP_GENERATION_LIMIT was returned by
+               // the mapgen to signify an unsuitable spawn position
+               if (spawn_level == MAX_MAP_GENERATION_LIMIT)
                        continue;
 
-               v3s16 nodepos(nodepos2d.X, groundheight, nodepos2d.Y);
+               v3s16 nodepos(nodepos2d.X, spawn_level, nodepos2d.Y);
 
                s32 air_count = 0;
                for (s32 i = 0; i < 10; i++) {