Fix unused (and so, broken) enable_rollback_recording. This option must be reloaded...
authorLoic Blot <loic.blot@unix-experience.fr>
Tue, 17 Feb 2015 19:09:36 +0000 (20:09 +0100)
committerLoic Blot <loic.blot@unix-experience.fr>
Wed, 18 Feb 2015 08:28:39 +0000 (09:28 +0100)
ok @ShadowNinja

builtin/game/chatcommands.lua
minetest.conf.example
src/map.cpp
src/script/lua_api/l_rollback.cpp
src/server.cpp

index 2d94817e8f016fbef245c45a3edcdaec72e26756..91b685fdf85a4e34ca7af595b14428e04b70c820 100644 (file)
@@ -570,6 +570,9 @@ core.register_chatcommand("rollback_check", {
                        .. " seconds=86400=24h, limit=5)",
        privs = {rollback=true},
        func = function(name, param)
+               if not core.setting_getbool("enable_rollback_recording") then
+                       return false, "Rollback functions are disabled."
+               end
                local range, seconds, limit =
                        param:match("(%d+) *(%d*) *(%d*)")
                range = tonumber(range) or 0
@@ -583,6 +586,10 @@ core.register_chatcommand("rollback_check", {
                        local name = puncher:get_player_name()
                        core.chat_send_player(name, "Checking " .. core.pos_to_string(pos) .. "...")
                        local actions = core.rollback_get_node_actions(pos, range, seconds, limit)
+                       if not actions then
+                               core.chat_send_player(name, "Rollback functions are disabled")
+                               return
+                       end
                        local num_actions = #actions
                        if num_actions == 0 then
                                core.chat_send_player(name, "Nobody has touched"
@@ -614,6 +621,9 @@ core.register_chatcommand("rollback", {
        description = "revert actions of a player; default for <seconds> is 60",
        privs = {rollback=true},
        func = function(name, param)
+               if not core.setting_getbool("enable_rollback_recording") then
+                       return false, "Rollback functions are disabled."
+               end
                local target_name, seconds = string.match(param, ":([^ ]+) *(%d*)")
                if not target_name then
                        local player_name = nil
index eb883fa8e837d75eec317bd8965070f557d944ab..eefe3b7bcb2148c9760365baef2eaded063aa8d8 100644 (file)
 #    If true, disable cheat prevention in multiplayer
 #disable_anticheat = false
 #    If true, actions are recorded for rollback
+#    This option is only read when server starts
 #enable_rollback_recording = false
 #    Handling for deprecated lua api calls:
 #        "legacy" = (try to) mimic old behaviour (default for release).
index 0877d8c8ef7796510c2637b312b75ce7fb1efbdd..a9ff22c32ce324b55b9e84d1d5dd10858422eaa9 100644 (file)
@@ -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
index f55a72d1b77bd00aa55edbede55d46724b65e36f..5744e68139a6e4abe3eda1903e709d36527d8e76 100644 (file)
@@ -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);
index a118e15dd31c0b00d7e4e420533a4c2a022e5ac7..a75e274564fee099f3264104fc9dcb15a0db6a28 100644 (file)
@@ -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");
                }
        }