diff --git a/inventory.lua b/inventory.lua index 6fae10b..1fc6aae 100644 --- a/inventory.lua +++ b/inventory.lua @@ -9,6 +9,25 @@ yl_speak_up.get_inventory_save_path = function(n_id) end +-- check if stack contains any metadata; return true if it does +-- (trade_simple does not allow used items or those with metadata) +yl_speak_up.check_stack_has_meta = function(player, stack) + local meta = stack:get_meta() + for k, v in pairs(meta:to_table()) do + -- the name "fields" is allowed - as long as it is empty + if(k ~= "fields") then + return true + end + for k2, v2 in pairs(v) do + if(k2) then + return true + end + end + end + return false +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 @@ -95,23 +114,11 @@ yl_speak_up.load_npc_inventory = function(n_id) return 0 end -- items with metadata cannot be traded - local meta = stack:get_meta() - for k, v in pairs(meta:to_table()) do - if(k ~= "fields") then - minetest.chat_send_player(player:get_player_name(), - "Your NPC cannot sell items that contain ".. - "additional (meta-) data.") - return 0 - else - for k2, v2 in pairs(v) do - if(k2) then - minetest.chat_send_player(player:get_player_name(), - "Your NPC cannot sell items that contain ".. - "additional (meta-) data.") - return 0 - end - end - end + if(yl_speak_up.check_stack_has_meta(player, stack)) then + minetest.chat_send_player(player:get_player_name(), + "Your NPC cannot sell items that contain ".. + "additional (meta-) data.") + return 0 end return stack:get_count() end,