diff --git a/functions.lua b/functions.lua index 1a3f7fd..6694f36 100644 --- a/functions.lua +++ b/functions.lua @@ -10,8 +10,6 @@ yl_sokomine["q_apple_explorer"] = {} -- chat option: "That was all. I'm finished with giving you new orders. Remember them!" -- -> ends edit mode -- --- TODO: allow owner to mute/unmute npc (would be bad if players can already see what is going --- to happen while the owner creates a long quest) -- TODO: log changes to the npc in the server logfile --### @@ -1495,16 +1493,16 @@ local function get_fs_talkdialog(player, n_id, d_id) table.insert(formspec, "tooltip[mute_npc;The NPC will no longer show his dialogs ".. "when he is right-clicked. This is useful while you edit the NPC and don't ".. "want players to see unfinished entries and/or quests.]") - table.insert(formspec, "label[0.7,"..(h+0.45)..";Stop talking to other players while ".. - "I give you new orders.]") + table.insert(formspec, "label[0.7,"..(h+0.45)..";State: Not muted. Stop talking to other ".. + "players while I give you new orders.]") elseif(luaentity) then -- unmute the NPC table.insert(formspec, "button[0.5," .. h .. ";53.8,0.9;un_mute_npc;]") table.insert(formspec, "tooltip[un_mute_npc;The NPC will show his dialogs to other ".. "players when he is right-clicked. This is the normal mode of operation. Choose ".. "this when you are finished editing.]") - table.insert(formspec, "label[0.7,"..(h+0.45)..";Talk to anyone who wants to talk to ".. - "you.]") + table.insert(formspec, "label[0.7,"..(h+0.45)..";State: You are currently muted. Talk to ".. + "anyone again who wants to talk to you.]") end -- chat option: "That was all. I'm finished with giving you new orders. Remember them!" @@ -2144,6 +2142,17 @@ yl_speak_up.edit_mode_apply_changes = function(pname, fields) return end + -- allow owner to mute/unmute npc (would be bad if players can already see what is going + -- to happen while the owner creates a long quest) + -- mute/unmute gets logged in the function and does not need extra log entries + local obj = yl_speak_up.speak_to[pname].obj + if(fields.mute_npc and obj) then + yl_speak_up.set_muted(pname, obj, true) + elseif(fields.un_mute_npc and obj) then + yl_speak_up.set_muted(pname, obj, false) + end + + -- new options etc. may be added; store these IDs so that we can switch to the right target local result = {} @@ -3095,15 +3104,27 @@ function yl_speak_up.talk(self, clicker) return end + 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 - -- TODO: allow to enter edit mode; show a small formspec that this npc is busy - return + -- show a formspec to other players that this NPC is busy + if(not(yl_speak_up.may_edit_npc(clicker, self.yl_speak_up.id))) then + -- show a formspec so that the player knows that he may come back later + minetest.show_formspec(pname, "yl_spaek_up:ignore", + "size[6,2]".. + "label[1.2,0.0;"..minetest.formspec_escape((self.yl_speak_up.npc_name or "This NPC").. + " [muted]").."]".. + "label[0.2,0.5;Sorry! I'm currently busy learning new things.]".. + "label[0.2,1.0;Please come back later.]".. + "button_exit[2.5,1.5;1,0.9;ok;Ok]") + 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.") end local npc_id = self.yl_speak_up.id local n_id = "n_" .. npc_id - local pname = clicker:get_player_name() yl_speak_up.speak_to[pname] = {} yl_speak_up.speak_to[pname].n_id = n_id -- Memorize which player talks to which NPC