113 lines
3.4 KiB
Lua
113 lines
3.4 KiB
Lua
minetest.register_craft({
|
|
output = 'protector:protect 16',
|
|
recipe = {
|
|
{'moreores:silver_ingot', 'moreores:silver_ingot'},
|
|
{'moreores:silver_ingot', 'moreores:silver_ingot'},
|
|
}
|
|
})
|
|
|
|
|
|
function isprotect(r,pos,digger,onlyowner)
|
|
--[[
|
|
if pos.y < -999 then
|
|
return false
|
|
end--]]
|
|
local ok=true
|
|
for ix = pos.x-r,pos.x+r do
|
|
for iy = pos.y-r,pos.y+r do
|
|
for iz = pos.z-r,pos.z+r do
|
|
local node_name = minetest.env:get_node({x=ix,y=iy,z=iz})
|
|
if node_name.name == "protector:protect" then
|
|
local meta = minetest.env:get_meta({x=ix,y=iy,z=iz})
|
|
if digger ~= nil then
|
|
local owner = (meta:get_string("owner"))
|
|
if owner ~= digger:get_player_name() then
|
|
ok=false
|
|
if not onlyowner and string.find(' '..meta:get_string("members")..' ', ' '..digger:get_player_name()..' ')
|
|
then ok=true end
|
|
if not ok then return false end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
local old_node_dig = minetest.node_dig
|
|
function minetest.node_dig(pos, node, digger)
|
|
local ok=true
|
|
if node.name ~= "protector:protect" then
|
|
ok = isprotect(5,pos,digger)
|
|
else ok = isprotect(5,pos,digger,true)
|
|
end
|
|
if ok == true then
|
|
old_node_dig(pos, node, digger)
|
|
else
|
|
minetest.chat_send_player(digger:get_player_name(), "area protected")
|
|
return
|
|
end
|
|
end
|
|
|
|
local old_node_place = minetest.item_place
|
|
function minetest.item_place(itemstack, placer, pointed_thing)
|
|
if itemstack:get_definition().type == "node" then
|
|
local ok=true
|
|
if itemstack:get_name() ~= "protector:protect" then
|
|
local pos = pointed_thing.above
|
|
ok = isprotect(5,pos,placer)
|
|
else
|
|
local pos = pointed_thing.above
|
|
ok = isprotect(10,pos,placer,true)
|
|
end
|
|
if ok == true then
|
|
if itemstack:get_name() == "protector:protect" then
|
|
local pos = pointed_thing.above
|
|
--minetest.chat_send_player(placer:get_player_name(), "this block protect ( "..
|
|
--tostring(pos.x-3) .. " to " .. tostring(pos.x+3).." , "..
|
|
--tostring(pos.y-3) .. " to " .. tostring(pos.y+3).." , "..
|
|
--tostring(pos.z-3) .. " to " .. tostring(pos.z+3).." )"
|
|
--)
|
|
end
|
|
return old_node_place(itemstack, placer, pointed_thing)
|
|
else
|
|
minetest.chat_send_player(placer:get_player_name(), "area protected")
|
|
return
|
|
end
|
|
end
|
|
return old_node_place(itemstack, placer, pointed_thing)
|
|
end
|
|
protect = {}
|
|
minetest.register_node("protector:protect", {
|
|
description = "protect",
|
|
tile_images = {"glo2.png"},
|
|
groups = {cracky=3},
|
|
after_place_node = function(pos, placer)
|
|
local meta = minetest.env:get_meta(pos)
|
|
meta:set_string("owner", placer:get_player_name() or "")
|
|
meta:set_string("infotext", "protect (owned by "..
|
|
meta:get_string("owner")..")")
|
|
meta:set_string("members", "")
|
|
meta:set_string("formspec",
|
|
"size[6,4]"..
|
|
"label[0,0;Protect owned by "..meta:get_string("owner").."]"..
|
|
"field[.25,1.25;6,1;members;Members (put spaces between each name):;"..meta:get_string("members").."]"..
|
|
"button_exit[0,2;2,1;ok;Save]")
|
|
end,
|
|
on_receive_fields = function(pos,formname,fields,sender)
|
|
local meta = minetest.env:get_meta(pos)
|
|
if sender:get_player_name() == meta:get_string("owner") then
|
|
if fields.members then
|
|
meta:set_string("members",fields.members)
|
|
meta:set_string("formspec",
|
|
"size[6,4]"..
|
|
"label[0,0;Protect owned by "..meta:get_string("owner").."]"..
|
|
"field[.25,1.25;6,1;members;Members (put spaces between each name):;"..meta:get_string("members").."]"..
|
|
"button_exit[0,2;2,1;ok;Save]")
|
|
|
|
end
|
|
end
|
|
end,
|
|
})
|