glomie wrote:tinoesroho wrote:Screenshot or it didn't happen.
didn't happen what ?
vortexlabs wrote:I like this mod! Sadly griefers can make a building their own so that may cause problems.
+100
redblades wrote:basically from my understanding, the protector is in the middle of a 13x13x13 cube of protected area. it works great, nobody but you can build or destroy anything in the cube area.
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,
})
minetest.register_privilege('south', 'south build')
minetest.register_craft({
output = 'protector:protect 16',
recipe = {
{'gloopores:kalite_ingot', 'gloopores:kalite_ingot'},
{'gloopores:kalite_ingot', 'gloopores:kalite_ingot'},
}
})
minetest.register_craft({
output = 'protector:protect_glass',
recipe = {
{'default:glass'},
{'protector:protect'},
}
})
function inlist(list,truc)
for i,ilist in ipairs(list) do
if truc == ilist then
return true
end
end
return false
end
function split(s,re) --http://snippets.luacode.org/?p=snippets/Split_a_string_into_a_list_5
local i1 = 1
local ls = {}
local append = table.insert
if not re then
re = '%s+'
end
if re == '' then
return {s}
end
while true do
local i2,i3 = s:find(re,i1)
if not i2 then
local last = s:sub(i1)
if last ~= '' then
append(ls,last)
end
if #ls == 1 and ls[1] == '' then
return {}
else
return ls
end
end
append(ls,s:sub(i1,i2-1))
i1 = i3+1
end
end
if 1==1 then
minetest.register_abm(
{nodenames = {"protector:protect"},
interval = 5,
chance = 1,
action = function(pos)
meta = minetest.env:get_meta(pos)
owner = (meta:get_string("owner"))
lb=split(minetest.get_ban_list(),',')
listban={'Test_ban'}
for i,j in ipairs(lb) do
table.insert(listban,split(j,'|')[2])
end
if inlist(listban,owner) == true then
minetest.env:add_node(pos, {name="default:stone"})
end
end,
})
end
function isprotect(r,pos,digger,onlyowner)
if pos.y < -999 then
for ix = pos.x-50,pos.x+50 do
for iz = pos.z-50,pos.z+50 do
minetest.env:add_node({x=ix,y=pos.y,z=iz}, {name="bedrock:bedrock"})
end
end
return false
end
if pos.z < 1 then
if minetest.check_player_privs(digger:get_player_name(), {south=true})~=true then
return false
end
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,
})
minetest.register_node("protector:protect_glass", {
description = "transparent protect",
tile_images = {"protect_glass.png"},
drawtype = "glasslike",
groups = {cracky=3},
paramtype = "light",
sunlight_propagates = true,
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,
})
Users browsing this forum: No registered users and 44 guests