diff --git a/fs_notes.lua b/fs_notes.lua new file mode 100644 index 0000000..f4759cb --- /dev/null +++ b/fs_notes.lua @@ -0,0 +1,58 @@ + + +yl_speak_up.input_fs_notes = function(player, formname, fields) + if(fields and fields.back) then + return yl_speak_up.show_fs(player, "talk") + elseif(fields and fields.store_notes and fields.notes_text) then + local pname = player:get_player_name() + local dialog = yl_speak_up.speak_to[pname].dialog + local n_id = yl_speak_up.speak_to[pname].n_id + -- update the dialog data the player sees + dialog.d_notes = fields.notes_text + -- actually store/update it on disc as well + local stored_dialog = yl_speak_up.load_dialog(n_id, false) + stored_dialog.d_notes = dialog.d_notes + yl_speak_up.save_dialog(n_id, stored_dialog) + -- log the change + yl_speak_up.log_change(pname, n_id, "Updated notes to: ", tostring(dialog.d_notes)) + return yl_speak_up.show_fs(player, "msg", { + input_to = "yl_speak_up:notes", + formspec = "size[10,3]".. + "label[0.5,1.0;Notes successfully updated.]".. + "button[3.5,2.0;2,0.9;back_from_error_msg;Back]" + }) + else + return yl_speak_up.show_fs(player, "notes") + end +end + + +yl_speak_up.get_fs_notes = function(player, param) + local pname = player:get_player_name() + local n_id = yl_speak_up.speak_to[pname].n_id + -- generic dialogs are not part of the NPC + local dialog = yl_speak_up.speak_to[pname].dialog + return table.concat({"size[20,20]", + "label[2,0.5;Internal notes on NPC ", + minetest.formspec_escape(n_id or "- ? -"), + ", named ", + minetest.formspec_escape(dialog.n_npc) or "- ? -", + "]", + "button[17.8,0.2;2.0,0.9;back;Back]", + "button[15.0,0.2;2.0,0.9;store_notes;Save]", + "textarea[0.2,2;19.6,13;notes_text;Notes (shown only to those who can edit this NPC):;", + minetest.formspec_escape(dialog.d_notes or "Enter text here."), + "]", + "textarea[0.2,15.2;19.6,4.8;;;", + "This can be used to make your NPC more intresting by storing information about..\n".. + "* its character\n".. + "* special characteristics of the NPC\n".. + "* linguistic peculiarities and habits\n".. + "* origin, relationships, lots of lore\n".. + "* friendships / enmities\n".. + "* personal goals / motivations / background\n".. + "* planned quests\n".. + "* trades\n".. + "and whatever else you want to keep notes on for this NPC.]" + }) +end diff --git a/fs_talkdialog.lua b/fs_talkdialog.lua index f312eb7..9028ee1 100644 --- a/fs_talkdialog.lua +++ b/fs_talkdialog.lua @@ -125,6 +125,11 @@ yl_speak_up.input_talk = function(player, formname, fields) return end + if(edit_mode and fields.button_edit_notes) then + yl_speak_up.show_fs(player, "notes") + return + end + -- start edit mode (requires npc_talk_owner) if fields.button_start_edit_mode then -- check if this particular NPC is really owned by this player or if the player has global privs @@ -402,17 +407,22 @@ yl_speak_up.get_fs_talkdialog_main_text_in_edit_mode = function( "Create a new dialog.", true) yl_speak_up.add_formspec_element_with_tooltip_if(formspec, - "button", "13.4,0.3;2,0.9", "button_edit_name_and_description", + "button", "11.0,0.3;2,1.0", "button_edit_notes", + "Notes", + "Keep notes of what this NPC is for, how his character is etc.", + true) + yl_speak_up.add_formspec_element_with_tooltip_if(formspec, + "button", "13.2,0.3;2,0.9", "button_edit_name_and_description", "Edit", "Edit name and description of your NPC.", true) yl_speak_up.add_formspec_element_with_tooltip_if(formspec, - "button", "15.7,0.3;2,0.9", "button_save_dialog", + "button", "15.4,0.3;2,0.9", "button_save_dialog", "Save", "Save this dialog.", true) yl_speak_up.add_formspec_element_with_tooltip_if(formspec, - "button", "17.9,0.3;2,0.9", "button_export_dialog", + "button", "17.5,0.3;2.4,0.9", "button_export_dialog", "Export", "Export: Show the dialog in .json format which you can copy and store on your computer.", true) diff --git a/init.lua b/init.lua index ab23ba7..04c064d 100644 --- a/init.lua +++ b/init.lua @@ -235,6 +235,8 @@ yl_speak_up.reload = function(modpath, log_entry) dofile(modpath .. "fs_quest_gui.lua") -- export dialog for cut&paste in .json format dofile(modpath .. "fs_export.lua") + -- take notes regarding what the NPC is for + dofile(modpath .. "fs_notes.lua") -- show a list of all NPC the player can edit dofile(modpath .. "fs_npc_list.lua") diff --git a/show_fs.lua b/show_fs.lua index f853558..e6b3651 100644 --- a/show_fs.lua +++ b/show_fs.lua @@ -127,6 +127,10 @@ yl_speak_up.input_handler = function(player, formname, fields) elseif formname == "yl_speak_up:export" then yl_speak_up.input_fs_export(player, formname, fields) return true + -- take notes on what the NPC is for + elseif formname == "yl_speak_up:notes" then + yl_speak_up.input_fs_notes(player, formname, fields) + return true end end @@ -442,6 +446,10 @@ yl_speak_up.show_fs = function(player, fs_name, param) yl_speak_up.show_fs_ver(pname, "yl_speak_up:export", yl_speak_up.get_fs_export(player, param)) + elseif(fs_name == "notes") then + yl_speak_up.show_fs_ver(pname, "yl_speak_up:notes", + yl_speak_up.get_fs_notes(player, param)) + -- fallback in case of wrong call else minetest.chat_send_player(pname, "Error: Trying to show wrong "..