Add in basic area storage and protection to home nodes

This is only a rough first step; later on, we will allow players to
customize the area that their home node covers (up to a point) as well
as what protections and effects are attached to this area.

For now, we only have basic protection of a 7x7x7 cube centered on the
home node.
master
codefairy 2019-08-19 21:43:41 -04:00
parent 6502ed4a86
commit 707db6419f
1 changed files with 47 additions and 1 deletions

View File

@ -1,3 +1,37 @@
maggems_landmark = {}
local modstore = minetest.get_mod_storage()
function maggems_landmark.is_protected(pos, name)
minetest.debug("t-test")
local homes = maggems_landmark.homes
if (homes == nil) then return false end
minetest.debug(dump(homes), dump(homes[name]))
for _, areas in pairs(homes) do
minetest.debug(dump(areas))
for _, area in pairs(areas:get_areas_for_pos(pos, true, true)) do
minetest.debug("found an area!")
end
end
return false
end
local old_is_protected = minetest.is_protected
function minetest.is_protected(pos, name)
if (maggems_landmark.is_protected(pos, name)) then return true end
return old_is_protected(pos, name)
end
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
maggems_landmark.homes = maggems_landmark.homes or {}
if (maggems_landmark.homes[name] == nil) then
maggems_landmark.homes[name] = AreaStore()
local stored_homes = modstore:get(name .. "_homes")
if (stored_homes) then
maggems_landmark.homes[name]:from_string(stored_homes)
end
end
end)
minetest.register_node("maggems_landmark:home", {
description = "Misi Home",
tiles = {"maggems_landmark_home_side.png"},
@ -8,10 +42,12 @@ minetest.register_node("maggems_landmark:home", {
sounds = default.node_sound_stone_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("infotext", "Locked Chest")
meta:set_string("owner", "")
-- TODO
--[[
local inv = meta:get_inventory()
inv:set_size("main", 8*4)
--]]
end,
after_place_node = function(pos, placer)
local meta = minetest.get_meta(pos)
@ -21,6 +57,16 @@ minetest.register_node("maggems_landmark:home", {
" (" .. meta:get_string("owner") .. ")")
meta:set_string("formspec", "size[11,5.5]real_coordinates[true]\
field[1,2.5;9,0.5;name;Home name;${maggems_landmark:name}]")
local homes = maggems_landmark.homes[placer:get_player_name()]
local pos1 = {x=pos.x-3,y=pos.y-3,z=pos.z-3}
local pos2 = {x=pos.x+4,y=pos.y+4,z=pos.z+4}
local id = homes:insert_area(pos1, pos2, placer:get_player_name())
assert(id ~= nil)
meta:set_int("maggems_landmark:home_id", id)
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
local homes = maggems_landmark.homes[oldmetadata.fields.owner]
homes:remove_area(oldmetadata.fields["maggems_landmark:home_id"])
end,
on_receive_fields = function(pos, formname, fields, sender)
local meta = minetest.get_meta(pos)