From b93bd0e00abbe31eb77e36c93557459bf82fd298 Mon Sep 17 00:00:00 2001 From: LeMagnesium Date: Wed, 29 Apr 2015 12:01:16 +0200 Subject: [PATCH] Amulets/runes' inventory created with load and save features - Added texture for the inventory's background to be customized later, adding copies of our textures in each slot - Added unified_inventory as a dependency for runes - Added inventory for runes and amulets and its handler --- mods/runes/api.lua | 85 ++++++++++++++++++- mods/runes/depends.txt | 1 + mods/runes/textures/runes_rune_inventory.png | Bin 0 -> 7490 bytes 3 files changed, 85 insertions(+), 1 deletion(-) create mode 100755 mods/runes/textures/runes_rune_inventory.png diff --git a/mods/runes/api.lua b/mods/runes/api.lua index 6ef36bdf..2c7470b7 100644 --- a/mods/runes/api.lua +++ b/mods/runes/api.lua @@ -205,8 +205,91 @@ runes.functions.register_amulet = function(name, desc, maxcount, manadiff) minetest.register_craftitem("runes:" .. name .. "_amulet", { description = desc, inventory_image = "runes_" .. name .. "_amulet.png", - groups = {amulet = 1}, + groups = {amulet = 1, rune = 1}, stack_max = maxcount, }) runes.datas.amulets[name] = manadiff end + +-- Inventory + +unified_inventory.register_button("runes", { + type = "image", + image = "runes_heal_major.png", +}) +unified_inventory.register_page("runes", { + get_formspec = function(player) + local name = player:get_player_name() + local formspec = "background[0,0.2;8,4;runes_rune_inventory.png]".. + "background[0,4.5;8,4;ui_wooden_chest_inventory.png]".. + "size[8,10]".. + "list[detached:"..name.."_runes;runes;0,0.2;8,4;]" + return {formspec=formspec} + end, +}) + +runes.functions.register_detached_inventory = function(player) + local name = player:get_player_name() + local player_inv = player:get_inventory() + local datafile = io.open(minetest.get_worldpath().."/runes/"..name.."_rune.inv", "r") + local rune_inv_data = {} + if datafile then + local line = datafile:read() + if line then + rune_inv_data = minetest.deserialize(line) + end + io.close(datafile) + end + local rune_inv = minetest.create_detached_inventory(name.."_runes",{ + on_put = function(inv, listname, index, stack, player) + player:get_inventory():set_stack(listname, index, stack) + armor:set_player_armor(player) + armor:update_inventory(player) + end, + on_take = function(inv, listname, index, stack, player) + player:get_inventory():set_stack(listname, index, nil) + armor:set_player_armor(player) + armor:update_inventory(player) + end, + allow_put = function(inv, listname, index, stack, player) + if minetest.get_item_group(stack:get_name(), "rune") > 0 then + return stack:get_count() + end + return 0 + end, + allow_take = function(inv, listname, index, stack, player) + return stack:get_count() + end, + allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) + return count + end, + }) + rune_inv:set_size("runes", 8*4) + rune_inv:set_list("runes",rune_inv_data) + minetest.log("action","[runes] Rune inventory loaded for player " .. name) +end + +minetest.register_on_joinplayer(runes.functions.register_detached_inventory) + +runes.functions.save_detached_inventory = function(player) + local name = player:get_player_name() + local player_inv = player:get_inventory() + local datafile = io.open(minetest.get_worldpath().."/runes/"..name.."_rune.inv", "w") + local rune_inv_data = minetest.get_inventory({type = "detached", name=name.."_runes"}) + local translated_rune_data = {} + for index, data in pairs(rune_inv_data:get_list("runes")) do + translated_rune_data[index] = data:get_name() .. " " .. data:get_count() + end + if datafile then + datafile:write(minetest.serialize(translated_rune_data)) + end + io.close(datafile) + minetest.log("action", "[runes] Rune inventory saved for player " .. name) +end + +minetest.register_on_leaveplayer(runes.functions.save_detached_inventory) +minetest.register_on_shutdown(function() + for index, player in pairs(minetest.get_connected_players()) do + runes.functions.save_detached_inventory(player) + end +end) diff --git a/mods/runes/depends.txt b/mods/runes/depends.txt index 49bb81b0..66340fe7 100644 --- a/mods/runes/depends.txt +++ b/mods/runes/depends.txt @@ -1,2 +1,3 @@ default +unified_inventory mana diff --git a/mods/runes/textures/runes_rune_inventory.png b/mods/runes/textures/runes_rune_inventory.png new file mode 100755 index 0000000000000000000000000000000000000000..145d9d2230834dc48b93bdfd708fad790ac5e82c GIT binary patch literal 7490 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 literal 0 HcmV?d00001