forked from Sokomine/yl_speak_up
turn target dialog dropdown into buttons first
This commit is contained in:
parent
f3082b7637
commit
f7118f4343
@ -1066,7 +1066,12 @@ end
|
|||||||
|
|
||||||
-- talk
|
-- talk
|
||||||
|
|
||||||
yl_speak_up.get_fs_talkdialog = function(player, n_id, d_id)
|
-- show_dropdown_o_id: When set (and in edit mode):
|
||||||
|
-- Show a dropdown menu for o_id that allows to change the target dialog.
|
||||||
|
-- This two-step approach was introduced in order to avoid accidental
|
||||||
|
-- changes of the target dialog by scrolling with the mouse wheel
|
||||||
|
-- while at the wrong position.
|
||||||
|
yl_speak_up.get_fs_talkdialog = function(player, n_id, d_id, show_dropdown_o_id)
|
||||||
local pname = player:get_player_name()
|
local pname = player:get_player_name()
|
||||||
local dialog = yl_speak_up.speak_to[pname].dialog
|
local dialog = yl_speak_up.speak_to[pname].dialog
|
||||||
local context_d_id = yl_speak_up.speak_to[pname].d_id
|
local context_d_id = yl_speak_up.speak_to[pname].d_id
|
||||||
@ -1316,10 +1321,24 @@ yl_speak_up.get_fs_talkdialog = function(player, n_id, d_id)
|
|||||||
|
|
||||||
-- selecting an option this way MUST NOT execute the pre(C)onditions or (Ef)fects!
|
-- selecting an option this way MUST NOT execute the pre(C)onditions or (Ef)fects!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if(not(show_dropdown_o_id) or show_dropdown_o_id ~= oid) then
|
||||||
|
table.insert(formspec, "button[3.9,"..h..";4.7,1;show_dropdown_o_id_"..oid..";"..
|
||||||
|
(target_dialog or "- none -").."]")
|
||||||
|
table.insert(formspec, "tooltip[show_dropdown_o_id_"..oid..";"..
|
||||||
|
"Click here to show a dropdown menu for changing\n"..
|
||||||
|
"the target dialog of option "..oid..".]")
|
||||||
|
else
|
||||||
-- allow to set a new target dialog
|
-- allow to set a new target dialog
|
||||||
table.insert(formspec, "dropdown[3.9,"..h..";4.7,1;d_id_"..oid..";"..dialog_list..";"..minetest.formspec_escape(d_id_to_dropdown_index[target_dialog] or "0")..",]")
|
table.insert(formspec, "dropdown[3.9,"..h..";4.7,1;d_id_"..oid..";"..
|
||||||
|
dialog_list..";"..
|
||||||
|
minetest.formspec_escape(d_id_to_dropdown_index[target_dialog] or "0")..",]")
|
||||||
-- add a tooltip "Change target dialog"
|
-- add a tooltip "Change target dialog"
|
||||||
table.insert(formspec, "tooltip[3.9,"..h..";4.7,1;Change target dialog for option "..oid..".;#FFFFFF;#000000]")
|
table.insert(formspec, "tooltip[3.9,"..h..";4.7,1;"..
|
||||||
|
"Change target dialog for option "..oid..".;#FFFFFF;#000000]")
|
||||||
|
table.insert(formspec, "field[80,80;0.1,0.1;keep_show_dropdown_o_id"..oid..";"..
|
||||||
|
oid..";"..oid.."]")
|
||||||
|
end
|
||||||
|
|
||||||
-- are there any prerequirements?
|
-- are there any prerequirements?
|
||||||
local prereq = active_dialog.d_options[sb_v.o_id].o_prerequisites
|
local prereq = active_dialog.d_options[sb_v.o_id].o_prerequisites
|
||||||
@ -2992,6 +3011,7 @@ yl_speak_up.input_talk = function(player, formname, fields)
|
|||||||
|
|
||||||
|
|
||||||
-- all three buttons (pre(C)onditions, (Ef)fects, edit option) lead to the same new formspec
|
-- all three buttons (pre(C)onditions, (Ef)fects, edit option) lead to the same new formspec
|
||||||
|
local show_dropdown_o_id = nil
|
||||||
if( edit_mode ) then
|
if( edit_mode ) then
|
||||||
local n_dialog = dialog.n_dialogs[d_id]
|
local n_dialog = dialog.n_dialogs[d_id]
|
||||||
|
|
||||||
@ -3005,9 +3025,17 @@ yl_speak_up.input_talk = function(player, formname, fields)
|
|||||||
player, yl_speak_up.speak_to[pname].n_id, d_id, o_id))
|
player, yl_speak_up.speak_to[pname].n_id, d_id, o_id))
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
-- show a dropdown menu for changing the target dialog *only* for this
|
||||||
|
-- option in order to avoid accidental, unnoticed changes
|
||||||
|
if( fields["show_dropdown_o_id_"..o_id]) then
|
||||||
|
show_dropdown_o_id = o_id
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- if no new o_id for editing the dropdown menu has been selected: keep the old one
|
||||||
|
if(not(show_dropdown_o_id) and fields.keep_show_dropdown_o_id) then
|
||||||
|
show_dropdown_o_id = fields.keep_show_dropdown_o_id
|
||||||
end
|
end
|
||||||
|
|
||||||
-- in edit mode: another dialog was selected
|
-- in edit mode: another dialog was selected
|
||||||
@ -3034,7 +3062,7 @@ yl_speak_up.input_talk = function(player, formname, fields)
|
|||||||
-- show the same dialog again
|
-- show the same dialog again
|
||||||
else
|
else
|
||||||
minetest.show_formspec(pname, "yl_speak_up:talk",
|
minetest.show_formspec(pname, "yl_speak_up:talk",
|
||||||
yl_speak_up.get_fs_talkdialog(player, n_id, d_id))
|
yl_speak_up.get_fs_talkdialog(player, n_id, d_id, show_dropdown_o_id))
|
||||||
end
|
end
|
||||||
-- no option was selected - so we need to end this here
|
-- no option was selected - so we need to end this here
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user