Fix team-chest shift-click
This commit is contained in:
parent
904c47dea2
commit
8b41008bc1
1 changed files with 40 additions and 5 deletions
|
@ -43,6 +43,7 @@ for _, chest_color in pairs(colors) do
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
inv:set_size("main", 5*4)
|
inv:set_size("main", 5*4)
|
||||||
inv:set_size("pro", 3*4)
|
inv:set_size("pro", 3*4)
|
||||||
|
inv:set_size("helper", 1*1)
|
||||||
end,
|
end,
|
||||||
on_rightclick = function(pos, node, player)
|
on_rightclick = function(pos, node, player)
|
||||||
if chest_color ~= ctf.player(player:get_player_name()).team then
|
if chest_color ~= ctf.player(player:get_player_name()).team then
|
||||||
|
@ -90,15 +91,16 @@ for _, chest_color in pairs(colors) do
|
||||||
"list[" .. chestinv .. ";pro;5,0.3;3,4;]"
|
"list[" .. chestinv .. ";pro;5,0.3;3,4;]"
|
||||||
|
|
||||||
if is_pro then
|
if is_pro then
|
||||||
formspec = formspec .. "listring[current_name;pro]" ..
|
formspec = formspec .. "listring[" .. chestinv ..";pro]" ..
|
||||||
|
"listring[" .. chestinv .. ";helper]" ..
|
||||||
"label[5,-0.2;" .. minetest.formspec_escape("Pro players only (1k+ score, 1.5+ KD)") .. "]"
|
"label[5,-0.2;" .. minetest.formspec_escape("Pro players only (1k+ score, 1.5+ KD)") .. "]"
|
||||||
else
|
else
|
||||||
formspec = formspec .. "listring[current_name;pro]" ..
|
formspec = formspec ..
|
||||||
"label[5,-0.2;" .. minetest.formspec_escape("You need 1k+ score and 1.5+ KD") .. "]"
|
"label[5,-0.2;" .. minetest.formspec_escape("You need 1k+ score and 1.5+ KD") .. "]"
|
||||||
end
|
end
|
||||||
|
|
||||||
formspec = formspec ..
|
formspec = formspec ..
|
||||||
"listring[current_name;main]" ..
|
"listring[" .. chestinv ..";main]" ..
|
||||||
"listring[current_player;main]" ..
|
"listring[current_player;main]" ..
|
||||||
default.get_hotbar_bg(0,4.85)
|
default.get_hotbar_bg(0,4.85)
|
||||||
|
|
||||||
|
@ -118,12 +120,30 @@ for _, chest_color in pairs(colors) do
|
||||||
end
|
end
|
||||||
|
|
||||||
if (from_list ~= "pro" and to_list ~= "pro") or get_is_player_pro(pstat) then
|
if (from_list ~= "pro" and to_list ~= "pro") or get_is_player_pro(pstat) then
|
||||||
return count
|
if to_list == "helper" then
|
||||||
|
-- handle move & overflow
|
||||||
|
local chestinv = minetest.get_inventory({type = "node", pos = pos})
|
||||||
|
local playerinv = player:get_inventory()
|
||||||
|
local stack = chestinv:get_stack(from_list, from_index)
|
||||||
|
local leftover = playerinv:add_item("main", stack)
|
||||||
|
local n_stack = stack
|
||||||
|
n_stack:set_count(stack:get_count() - leftover:get_count())
|
||||||
|
chestinv:remove_item("helper", stack)
|
||||||
|
chestinv:remove_item("pro", n_stack)
|
||||||
|
return 0
|
||||||
|
elseif from_list == "helper" then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return count
|
||||||
|
end
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
|
if listname == "helper" then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
if chest_color ~= ctf.player(player:get_player_name()).team then
|
if chest_color ~= ctf.player(player:get_player_name()).team then
|
||||||
minetest.chat_send_player(player:get_player_name(), "You're not on team " .. chest_color)
|
minetest.chat_send_player(player:get_player_name(), "You're not on team " .. chest_color)
|
||||||
return 0
|
return 0
|
||||||
|
@ -141,12 +161,27 @@ for _, chest_color in pairs(colors) do
|
||||||
end
|
end
|
||||||
|
|
||||||
if listname ~= "pro" or get_is_player_pro(pstat) then
|
if listname ~= "pro" or get_is_player_pro(pstat) then
|
||||||
return stack:get_count()
|
local chestinv = minetest.get_inventory({type = "node", pos = pos})
|
||||||
|
if chestinv:room_for_item("pro", stack) then
|
||||||
|
return stack:get_count()
|
||||||
|
else
|
||||||
|
-- handle overflow
|
||||||
|
local playerinv = player:get_inventory()
|
||||||
|
local leftovers = chestinv:add_item("pro", stack)
|
||||||
|
local leftover = chestinv:add_item("main", leftovers)
|
||||||
|
local n_stack = stack
|
||||||
|
n_stack:set_count(stack:get_count() - leftover:get_count())
|
||||||
|
playerinv:remove_item("main", n_stack)
|
||||||
|
return 0
|
||||||
|
end
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||||
|
if listname == "helper" then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
if chest_color ~= ctf.player(player:get_player_name()).team then
|
if chest_color ~= ctf.player(player:get_player_name()).team then
|
||||||
minetest.chat_send_player(player:get_player_name(), "You're not on team " .. chest_color)
|
minetest.chat_send_player(player:get_player_name(), "You're not on team " .. chest_color)
|
||||||
return 0
|
return 0
|
||||||
|
|
Loading…
Reference in a new issue