From c34ef26c04b298f24b986ae51b8eb829bb260edf Mon Sep 17 00:00:00 2001 From: Sokomine Date: Sat, 1 May 2021 13:57:48 +0200 Subject: [PATCH] make + button and New dialog option in dialog select dropdown work --- functions.lua | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/functions.lua b/functions.lua index cab95ce..7c0e164 100644 --- a/functions.lua +++ b/functions.lua @@ -1018,6 +1018,7 @@ local function get_fs_talkdialog(player, n_id, d_id) -- display the window with the text the NPC is saying -- TODO: make name and description likewise editable? -- TODO: make name of dialog and sort option editable? + -- TODO: show who owns the npc/is responsible for its talks? if(edit_mode) then -- TODO: sort by name? @@ -1681,13 +1682,14 @@ minetest.register_on_player_receive_fields( -- helper function yl_speak_up.add_new_dialog = function(dialog, pname) - future_d_id = "d_" .. find_next_id(dialog.n_dialogs) + next_id = find_next_id(dialog.n_dialogs) + future_d_id = "d_" .. next_id -- Initialize empty dialog dialog.n_dialogs[future_d_id] = { d_id = future_d_id, d_type = "text", d_text = "", - d_sort = -1 -- TODO + d_sort = next_id } -- store that there have been changes to this npc table.insert(yl_speak_up.npc_was_changed[ yl_speak_up.edit_mode[pname] ], @@ -1752,10 +1754,7 @@ yl_speak_up.edit_mode_apply_changes = function(pname, fields) end -- changes to options are not possible if there are none - -- TODO: handle adding of a new dialog - if(not(dialog.n_dialogs[ d_id ].d_options)) then - return - end + if(dialog.n_dialogs[ d_id ].d_options) then -- detect changes to text_option_: text for option for k, v in pairs(dialog.n_dialogs[ d_id ].d_options) do @@ -1804,17 +1803,18 @@ yl_speak_up.edit_mode_apply_changes = function(pname, fields) r_value = fields[ "d_id_"..k ]} end end + end -- add a new dialog; either via "+" button or "New dialog" in dialog dropdown menu -- this has to be done after all the other changes because those (text changes etc.) still -- apply to the *old* dialog if(fields.show_new_dialog - or(fields.d_id and fields.d_id == yl_speak_up.text_new_dialog_id)) then - -- create the new dialog - d_id = yl_speak_up.add_new_dialog(dialog, pname) + or(fields["d_id"] and fields["d_id"] == yl_speak_up.text_new_dialog_id)) then + -- create the new dialog and make sure it gets shown + local d_id = yl_speak_up.add_new_dialog(dialog, pname) -- actually show the new dialog - fields.d_id = d_id - fields.show_new_dialog = nil + fields["d_id"] = d_id + fields["show_new_dialog"] = nil end -- TODO just for debugging @@ -1930,11 +1930,9 @@ minetest.register_on_player_receive_fields( if ( o == "" and edit_mode) then -- if nothing better can be found: keep the old dialog local show_dialog = d_id - -- "New dialog" button or option from dropdown menu was selected - if(fields.show_new_dialog or (fields.d_id and fields.d_id == yl_speak_up.text_new_option_id)) then - -- TODO -- dropdown menu was used; provided the dialog exists (and it's not the "New dialog" option) - elseif(fields.d_id and fields.d_id ~= show_dialog and dialog.n_dialogs[fields.d_id]) then + -- (if a new dialog was added using the "+" button, fields.d_id gets set accordingly) + if(fields.d_id and fields.d_id ~= show_dialog and dialog.n_dialogs[fields.d_id]) then show_dialog = fields.d_id -- in edit mode: prev_dialog_../next_dialog_.. was selected else