put yl_speak_up.get_list_of_effects_and_target_dialog_and_effect into extra function so that it can be used in fs_edit_trade_limit.lua as well

This commit is contained in:
Sokomine 2022-10-17 19:05:58 +02:00
parent 9e8cc183fa
commit b7c2354cd9

View File

@ -1,4 +1,43 @@
-- helper function; used by
-- * yl_speak_up.get_fs_edit_option_dialog and
-- * yl_speak_up.get_fs_edit_trade_limit
yl_speak_up.get_list_of_effects_and_target_dialog_and_effect = function(dialog, results, pname, target_dialog, target_effect)
local list_of_effects = ""
local count_effects = 0
if(results) then
local sorted_key_list = yl_speak_up.sort_keys(results)
for i, k in ipairs(sorted_key_list) do
local v = results[ k ]
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..
minetest.formspec_escape(v.r_id)..",#999999,"..
minetest.formspec_escape(v.r_type)..","..
minetest.formspec_escape(
yl_speak_up.show_effect(v, pname))..","
-- there may be more than one in the data structure
target_dialog = v.r_value
target_effect = v
elseif v.r_type ~= "dialog" then
list_of_effects = list_of_effects..
minetest.formspec_escape(v.r_id)..",#FFFF00,"..
minetest.formspec_escape(v.r_type)..","..
minetest.formspec_escape(
yl_speak_up.show_effect(v, pname))..","
end
count_effects = count_effects + 1
end
end
if(count_effects < yl_speak_up.max_result_effects) then
list_of_effects = list_of_effects..",#00FF00,add,Add a new (Ef)fect"
else
list_of_effects = list_of_effects..",#AAAAAA,-,"..
"Maximum amount of allowed (Ef)fects per option reached!"
end
return {list = list_of_effects, target_dialog = target_dialog, target_effect = target_effect}
end
-- process input from formspec created in get_fs_edit_option_dialog(..) -- process input from formspec created in get_fs_edit_option_dialog(..)
yl_speak_up.input_edit_option_dialog = function(player, formname, fields) yl_speak_up.input_edit_option_dialog = function(player, formname, fields)
if formname ~= "yl_speak_up:edit_option_dialog" then if formname ~= "yl_speak_up:edit_option_dialog" then
@ -332,9 +371,7 @@ yl_speak_up.get_fs_edit_option_dialog = function(player, n_id, d_id, o_id, calle
-- set this to a fallback for yl_speak_up.show_colored_dialog_text -- set this to a fallback for yl_speak_up.show_colored_dialog_text
local target_effect = {r_id = "-?-", r_type = "dialog"} local target_effect = {r_id = "-?-", r_type = "dialog"}
-- and build the list of effects -- and build the list of effects
local list_of_effects = ""
local results = d_option.o_results local results = d_option.o_results
local count_effects = 0
-- create a new dialog type option if needed -- create a new dialog type option if needed
if(not(results) or not(next(results))) then if(not(results) or not(next(results))) then
target_dialog = yl_speak_up.prepare_new_dialog_for_option( target_dialog = yl_speak_up.prepare_new_dialog_for_option(
@ -344,35 +381,12 @@ yl_speak_up.get_fs_edit_option_dialog = function(player, n_id, d_id, o_id, calle
-- make sure we are up to date (a new option was inserted) -- make sure we are up to date (a new option was inserted)
results = d_option.o_results results = d_option.o_results
end end
if(results) then -- constructs the list_of_effects; may also update target_dialog and target_effect
local sorted_key_list = yl_speak_up.sort_keys(results) local res = yl_speak_up.get_list_of_effects_and_target_dialog_and_effect(dialog, results, pname,
for i, k in ipairs(sorted_key_list) do target_dialog, target_effect)
local v = results[ k ] list_of_effects = res.list
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 target_dialog = res.target_dialog
list_of_effects = list_of_effects.. target_effect = res.target_effect
minetest.formspec_escape(v.r_id)..",#999999,"..
minetest.formspec_escape(v.r_type)..","..
minetest.formspec_escape(
yl_speak_up.show_effect(v, pname))..","
-- there may be more than one in the data structure
target_dialog = v.r_value
target_effect = v
elseif v.r_type ~= "dialog" then
list_of_effects = list_of_effects..
minetest.formspec_escape(v.r_id)..",#FFFF00,"..
minetest.formspec_escape(v.r_type)..","..
minetest.formspec_escape(
yl_speak_up.show_effect(v, pname))..","
end
count_effects = count_effects + 1
end
end
if(count_effects < yl_speak_up.max_result_effects) then
list_of_effects = list_of_effects..",#00FF00,add,Add a new (Ef)fect"
else
list_of_effects = list_of_effects..",#AAAAAA,-,"..
"Maximum amount of allowed (Ef)fects per option reached!"
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 if(not(target_dialog) or target_dialog == "" or