From 577ea356aa231b70919ef2d09e9b92dc45daaa5d Mon Sep 17 00:00:00 2001 From: Sokomine Date: Thu, 1 Jul 2021 23:14:33 +0200 Subject: [PATCH] actually apply alternate_text texts --- fs_edit_actions.lua | 9 ++++++--- fs_edit_effects.lua | 10 +++++++--- functions.lua | 7 +++++-- show_fs.lua | 2 +- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/fs_edit_actions.lua b/fs_edit_actions.lua index e44c002..97e98fd 100644 --- a/fs_edit_actions.lua +++ b/fs_edit_actions.lua @@ -182,7 +182,8 @@ yl_speak_up.execute_next_action = function(player, a_id, result_of_a_id) yl_speak_up.speak_to[pname].o_id = nil yl_speak_up.speak_to[pname].a_id = nil yl_speak_up.show_fs(player, "talk", {n_id = n_id, - d_id = this_action.a_on_failure}) + d_id = this_action.a_on_failure, + alternate_text = this_action.alternate_text}) return else yl_speak_up.debug_msg(player, n_id, o_id, "Action ".. @@ -211,7 +212,8 @@ yl_speak_up.execute_next_action = function(player, a_id, result_of_a_id) "Doing effects/results now.") -- execute all effects/results local effects = dialog.n_dialogs[d_id].d_options[o_id].o_results - local target_dialog = yl_speak_up.execute_all_relevant_effects(player, effects, o_id, true) + local res = yl_speak_up.execute_all_relevant_effects(player, effects, o_id, true) + local target_dialog = res.next_dialog yl_speak_up.speak_to[pname].o_id = nil yl_speak_up.speak_to[pname].a_id = nil if(not(target_dialog) @@ -220,7 +222,8 @@ yl_speak_up.execute_next_action = function(player, a_id, result_of_a_id) target_dialog = d_id end -- the function above returns a target dialog; show that to the player - yl_speak_up.show_fs(player, "talk", {n_id = n_id, d_id = target_dialog}) + yl_speak_up.show_fs(player, "talk", {n_id = n_id, d_id = target_dialog, + alternate_text = res.alternate_text}) end diff --git a/fs_edit_effects.lua b/fs_edit_effects.lua index 1d0670b..d561a94 100644 --- a/fs_edit_effects.lua +++ b/fs_edit_effects.lua @@ -230,7 +230,7 @@ yl_speak_up.execute_all_relevant_effects = function(player, effects, o_id, actio if(not(effects)) then yl_speak_up.debug_msg(player, n_id, o_id, "No effects given.") -- no effects? Then...return to the start dialog - return "" + return {next_dialog = "", alternate_text = nil} end local edit_mode = (yl_speak_up.edit_mode[pname] == n_id) -- Important: the list of effects is *sorted* here. The order remains constant! @@ -244,6 +244,8 @@ yl_speak_up.execute_all_relevant_effects = function(player, effects, o_id, actio else yl_speak_up.debug_msg(player, n_id, o_id, "Not executing effects because in edit mode.") end + -- failed actions may set an alternate text + local alternate_text = nil local last_result = action_was_successful local res = true for i, k in ipairs(sorted_key_list) do @@ -258,6 +260,7 @@ yl_speak_up.execute_all_relevant_effects = function(player, effects, o_id, actio if(not(res)) then yl_speak_up.debug_msg(player, n_id, o_id, tostring(r.r_id).. " -> Effect failed to execute.") + alternate_text = r.alternate_text end else -- in edit mode: assume that the effect was successful @@ -266,19 +269,20 @@ yl_speak_up.execute_all_relevant_effects = function(player, effects, o_id, actio -- "dialog" gives us the normal target_dialog if(r.r_type and r.r_type == "dialog") then target_dialog = r.r_value + alternate_text = r.alternate_text -- "on_failure" gives an alternate target dialog if the action -- or last effect failed elseif(r.r_type and r.r_type == "on_failure" and r.r_value and not(last_result)) then yl_speak_up.debug_msg(player, n_id, o_id, "Aborted executing effects at ".. tostring(r.r_id)..". New target dialog: "..tostring(r.r_value)..".") -- we also stop execution here - return r.r_value + return {next_dialog = r.r_value, alternate_text = r.alternate_text} end last_result = res end -- all preconditions are true yl_speak_up.debug_msg(player, n_id, o_id, "Finished executing effects.") - return target_dialog + return {next_dialog = target_dialog, alternate_text = alternate_text} end diff --git a/functions.lua b/functions.lua index f38d71d..751cda1 100644 --- a/functions.lua +++ b/functions.lua @@ -725,7 +725,7 @@ end -- talk -yl_speak_up.get_fs_talkdialog = function(player, n_id, d_id) +yl_speak_up.get_fs_talkdialog = function(player, n_id, d_id, alternate_text) local pname = player:get_player_name() local dialog = yl_speak_up.speak_to[pname].dialog local context_d_id = yl_speak_up.speak_to[pname].d_id @@ -922,9 +922,12 @@ yl_speak_up.get_fs_talkdialog = function(player, n_id, d_id) table.insert(formspec, minetest.formspec_escape(active_dialog.d_text)) table.insert(formspec, "]") else + if(alternate_text) then + alternate_text = string.gsub(alternate_text, "%$TEXT%$", active_dialog.d_text) + end -- replace $NPC_NAME$ etc. local t = minetest.formspec_escape(yl_speak_up.replace_vars_in_text( - active_dialog.d_text, dialog, pname)) + (alternate_text or active_dialog.d_text), dialog, pname)) table.insert(formspec, "hypertext[0.2,5;19.6,17.8;d_text;") table.insert(formspec, t .. "\n") table.insert(formspec, "]") diff --git a/show_fs.lua b/show_fs.lua index 6f28c33..b5e632e 100644 --- a/show_fs.lua +++ b/show_fs.lua @@ -211,7 +211,7 @@ yl_speak_up.show_fs = function(player, fs_name, param) param = {} end minetest.show_formspec(pname, "yl_speak_up:talk", - yl_speak_up.get_fs_talkdialog(player, param.n_id, param.d_id)) + yl_speak_up.get_fs_talkdialog(player, param.n_id, param.d_id, param.alternate_text)) elseif(fs_name == "fashion") then minetest.show_formspec(pname, "yl_speak_up:fashion",