clearly differentiate nodes vs. items. The doors are working now again

This commit is contained in:
Alexander Weber 2017-01-18 14:39:48 +01:00
parent 0fd29233d3
commit de3109a071

View File

@ -22,7 +22,7 @@ local function reset_build(self)
self.metadata.building = false
end
local function get_registered_nodename(name)
local function get_registered_itemname(name)
if string.find(name, "^doors") then
name = name:gsub("_[tb]_[12]", "")
elseif string.find(name, "^stairs") then
@ -33,6 +33,15 @@ local function get_registered_nodename(name)
return name
end
local function get_registered_nodename(name)
if string.find(name, "^doors.*_[ab]_[12]$") then
name = name:gsub("_[12]", "")
elseif string.find(name, "^doors.*_t_[12]$") then
name = "doors:hidden"
end
return name
end
local function load_schematic(self, filename)
local input = nil
if INSTABUILD_PATH then
@ -73,17 +82,18 @@ local function load_schematic(self, filename)
self.var.nodelist = {}
for i,v in ipairs(sorted) do
if v.name and v.param1 and v.param2 and v.x and v.y and v.z then
local node = {name=v.name, param1=v.param1, param2=v.param2}
local item_name = get_registered_itemname(v.name)
local node_name = get_registered_nodename(v.name)
local node = {name=node_name, param1=v.param1, param2=v.param2}
local pos = vector.add(self.metadata.build_pos, {x=v.x, y=v.y, z=v.z})
local name = get_registered_nodename(v.name)
if minetest.registered_items[name] then
self.metadata.inventory[name] = self.metadata.inventory[name] or 0
self.var.nodelist[name] = self.var.nodelist[name] or 0
self.var.nodelist[name] = self.var.nodelist[name] + 1
if minetest.registered_items[item_name] then
self.metadata.inventory[item_name] = self.metadata.inventory[item_name] or 0
self.var.nodelist[item_name] = self.var.nodelist[item_name] or 0
self.var.nodelist[item_name] = self.var.nodelist[item_name] + 1
else
node = DEFAULT_NODE
end
self.var.nodedata[i] = {pos=pos, node=node}
self.var.nodedata[i] = {pos=pos, node=node, item_name=item_name}
end
end
end
@ -218,19 +228,17 @@ npcf:register_npc("npcf_builder:npc" ,{
yaw = npcf:get_face_direction(pos, nodedata.pos)
local distance = vector.distance(pos, nodedata.pos)
if distance < 4 then
if minetest.registered_items[nodedata.node.name].sounds then
local soundspec = minetest.registered_items[nodedata.node.name].sounds.place
if minetest.registered_nodes[nodedata.node.name].sounds then
local soundspec = minetest.registered_nodes[nodedata.node.name].sounds.place
if soundspec then
soundspec.pos = pos
minetest.sound_play(soundspec.name, soundspec)
end
end
minetest.add_node(nodedata.pos, nodedata.node)
local door_top = string.find(nodedata.node.name, "^doors+_t_[12]$")
if BUILDER_REQ_MATERIALS == true and not door_top then
local name = get_registered_nodename(nodedata.node.name)
if self.metadata.inventory[name] > 0 then
self.metadata.inventory[name] = self.metadata.inventory[name] - 1
if BUILDER_REQ_MATERIALS == true and nodedata.node.name ~= "doors:hidden" then
if self.metadata.inventory[nodedata.item_name] > 0 then
self.metadata.inventory[nodedata.item_name] = self.metadata.inventory[nodedata.item_name] - 1
self.var.selected = ""
else
self.metadata.building = false
@ -239,7 +247,7 @@ npcf:register_npc("npcf_builder:npc" ,{
local i = 0
for k,v in pairs(self.var.nodelist) do
i = i + 1
if k == name then
if k == nodedata.item_name then
self.var.selected = i
break
end