forked from your-land-mirror/yl_speak_up
better setup of d_got_item when adding a new option; changed text displayed in edit mode for d_got_item in order to provide more help
This commit is contained in:
parent
f2f8195285
commit
e91dc93b11
@ -3,23 +3,27 @@
|
|||||||
-- helper function for yl_speak_up.edit_mode_apply_changes;
|
-- helper function for yl_speak_up.edit_mode_apply_changes;
|
||||||
-- makes sure the new dialog (and a result/effect "dialog" for each option) exist
|
-- makes sure the new dialog (and a result/effect "dialog" for each option) exist
|
||||||
yl_speak_up.prepare_new_dialog_for_option = function(dialog, pname, n_id, d_id, o_id,target_dialog,o_results)
|
yl_speak_up.prepare_new_dialog_for_option = function(dialog, pname, n_id, d_id, o_id,target_dialog,o_results)
|
||||||
-- is there a result/effect of the type "dialog" already? else use a fallback
|
|
||||||
local result = {r_value = "-default-"}
|
|
||||||
if(o_results) then
|
|
||||||
for kr, vr in pairs(o_results) do
|
|
||||||
if( vr.r_type == "dialog" ) then
|
|
||||||
result = vr
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- this may also point to a new dialog
|
-- this may also point to a new dialog
|
||||||
if(target_dialog == yl_speak_up.text_new_dialog_id) then
|
if(target_dialog == yl_speak_up.text_new_dialog_id) then
|
||||||
-- create a new dialog and show it as new target dialog - but do not display
|
-- create a new dialog and show it as new target dialog - but do not display
|
||||||
-- this dialog directly (the player may follow the -> button)
|
-- this dialog directly (the player may follow the -> button)
|
||||||
target_dialog = yl_speak_up.add_new_dialog(dialog, pname, nil)
|
target_dialog = yl_speak_up.add_new_dialog(dialog, pname, nil)
|
||||||
elseif( result.r_value and result.r_value == target_dialog) then
|
end
|
||||||
-- no problem - the right dialog is set already
|
-- is there a result/effect of the type "dialog" already? else use a fallback
|
||||||
return target_dialog
|
local result = {} --{r_value = "-default-"}
|
||||||
|
if(o_results) then
|
||||||
|
for kr, vr in pairs(o_results) do
|
||||||
|
if( vr.r_type == "dialog" ) then
|
||||||
|
result = vr
|
||||||
|
-- no problem - the right dialog is set already
|
||||||
|
if(result.r_value and result.r_value == target_dialog) then
|
||||||
|
return target_dialog
|
||||||
|
else
|
||||||
|
-- no need to search any further
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- store that a new option has been added to this dialog
|
-- store that a new option has been added to this dialog
|
||||||
table.insert(yl_speak_up.npc_was_changed[ n_id ],
|
table.insert(yl_speak_up.npc_was_changed[ n_id ],
|
||||||
@ -147,10 +151,8 @@ yl_speak_up.edit_mode_apply_changes = function(pname, fields)
|
|||||||
" options/answers are allowed per dialog.")
|
" options/answers are allowed per dialog.")
|
||||||
fields.add_option = nil
|
fields.add_option = nil
|
||||||
else
|
else
|
||||||
-- give this new dialog a dialog result that leads back to this dialog
|
-- add_new_option has added a dialog result for us already - no need to do that again
|
||||||
-- (which is more helpful than creating tons of empty dialogs)
|
|
||||||
local new_target_dialog = yl_speak_up.prepare_new_dialog_for_option(
|
|
||||||
dialog, pname, n_id, d_id, future_o_id, d_id, nil)
|
|
||||||
-- if this is selected in the options edit menu, we want to move straight on to the new option
|
-- if this is selected in the options edit menu, we want to move straight on to the new option
|
||||||
result["show_next_option"] = future_o_id
|
result["show_next_option"] = future_o_id
|
||||||
end
|
end
|
||||||
|
@ -381,7 +381,36 @@ yl_speak_up.get_fs_talkdialog_main_text_in_edit_mode = function(
|
|||||||
"Save this dialog.",
|
"Save this dialog.",
|
||||||
true)
|
true)
|
||||||
|
|
||||||
if(active_dialog and active_dialog.d_text) then
|
-- static help text instead of text input field for d_got_item
|
||||||
|
if(c_d_id == "d_got_item") then
|
||||||
|
table.insert(formspec, "hypertext[0.2,5;19.6,17.8;d_text;"..
|
||||||
|
"<normal>Note:\nThis is a special dialog."..
|
||||||
|
"It will be called when the player clicks on "..
|
||||||
|
"<b>I want to give you something</b>."..
|
||||||
|
"\nMost of the things listed below will be added automaticly when you add a "..
|
||||||
|
"new option to this dialog. In most cases you may just have to edit the "..
|
||||||
|
"<b>precondition</b> so that the <i>right item</i> is accepted, and then "..
|
||||||
|
"set the <b>target dialog</b> <i>according to your needs</i>. Please also "..
|
||||||
|
"edit the <b>alternate text</b> so that it fits your <i>item</i>!"..
|
||||||
|
"\nThis is how it works in detail:"..
|
||||||
|
"\n<b>Each option</b> you add here ought to deal with one item(stack) that "..
|
||||||
|
"the NPC expects from the player, i.e. <i>farming:bread 2</i>. "..
|
||||||
|
"Each option needs to be selected <b>automaticly</b> and ought to contain:"..
|
||||||
|
"\n* a <b>precondition</b> regarding "..
|
||||||
|
"<b>an item the player offered/gave to the NPC</b> "..
|
||||||
|
"(shown as <b>player_offered_item</b> in overview) "..
|
||||||
|
"where you define which item(stack) is relevant for this option"..
|
||||||
|
"\n* an <b>effect</b> regarding <b>an item the player offered to the NPC</b> "..
|
||||||
|
"(shown as <b>deal_with_offered_item</b> in overview) "..
|
||||||
|
"where you define what shall happen to the offered item. Usually "..
|
||||||
|
"the NPC will accept the item and put it into its inventory."..
|
||||||
|
"\n* Don't forget to set a suitable target dialog for the <b>effect</b>! "..
|
||||||
|
"Your NPC ought to comment on what he got, i.e. "..
|
||||||
|
"<i>Thank you for those two breads! You saved me from starving.</i>"..
|
||||||
|
"You can also work with an alternate text here (as is done in the "..
|
||||||
|
"default setup when adding a new option here)."..
|
||||||
|
"\n</normal>]")
|
||||||
|
elseif(active_dialog and active_dialog.d_text) then
|
||||||
table.insert(formspec, "textarea[0.2,5;19.6,17.8;d_text;;"..
|
table.insert(formspec, "textarea[0.2,5;19.6,17.8;d_text;;"..
|
||||||
minetest.formspec_escape(active_dialog.d_text or "?")..
|
minetest.formspec_escape(active_dialog.d_text or "?")..
|
||||||
"]")
|
"]")
|
||||||
|
@ -281,9 +281,22 @@ yl_speak_up.add_new_option = function(dialog, pname, next_id, d_id, option_text,
|
|||||||
"Dialog "..d_id..": Added new option/answer "..future_o_id..".")
|
"Dialog "..d_id..": Added new option/answer "..future_o_id..".")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- create a fitting dialog result automaticly if possible
|
-- letting d_got_item point back to itself is not a good idea because the
|
||||||
|
-- NPC will then end up in a loop; plus the d_got_item dialog is intended for
|
||||||
|
-- automatic processing, not for showing to the player
|
||||||
|
if(d_id == "d_got_item") then
|
||||||
|
-- unless the player specifies something better, we go back to the start dialog
|
||||||
|
-- (that is where d_got_item got called from anyway)
|
||||||
|
target_dialog = yl_speak_up.get_start_dialog_id(dialog)
|
||||||
|
-- ...and this option needs to be selected automaticly
|
||||||
|
dialog.n_dialogs[d_id].d_options[future_o_id].o_autoanswer = 1
|
||||||
|
end
|
||||||
|
local future_r_id = nil
|
||||||
|
-- create a fitting dialog result automaticly if possible:
|
||||||
|
-- give this new dialog a dialog result that leads back to this dialog
|
||||||
|
-- (which is more helpful than creating tons of empty dialogs)
|
||||||
if(target_dialog and (dialog.n_dialogs[target_dialog] or target_dialog == "d_end")) then
|
if(target_dialog and (dialog.n_dialogs[target_dialog] or target_dialog == "d_end")) then
|
||||||
local future_r_id = yl_speak_up.add_new_result(dialog, d_id, future_o_id)
|
future_r_id = yl_speak_up.add_new_result(dialog, d_id, future_o_id)
|
||||||
-- actually store the new result
|
-- actually store the new result
|
||||||
dialog.n_dialogs[d_id].d_options[future_o_id].o_results = {}
|
dialog.n_dialogs[d_id].d_options[future_o_id].o_results = {}
|
||||||
dialog.n_dialogs[d_id].d_options[future_o_id].o_results[future_r_id] = {
|
dialog.n_dialogs[d_id].d_options[future_o_id].o_results[future_r_id] = {
|
||||||
@ -291,6 +304,33 @@ yl_speak_up.add_new_option = function(dialog, pname, next_id, d_id, option_text,
|
|||||||
r_type = "dialog",
|
r_type = "dialog",
|
||||||
r_value = target_dialog}
|
r_value = target_dialog}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- the d_got_item dialog is special; players can easily forget to add the
|
||||||
|
-- necessary preconditions and effects, so we do that manually here
|
||||||
|
if(d_id == "d_got_item") then
|
||||||
|
-- we also need a precondition so that the o_autoanswer can actually get called
|
||||||
|
dialog.n_dialogs[d_id].d_options[future_o_id].o_prerequisites = {}
|
||||||
|
-- we just added this option; this is the first and for now only precondition for it;
|
||||||
|
-- the player still has to adjust it, but at least it is a reasonable default
|
||||||
|
dialog.n_dialogs[d_id].d_options[future_o_id].o_prerequisites["p_1"] = {
|
||||||
|
p_id = "p_1",
|
||||||
|
p_type = "player_offered_item",
|
||||||
|
p_item_stack_size = tostring(next_id),
|
||||||
|
p_match_stack_size = "exactly",
|
||||||
|
-- this is just a simple example item and ought to be changed after adding
|
||||||
|
p_value = "default:stick "..tostring(next_id)}
|
||||||
|
-- we need to show the player that his action was successful
|
||||||
|
dialog.n_dialogs[d_id].d_options[future_o_id].o_results[future_r_id].alternate_text =
|
||||||
|
"Thank you for the "..tostring(next_id).." stick(s)! "..
|
||||||
|
"Never can't have enough sticks.\n$TEXT$"
|
||||||
|
-- we need an effect for accepting the item;
|
||||||
|
-- taking all that was offered and putting it into the NPC's inventory is a good default
|
||||||
|
future_r_id = yl_speak_up.add_new_result(dialog, d_id, future_o_id)
|
||||||
|
dialog.n_dialogs[d_id].d_options[future_o_id].o_results[future_r_id] = {
|
||||||
|
r_id = future_r_id,
|
||||||
|
r_type = "deal_with_offered_item",
|
||||||
|
r_value = "take_all"}
|
||||||
|
end
|
||||||
return future_o_id
|
return future_o_id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user