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 @ShadowNinjamaster
parent
b019221c30
commit
27d4e89d32
|
@ -570,6 +570,9 @@ core.register_chatcommand("rollback_check", {
|
||||||
.. " seconds=86400=24h, limit=5)",
|
.. " seconds=86400=24h, limit=5)",
|
||||||
privs = {rollback=true},
|
privs = {rollback=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
|
if not core.setting_getbool("enable_rollback_recording") then
|
||||||
|
return false, "Rollback functions are disabled."
|
||||||
|
end
|
||||||
local range, seconds, limit =
|
local range, seconds, limit =
|
||||||
param:match("(%d+) *(%d*) *(%d*)")
|
param:match("(%d+) *(%d*) *(%d*)")
|
||||||
range = tonumber(range) or 0
|
range = tonumber(range) or 0
|
||||||
|
@ -583,6 +586,10 @@ core.register_chatcommand("rollback_check", {
|
||||||
local name = puncher:get_player_name()
|
local name = puncher:get_player_name()
|
||||||
core.chat_send_player(name, "Checking " .. core.pos_to_string(pos) .. "...")
|
core.chat_send_player(name, "Checking " .. core.pos_to_string(pos) .. "...")
|
||||||
local actions = core.rollback_get_node_actions(pos, range, seconds, limit)
|
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
|
local num_actions = #actions
|
||||||
if num_actions == 0 then
|
if num_actions == 0 then
|
||||||
core.chat_send_player(name, "Nobody has touched"
|
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",
|
description = "revert actions of a player; default for <seconds> is 60",
|
||||||
privs = {rollback=true},
|
privs = {rollback=true},
|
||||||
func = function(name, param)
|
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*)")
|
local target_name, seconds = string.match(param, ":([^ ]+) *(%d*)")
|
||||||
if not target_name then
|
if not target_name then
|
||||||
local player_name = nil
|
local player_name = nil
|
||||||
|
|
|
@ -337,6 +337,7 @@
|
||||||
# If true, disable cheat prevention in multiplayer
|
# If true, disable cheat prevention in multiplayer
|
||||||
#disable_anticheat = false
|
#disable_anticheat = false
|
||||||
# If true, actions are recorded for rollback
|
# If true, actions are recorded for rollback
|
||||||
|
# This option is only read when server starts
|
||||||
#enable_rollback_recording = false
|
#enable_rollback_recording = false
|
||||||
# Handling for deprecated lua api calls:
|
# Handling for deprecated lua api calls:
|
||||||
# "legacy" = (try to) mimic old behaviour (default for release).
|
# "legacy" = (try to) mimic old behaviour (default for release).
|
||||||
|
|
|
@ -1861,7 +1861,7 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> & modified_blocks)
|
||||||
suspect = m_gamedef->rollback()->getSuspect(p0, 83, 1);
|
suspect = m_gamedef->rollback()->getSuspect(p0, 83, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!suspect.empty()){
|
if(m_gamedef->rollback() && !suspect.empty()){
|
||||||
// Blame suspect
|
// Blame suspect
|
||||||
RollbackScopeActor rollback_scope(m_gamedef->rollback(), suspect, true);
|
RollbackScopeActor rollback_scope(m_gamedef->rollback(), suspect, true);
|
||||||
// Get old node for rollback
|
// Get old node for rollback
|
||||||
|
|
|
@ -44,6 +44,9 @@ int ModApiRollback::l_rollback_get_node_actions(lua_State *L)
|
||||||
int limit = luaL_checknumber(L, 4);
|
int limit = luaL_checknumber(L, 4);
|
||||||
Server *server = getServer(L);
|
Server *server = getServer(L);
|
||||||
IRollbackManager *rollback = server->getRollbackManager();
|
IRollbackManager *rollback = server->getRollbackManager();
|
||||||
|
if (rollback == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
std::list<RollbackAction> actions = rollback->getNodeActors(pos, range, seconds, limit);
|
std::list<RollbackAction> actions = rollback->getNodeActors(pos, range, seconds, limit);
|
||||||
std::list<RollbackAction>::iterator iter = actions.begin();
|
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);
|
int seconds = luaL_checknumber(L, 2);
|
||||||
Server *server = getServer(L);
|
Server *server = getServer(L);
|
||||||
IRollbackManager *rollback = server->getRollbackManager();
|
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<RollbackAction> actions = rollback->getRevertActions(actor, seconds);
|
||||||
std::list<std::string> log;
|
std::list<std::string> log;
|
||||||
bool success = server->rollbackRevertActions(actions, &log);
|
bool success = server->rollbackRevertActions(actions, &log);
|
||||||
|
|
|
@ -243,9 +243,6 @@ Server::Server(
|
||||||
std::string ban_path = m_path_world + DIR_DELIM "ipban.txt";
|
std::string ban_path = m_path_world + DIR_DELIM "ipban.txt";
|
||||||
m_banmanager = new BanManager(ban_path);
|
m_banmanager = new BanManager(ban_path);
|
||||||
|
|
||||||
// Create rollback manager
|
|
||||||
m_rollback = new RollbackManager(m_path_world, this);
|
|
||||||
|
|
||||||
ModConfiguration modconf(m_path_world);
|
ModConfiguration modconf(m_path_world);
|
||||||
m_mods = modconf.getMods();
|
m_mods = modconf.getMods();
|
||||||
std::vector<ModSpec> unsatisfied_mods = modconf.getUnsatisfiedMods();
|
std::vector<ModSpec> unsatisfied_mods = modconf.getUnsatisfiedMods();
|
||||||
|
@ -353,6 +350,12 @@ Server::Server(
|
||||||
// Initialize mapgens
|
// Initialize mapgens
|
||||||
m_emerge->initMapgens();
|
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
|
// Give environment reference to scripting api
|
||||||
m_script->initializeEnvironment(m_env);
|
m_script->initializeEnvironment(m_env);
|
||||||
|
|
||||||
|
@ -1068,10 +1071,6 @@ void Server::AsyncRunStep(bool initial_step)
|
||||||
counter = 0.0;
|
counter = 0.0;
|
||||||
|
|
||||||
m_emerge->startThreads();
|
m_emerge->startThreads();
|
||||||
|
|
||||||
// Update m_enable_rollback_recording here too
|
|
||||||
m_enable_rollback_recording =
|
|
||||||
g_settings->getBool("enable_rollback_recording");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue