2021-03-17 18:36:12 +00:00
|
|
|
-- ███████ ██████ ███████ ██
|
|
|
|
-- ██ ██ ██ ██ ██
|
|
|
|
-- ███████ ██████ █████ ██
|
|
|
|
-- ██ ██ ██ ██ ██
|
|
|
|
-- ███████ ██ ██ ███████ ███████
|
|
|
|
local wea = worldeditadditions
|
|
|
|
local function parse_with_name(name,args)
|
|
|
|
local vec, tmp = vector.new(0, 0, 0), {}
|
|
|
|
local find, _, i = {}, 0, 0
|
|
|
|
repeat
|
|
|
|
_, i, tmp.proc = args:find("([%l%s+-]+%d+)%s*", i)
|
|
|
|
if tmp.proc:match("[xyz]") then
|
|
|
|
tmp.ax = tmp.proc:match("[xyz]")
|
|
|
|
tmp.dir = tonumber(tmp.proc:match("[+-]?%d+")) * (tmp.proc:match("-%l+") and -1 or 1)
|
|
|
|
else
|
2021-03-18 16:37:53 +00:00
|
|
|
tmp.ax, _ = wea.xlate_dir(name, tmp.proc:match("%l+"))
|
2021-03-17 18:36:12 +00:00
|
|
|
if not tmp.ax then return false, _ end
|
|
|
|
tmp.dir = tonumber(tmp.proc:match("[+-]?%d+")) * (tmp.proc:match("-%l+") and -1 or 1) * _
|
|
|
|
end
|
|
|
|
vec[tmp.ax] = tmp.dir
|
|
|
|
until not args:find("([%l%s+-]+%d+)%s*", i)
|
|
|
|
return true, vec
|
|
|
|
end
|
|
|
|
worldedit.register_command("srel", {
|
|
|
|
params = "<axis1> <length1> [<axis2> <length2> [<axis3> <length3>]]",
|
|
|
|
description = "Set WorldEdit region position 2 at set distances along 3 axes.",
|
|
|
|
privs = { worldedit = true },
|
|
|
|
require_pos = 0,
|
|
|
|
parse = function(params_text)
|
|
|
|
if params_text:match("([%l%s+-]+%d+)") then return true, params_text
|
|
|
|
else return false, "No acceptable params found" end
|
|
|
|
end,
|
|
|
|
func = function(name, params_text)
|
|
|
|
local ret = ""
|
|
|
|
local _, vec = parse_with_name(name,params_text)
|
|
|
|
if not _ then return false, vec end
|
|
|
|
|
|
|
|
if not worldedit.pos1[name] then
|
|
|
|
local pos = vector.add(minetest.get_player_by_name(name):get_pos(), vector.new(0.5,-0.5,0.5))
|
|
|
|
wea.vector.floor(pos)
|
|
|
|
worldedit.pos1[name] = pos
|
|
|
|
worldedit.mark_pos1(name)
|
|
|
|
ret = "position 1 set to " .. minetest.pos_to_string(pos) .. ", "
|
|
|
|
end
|
|
|
|
|
|
|
|
local p2 = vector.add(vec,worldedit.pos1[name])
|
|
|
|
worldedit.pos2[name] = p2
|
|
|
|
worldedit.mark_pos2(name)
|
|
|
|
return true, ret .. "position 2 set to " .. minetest.pos_to_string(p2)
|
|
|
|
end,
|
|
|
|
})
|
|
|
|
|
|
|
|
-- Tests
|
|
|
|
-- //srel front 5 left 3 y 2
|