diff --git a/fs_initial_config.lua b/fs_initial_config.lua index 0991779..3485a78 100644 --- a/fs_initial_config.lua +++ b/fs_initial_config.lua @@ -39,6 +39,15 @@ yl_speak_up.input_fs_initial_config = function(player, formname, fields) -- sensible length limit elseif(string.len(fields.n_npc)>40 or string.len(fields.n_description)>40) then error_msg = "The name and description of your NPC\ncannot be longer than 40 characters." + -- want to change the owner? + elseif(fields.n_owner and fields.n_owner ~= yl_speak_up.npc_owner[ n_id ]) then + if( not(minetest.check_player_privs(player, {npc_talk_master=true}))) then + error_msg = "You need the \"npc_talk_master\" priv\nin order to change the owner." + elseif(not(minetest.check_player_privs(fields.n_owner, {npc_talk_owner=true}))) then + error_msg = "The NPC can only be owned by players that\n".. + "have the \"npc_talk_owner\" priv. Else the\n".. + "new owner could not edit his own NPC." + end end if(error_msg) then yl_speak_up.show_fs(player, "msg", { input_to = "yl_speak_up:initial_config", @@ -57,6 +66,17 @@ yl_speak_up.input_fs_initial_config = function(player, formname, fields) end end + + -- we checked earlier if the player doing this change and the + -- player getting the NPC have appropriate privs + if(fields.n_owner ~= yl_speak_up.npc_owner[ n_id ]) then + yl_speak_up.log_change(pname, n_id, + "Owner changed from "..tostring(yl_speak_up.npc_owner[ n_id ]).. + " to "..tostring(fields.n_owner).." for ".. + "NPC name: \""..tostring(fields.n_npc)) + yl_speak_up.npc_owner[ n_id ] = fields.n_owner + end + -- give the NPC its first dialog if(not(dialog) or count==0) then local f = {} @@ -91,6 +111,7 @@ yl_speak_up.input_fs_initial_config = function(player, formname, fields) "NPC name: \""..tostring(fields.n_npc).. "\" Description: \""..tostring(fields.n_description).."\"") end + dialog = yl_speak_up.speak_to[pname].dialog -- show nametag etc. @@ -128,14 +149,15 @@ yl_speak_up.get_fs_initial_config = function(player, n_id, d_id, is_initial_conf local tmp_name = n_id local tmp_descr = "A new NPC without description" local tmp_text = "Please provide your new NPC with a name and description!" + local tmp_owner = (yl_speak_up.npc_owner[ n_id ] or "- none -") -- use existing name and description as presets when just editing if(not(is_initial_config)) then local dialog = yl_speak_up.speak_to[pname].dialog - tmp_name = dialog.n_npc - tmp_descr = dialog.n_description + tmp_name = (dialog.n_npc or tmp_name) + tmp_descr = (dialog.n_description or tmp_descr) tmp_text = "You can change the name and description of your NPC." end - local formspec = "size[10,4]".. + local formspec = "size[10,5]".. "label[0.2,0.2;"..tmp_text.."]".. -- name of the npc "label[0.2,1.05;Name:]".. @@ -145,9 +167,14 @@ yl_speak_up.get_fs_initial_config = function(player, n_id, d_id, is_initial_conf "label[0.2,2.05;Description:]".. "field[2.0,2.2;8,0.9;n_description;;"..minetest.formspec_escape(tmp_descr).."]".. "tooltip[n_description;n_description: A description for the NPC;#FFFFFF;#000000]".. + -- the owner of the NPC + "label[0.2,3.05;Owner:]".. + "field[2.0,3.2;8,0.9;n_owner;;"..minetest.formspec_escape(tmp_owner).."]".. + "tooltip[n_owner;The owner of the NPC. This can only be changed\n".. + "if you have the npc_talk_master priv.;#FFFFFF;#000000]".. -- save and exit buttons - "button_exit[3.2,3.2;2,0.9;save_initial_config;Save]".. - "button_exit[5.4,3.2;2,0.9;exit;Exit]" + "button_exit[3.2,4.2;2,0.9;save_initial_config;Save]".. + "button_exit[5.4,4.2;2,0.9;exit;Exit]" -- show the formspec to the player return formspec end