yl_speak_up/fs/fs_inventory.lua

79 lines
2.4 KiB
Lua

-- the player has closed the inventory formspec of the NPC - save it
yl_speak_up.input_inventory = function(player, formname, fields)
local pname = player:get_player_name()
local d_id = yl_speak_up.speak_to[pname].d_id
local n_id = yl_speak_up.speak_to[pname].n_id
-- after closing the inventory formspec:
-- ..save the (very probably) modified inventory
yl_speak_up.save_npc_inventory(n_id)
-- show inventory again?
if(fields.back_from_error_msg) then
yl_speak_up.show_fs(player, "inventory")
return
end
-- show the trade list?
if(fields.inventory_show_tradelist) then
yl_speak_up.show_fs(player, "trade_list")
return
end
-- ..and go back to the normal talk formspec
yl_speak_up.show_fs(player, "talk", {n_id = n_id, d_id = d_id})
end
-- access the inventory of the NPC (only possible for players with the right priv)
yl_speak_up.get_fs_inventory = function(player)
if(not(player)) then
return ""
end
local pname = player:get_player_name()
-- which NPC is the player talking to?
local n_id = yl_speak_up.speak_to[pname].n_id
local dialog = yl_speak_up.speak_to[pname].dialog
-- do we have all the necessary data?
if(not(n_id) or not(dialog.n_npc)) then
return "size[6,2]"..
"label[0.2,0.5;Ups! This NPC lacks ID or name.]"..
"button_exit[2,1.5;1,0.9;exit;Exit]"
end
-- only players which can edit this npc can see its inventory
if(not(yl_speak_up.may_edit_npc(player, n_id))) then
return "size[6,2]"..
"label[0.2,0.5;Sorry. You lack the privileges.]"..
"button_exit[2,1.5;1,0.9;exit;Exit]"
end
-- make sure the inventory of the NPC is loaded
yl_speak_up.load_npc_inventory(n_id, true, nil)
return table.concat({"size[12,11]",
"label[2,-0.2;Inventory of ",
minetest.formspec_escape(dialog.n_npc),
" (ID: ",
tostring(n_id),
"):]",
"list[detached:yl_speak_up_npc_",
tostring(n_id),
";npc_main;0,0.3;12,6;]",
"list[current_player;main;2,7.05;8,1;]",
"list[current_player;main;2,8.28;8,3;8]",
"listring[detached:yl_speak_up_npc_",
tostring(n_id),
";npc_main]",
"listring[current_player;main]",
"button[3.5,6.35;5,0.6;inventory_show_tradelist;Show trade list trades (player view)]",
"button[10.0,10.4;2,0.9;back_from_inventory;Back]"
}, "")
end
yl_speak_up.register_fs("inventory",
yl_speak_up.input_inventory,
yl_speak_up.get_fs_inventory,
-- this is a very classical formspec; it works far better with OLD fs;
-- force formspec version 1:
1
)