forked from Sokomine/yl_speak_up
always give items back when storing a trade; changed trade_id for trade list for better sorting; fixed bug with trade.trade_is_trade_list for storing temporal trade list
This commit is contained in:
parent
3f80589e3e
commit
735553a937
@ -30,6 +30,14 @@ yl_speak_up.input_do_trade_simple = function(player, formname, fields)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- a new trade has been stored - show it
|
||||||
|
if(fields.trade_simple_stored) then
|
||||||
|
minetest.show_formspec(pname, "yl_speak_up:do_trade_simple",
|
||||||
|
yl_speak_up.get_fs_trade_simple(player,
|
||||||
|
yl_speak_up.speak_to[pname].trade_id))
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
-- delete a trade; this can be done here only if..
|
-- 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)
|
-- * it is a trade from the trade list (not an effect of a dialog option)
|
||||||
-- * the player has the necessary privs
|
-- * the player has the necessary privs
|
||||||
@ -79,7 +87,7 @@ yl_speak_up.input_do_trade_simple = function(player, formname, fields)
|
|||||||
-- show the edit trade formspec
|
-- show the edit trade formspec
|
||||||
if(fields.edit_trade_simple) then
|
if(fields.edit_trade_simple) then
|
||||||
minetest.show_formspec(pname, "yl_speak_up:add_trade_simple",
|
minetest.show_formspec(pname, "yl_speak_up:add_trade_simple",
|
||||||
yl_speak_up.get_fs_trade_simple(player))
|
yl_speak_up.get_fs_add_trade_simple(player))
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -168,6 +176,23 @@ yl_speak_up.get_fs_add_trade_simple = function(player, trade_id)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- when closing the yl_speak_up.get_fs_add_trade_simple formspec:
|
||||||
|
-- give the items back to the player (he took them from his inventory and
|
||||||
|
-- had no real chance to put them elsewhere - so there really ought to be
|
||||||
|
-- room enough)
|
||||||
|
yl_speak_up.add_trade_simple_return_items = function(player, trade_inv, pay, buy)
|
||||||
|
local player_inv = player:get_inventory()
|
||||||
|
if( pay and player_inv:room_for_item("main", pay)) then
|
||||||
|
player_inv:add_item("main", pay)
|
||||||
|
trade_inv:set_stack("setup", 1, "")
|
||||||
|
end
|
||||||
|
if( buy and player_inv:room_for_item("main", buy)) then
|
||||||
|
player_inv:add_item("main", buy)
|
||||||
|
trade_inv:set_stack("setup", 2, "")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- the player wants to add a simple trade; handle formspec input
|
-- the player wants to add a simple trade; handle formspec input
|
||||||
-- possible inputs:
|
-- possible inputs:
|
||||||
-- fields.back_from_error_msg show this formspec here again
|
-- fields.back_from_error_msg show this formspec here again
|
||||||
@ -194,11 +219,21 @@ yl_speak_up.input_add_trade_simple = function(player, formname, fields)
|
|||||||
-- which trade are we talking about?
|
-- which trade are we talking about?
|
||||||
local trade_id = yl_speak_up.speak_to[pname].trade_id
|
local trade_id = yl_speak_up.speak_to[pname].trade_id
|
||||||
|
|
||||||
|
-- this also contains the inventory list "setup" where the player placed the items
|
||||||
|
local trade_inv = minetest.get_inventory({type="detached", name="yl_speak_up_player_"..pname})
|
||||||
|
|
||||||
|
-- fields.abort_trade_simple can be ignored as it is similar to ESC
|
||||||
|
|
||||||
|
local pay = trade_inv:get_stack("setup", 1)
|
||||||
|
local buy = trade_inv:get_stack("setup", 2)
|
||||||
|
|
||||||
-- clicking on abort here when adding a new trade via the trade list
|
-- clicking on abort here when adding a new trade via the trade list
|
||||||
-- goes back to the trade list (does not require special privs)
|
-- goes back to the trade list (does not require special privs)
|
||||||
if(fields.abort_trade_simple and trade_id == "new") then
|
if(fields.abort_trade_simple and trade_id == "new") then
|
||||||
-- we are no longer doing a particular trade
|
-- we are no longer doing a particular trade
|
||||||
yl_speak_up.speak_to[pname].trade_id = nil
|
yl_speak_up.speak_to[pname].trade_id = nil
|
||||||
|
-- return the items (setting up the trade was aborted)
|
||||||
|
yl_speak_up.add_trade_simple_return_items(player, trade_inv, pay, buy)
|
||||||
-- ..else go back to the edit options formspec
|
-- ..else go back to the edit options formspec
|
||||||
minetest.show_formspec(pname, "yl_speak_up:trade_list",
|
minetest.show_formspec(pname, "yl_speak_up:trade_list",
|
||||||
yl_speak_up.get_fs_trade_list(player))
|
yl_speak_up.get_fs_trade_list(player))
|
||||||
@ -218,17 +253,11 @@ yl_speak_up.input_add_trade_simple = function(player, formname, fields)
|
|||||||
-- exception: when adding a new trade via the trade list
|
-- exception: when adding a new trade via the trade list
|
||||||
-- (that is allowed without having to be in edit mode)
|
-- (that is allowed without having to be in edit mode)
|
||||||
and not(trade_id == "new" and yl_speak_up.may_edit_npc(player, n_id))) then
|
and not(trade_id == "new" and yl_speak_up.may_edit_npc(player, n_id))) then
|
||||||
|
-- return the items (setting up the trade was aborted)
|
||||||
|
yl_speak_up.add_trade_simple_return_items(player, trade_inv, pay, buy)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- this also contains the inventory list "setup" where the player placed the items
|
|
||||||
local trade_inv = minetest.get_inventory({type="detached", name="yl_speak_up_player_"..pname})
|
|
||||||
|
|
||||||
-- fields.abort_trade_simple can be ignored as it is similar to ESC
|
|
||||||
|
|
||||||
local pay = trade_inv:get_stack("setup", 1)
|
|
||||||
local buy = trade_inv:get_stack("setup", 2)
|
|
||||||
|
|
||||||
-- store the new trade
|
-- store the new trade
|
||||||
if(fields.store_trade_simple) then
|
if(fields.store_trade_simple) then
|
||||||
local error_msg = ""
|
local error_msg = ""
|
||||||
@ -253,12 +282,18 @@ yl_speak_up.input_add_trade_simple = function(player, formname, fields)
|
|||||||
local bs = buy:get_name().." "..tostring(buy:get_count())
|
local bs = buy:get_name().." "..tostring(buy:get_count())
|
||||||
local r_id = "?"
|
local r_id = "?"
|
||||||
|
|
||||||
|
if(not(dialog.trades)) then
|
||||||
|
dialog.trades = {}
|
||||||
|
end
|
||||||
-- is this a trade attached to the trade list?
|
-- is this a trade attached to the trade list?
|
||||||
-- or do we have to create a new trade ID?
|
-- or do we have to create a new trade ID?
|
||||||
if(trade_id == "new") then
|
if(trade_id == "new") then
|
||||||
-- if the player adds the same trade again, the ID is reused; other
|
-- if the player adds the same trade again, the ID is reused; other
|
||||||
-- than that, the ID is uniq
|
-- than that, the ID is uniq
|
||||||
trade_id = "trade "..ps.." for "..bs
|
-- (the ID is formed so that we can later easily sort the offers by
|
||||||
|
-- the name of the buy stack - which is more helpful for the player
|
||||||
|
-- than sorting by the pay stack)
|
||||||
|
trade_id = "sell "..bs.." for "..ps
|
||||||
-- log the change
|
-- log the change
|
||||||
yl_speak_up.log_change(pname, n_id,
|
yl_speak_up.log_change(pname, n_id,
|
||||||
"Trade: Added offer "..tostring(trade_id)..".")
|
"Trade: Added offer "..tostring(trade_id)..".")
|
||||||
@ -312,20 +347,12 @@ yl_speak_up.input_add_trade_simple = function(player, formname, fields)
|
|||||||
-- do not return yet - the items still need to be given back!
|
-- do not return yet - the items still need to be given back!
|
||||||
end
|
end
|
||||||
|
|
||||||
-- give the items back to the player (he took them from his inventory and had no
|
-- return the items after successful setup
|
||||||
-- real chance to put them elsewhere - so there really ought to be room enough)
|
yl_speak_up.add_trade_simple_return_items(player, trade_inv, pay, buy)
|
||||||
local player_inv = player:get_inventory()
|
|
||||||
if( player_inv:room_for_item("main", pay)) then
|
|
||||||
player_inv:add_item("main", pay)
|
|
||||||
trade_inv:set_stack("setup", 1, "")
|
|
||||||
end
|
|
||||||
if( player_inv:room_for_item("main", buy)) then
|
|
||||||
player_inv:add_item("main", buy)
|
|
||||||
trade_inv:set_stack("setup", 2, "")
|
|
||||||
end
|
|
||||||
|
|
||||||
local dialog = yl_speak_up.speak_to[pname].dialog
|
local dialog = yl_speak_up.speak_to[pname].dialog
|
||||||
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) then
|
||||||
|
yl_speak_up.speak_to[pname].trade_id = trade_id
|
||||||
-- tell the player that the new trade has been added
|
-- tell the player that the new trade has been added
|
||||||
minetest.show_formspec(pname, "yl_speak_up:do_trade_simple",
|
minetest.show_formspec(pname, "yl_speak_up:do_trade_simple",
|
||||||
"size[6,2]"..
|
"size[6,2]"..
|
||||||
@ -338,7 +365,6 @@ yl_speak_up.input_add_trade_simple = function(player, formname, fields)
|
|||||||
-- ..else go back to the edit options formspec
|
-- ..else go back to the edit options formspec
|
||||||
minetest.show_formspec(pname, "yl_speak_up:trade_list",
|
minetest.show_formspec(pname, "yl_speak_up:trade_list",
|
||||||
yl_speak_up.get_fs_trade_list(player))
|
yl_speak_up.get_fs_trade_list(player))
|
||||||
return
|
|
||||||
else
|
else
|
||||||
-- we are no longer trading
|
-- we are no longer trading
|
||||||
yl_speak_up.speak_to[pname].trade_id = nil
|
yl_speak_up.speak_to[pname].trade_id = nil
|
||||||
@ -464,6 +490,7 @@ yl_speak_up.get_fs_trade_simple = function(player, trade_id)
|
|||||||
if(dialog.trades[ trade_id ]) then
|
if(dialog.trades[ trade_id ]) then
|
||||||
trade.player_gives = dialog.trades[ trade_id ].pay[1]
|
trade.player_gives = dialog.trades[ trade_id ].pay[1]
|
||||||
trade.npc_gives = dialog.trades[ trade_id ].buy[1]
|
trade.npc_gives = dialog.trades[ trade_id ].buy[1]
|
||||||
|
trade.trade_is_trade_list = not(dialog.trades[ trade_id ].d_id)
|
||||||
else
|
else
|
||||||
trade.edit_trade = true
|
trade.edit_trade = true
|
||||||
end
|
end
|
||||||
@ -504,16 +531,24 @@ yl_speak_up.get_fs_trade_simple = function(player, trade_id)
|
|||||||
"button[0.2,1.6;1.0,0.9;edit_trade_simple;Edit]"..
|
"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 "..
|
"tooltip[edit_trade_simple;Edit this trade. You can do so only "..
|
||||||
"if you can edit the NPC as such (i.e. own it).]"
|
"if you can edit the NPC as such (i.e. own it).]"
|
||||||
|
-- TODO offer button to show the edit options dialog if suitable
|
||||||
|
-- formspec = formspec..
|
||||||
|
-- "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.]"
|
||||||
|
|
||||||
-- for trades in trade list: allow delete (new trades can easily be added)
|
-- for trades in trade list: allow delete (new trades can easily be added)
|
||||||
-- allow delete for trades in trade list even if not in edit mode
|
-- allow delete for trades in trade list even if not in edit mode
|
||||||
-- (entering edit mode for that would be too much work)
|
-- (entering edit mode for that would be too much work)
|
||||||
elseif(trade.trade_is_trade_list) then
|
elseif(trade.trade_is_trade_list) then
|
||||||
-- TODO: make this button work
|
|
||||||
formspec = formspec..
|
formspec = formspec..
|
||||||
"button[0.2,1.6;1.2,0.9;delete_trade_simple;Delete]"..
|
"button[0.2,1.6;1.2,0.9;delete_trade_simple;Delete]"..
|
||||||
"tooltip[delete_trade_simple;Delete this trade. You can do so only "..
|
"tooltip[delete_trade_simple;Delete this trade. You can do so only "..
|
||||||
"if you can edit the NPC as such (i.e. own it).]"
|
"if you can edit the NPC as such (i.e. own it).]"
|
||||||
end
|
end
|
||||||
|
-- TODO: just for debugging
|
||||||
|
formspec = formspec..
|
||||||
|
"label[0.0,-0.3;"..tostring(trade_id).." trade_is_trade_list: "..tostring(trade.trade_is_trade_list).."]"
|
||||||
end
|
end
|
||||||
|
|
||||||
local trade_possible_msg = "Status of trade: Unknown."
|
local trade_possible_msg = "Status of trade: Unknown."
|
||||||
@ -575,12 +610,9 @@ yl_speak_up.get_fs_trade_simple = function(player, trade_id)
|
|||||||
"NPC and want to get back to talking.]"
|
"NPC and want to get back to talking.]"
|
||||||
else
|
else
|
||||||
-- go back to the trade list
|
-- go back to the trade list
|
||||||
-- TODO: make this button work
|
formspec = formspec.. "button[0.2,0.0;2.0,0.9;back_to_trade_list;Back to list]"..
|
||||||
formspec = formspec..
|
|
||||||
"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 "..
|
"tooltip[back_to_trade_list;Click here once you've traded enough with this "..
|
||||||
"NPC and want to get back to the trade list.]"
|
"NPC and want to get back to the trade list.]"
|
||||||
-- TODO: offer button to show the edit options dialog if suitable
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return formspec..
|
return formspec..
|
||||||
|
Loading…
Reference in New Issue
Block a user