SAO limits: Allow SAOs to exist outside the set 'mapgen limit'
authorparamat <paramat@users.noreply.github.com>
Tue, 20 Feb 2018 19:32:24 +0000 (19:32 +0000)
committerSmallJoker <mk939@ymail.com>
Sun, 3 Jun 2018 15:32:00 +0000 (17:32 +0200)
src/content_sao.cpp
src/map.cpp
src/map.h
src/mapgen.cpp
src/mapgen.h
src/serverenvironment.cpp

index 1234e3915246d1e22e4e52cf3b2f92cd39d121b8..c22e341a957e650d01c70bc3ba27303c3ce3213d 100644 (file)
@@ -406,20 +406,6 @@ void LuaEntitySAO::step(float dtime, bool send_recommended)
                m_env->getScriptIface()->luaentity_Step(m_id, dtime);
        }
 
-       // Remove LuaEntity beyond terrain edges
-       {
-               ServerMap *map = dynamic_cast<ServerMap *>(&m_env->getMap());
-               assert(map);
-               if (!m_pending_deactivation &&
-                               map->saoPositionOverLimit(m_base_position)) {
-                       infostream << "Remove SAO " << m_id << "(" << m_init_name
-                               << "), outside of limits" << std::endl;
-                       m_pending_deactivation = true;
-                       m_pending_removal = true;
-                       return;
-               }
-       }
-
        if(send_recommended == false)
                return;
 
index 0c57d6a8af58a5a48efab78ac0838bc389f67790..1289714429c87bef9078dd39a8d92ced586d23ff 100644 (file)
@@ -1378,11 +1378,6 @@ s16 ServerMap::getWaterLevel()
        return getMapgenParams()->water_level;
 }
 
-bool ServerMap::saoPositionOverLimit(const v3f &p)
-{
-       return getMapgenParams()->saoPosOverLimit(p);
-}
-
 bool ServerMap::blockpos_over_mapgen_limit(v3s16 p)
 {
        const s16 mapgen_limit_bp = rangelim(
index 4b6e08f9600c45e9f4a86c5f0be1db2c9ac0d6ba..5123a7ec11c3d5304d534521364ba6649fcbe354 100644 (file)
--- a/src/map.h
+++ b/src/map.h
@@ -377,8 +377,6 @@ public:
        */
        ServerMapSector *createSector(v2s16 p);
 
-       bool saoPositionOverLimit(const v3f &p);
-
        /*
                Blocks are generated by using these and makeBlock().
        */
index f4165f5cd87e14484cb792029601707200b957a0..cb0100722ef8a616245894a922a4fde20941b64a 100644 (file)
@@ -1058,13 +1058,11 @@ void MapgenParams::writeParams(Settings *settings) const
                bparams->writeParams(settings);
 }
 
-// Calculate edges of outermost generated mapchunks (less than
-// 'mapgen_limit'), and corresponding exact limits for SAO entities.
+
+// Calculate exact edges of the outermost mapchunks that are within the
+// set 'mapgen_limit'.
 void MapgenParams::calcMapgenEdges()
 {
-       if (m_mapgen_edges_calculated)
-               return;
-
        // Central chunk offset, in blocks
        s16 ccoff_b = -chunksize / 2;
        // Chunksize, in nodes
@@ -1089,31 +1087,15 @@ void MapgenParams::calcMapgenEdges()
        // Mapgen edges, in nodes
        mapgen_edge_min = ccmin - numcmin * csize_n;
        mapgen_edge_max = ccmax + numcmax * csize_n;
-       // SAO position limits, in Irrlicht units
-       m_sao_limit_min = mapgen_edge_min * BS - 3.0f;
-       m_sao_limit_max = mapgen_edge_max * BS + 3.0f;
 
        m_mapgen_edges_calculated = true;
 }
 
 
-bool MapgenParams::saoPosOverLimit(const v3f &p)
+s32 MapgenParams::getSpawnRangeMax()
 {
        if (!m_mapgen_edges_calculated)
                calcMapgenEdges();
 
-       return p.X < m_sao_limit_min ||
-               p.X > m_sao_limit_max ||
-               p.Y < m_sao_limit_min ||
-               p.Y > m_sao_limit_max ||
-               p.Z < m_sao_limit_min ||
-               p.Z > m_sao_limit_max;
-}
-
-
-s32 MapgenParams::getSpawnRangeMax()
-{
-       calcMapgenEdges();
-
        return MYMIN(-mapgen_edge_min, mapgen_edge_max);
 }
index 9bfdb22decb502fe4d79835af96056bd26228385..d1845d598f1deb6380b05cc1608e4dca32f41201 100644 (file)
@@ -145,8 +145,6 @@ struct MapgenParams {
 
                mapgen_edge_min(-MAX_MAP_GENERATION_LIMIT),
                mapgen_edge_max(MAX_MAP_GENERATION_LIMIT),
-               m_sao_limit_min(-MAX_MAP_GENERATION_LIMIT * BS),
-               m_sao_limit_max(MAX_MAP_GENERATION_LIMIT * BS),
                m_mapgen_edges_calculated(false)
        {
        }
@@ -156,14 +154,11 @@ struct MapgenParams {
        virtual void readParams(const Settings *settings);
        virtual void writeParams(Settings *settings) const;
 
-       bool saoPosOverLimit(const v3f &p);
        s32 getSpawnRangeMax();
 
 private:
        void calcMapgenEdges();
 
-       float m_sao_limit_min;
-       float m_sao_limit_max;
        bool m_mapgen_edges_calculated;
 };
 
index e4fcf626d3b24ae736e645110c707bf02a980a75..8a66d4dfa34df140986fbf73b399167308e4699e 100644 (file)
@@ -579,8 +579,7 @@ PlayerSAO *ServerEnvironment::loadPlayer(RemotePlayer *player, bool *new_player,
                // If the player exists, ensure that they respawn inside legal bounds
                // This fixes an assert crash when the player can't be added
                // to the environment
-               ServerMap &map = getServerMap();
-               if (map.getMapgenParams()->saoPosOverLimit(playersao->getBasePosition())) {
+               if (objectpos_over_limit(playersao->getBasePosition())) {
                        actionstream << "Respawn position for player \""
                                << player->getName() << "\" outside limits, resetting" << std::endl;
                        playersao->setBasePosition(m_server->findSpawnPos());