]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/map.cpp
Add dtime_s to entity activation
[dragonfireclient.git] / src / map.cpp
index 734122105e80e854f0bc0cf496d9a2add52ae013..39c6d292b3248569a0ffe382220250e24b01a440 100644 (file)
@@ -1468,8 +1468,8 @@ void Map::timerUpdate(float dtime, float unload_timeout,
                        MapBlock *block = (*i);
                        
                        block->incrementUsageTimer(dtime);
-                       
-                       if(block->getUsageTimer() > unload_timeout)
+
+                       if(block->refGet() == 0 && block->getUsageTimer() > unload_timeout)
                        {
                                v3s16 p = block->getPos();
 
@@ -1621,11 +1621,6 @@ void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks)
        DSTACK(__FUNCTION_NAME);
        //TimeTaker timer("transformLiquids()");
 
-       /*
-               If something goes wrong, liquids are to blame
-       */
-       RollbackScopeActor rollback_scope(m_gamedef->rollback(), "liquid");
-
        u32 loopcount = 0;
        u32 initial_size = m_transforming_liquid.size();
 
@@ -1641,7 +1636,7 @@ void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks)
        while(m_transforming_liquid.size() != 0)
        {
                // This should be done here so that it is done when continue is used
-               if(loopcount >= initial_size * 3)
+               if(loopcount >= initial_size || loopcount >= 10000)
                        break;
                loopcount++;
 
@@ -1829,20 +1824,28 @@ void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks)
                        n0.param2 = ~(LIQUID_LEVEL_MASK | LIQUID_FLOW_DOWN_MASK);
                }
                n0.setContent(new_node_content);
-
-               // Get old node for rollback
-               RollbackNode rollback_oldnode(this, p0, m_gamedef);
-
-               // Set node
-               setNode(p0, n0);
                
-               // Report for rollback
-               if(m_gamedef->rollback())
-               {
+               // Find out whether there is a suspect for this action
+               std::string suspect;
+               if(m_gamedef->rollback()){
+                       suspect = m_gamedef->rollback()->getSuspect(p0, 83, 1);
+               }
+
+               if(!suspect.empty()){
+                       // Blame suspect
+                       RollbackScopeActor rollback_scope(m_gamedef->rollback(), suspect, true);
+                       // Get old node for rollback
+                       RollbackNode rollback_oldnode(this, p0, m_gamedef);
+                       // Set node
+                       setNode(p0, n0);
+                       // Report
                        RollbackNode rollback_newnode(this, p0, m_gamedef);
                        RollbackAction action;
                        action.setSetNode(p0, rollback_oldnode, rollback_newnode);
                        m_gamedef->rollback()->reportAction(action);
+               } else {
+                       // Set node
+                       setNode(p0, n0);
                }
 
                v3s16 blockpos = getNodeBlockPos(p0);