8bfdc211a3
We were using action log level for a lot of things because by default MT does not seem to capture info logs to stderr. On "production" servers though this makes too much noise and makes it hard to find actual player actions. Servers that want info logging will just have to configure/compile it in.
45 lines
1.4 KiB
Lua
45 lines
1.4 KiB
Lua
-- LUALOCALS < ---------------------------------------------------------
|
|
local error, ipairs, minetest, nodecore, pairs, string, table
|
|
= error, ipairs, minetest, nodecore, pairs, string, table
|
|
local string_format, table_sort
|
|
= string.format, table.sort
|
|
-- LUALOCALS > ---------------------------------------------------------
|
|
|
|
function nodecore.ezschematic(key, yslices, init)
|
|
local totals = {}
|
|
local size = {}
|
|
local data = {}
|
|
size.y = #yslices
|
|
for y, ys in ipairs(yslices) do
|
|
if size.z and size.z ~= #ys then error("inconsistent z size") end
|
|
size.z = #ys
|
|
for z, zs in ipairs(ys) do
|
|
if size.x and size.x ~= #zs then error("inconsistent x size") end
|
|
size.x = #zs
|
|
for x = 1, zs:len() do
|
|
local node = key[zs:sub(x, x)]
|
|
if node and node.name then
|
|
totals[node.name] = (totals[node.name] or 0) + 1
|
|
end
|
|
data[(z - 1) * size.x * size.y + (y - 1) * size.x + x] = node
|
|
end
|
|
end
|
|
end
|
|
init = init or {}
|
|
init.size = size
|
|
init.data = data
|
|
|
|
local keys = {}
|
|
for k in pairs(totals) do keys[#keys + 1] = k end
|
|
table_sort(keys, function(a, b) return totals[a] > totals[b] end)
|
|
local report = string_format("ezschematic %s %dx%dx%d",
|
|
minetest.get_current_modname() or "runtime",
|
|
#yslices[1][1], #yslices, #yslices[1])
|
|
for _, k in ipairs(keys) do
|
|
report = string_format("%s, %d %s", report, totals[k], k)
|
|
end
|
|
nodecore.log("info", report)
|
|
|
|
return minetest.register_schematic(init)
|
|
end
|