mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-11-22 07:23:00 +00:00
//subdivide: Tidy up output
This commit is contained in:
parent
0afbba4deb
commit
3487e5c32b
4 changed files with 47 additions and 11 deletions
|
@ -62,20 +62,29 @@ worldedit.register_command("subdivide", {
|
||||||
|
|
||||||
local pos1, pos2 = worldedit.sort_pos(worldedit.pos1[name], worldedit.pos2[name])
|
local pos1, pos2 = worldedit.sort_pos(worldedit.pos1[name], worldedit.pos2[name])
|
||||||
local volume = worldedit.volume(pos1, pos2)
|
local volume = worldedit.volume(pos1, pos2)
|
||||||
|
|
||||||
local cmd = worldedit.registered_commands[cmd_name]
|
local cmd = worldedit.registered_commands[cmd_name]
|
||||||
if not minetest.check_player_privs(name, cmd.privs) then
|
if not minetest.check_player_privs(name, cmd.privs) then
|
||||||
return false, "Error: Your privileges are unsufficient to run '"..cmd_name.."'."
|
return false, "Error: Your privileges are unsufficient to run '"..cmd_name.."'."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local i = 1
|
||||||
|
local chunks_total = math.ceil((pos2.x - pos1.x) / (chunk_size.x - 1))
|
||||||
|
* math.ceil((pos2.y - pos1.y) / (chunk_size.y - 1))
|
||||||
|
* math.ceil((pos2.z - pos1.z) / (chunk_size.z - 1))
|
||||||
|
|
||||||
|
worldedit.player_notify(name,
|
||||||
|
"[ subdivide | "..cmd_name.." "..args.." ] Starting - "
|
||||||
|
-- ..wea.vector.tostring(pos1).." - "..wea.vector.tostring(pos2)
|
||||||
|
.." chunk size: "..wea.vector.tostring(chunk_size)
|
||||||
|
..", "..chunks_total.." chunks total"
|
||||||
|
.." ("..volume.." nodes)"
|
||||||
|
)
|
||||||
|
|
||||||
chunk_size.x = chunk_size.x - 1 -- WorldEdit regions are inclusive
|
chunk_size.x = chunk_size.x - 1 -- WorldEdit regions are inclusive
|
||||||
chunk_size.y = chunk_size.y - 1 -- WorldEdit regions are inclusive
|
chunk_size.y = chunk_size.y - 1 -- WorldEdit regions are inclusive
|
||||||
chunk_size.z = chunk_size.z - 1 -- WorldEdit regions are inclusive
|
chunk_size.z = chunk_size.z - 1 -- WorldEdit regions are inclusive
|
||||||
|
|
||||||
worldedit.player_notify(name, wea.vector.tostring(pos1).." - "..wea.vector.tostring(pos2).." chunk size: "..wea.vector.tostring(chunk_size))
|
|
||||||
local i = 1
|
|
||||||
local chunks_total = math.ceil((pos2.x - pos1.x) / chunk_size.x)
|
|
||||||
* math.ceil((pos2.y - pos1.y) / chunk_size.y)
|
|
||||||
* math.ceil((pos2.z - pos1.z) / chunk_size.z)
|
|
||||||
|
|
||||||
local time_last_msg = worldeditadditions.get_ms_time()
|
local time_last_msg = worldeditadditions.get_ms_time()
|
||||||
local time_chunks = {}
|
local time_chunks = {}
|
||||||
|
@ -94,25 +103,28 @@ worldedit.register_command("subdivide", {
|
||||||
if c_pos1.z < pos1.z then c_pos1.z = pos1.z end
|
if c_pos1.z < pos1.z then c_pos1.z = pos1.z end
|
||||||
|
|
||||||
local time_this = worldeditadditions.get_ms_time()
|
local time_this = worldeditadditions.get_ms_time()
|
||||||
|
worldedit.player_notify_suppress(name)
|
||||||
worldedit.pos1[name] = c_pos1
|
worldedit.pos1[name] = c_pos1
|
||||||
worldedit.pos2[name] = c_pos2
|
worldedit.pos2[name] = c_pos2
|
||||||
cmd.func(name, args)
|
cmd.func(name, args)
|
||||||
if will_trigger_saferegion(name, cmd_name, args) then
|
if will_trigger_saferegion(name, cmd_name, args) then
|
||||||
minetest.chatcommands["/y"].func()
|
minetest.chatcommands["/y"].func()
|
||||||
end
|
end
|
||||||
|
worldedit.player_notify_unsuppress(name)
|
||||||
time_this = worldeditadditions.get_ms_time() - time_this
|
time_this = worldeditadditions.get_ms_time() - time_this
|
||||||
table.insert(time_chunks, time_this)
|
table.insert(time_chunks, time_this)
|
||||||
|
|
||||||
local time_average = wea.average(time_chunks)
|
local time_average = wea.average(time_chunks)
|
||||||
local eta = (chunks_total - i) * time_average
|
local eta = (chunks_total - i) * time_average
|
||||||
|
print("eta", eta, "time_average", time_average, "chunks_left", chunks_total - i)
|
||||||
|
|
||||||
if worldeditadditions.get_ms_time() - time_last_msg > 5 * 1000 then
|
-- Send updates every 2 seconds, and after the first 3 chunks are done
|
||||||
|
if worldeditadditions.get_ms_time() - time_last_msg > 2 * 1000 or i == 3 then
|
||||||
worldedit.player_notify(name,
|
worldedit.player_notify(name,
|
||||||
"[ //subdivide "..cmd_name.." "..args.." ] "
|
"[ //subdivide "..cmd_name.." "..args.." ] "
|
||||||
..i.." / "..chunks_total.." (~"
|
..i.." / "..chunks_total.." (~"
|
||||||
..string.format("%.2f", (i / chunks_total) * 100).."%) complete | "
|
..string.format("%.2f", (i / chunks_total) * 100).."%) complete | "
|
||||||
.."this chunk: "..wea.human_time(time_this)
|
.."last chunk: "..wea.human_time(time_this)
|
||||||
.."("..worldedit.volume(c_pos1, c_pos2).." nodes)"
|
|
||||||
..", average: "..wea.human_time(time_average)
|
..", average: "..wea.human_time(time_average)
|
||||||
..", ETA: ~"..wea.human_time(eta)
|
..", ETA: ~"..wea.human_time(eta)
|
||||||
)
|
)
|
||||||
|
@ -123,12 +135,13 @@ worldedit.register_command("subdivide", {
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
i = i - 1
|
||||||
worldedit.pos1[name] = pos1
|
worldedit.pos1[name] = pos1
|
||||||
worldedit.pos2[name] = pos2
|
worldedit.pos2[name] = pos2
|
||||||
time_total = worldeditadditions.get_ms_time() - time_total
|
time_total = worldeditadditions.get_ms_time() - time_total
|
||||||
|
|
||||||
|
|
||||||
minetest.log("action", name.." used //subdivide at "..wea.vector.tostring(pos1).." - "..wea.vector.tostring(pos2)..", with "..i.." chunks and "..worldedit.volume(pos1, pos2).." total nodes in "..time_total.."s")
|
minetest.log("action", name.." used //subdivide at "..wea.vector.tostring(pos1).." - "..wea.vector.tostring(pos2)..", with "..i.." chunks and "..worldedit.volume(pos1, pos2).." total nodes in "..time_total.."s")
|
||||||
return true, "/subdivide complete"
|
return true, "[ subdivide | "..cmd_name.." "..args.." ] "..i.." chunks processed in "..wea.human_time(time_total)
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
|
@ -10,6 +10,9 @@ local we_c = worldeditadditions_commands
|
||||||
|
|
||||||
we_c.modpath = minetest.get_modpath("worldeditadditions_commands")
|
we_c.modpath = minetest.get_modpath("worldeditadditions_commands")
|
||||||
|
|
||||||
|
dofile(we_c.modpath.."/player_notify_suppress.lua")
|
||||||
|
|
||||||
|
|
||||||
dofile(we_c.modpath.."/multi.lua")
|
dofile(we_c.modpath.."/multi.lua")
|
||||||
|
|
||||||
-- We no longer need our own implementation of safe_region thanks to @sfan5's
|
-- We no longer need our own implementation of safe_region thanks to @sfan5's
|
||||||
|
|
|
@ -61,11 +61,11 @@ minetest.register_chatcommand("/multi", {
|
||||||
minetest.log("action", name.." runs "..command)
|
minetest.log("action", name.." runs "..command)
|
||||||
cmd.func(name, args)
|
cmd.func(name, args)
|
||||||
|
|
||||||
times[#times + 1] = (worldeditadditions.get_ms_time() - start_time) * 1000
|
times[#times + 1] = (worldeditadditions.get_ms_time() - start_time)
|
||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
|
|
||||||
local total_time = (worldeditadditions.get_ms_time() - master_start_time) * 1000
|
local total_time = (worldeditadditions.get_ms_time() - master_start_time)
|
||||||
local done_message = {}
|
local done_message = {}
|
||||||
table.insert(done_message,
|
table.insert(done_message,
|
||||||
string.format("Executed %d commands in %s (",
|
string.format("Executed %d commands in %s (",
|
||||||
|
|
20
worldeditadditions_commands/player_notify_suppress.lua
Normal file
20
worldeditadditions_commands/player_notify_suppress.lua
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
-- Overrides worldedit.player_notify() to add the ability to
|
||||||
|
-- suppress messages (used in //subdivide)
|
||||||
|
|
||||||
|
local player_notify_suppressed = {}
|
||||||
|
|
||||||
|
local orig_player_notify = worldedit.player_notify
|
||||||
|
function worldedit.player_notify(name, message)
|
||||||
|
if not player_notify_suppressed[name] then
|
||||||
|
orig_player_notify(name, message)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Disables sending worldedit messages to the player with the given name.
|
||||||
|
function worldedit.player_notify_suppress(name)
|
||||||
|
player_notify_suppressed[name] = true
|
||||||
|
end
|
||||||
|
--- Enables sending worldedit messages to the player with the given name.
|
||||||
|
function worldedit.player_notify_unsuppress(name)
|
||||||
|
player_notify_suppressed[name] = nil
|
||||||
|
end
|
Loading…
Reference in a new issue