diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-07-27 13:24:28 +0300 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-07-27 13:24:28 +0300 |
commit | a9d8df83d228635594b75a563a0a8d906b3b883a (patch) | |
tree | 547e16d22ebef3e35a65e1dc3cf6368f5f5ec331 /src/map.cpp | |
parent | 508b7b5e51bd2e193fb182bb9247555154d78087 (diff) | |
download | minetest-a9d8df83d228635594b75a563a0a8d906b3b883a.tar.gz minetest-a9d8df83d228635594b75a563a0a8d906b3b883a.tar.bz2 minetest-a9d8df83d228635594b75a563a0a8d906b3b883a.zip |
Make the rollback system VERY FUCKING GOD DAMN POWERFUL
Diffstat (limited to 'src/map.cpp')
-rw-r--r-- | src/map.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/map.cpp b/src/map.cpp index 853693049..8aa73efbe 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1621,12 +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 - NOTE: Do not track liquids; it causes huge amounts of rollback log - */ - //RollbackScopeActor rollback_scope(m_gamedef->rollback(), "liquid"); - u32 loopcount = 0; u32 initial_size = m_transforming_liquid.size(); @@ -1830,21 +1824,30 @@ 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()){ + // Max. 5 seconds ago + suspect = m_gamedef->rollback()->getSuspect(p0, 5); + } + + 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); MapBlock *block = getBlockNoCreateNoEx(blockpos); |