zegaton_game/mods/protector/init.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,
})