Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --
- -- Permafy Mod for Minetest 0.4.3
- -- by Orby (orbitaldecay@gmail.com)
- -- Updated 04-13-2013 for 0.4.5
- -- Updated 05-14-2013 to fix > 10000 block changes
- --- How much space above block to protect. Head height is 3.
- local old_node_dig = minetest.node_dig
- function minetest.node_dig(pos, node, digger)
- local meta = minetest.env:get_meta(pos)
- owner = meta:get_string("owner")
- if owner == "" then
- return old_node_dig(pos, node, digger)
- end
- if owner == digger:get_player_name() or minetest.get_player_privs(digger:get_player_name())["privs"] then
- ret = old_node_dig(pos, node, digger)
- air_meta = minetest.env:get_meta(pos)
- air_meta:set_string("owner", owner)
- air_meta:set_string("infotext", "Owned by " .. owner .. ".")
- else
- minetest.chat_send_player(digger:get_player_name(), "This node is owned by "..meta:get_string("owner")..".")
- return false
- end
- end
- local old_node_place = minetest.item_place
- function minetest.item_place(itemstack, placer, pointed_thing)
- if itemstack:get_definition().type ~= "node" then
- return old_node_place(itemstack, placer, pointed_thing)
- end
- meta = minetest.env:get_meta(pointed_thing.above)
- owner = meta:get_string("owner")
- if owner == "" then
- return old_node_place(itemstack, placer, pointed_thing)
- elseif owner == placer:get_player_name() or minetest.get_player_privs(placer:get_player_name())["privs"] then
- local ret = old_node_place(itemstack, placer, pointed_thing)
- new_node_meta = minetest.env:get_meta(pointed_thing.above)
- new_node_meta:set_string("owner", owner)
- new_node_meta:set_string("infotext", "Owned by " .. owner .. ".")
- return ret
- else
- minetest.chat_send_player(placer:get_player_name(), "This space is owned by "..owner..".")
- return
- end
- end
- minetest.register_chatcommand("permafy",
- {
- params = "owner x1, y1, z1, x2, y2, z2",
- description = "Turns an area of blocks into permablocks",
- privs = { privs = true },
- func = function(name, param)
- local a = {}
- local b = {}
- local owner
- owner, a.x, a.y, a.z, b.x, b.y, b.z = string.match(param, "^([^ ]+) +([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
- if owner and a.x and a.y and a.z and b.x and b.y and b.z then
- minetest.chat_send_player(name, "Start corner is ("..a.x..", "..a.y..", "..a.z..")")
- minetest.chat_send_player(name, "End corner is ("..b.x..", "..b.y..", "..b.z..")")
- if tonumber(b.x) < tonumber(a.x) then
- temp = a.x
- a.x = b.x
- b.x = temp
- end
- if tonumber(b.y) < tonumber(a.y) then
- temp = a.y
- a.y = b.y
- b.y = temp
- end
- if tonumber(b.z) < tonumber(a.z) then
- temp = a.z
- a.z = b.z
- b.z = temp
- end
- -- if (b.x - a.x) * (b.y - a.y) * (b.z - a.z) > 10000 then
- -- minetest.chat_send_player(name, "Try a smaller area")
- -- return
- --end -- -- ecube
- temp = 0 -- ++ ecube
- for ix = a.x, b.x do
- for iy = a.y, b.y do
- for iz = a.z, b.z do
- local meta = minetest.env:get_meta({x = ix, y = iy, z = iz})
- local node = minetest.env:get_node({x = ix, y = iy, z = iz})
- meta:set_string("owner", owner)
- meta:set_string("infotext", "Owned by "..owner..".")
- temp = temp + 1 -- ++ ecube
- if temp == 9999 then -- ++ ecube
- temp = 0 -- ++ ecube
- TIME_Sleep( 2000 ) -- ++ ecube
- end -- ++ ecube
- end
- end
- end
- minetest.chat_send_player(name, "Owner name is "..owner)
- else
- minetest.chat_send_player(name, "Incorrect usage of permafy.")
- end
- end
- })
- minetest.register_chatcommand("depermafy",
- {
- params = "x1, y1, z1, x2, y2, z2",
- description = "Removes any ownership flags over the area",
- privs = { privs = true },
- func = function(name, param)
- local a = {}
- local b = {}
- a.x, a.y, a.z, b.x, b.y, b.z = string.match(param, "([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
- if a.x and a.y and a.z and b.x and b.y and b.z then
- minetest.chat_send_player(name, "Start corner is ("..a.x..", "..a.y..", "..a.z..")")
- minetest.chat_send_player(name, "End corner is ("..b.x..", "..b.y..", "..b.z..")")
- if tonumber(b.x) < tonumber(a.x) then
- temp = a.x
- a.x = b.x
- b.x = temp
- end
- if tonumber(b.y) < tonumber(a.y) then
- temp = a.y
- a.y = b.y
- b.y = temp
- end
- if tonumber(b.z) < tonumber(a.z) then
- temp = a.z
- a.z = b.z
- b.z = temp
- end
- if (b.x - a.x) * (b.y - a.y) * (b.z - a.z) > 100000 then
- minetest.chat_send_player(name, "Try a smaller area")
- return
- end
- for ix = a.x, b.x do
- for iy = a.y, b.y do
- for iz = a.z, b.z do
- local meta = minetest.env:get_meta({x = ix, y = iy, z = iz})
- local node = minetest.env:get_node({x = ix, y = iy, z = iz})
- meta:set_string("owner", "")
- meta:set_string("infotext", "")
- end
- end
- end
- else
- minetest.chat_send_player(name, "Incorrect usage of depermafy.")
- end
- end
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement