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
parent
6502ed4a86
commit
707db6419f
48
init.lua
48
init.lua
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue