set d_end if minetest.close_formspec is used in a function

This commit is contained in:
Sokomine 2023-02-24 07:18:44 +01:00
parent a03d2895d0
commit 26db498afe

View File

@ -45,6 +45,7 @@ yl_speak_up.check_one_npc_for_migration = function(dialog, pname, n_id)
-- iterate over all options
for o_id, o in pairs(d.d_options) do
if(o_id and o and o.o_results) then
local has_close_formspec = false
local dialog_results = {}
-- iterate over all results
for r_id, r in pairs(o.o_results) do
@ -52,6 +53,11 @@ yl_speak_up.check_one_npc_for_migration = function(dialog, pname, n_id)
table.insert(dialog_results, r_id)
elseif(r.r_type == "function") then
c_effect_exec_lua = c_effect_exec_lua + 1
-- if the formspec is closed, we need to use the
-- target dialog d_end
if(string.find(r.r_value , "minetest.close_formspec")) then
has_close_formspec = true
end
elseif(r.r_type == "move") then
c_effect_move_player = c_effect_move_player + 1
elseif(r.r_type == "give_item") then
@ -70,6 +76,23 @@ yl_speak_up.check_one_npc_for_migration = function(dialog, pname, n_id)
if(pname) then
minetest.chat_send_player(pname, msg)
end
-- sometimes we need d_end because minetest.close_formspec in
-- an effect of type "function" is not enough
elseif(has_close_formspec) then
local d_old = ""
for r_id, r in pairs(o.o_results) do
if(r.r_type == "dialog" and r.r_value ~= "d_end") then
d_old = r.r_value
r.r_value = "d_end"
end
end
yl_speak_up.save_dialog(n_id, dialog)
local msg = "ERROR: Dialog "..
tostring(d_id)..", option "..tostring(o_id)..
", uses minetest.close_formspec in its lua code "..
"but "..tostring(d_old).." instead of d_end as "..
"target dialog. Fixing."
minetest.chat_send_player(pname, msg)
end
end
if(o_id and o and o.o_prerequisites) then