Skip to content
This repository has been archived by the owner on Aug 20, 2020. It is now read-only.

Commit

Permalink
Added 'vacuum' feature to manage the items' graveyard
Browse files Browse the repository at this point in the history
 - Added a refresh function to retrieve confiscated items from the items' graveyard
  • Loading branch information
Lymkwi committed Aug 1, 2015
1 parent 55bd0ea commit 23f1f65
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 7 deletions.
35 changes: 28 additions & 7 deletions mods/pclasses/api.lua
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ function pclasses.api.set_player_class(pname, cname)
end
pclasses.data.players[pname] = cname
pclasses.api.get_class_by_name(cname).on_assigned(pname)
pclasses.api.vacuum_graveyard(minetest.get_player_by_name(pname))
end
return true
end
Expand All @@ -76,6 +77,32 @@ pclasses.api.util.does_wear_full_armor = function(pname, material, noshield)
return full_armor and (inv:contains_item("armor", "shields:shield_" .. material) or noshield)
end

function pclasses.api.util.can_have_item(pname, itemname)
if not pclasses.data.reserved_items[itemname] then
return true
end
for index, class in pairs(pclasses.data.reserved_items[itemname]) do
if pclasses.api.get_player_class(pname) == class then
return true
end
end
return false
end

-- TEMPORARY CLASS SHIFT SYSTEM
-- Used to test on local servers
--

minetest.register_privilege("class_shifter", "Able to shift between classes")

minetest.register_chatcommand("shift_class", {
args = "<class>",
privs = {class_shifter = true},
func = function(name, param)
pclasses.api.set_player_class(name, param)
end
})

-------------------
-- Reserved items
--
Expand All @@ -96,13 +123,7 @@ local function tick()
for i = 1, inv:get_size("main") do
local stack = inv:get_stack("main", i)
if pclasses.data.reserved_items[stack:get_name()] then
local drop_stack = true
for index, class in pairs(pclasses.data.reserved_items[stack:get_name()]) do
if pclasses.api.get_player_class(name) == class then
drop_stack = false
end
end
if drop_stack then
if not pclasses.api.util.can_have_item(name, stack:get_name()) then
inv:set_stack("main", i, "")
local grave_inv = minetest.get_inventory({type = "detached", name = name .. "_graveyard"})
if grave_inv:room_for_item("graveyard", stack) then
Expand Down
19 changes: 19 additions & 0 deletions mods/pclasses/inventory.lua
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,22 @@ unified_inventory.register_page("graveyard", {
end
})

function pclasses.api.vacuum_graveyard(player)
local pname = player:get_player_name()
local grave_inv = minetest.get_inventory({type = "detached", name = pname .. "_graveyard"})
local player_inv = minetest.get_inventory({type = "player", name = pname})

for i = 1,7*8 do
local stack = grave_inv:get_stack("graveyard", i)
if pclasses.api.util.can_have_item(pname, stack:get_name()) then
grave_inv:set_stack("graveyard", i, nil)
player_inv:set_stack("graveyard", i, nil)
if player_inv:room_for_item("main", stack) then
player_inv:add_item("main", stack)
else
minetest.add_item(pos, stack)
end
end
end
end

0 comments on commit 23f1f65

Please sign in to comment.