1
0
mirror of https://github.com/sys4-fr/server-nalc.git synced 2025-07-06 10:00:22 +02:00

Updated pclasses

- Moved the holographic item's name as a field in switch_params (pclasses.api.register_class)
 - Added wizard class' skeleton for later
 - Fixed a few bugs in nodes, inventory and api
 - Splitted tick function to bury items in two
 - Items from 3d_armor's armor inventory are also affected by inventory vacuuming (from tick function).
   The player's static armor inventory is first cleared, then copied to the detached one, then armor updates everything else (rendering, model, etc)
 - Fixed itemname of admin shield to reserve it properly
 - Return graveyard inventory if it already exists. Do not create it every two seconds
This commit is contained in:
LeMagnesium
2015-08-20 17:11:46 +02:00
parent 837e25bc13
commit 743507564f
11 changed files with 120 additions and 55 deletions

View File

@ -116,27 +116,41 @@ end
-- Determination and reserved items tick --
-------------------------------------------
local function tick()
for id, ref in ipairs(minetest.get_connected_players()) do
local name = ref:get_player_name()
local inv = minetest.get_inventory({type="player", name = name})
for i = 1, inv:get_size("main") do
local stack = inv:get_stack("main", i)
if pclasses.data.reserved_items[stack:get_name()] then
if not pclasses.api.util.can_have_item(name, stack:get_name()) then
inv:set_stack("main", i, "")
local grave_inv = pclasses.api.create_graveyard_inventory(ref)
if grave_inv and grave_inv:room_for_item("graveyard", stack) then
grave_inv:add_item("graveyard", stack)
inv:add_item("graveyard", stack)
-- ^ Because add_item doesn't trigger on_put, nonsense
else
minetest.add_item(ref:getpos(), stack)
end
local function vacuum_inventory(name, inv, invname)
local ref = minetest.get_player_by_name(name)
for i = 1, inv:get_size(invname) do
local stack = inv:get_stack(invname, i)
if pclasses.data.reserved_items[stack:get_name()] then
if not pclasses.api.util.can_have_item(name, stack:get_name()) then
inv:set_stack(invname, i, "")
local grave_inv = pclasses.api.create_graveyard_inventory(ref)
if grave_inv and grave_inv:room_for_item("graveyard", stack) then
grave_inv:add_item("graveyard", stack)
inv:add_item("graveyard", stack)
-- ^ Because add_item doesn't trigger on_put, nonsense
else
minetest.add_item(ref:getpos(), stack)
end
end
end
end
end
local function tick()
for id, ref in ipairs(minetest.get_connected_players()) do
local name = ref:get_player_name()
local armor_inv = minetest.get_inventory({type = "detached", name = name .. "_armor"})
local inv = ref:get_inventory()
vacuum_inventory(name, inv, "main")
vacuum_inventory(name, inv, "armor")
-- Hack the hack
for i = 1, armor_inv:get_size("armor") do
armor_inv:set_stack("armor", i, inv:get_stack("armor", i))
end
armor:set_player_armor(ref)
armor:update_inventory(ref)
end
minetest.after(2, tick)
end