minetest-mm/mods/advtrains/advtrains/debugringbuffer.lua

48 lines
1.2 KiB
Lua

--so, some ringbuffers one for each train
local ringbuflen=1000
local ringbufs={}
local ringbufcnt={}
function advtrains.drb_record(tid, msg)
if not ringbufs[tid] then
ringbufs[tid]={}
ringbufcnt[tid]=0
end
ringbufs[tid][ringbufcnt[tid]]=msg
ringbufcnt[tid]=ringbufcnt[tid]+1
if ringbufcnt[tid] > ringbuflen then
ringbufcnt[tid]=0
end
end
function advtrains.drb_dump(tid)
atdebug("Debug ring buffer output for '"..tid.."':")
local stopcnt=ringbufcnt[tid]
if not stopcnt then
atdebug("ID unknown!")
return
end
repeat
local t = ringbufs[tid][ringbufcnt[tid]]
if t then
atdebug(t)
end
ringbufcnt[tid]=ringbufcnt[tid]+1
if ringbufcnt[tid] > ringbuflen then
ringbufcnt[tid]=0
end
until ringbufcnt[tid]==stopcnt
end
minetest.register_chatcommand("atdebug_show",
{
params = "train sid", -- Short parameter description
description = "Dump debug log", -- Full description
privs = {train_operator=true}, -- Require the "privs" privilege to run
func = function(name, param)
advtrains.drb_dump(param)
end, -- Called when command is run.
-- Returns boolean success and text output.
})