From 5f652f62ae8a536023e66dcffe2d9ea6b8ad941d Mon Sep 17 00:00:00 2001 From: Sokomine Date: Wed, 16 Jun 2021 01:36:50 +0200 Subject: [PATCH] added save function for actions of type trade --- fs_edit_actions.lua | 3 ++- fs_edit_general.lua | 54 ++++++++++++++++++++++++++++++--------------- trade_simple.lua | 22 +++++++++++++----- 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/fs_edit_actions.lua b/fs_edit_actions.lua index 583e496..501d0bb 100644 --- a/fs_edit_actions.lua +++ b/fs_edit_actions.lua @@ -95,7 +95,8 @@ yl_speak_up.show_action = function(a) if(not(a.a_type) or a.a_type == "" or a.a_type == "none") then return "(nothing): Nothing to do. No action." elseif(a.a_type == "trade") then - return "trade:" -- TODO show ation text + return "NPC sells \""..table.concat(a.a_buy, ";").."\" for \"".. + table.concat(a.a_pay, ";").."\"." elseif(a.a_type == "npc_gives") then return "The NPC gives \""..tostring(a.a_item_desc or "- default description -").. "\" (\""..tostring(a.a_value or "- ? -").."\") ".. diff --git a/fs_edit_general.lua b/fs_edit_general.lua index 0469881..091adbd 100644 --- a/fs_edit_general.lua +++ b/fs_edit_general.lua @@ -434,6 +434,42 @@ yl_speak_up.input_fs_edit_option_related = function(player, formname, fields, end v[ "r_value" ] = data.chat_msg_text + -- "Normal trade - one item(stack) for another item(stack).", -- 3 + -- (only for actions) + elseif(data.what and id_prefix == "a_" and data.what == 3) then + -- remember which option was selected + yl_speak_up.speak_to[pname].o_id = o_id + -- do not switch target dialog (we are in edit mode) + yl_speak_up.speak_to[pname].target_d_id = nil + -- just to make sure that the trade_id is properly set... + if(not(data.trade_id)) then + yl_speak_up.show_fs(player, "msg", { + input_to = "yl_speak_up:"..formspec_input_to, + formspec = "size[9,2.5]".. + "label[0.2,0.5;Error: Missing trade ID.]".. + "button[1.5,2.0;2,0.9;back_from_error_msg;Back]"}) + return + end + -- the button is called store_trade_simple instead of save_element in + -- the trade simple function(s); we want to store a trade + fields.store_trade_simple = true + local res = yl_speak_up.input_add_trade_simple(player, "", fields) + -- the above function sets: + -- dialog.trades[ trade_id ] = {pay={ps},buy={bs}, d_id = d_id, o_id = o_id} + -- store the trade as an action: + local dialog = yl_speak_up.speak_to[pname].dialog + if(res and dialog.trades and dialog.trades[ data.trade_id ]) then + v[ "a_value" ] = data.trade_id + v[ "a_pay" ] = dialog.trades[ data.trade_id ].pay + v[ "a_buy" ] = dialog.trades[ data.trade_id ].buy + v[ "a_on_failure" ] = "" + if(data.action_failure_dialog) then + local dialog = yl_speak_up.speak_to[pname].dialog + local sorted_dialog_list = yl_speak_up.sort_keys(dialog.n_dialogs) + v[ "a_on_failure" ] = sorted_dialog_list[ data.action_failure_dialog ] + end + end + -- "The NPC gives something to the player (i.e. a quest item).", -- 4 -- "The player is expected to give something to the NPC (i.e. a quest item).", -- 5 -- (only for actions) @@ -652,24 +688,6 @@ yl_speak_up.input_fs_edit_option_related = function(player, formname, fields, yl_speak_up.speak_to[pname][ tmp_data_cache ].action_failure_dialog = nr end ---[[ - -- "Normal trade - one item(stack) for another item(stack).", -- 3 - -- (only for actions) - -- TODO: this needs to be adjusted - if(data and data.what == 3 and id_prefix == "a_") then - -- remember which option was selected - yl_speak_up.speak_to[pname].o_id = o_id - -- do not switch target dialog (we are in edit mode) - yl_speak_up.speak_to[pname].target_d_id = nil - -- create a new trade for this dialog and option - with ID " " - yl_speak_up.show_fs(player, "add_trade_simple", tostring(d_id).." "..tostring(o_id)) - return - end - -- TODO: set trade_id in the input_ function and then call - -- yl_speak_up.input_add_trade_simple(player, formname, fields) - -- TODO gets saved as: dialog.trades[ trade_id ] = {pay={ps},buy={bs}, d_id = d_id, o_id = o_id} ---]] - -- the player wants to change/edit a precondition or effect if(not(fields.back) and (fields.change_element or fields.select_what or fields.select_trade diff --git a/trade_simple.lua b/trade_simple.lua index 489e5c1..19195ec 100644 --- a/trade_simple.lua +++ b/trade_simple.lua @@ -253,10 +253,17 @@ yl_speak_up.input_add_trade_simple = function(player, formname, fields) end local pname = player:get_player_name() + local input_to = "add_trade_simple" + -- are we editing an action of the type trade? + if( yl_speak_up.speak_to[pname][ "tmp_action" ] + and yl_speak_up.speak_to[pname][ "tmp_action" ].what == 3) then + input_to = "edit_actions" + end + -- we return from showing an error message (the player may not have noticed -- a chat message while viewing a formspec; thus, we showed a formspec message) if(fields.back_from_error_msg) then - yl_speak_up.show_fs(player, "add_trade_simple") + yl_speak_up.show_fs(player, input_to) return end @@ -368,7 +375,7 @@ yl_speak_up.input_add_trade_simple = function(player, formname, fields) -- show error message (that leads back to this formspec) if(error_msg) then yl_speak_up.show_fs(player, "msg", { - input_to = "yl_speak_up:add_trade_simple", + input_to = "yl_speak_up:"..input_to, formspec = "size[6,2]".. "label[0.2,0.5;"..error_msg.."]".. @@ -404,7 +411,8 @@ yl_speak_up.input_add_trade_simple = function(player, formname, fields) if(not(dialog.trades)) then dialog.trades = {} end - if(dialog.trades[ trade_id ] and dialog.trades[ trade_id ].d_id) then + if(dialog.trades[ trade_id ] and dialog.trades[ trade_id ].d_id + and input_to ~= "edit_actions") then yl_speak_up.speak_to[pname].trade_id = trade_id -- tell the player that the new trade has been added yl_speak_up.show_fs(player, "msg", { @@ -422,9 +430,11 @@ yl_speak_up.input_add_trade_simple = function(player, formname, fields) else -- we are no longer trading yl_speak_up.speak_to[pname].trade_id = nil - -- ..else go back to the edit options formspec - yl_speak_up.show_fs(player, "edit_option_dialog", - {n_id = n_id, d_id = d_id, o_id = o_id}) + -- the trade has been stored or deleted successfully + return true +-- -- ..else go back to the edit options formspec (obsolete) +-- yl_speak_up.show_fs(player, "edit_option_dialog", +-- {n_id = n_id, d_id = d_id, o_id = o_id}) end end