did preparations for making blocks talk

This commit is contained in:
Sokomine 2022-09-24 02:37:36 +02:00
parent 3dfae53782
commit 2ade21640e
2 changed files with 30 additions and 6 deletions

View File

@ -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]

View File

@ -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] = {}