Add in orphaned-area protection

master
codefairy 2019-09-01 16:01:47 -04:00
parent feefad51e2
commit c3d22ea4d5
1 changed files with 16 additions and 10 deletions

View File

@ -4,12 +4,17 @@ local modstore = minetest.get_mod_storage()
function maggems_landmark.is_protected(pos, name)
local homes = maggems_landmark.homes
for _, area in pairs(homes:get_areas_for_pos(pos, true, true)) do
minetest.debug("found an area!", dump(area))
local meta = minetest.get_meta(minetest.deserialize(area.data))
if (meta:get_string("owner") ~= name) then
minetest.chat_send_player(name, "Woah, buddy! That's "..meta:get_string("owner").."'s home!")
minetest.chat_send_player(meta:get_string("owner"), "Hey! "..name.."'s trying to build at "..meta:get_string("maggems_landmark:name").."!")
return true
if (minetest.get_node(minetest.deserialize(area.data)) ~= "maggems_landmark:home") then
homes:remove_area(id)
minetest.debug("orphaned area quietly deleted...")
else
minetest.debug("found an area!", dump(area))
local meta = minetest.get_meta(minetest.deserialize(area.data))
if (meta:get_string("owner") ~= name) then
minetest.chat_send_player(name, "Woah, buddy! That's "..meta:get_string("owner").."'s home!")
minetest.chat_send_player(meta:get_string("owner"), "Hey! "..name.."'s trying to build at "..meta:get_string("maggems_landmark:name").."!")
return true
end
end
end
return false
@ -37,7 +42,7 @@ local function save_homes()
end
local function update_formspec(pos)
local meta = minetest.get_meta(pos)
local meta = minetest.get_meta(pos)
local formspec = "size[11,5.5]real_coordinates[true]"
formspec = formspec .. "field[1,1;9,0.5;name;Home name;${maggems_landmark:name}]"
local pos1 = minetest.deserialize(meta:get_string("maggems_landmark:pos1"))
@ -78,16 +83,17 @@ minetest.register_node("maggems_landmark:home", {
local pos2 = {x=pos.x+3,y=pos.y+3,z=pos.z+3}
meta:set_string("maggems_landmark:pos1", minetest.serialize(pos1))
meta:set_string("maggems_landmark:pos2", minetest.serialize(pos2))
update_formspec(pos)
update_formspec(pos)
local homes = maggems_landmark.homes
local id = homes:insert_area(pos1, pos2, minetest.serialize(pos))
assert(id ~= nil)
save_homes()
meta:set_int("maggems_landmark:home_id", id)
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
local homes = maggems_landmark.homes
homes:remove_area(oldmetadata.fields["maggems_landmark:home_id"])
for id in pairs(homes:get_areas_for_pos(pos)) do
homes:remove_area(id)
end
save_homes()
end,
on_receive_fields = function(pos, formname, fields, sender)