summaryrefslogtreecommitdiff
path: root/src/map.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-07-27 13:24:28 +0300
committerPerttu Ahola <celeron55@gmail.com>2012-07-27 13:24:28 +0300
commita9d8df83d228635594b75a563a0a8d906b3b883a (patch)
tree547e16d22ebef3e35a65e1dc3cf6368f5f5ec331 /src/map.cpp
parent508b7b5e51bd2e193fb182bb9247555154d78087 (diff)
downloadminetest-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.cpp35
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);