@@ -515,34 +515,45 @@ minetest.register_on_punchnode(function(pos, node, puncher)
515
515
end )
516
516
517
517
minetest .register_chatcommand (" rollback_check" , {
518
- params = " [<range>] [<seconds>]" ,
518
+ params = " [<range>] [<seconds>] [limit] " ,
519
519
description = " check who has last touched a node or near it, " ..
520
- " max. <seconds> ago (default range=0, seconds=86400=24h)" ,
520
+ " max. <seconds> ago (default range=0, seconds=86400=24h, limit=5 )" ,
521
521
privs = {rollback = true },
522
522
func = function (name , param )
523
- local range , seconds = string.match (param , " (%d+) *(%d*)" )
523
+ local range , seconds , limit =
524
+ param :match (" (%d+) *(%d*) *(%d*)" )
524
525
range = tonumber (range ) or 0
525
526
seconds = tonumber (seconds ) or 86400
526
- minetest .chat_send_player (name , " Punch a node (limits set: range=" ..
527
- dump (range ).. " seconds=" .. dump (seconds ).. " s)" )
527
+ limit = tonumber (limit ) or 5
528
+ if limit > 100 then
529
+ minetest .chat_send_player (name , " That limit is too high!" )
530
+ return
531
+ end
532
+ minetest .chat_send_player (name , " Punch a node (range=" ..
533
+ range .. " , seconds=" .. seconds .. " s, limit=" .. limit .. " )" )
534
+
528
535
minetest .rollback_punch_callbacks [name ] = function (pos , node , puncher )
529
536
local name = puncher :get_player_name ()
530
- minetest .chat_send_player (name , " Checking..." )
531
- local actor , act_p , act_seconds =
532
- minetest . rollback_get_last_node_actor ( pos , range , seconds )
533
- if actor == " " then
537
+ minetest .chat_send_player (name , " Checking " .. minetest . pos_to_string ( pos ) .. " ..." )
538
+ local actions = minetest . rollback_get_node_actions ( pos , range , seconds , limit )
539
+ local num_actions = # actions
540
+ if num_actions == 0 then
534
541
minetest .chat_send_player (name , " Nobody has touched the " ..
535
- " specified location in " .. dump ( seconds ) .. " seconds" )
542
+ " specified location in " .. seconds .. " seconds" )
536
543
return
537
544
end
538
- local nodedesc = " this node"
539
- if act_p .x ~= pos .x or act_p .y ~= pos .y or act_p .z ~= pos .z then
540
- nodedesc = minetest .pos_to_string (act_p )
545
+ local time = os.time ()
546
+ for i = num_actions , 1 , - 1 do
547
+ local action = actions [i ]
548
+ minetest .chat_send_player (name ,
549
+ (" %s %s %s -> %s %d seconds ago." )
550
+ :format (
551
+ minetest .pos_to_string (action .pos ),
552
+ action .actor ,
553
+ action .oldnode .name ,
554
+ action .newnode .name ,
555
+ time - action .time ))
541
556
end
542
- local nodename = minetest .get_node (act_p ).name
543
- minetest .chat_send_player (name , " Last actor on " .. nodedesc ..
544
- " was " .. actor .. " , " .. dump (act_seconds )..
545
- " s ago (node is now " .. nodename .. " )" )
546
557
end
547
558
end ,
548
559
})
@@ -554,7 +565,7 @@ minetest.register_chatcommand("rollback", {
554
565
func = function (name , param )
555
566
local target_name , seconds = string.match (param , " :([^ ]+) *(%d*)" )
556
567
if not target_name then
557
- local player_name = nil ;
568
+ local player_name = nil
558
569
player_name , seconds = string.match (param , " ([^ ]+) *(%d*)" )
559
570
if not player_name then
560
571
minetest .chat_send_player (name , " Invalid parameters. See /help rollback and /help rollback_check" )
@@ -564,13 +575,13 @@ minetest.register_chatcommand("rollback", {
564
575
end
565
576
seconds = tonumber (seconds ) or 60
566
577
minetest .chat_send_player (name , " Reverting actions of " ..
567
- dump ( target_name ) .. " since " .. dump ( seconds ) .. " seconds." )
578
+ target_name .. " since " .. seconds .. " seconds." )
568
579
local success , log = minetest .rollback_revert_actions_by (
569
580
target_name , seconds )
570
- if # log > 10 then
581
+ if # log > 100 then
571
582
minetest .chat_send_player (name , " (log is too long to show)" )
572
583
else
573
- for _ ,line in ipairs (log ) do
584
+ for _ , line in pairs (log ) do
574
585
minetest .chat_send_player (name , line )
575
586
end
576
587
end
0 commit comments