diff --git a/fs_properties.lua b/fs_properties.lua index 5891ec3..ad18d61 100644 --- a/fs_properties.lua +++ b/fs_properties.lua @@ -96,7 +96,10 @@ yl_speak_up.set_npc_property = function(pname, property_name, property_value, re end end -- store it - property_data.entity.yl_speak_up.properties[property_name] = property_value + if(entity) then + property_data.entity.yl_speak_up.properties[property_name] = property_value + end + -- TODO: handle non-npc (blocks etc) return "OK" end @@ -152,6 +155,9 @@ yl_speak_up.get_fs_properties = function(pname, selected) return end local s = "" + if(not(property_data.prop_names)) then + property_data.prop_names = {} + end local anz_prop = #property_data.prop_names for i, k in ipairs(property_data.prop_names) do local v = property_data.properties[k] diff --git a/functions.lua b/functions.lua index 2817a32..334d7f8 100644 --- a/functions.lua +++ b/functions.lua @@ -384,8 +384,22 @@ function yl_speak_up.talk(self, clicker) return end + local id_prefix = "n" + -- we are not dealing with an NPC but with a position/block on the map + if(self.is_block) then + id_prefix = "p" + self.yl_speak_up = { + talk = true, + id = minetest.pos_to_string(self.pos, 0), + textures = {}, + owner = "TODO_owner_name", -- TODO + npc_name = "TODO_npc_name", -- TODO + object = nil, -- blocks don't have an object + } + -- TODO: remember somewhere that this block is relevant + -- initialize the mob if necessary; this happens at the time of first talk, not at spawn time! - if(not(self.yl_speak_up) or not(self.yl_speak_up.id)) then + elseif(not(self.yl_speak_up) or not(self.yl_speak_up.id)) then local m_id = yl_speak_up.number_of_npcs + 1 yl_speak_up.number_of_npcs = m_id yl_speak_up.modstorage:set_int("amount", m_id) @@ -398,11 +412,11 @@ function yl_speak_up.talk(self, clicker) end -- create a detached inventory for the npc and load its inventory - yl_speak_up.load_npc_inventory("n_"..tostring(self.yl_speak_up.id)) + yl_speak_up.load_npc_inventory(id_prefix.."_"..tostring(self.yl_speak_up.id)) local npc_id = self.yl_speak_up.id - local n_id = "n_" .. npc_id + local n_id = id_prefix.."_" .. npc_id -- remember whom the npc belongs to (as long as we still have self.owner available for easy access) yl_speak_up.npc_owner[ n_id ] = self.owner @@ -410,12 +424,16 @@ function yl_speak_up.talk(self, clicker) local pname = clicker:get_player_name() if not self.yl_speak_up or not self.yl_speak_up.talk or self.yl_speak_up.talk~=true then + local was = "This NPC" + if(id_prefix ~= "n") then + was = "This block" + end -- show a formspec to other players that this NPC is busy if(not(yl_speak_up.may_edit_npc(clicker, n_id))) then -- show a formspec so that the player knows that he may come back later yl_speak_up.show_fs(player, "msg", {input_to = "yl_spaek_up:ignore", formspec = "size[6,2]".. - "label[1.2,0.0;"..minetest.formspec_escape((self.yl_speak_up.npc_name or "This NPC").. + "label[1.2,0.0;"..minetest.formspec_escape((self.yl_speak_up.npc_name or was).. " [muted]").."]".. "label[0.2,0.5;Sorry! I'm currently busy learning new things.]".. "label[0.2,1.0;Please come back later.]".. @@ -423,7 +441,7 @@ function yl_speak_up.talk(self, clicker) return end -- allow the owner to edit (and subsequently unmute) the npc - minetest.chat_send_player(pname, "This NPC is muted. It will only talk to you.") + minetest.chat_send_player(pname, was.." is muted. It will only talk to you.") end yl_speak_up.speak_to[pname] = {}