57 lines
1.8 KiB
Lua
57 lines
1.8 KiB
Lua
|
minetest.register_chatcommand("check", {
|
||
|
params = "[<range>] [<seconds>] [limit]",
|
||
|
description = "Check who last touched a node or a node near it"
|
||
|
.. " within the time specified by <seconds>. Default: range = 0,"
|
||
|
.. " seconds = 86400 = 24h, limit = 5",
|
||
|
privs = {rollback_check=true},
|
||
|
func = function(name, param)
|
||
|
if not core.settings:get_bool("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
|
||
|
seconds = tonumber(seconds) or 86400
|
||
|
limit = tonumber(limit) or 5
|
||
|
if limit > 100 then
|
||
|
return false, "That limit is too high!"
|
||
|
end
|
||
|
|
||
|
core.rollback_punch_callbacks[name] = function(pos, node, puncher)
|
||
|
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"
|
||
|
.. " the specified location in "
|
||
|
.. seconds .. " seconds")
|
||
|
return
|
||
|
end
|
||
|
local time = os.time()
|
||
|
for i = num_actions, 1, -1 do
|
||
|
local action = actions[i]
|
||
|
core.chat_send_player(name,
|
||
|
("%s %s %s -> %s %d seconds ago.")
|
||
|
:format(
|
||
|
core.pos_to_string(action.pos),
|
||
|
action.actor,
|
||
|
action.oldnode.name,
|
||
|
action.newnode.name,
|
||
|
time - action.time))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return true, "Punch a node (range=" .. range .. ", seconds="
|
||
|
.. seconds .. "s, limit=" .. limit .. ")"
|
||
|
end,
|
||
|
})
|
||
|
|
||
|
minetest.register_privilege("rollback_check", {
|
||
|
description = "Can use the rollback check functionality",
|
||
|
give_to_singleplayer = false,
|
||
|
})
|