delete trades from trade_list even if not in edit mode
This commit is contained in:
parent
08f6e0d309
commit
7fb42d95ab
@ -120,3 +120,6 @@ The trade list can be accessed from the NPC's inventory.
|
||||
If there are trades that ought to show up in the general trade list (i.e. not
|
||||
only attached to dialog options), then a button "Let's trade" will be shown
|
||||
as option for the first dialog.
|
||||
|
||||
Trades that are attached to the trade list (and not dialog options) can be
|
||||
added and deleted without entering edit mode ("I am your owner. ...").
|
||||
|
@ -112,9 +112,8 @@ yl_speak_up.get_fs_trade_list = function(player)
|
||||
"label[1,1;Sorry. There are currently no offers available.]")
|
||||
end
|
||||
|
||||
-- button "add trade" for those who can edit the NPC
|
||||
if((yl_speak_up.edit_mode[pname] == yl_speak_up.speak_to[pname].n_id)
|
||||
and (yl_speak_up.speak_to[pname].n_id)) then
|
||||
-- button "add trade" for those who can edit the NPC (entering edit mode is not required)
|
||||
if(yl_speak_up.may_edit_npc(player, n_id)) then
|
||||
table.insert(formspec,
|
||||
"button["..tostring(yl_speak_up.trade_max_cols * 4 - 2.2)..
|
||||
",0.2;2.0,0.9;trade_list_add_trade;Add trade]")
|
||||
|
@ -9,6 +9,7 @@ yl_speak_up.trade_fail_fs = "size[6,2]"..
|
||||
-- possible inputs:
|
||||
-- fields.edit_trade_simple go on to showing the add_trade_simple formspec
|
||||
-- fields.abort_trade_simple, ESC, depends on context
|
||||
-- fields.delete_trade_simple delete this trade
|
||||
-- fields.finished_trading
|
||||
-- if in edit mode: go back to edit options dialog
|
||||
-- if traded at least once: go on to the target dialog
|
||||
@ -29,6 +30,32 @@ yl_speak_up.input_do_trade_simple = function(player, formname, fields)
|
||||
return
|
||||
end
|
||||
|
||||
-- delete a trade; this can be done here only if..
|
||||
-- * it is a trade from the trade list (not an effect of a dialog option)
|
||||
-- * the player has the necessary privs
|
||||
-- This option is available without having to enter edit mode first.
|
||||
if(fields.delete_trade_simple
|
||||
and yl_speak_up.may_edit_npc(player, trade.n_id)) then
|
||||
-- get the necessary dialog data
|
||||
local dialog = yl_speak_up.speak_to[pname].dialog
|
||||
if(dialog and dialog.trades and trade.trade_id
|
||||
and dialog.trades[ trade.trade_id ] and
|
||||
not(dialog.trades[ trade.trade_id ].d_id)) then
|
||||
-- log the change
|
||||
yl_speak_up.log_change(pname, n_id,
|
||||
"Trade: Deleted offer "..tostring(trade.trade_id)..".")
|
||||
-- delete this particular trade
|
||||
dialog.trades[ trade.trade_id ] = nil
|
||||
-- TODO: save dialog
|
||||
-- we are done with this trade
|
||||
yl_speak_up.trade[pname] = nil
|
||||
end
|
||||
-- go back showing the trade list (since we deleted this trade)
|
||||
minetest.show_formspec(pname, "yl_speak_up:trade_list",
|
||||
yl_speak_up.get_fs_trade_list(player))
|
||||
return
|
||||
end
|
||||
|
||||
-- can the player edit this trade?
|
||||
if(fields.edit_trade_simple
|
||||
and (yl_speak_up.edit_mode[pname] == yl_speak_up.speak_to[pname].n_id
|
||||
@ -216,7 +243,7 @@ yl_speak_up.input_add_trade_simple = function(player, formname, fields)
|
||||
-- record this as a change
|
||||
table.insert(yl_speak_up.npc_was_changed[ n_id ],
|
||||
"Trade: Deleted offer "..tostring(trade.trade_id)..".")
|
||||
-- delete this particular trade and update the IDs in the array
|
||||
-- delete this particular trade
|
||||
dialog.trades[ trade.trade_id ] = nil
|
||||
elseif(trade.r_id) then
|
||||
-- record this as a change
|
||||
@ -374,7 +401,8 @@ yl_speak_up.get_fs_trade_simple = function(player, trade_id)
|
||||
trade_done = 0,
|
||||
-- we need to know which option this is
|
||||
target_dialog = d_id,
|
||||
trade_is_trade_list = true
|
||||
trade_is_trade_list = true,
|
||||
trade_id = trade_id
|
||||
}
|
||||
if(dialog.trades[ trade_id ]) then
|
||||
trade.player_gives = dialog.trades[ trade_id ].pay[1]
|
||||
@ -433,16 +461,18 @@ yl_speak_up.get_fs_trade_simple = function(player, trade_id)
|
||||
local npc_inv = minetest.get_inventory({type="detached", name="yl_speak_up_npc_"..tostring(trade.n_id)})
|
||||
|
||||
-- show edit button for the owner if in edit_mode
|
||||
if(yl_speak_up.may_edit_npc(player, trade.n_id)
|
||||
and (yl_speak_up.edit_mode[pname] == yl_speak_up.speak_to[pname].n_id)) then
|
||||
if(yl_speak_up.may_edit_npc(player, trade.n_id)) then
|
||||
-- for trades as part of the results/effects: allow edit
|
||||
if(not(trade.trade_is_trade_list)) then
|
||||
if(not(trade.trade_is_trade_list)
|
||||
and (yl_speak_up.edit_mode[pname] == yl_speak_up.speak_to[pname].n_id)) then
|
||||
formspec = formspec..
|
||||
"button[0.2,1.6;1.0,0.9;edit_trade_simple;Edit]"..
|
||||
"tooltip[edit_trade_simple;Edit this trade. You can do so only "..
|
||||
"if you can edit the NPC as such (i.e. own it).]"
|
||||
-- for trades in trade list: allow delete (new trades can easily be added)
|
||||
else
|
||||
-- allow delete for trades in trade list even if not in edit mode
|
||||
-- (entering edit mode for that would be too much work)
|
||||
elseif(trade.trade_is_trade_list) then
|
||||
-- TODO: make this button work
|
||||
formspec = formspec..
|
||||
"button[0.2,1.6;1.2,0.9;delete_trade_simple;Delete]"..
|
||||
@ -515,6 +545,7 @@ yl_speak_up.get_fs_trade_simple = function(player, trade_id)
|
||||
"button[0.2,0.0;2.0,0.9;back_to_trade_list;Back to list]"..
|
||||
"tooltip[back_to_trade_list;Click here once you've traded enough with this "..
|
||||
"NPC and want to get back to the trade list.]"
|
||||
-- TODO: offer button to show the edit options dialog if suitable
|
||||
end
|
||||
|
||||
return formspec..
|
||||
|
Loading…
Reference in New Issue
Block a user