implemented d_end
This commit is contained in:
parent
952111c7fe
commit
80ce8d4892
@ -49,6 +49,15 @@ effect/result Further effects (like setting variables, handing out items)
|
|||||||
|
|
||||||
alternate text Text shown instead of the normal dialog text.
|
alternate text Text shown instead of the normal dialog text.
|
||||||
|
|
||||||
|
Special dialogs
|
||||||
|
===============
|
||||||
|
|
||||||
|
In general, dialogs follow the naming schem "d_<nr>". However, some few have a
|
||||||
|
special meaning:
|
||||||
|
|
||||||
|
d_end End the conversation (i.e. after teleporting the player).
|
||||||
|
d_got_item The NPC got something and is trying to decide what to do with it.
|
||||||
|
|
||||||
How to configure NPC and add dialogs
|
How to configure NPC and add dialogs
|
||||||
====================================
|
====================================
|
||||||
There are two ways:
|
There are two ways:
|
||||||
|
@ -68,7 +68,7 @@ yl_speak_up.rewrite_dialog_id = function(data, field_name, start_dialog, append_
|
|||||||
if(data[field_name] == start_dialog
|
if(data[field_name] == start_dialog
|
||||||
or data[field_name]..append_str == start_dialog) then
|
or data[field_name]..append_str == start_dialog) then
|
||||||
return "d_generic_start_dialog"
|
return "d_generic_start_dialog"
|
||||||
elseif(data[field_name] ~= "d_got_item") then
|
elseif(data[field_name] ~= "d_got_item" and data[field_name] ~= "d_end") then
|
||||||
return data[field_name]..append_str
|
return data[field_name]..append_str
|
||||||
end
|
end
|
||||||
return data[field_name]
|
return data[field_name]
|
||||||
|
@ -228,6 +228,11 @@ yl_speak_up.execute_next_action = function(player, a_id, result_of_a_id)
|
|||||||
local target_dialog = res.next_dialog
|
local target_dialog = res.next_dialog
|
||||||
yl_speak_up.speak_to[pname].o_id = nil
|
yl_speak_up.speak_to[pname].o_id = nil
|
||||||
yl_speak_up.speak_to[pname].a_id = nil
|
yl_speak_up.speak_to[pname].a_id = nil
|
||||||
|
-- end conversation
|
||||||
|
if(target_dialog and target_dialog == "d_end") then
|
||||||
|
yl_speak_up.stop_talking(pname)
|
||||||
|
return
|
||||||
|
end
|
||||||
if(not(target_dialog)
|
if(not(target_dialog)
|
||||||
or target_dialog == ""
|
or target_dialog == ""
|
||||||
or not(dialog.n_dialogs[target_dialog])) then
|
or not(dialog.n_dialogs[target_dialog])) then
|
||||||
|
@ -344,6 +344,10 @@ yl_speak_up.show_colored_dialog_text = function(dialog, data, d_id, hypertext_po
|
|||||||
color = "777777"
|
color = "777777"
|
||||||
text = "[This dialog shall only have automatic options. The text is therefore irrelevant.]"
|
text = "[This dialog shall only have automatic options. The text is therefore irrelevant.]"
|
||||||
end
|
end
|
||||||
|
if(d_id == "d_end") then
|
||||||
|
color = "777777"
|
||||||
|
text = "[The NPC will end this conversation.]"
|
||||||
|
end
|
||||||
if(data and data.alternate_text and data.alternate_text ~= "") then
|
if(data and data.alternate_text and data.alternate_text ~= "") then
|
||||||
add_info_alternate_text = alternate_label_text
|
add_info_alternate_text = alternate_label_text
|
||||||
-- replace $TEXT$ with the normal dialog text and make the new text yellow
|
-- replace $TEXT$ with the normal dialog text and make the new text yellow
|
||||||
|
@ -330,7 +330,7 @@ yl_speak_up.get_fs_edit_option_dialog = function(player, n_id, d_id, o_id, calle
|
|||||||
local sorted_key_list = yl_speak_up.sort_keys(results)
|
local sorted_key_list = yl_speak_up.sort_keys(results)
|
||||||
for i, k in ipairs(sorted_key_list) do
|
for i, k in ipairs(sorted_key_list) do
|
||||||
local v = results[ k ]
|
local v = results[ k ]
|
||||||
if v.r_type == "dialog" and dialog.n_dialogs[v.r_value] ~= nil then
|
if v.r_type == "dialog" and (dialog.n_dialogs[v.r_value] ~= nil or v.r_value == "d_end" or v.r_value == "d_got_item") then
|
||||||
list_of_effects = list_of_effects..
|
list_of_effects = list_of_effects..
|
||||||
minetest.formspec_escape(v.r_id)..",#999999,"..
|
minetest.formspec_escape(v.r_id)..",#999999,"..
|
||||||
minetest.formspec_escape(v.r_type)..","..
|
minetest.formspec_escape(v.r_type)..","..
|
||||||
@ -357,7 +357,10 @@ yl_speak_up.get_fs_edit_option_dialog = function(player, n_id, d_id, o_id, calle
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- if no target dialog has been selected: default is to go to the dialog with d_sort 0
|
-- if no target dialog has been selected: default is to go to the dialog with d_sort 0
|
||||||
if(not(target_dialog) or target_dialog == "" or not(dialog.n_dialogs[target_dialog])) then
|
if(not(target_dialog) or target_dialog == "" or
|
||||||
|
(not(dialog.n_dialogs[target_dialog])
|
||||||
|
and target_dialog ~= "d_end"
|
||||||
|
and target_dialog ~= "d_got_item")) then
|
||||||
for d, v in pairs(dialog.n_dialogs) do
|
for d, v in pairs(dialog.n_dialogs) do
|
||||||
if(v.d_sort and tonumber(v.d_sort) == 0) then
|
if(v.d_sort and tonumber(v.d_sort) == 0) then
|
||||||
target_dialog = d
|
target_dialog = d
|
||||||
@ -379,7 +382,11 @@ yl_speak_up.get_fs_edit_option_dialog = function(player, n_id, d_id, o_id, calle
|
|||||||
dialog_selected = tostring(n)
|
dialog_selected = tostring(n)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if(target_dialog == "d_end") then
|
||||||
|
dialog_selected = tostring(n + 1)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
dialog_list = dialog_list..",d_end"
|
||||||
if(not(target_dialog)) then
|
if(not(target_dialog)) then
|
||||||
target_dialog = "- none -"
|
target_dialog = "- none -"
|
||||||
end
|
end
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
-- This is the main talkdialog the NPC shows when right-clicked.
|
-- This is the main talkdialog the NPC shows when right-clicked.
|
||||||
|
|
||||||
|
yl_speak_up.stop_talking = function(pname)
|
||||||
|
yl_speak_up.edit_mode[pname] = nil
|
||||||
|
yl_speak_up.speak_to[pname] = nil
|
||||||
|
minetest.close_formspec(pname, "yl_speak_up:talk")
|
||||||
|
end
|
||||||
|
|
||||||
yl_speak_up.input_talk = function(player, formname, fields)
|
yl_speak_up.input_talk = function(player, formname, fields)
|
||||||
if formname ~= "yl_speak_up:talk" then
|
if formname ~= "yl_speak_up:talk" then
|
||||||
@ -377,6 +382,13 @@ yl_speak_up.get_fs_talkdialog = function(player, n_id, d_id, alternate_text, rec
|
|||||||
local target_dialog = res.next_dialog
|
local target_dialog = res.next_dialog
|
||||||
yl_speak_up.speak_to[pname].o_id = nil
|
yl_speak_up.speak_to[pname].o_id = nil
|
||||||
yl_speak_up.speak_to[pname].a_id = nil
|
yl_speak_up.speak_to[pname].a_id = nil
|
||||||
|
-- end the conversation?
|
||||||
|
if(target_dialog and target_dialog == "d_end") then
|
||||||
|
yl_speak_up.stop_talking(pname)
|
||||||
|
-- a formspec is expected here; provide one that has an exit button only
|
||||||
|
return "size[2,1]"..
|
||||||
|
"button_exit[0,0;1,1;Exit;exit]"
|
||||||
|
end
|
||||||
if(not(target_dialog)
|
if(not(target_dialog)
|
||||||
or target_dialog == ""
|
or target_dialog == ""
|
||||||
or not(dialog.n_dialogs[target_dialog])) then
|
or not(dialog.n_dialogs[target_dialog])) then
|
||||||
@ -448,6 +460,8 @@ yl_speak_up.get_fs_talkdialog = function(player, n_id, d_id, alternate_text, rec
|
|||||||
end
|
end
|
||||||
d_id_to_dropdown_index[d] = i + 1
|
d_id_to_dropdown_index[d] = i + 1
|
||||||
end
|
end
|
||||||
|
dialog_list = dialog_list..",d_end"
|
||||||
|
d_id_to_dropdown_index["d_end"] = #sorted_list + 2
|
||||||
|
|
||||||
table.insert(formspec, "label[0.2,4.6;Dialog:]") -- "..minetest.formspec_escape(c_d_id)..":]")
|
table.insert(formspec, "label[0.2,4.6;Dialog:]") -- "..minetest.formspec_escape(c_d_id)..":]")
|
||||||
table.insert(formspec, "dropdown[3.0,4.0;5,1;d_id;"..dialog_list..";"..
|
table.insert(formspec, "dropdown[3.0,4.0;5,1;d_id;"..dialog_list..";"..
|
||||||
@ -518,7 +532,10 @@ yl_speak_up.get_fs_talkdialog = function(player, n_id, d_id, alternate_text, rec
|
|||||||
local has_other_results = false
|
local has_other_results = false
|
||||||
if(results ~= nil) then
|
if(results ~= nil) then
|
||||||
for k, v in pairs(results) do
|
for k, v in pairs(results) do
|
||||||
if v.r_type == "dialog" and dialog.n_dialogs[v.r_value] ~= nil then
|
if v.r_type == "dialog"
|
||||||
|
and (dialog.n_dialogs[v.r_value] ~= nil
|
||||||
|
or v.r_value == "d_end"
|
||||||
|
or v.r_value == "d_got_item") then
|
||||||
-- there may be more than one in the data structure
|
-- there may be more than one in the data structure
|
||||||
target_dialog = v.r_value
|
target_dialog = v.r_value
|
||||||
elseif v.r_type ~= "dialog" then
|
elseif v.r_type ~= "dialog" then
|
||||||
|
@ -240,6 +240,10 @@ yl_speak_up.show_fs = function(player, fs_name, param)
|
|||||||
if(not(param)) then
|
if(not(param)) then
|
||||||
param = {}
|
param = {}
|
||||||
end
|
end
|
||||||
|
if(param.d_id and param.d_id == "d_end") then
|
||||||
|
yl_speak_up.stop_talking(pname)
|
||||||
|
return
|
||||||
|
end
|
||||||
yl_speak_up.show_fs_ver(pname, "yl_speak_up:talk",
|
yl_speak_up.show_fs_ver(pname, "yl_speak_up:talk",
|
||||||
-- recursion depth from autoanswer: 0 (the player selected manually)
|
-- recursion depth from autoanswer: 0 (the player selected manually)
|
||||||
yl_speak_up.get_fs_talkdialog(player, param.n_id, param.d_id, param.alternate_text,0))
|
yl_speak_up.get_fs_talkdialog(player, param.n_id, param.d_id, param.alternate_text,0))
|
||||||
|
Loading…
Reference in New Issue
Block a user