aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2015-02-17 20:09:36 +0100
committerLoic Blot <loic.blot@unix-experience.fr>2015-02-18 09:28:39 +0100
commit27d4e89d326337c8d8cafc681acde8bfbde7de77 (patch)
tree05122a05a2178adf57c5ac8b1038fb8eaefef46b /src
parentb019221c30f58ce1944d8f2421b40b31ba364716 (diff)
downloadminetest-27d4e89d326337c8d8cafc681acde8bfbde7de77.tar.gz
minetest-27d4e89d326337c8d8cafc681acde8bfbde7de77.tar.bz2
minetest-27d4e89d326337c8d8cafc681acde8bfbde7de77.zip
Fix unused (and so, broken) enable_rollback_recording. This option must be reloaded at server loop but loaded when server starts, for data consistency (not a hot load variable)
ok @ShadowNinja
Diffstat (limited to 'src')
-rw-r--r--src/map.cpp4
-rw-r--r--src/script/lua_api/l_rollback.cpp10
-rw-r--r--src/server.cpp13
3 files changed, 18 insertions, 9 deletions
diff --git a/src/map.cpp b/src/map.cpp
index 0877d8c8e..a9ff22c32 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -1857,11 +1857,11 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
// Find out whether there is a suspect for this action
std::string suspect;
- if(m_gamedef->rollback()){
+ if(m_gamedef->rollback()) {
suspect = m_gamedef->rollback()->getSuspect(p0, 83, 1);
}
- if(!suspect.empty()){
+ if(m_gamedef->rollback() && !suspect.empty()){
// Blame suspect
RollbackScopeActor rollback_scope(m_gamedef->rollback(), suspect, true);
// Get old node for rollback
diff --git a/src/script/lua_api/l_rollback.cpp b/src/script/lua_api/l_rollback.cpp
index f55a72d1b..5744e6813 100644
--- a/src/script/lua_api/l_rollback.cpp
+++ b/src/script/lua_api/l_rollback.cpp
@@ -44,6 +44,9 @@ int ModApiRollback::l_rollback_get_node_actions(lua_State *L)
int limit = luaL_checknumber(L, 4);
Server *server = getServer(L);
IRollbackManager *rollback = server->getRollbackManager();
+ if (rollback == NULL) {
+ return 0;
+ }
std::list<RollbackAction> actions = rollback->getNodeActors(pos, range, seconds, limit);
std::list<RollbackAction>::iterator iter = actions.begin();
@@ -80,6 +83,13 @@ int ModApiRollback::l_rollback_revert_actions_by(lua_State *L)
int seconds = luaL_checknumber(L, 2);
Server *server = getServer(L);
IRollbackManager *rollback = server->getRollbackManager();
+
+ // If rollback is disabled, tell it's not a success.
+ if (rollback == NULL) {
+ lua_pushboolean(L, false);
+ lua_newtable(L);
+ return 2;
+ }
std::list<RollbackAction> actions = rollback->getRevertActions(actor, seconds);
std::list<std::string> log;
bool success = server->rollbackRevertActions(actions, &log);
diff --git a/src/server.cpp b/src/server.cpp
index a118e15dd..a75e27456 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -243,9 +243,6 @@ Server::Server(
std::string ban_path = m_path_world + DIR_DELIM "ipban.txt";
m_banmanager = new BanManager(ban_path);
- // Create rollback manager
- m_rollback = new RollbackManager(m_path_world, this);
-
ModConfiguration modconf(m_path_world);
m_mods = modconf.getMods();
std::vector<ModSpec> unsatisfied_mods = modconf.getUnsatisfiedMods();
@@ -353,6 +350,12 @@ Server::Server(
// Initialize mapgens
m_emerge->initMapgens();
+ m_enable_rollback_recording = g_settings->getBool("enable_rollback_recording");
+ if (m_enable_rollback_recording) {
+ // Create rollback manager
+ m_rollback = new RollbackManager(m_path_world, this);
+ }
+
// Give environment reference to scripting api
m_script->initializeEnvironment(m_env);
@@ -1068,10 +1071,6 @@ void Server::AsyncRunStep(bool initial_step)
counter = 0.0;
m_emerge->startThreads();
-
- // Update m_enable_rollback_recording here too
- m_enable_rollback_recording =
- g_settings->getBool("enable_rollback_recording");
}
}