From 8cbceb9e4d50bf8bd840cacb2ba4d8a2ae21fd64 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Sat, 27 Jan 2018 18:45:52 +0000 Subject: [PATCH] Fix dropondie not taking map's initial stuff into account --- mods/ctf_map/give_initial_stuff.lua | 28 ++++++++++++++++---------- mods/dropondie/depends.txt | 1 + mods/dropondie/init.lua | 31 +++++++++++------------------ 3 files changed, 31 insertions(+), 29 deletions(-) diff --git a/mods/ctf_map/give_initial_stuff.lua b/mods/ctf_map/give_initial_stuff.lua index c8d9a21..14e4bbe 100644 --- a/mods/ctf_map/give_initial_stuff.lua +++ b/mods/ctf_map/give_initial_stuff.lua @@ -1,18 +1,26 @@ -function give_initial_stuff(player) - minetest.log("action", "Giving initial stuff to player "..player:get_player_name()) - local inv = player:get_inventory() - inv:set_list("main", {}) - inv:set_list("craft", {}) +give_initial_stuff = {} - local items = ctf_map.map and ctf_map.map.initial_stuff or { +setmetatable(give_initial_stuff, { + __call = function(self, player) + minetest.log("action", "Giving initial stuff to player "..player:get_player_name()) + local inv = player:get_inventory() + inv:set_list("main", {}) + inv:set_list("craft", {}) + + local items = give_initial_stuff.get_stuff() + + for _, item in pairs(items) do + inv:add_item("main", item) + end + end +}) + +function give_initial_stuff.get_stuff() + return ctf_map.map and ctf_map.map.initial_stuff or { "default:pick_wood", "default:sword_wood", "default:torch 3", } - - for _, item in pairs(items) do - inv:add_item("main", item) - end end minetest.register_on_joinplayer(function(player) diff --git a/mods/dropondie/depends.txt b/mods/dropondie/depends.txt index e69de29..11c8c81 100644 --- a/mods/dropondie/depends.txt +++ b/mods/dropondie/depends.txt @@ -0,0 +1 @@ +ctf_map diff --git a/mods/dropondie/init.lua b/mods/dropondie/init.lua index 46f919b..397034b 100644 --- a/mods/dropondie/init.lua +++ b/mods/dropondie/init.lua @@ -10,12 +10,7 @@ local function drop(pos, itemstack) for _, item in pairs(blacklist_drop) do if sname == item then - return - end - end - if sname == "default:torch" then - it:take_item(3) - if it:get_count() <= 0 then + minetest.log("error", "Not dropping " .. item) return end end @@ -34,25 +29,23 @@ local function drop(pos, itemstack) return itemstack end -local function drop_all(player) - if minetest.setting_getbool("creative_mode") then - return +local function drop_list(pos, inv, list) + for i = 1, inv:get_size(list) do + drop(pos, inv:get_stack(list, i)) + inv:set_stack(list, i, nil) end +end +local function drop_all(player) local pos = player:getpos() pos.y = math.floor(pos.y + 0.5) - local player_inv = player:get_inventory() - - for i=1,player_inv:get_size("main") do - drop(pos, player_inv:get_stack("main", i)) - player_inv:set_stack("main", i, nil) - end - - for i=1,player_inv:get_size("craft") do - drop(pos, player_inv:get_stack("craft", i)) - player_inv:set_stack("craft", i, nil) + local inv = player:get_inventory() + for _, item in pairs(give_initial_stuff.get_stuff()) do + inv:remove_item("main", ItemStack(item)) end + drop_list(pos, inv, "main") + drop_list(pos, inv, "craft") end minetest.register_on_dieplayer(drop_all)