Fix chests being of wrong team
This commit is contained in:
parent
0f57a53db5
commit
6a8e2bf0ea
1 changed files with 43 additions and 28 deletions
|
@ -47,18 +47,20 @@ local function get_is_player_pro(player)
|
||||||
end
|
end
|
||||||
|
|
||||||
local colors = {"red", "blue"}
|
local colors = {"red", "blue"}
|
||||||
for _, color in pairs(colors) do
|
local chest_name_to_team = {}
|
||||||
minetest.register_node("ctf_team_base:chest_" .. color, {
|
for _, chest_color in pairs(colors) do
|
||||||
|
chest_name_to_team["ctf_team_base:chest_" .. chest_color] = chest_color
|
||||||
|
minetest.register_node("ctf_team_base:chest_" .. chest_color, {
|
||||||
description = "Chest",
|
description = "Chest",
|
||||||
tiles = {
|
tiles = {
|
||||||
"default_chest_top_" .. color .. ".png",
|
"default_chest_top_" .. chest_color .. ".png",
|
||||||
"default_chest_top_" .. color .. ".png",
|
"default_chest_top_" .. chest_color .. ".png",
|
||||||
"default_chest_side_" .. color .. ".png",
|
"default_chest_side_" .. chest_color .. ".png",
|
||||||
"default_chest_side_" .. color .. ".png",
|
"default_chest_side_" .. chest_color .. ".png",
|
||||||
"default_chest_side_" .. color .. ".png",
|
"default_chest_side_" .. chest_color .. ".png",
|
||||||
"default_chest_front_" .. color .. ".png"},
|
"default_chest_front_" .. chest_color .. ".png"},
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {immortal = 1},
|
groups = {immortal = 1, team_chest=1},
|
||||||
legacy_facedir_simple = true,
|
legacy_facedir_simple = true,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
@ -70,13 +72,17 @@ for _, color in pairs(colors) do
|
||||||
inv:set_size("pro", 3*4)
|
inv:set_size("pro", 3*4)
|
||||||
end,
|
end,
|
||||||
on_rightclick = function(pos, node, player)
|
on_rightclick = function(pos, node, player)
|
||||||
local meta = minetest.get_meta(pos)
|
if chest_color ~= ctf.player(player:get_player_name()).team then
|
||||||
local owning_team = meta:get_string("owner_team")
|
minetest.chat_send_player(player:get_player_name(), "You're not on team " .. chest_color)
|
||||||
if owning_team ~= ctf.player(player:get_player_name()).team then
|
|
||||||
minetest.chat_send_player(player:get_player_name(), "You're not on team " .. owning_team)
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local territory_owner = ctf.get_territory_owner(pos)
|
||||||
|
if chest_color ~= territory_owner then
|
||||||
|
ctf.warning("ctf_team_base", "Wrong chest, changing to " .. territory_owner .. " from " .. chest_color)
|
||||||
|
minetest.set_node(pos, "ctf_team_base:chest_" .. territory_owner)
|
||||||
|
end
|
||||||
|
|
||||||
local chestinv = "nodemeta:" .. pos.x .. "," .. pos.y .. "," .. pos.z
|
local chestinv = "nodemeta:" .. pos.x .. "," .. pos.y .. "," .. pos.z
|
||||||
local is_pro = get_is_player_pro(player)
|
local is_pro = get_is_player_pro(player)
|
||||||
|
|
||||||
|
@ -111,9 +117,8 @@ for _, color in pairs(colors) do
|
||||||
allow_metadata_inventory_move = function(pos, from_list, from_index,
|
allow_metadata_inventory_move = function(pos, from_list, from_index,
|
||||||
to_list, to_index, count, player)
|
to_list, to_index, count, player)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local owning_team = meta:get_string("owner_team")
|
if chest_color ~= ctf.player(player:get_player_name()).team then
|
||||||
if owning_team ~= 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 " .. owning_team)
|
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -124,10 +129,8 @@ for _, color in pairs(colors) do
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
local meta = minetest.get_meta(pos)
|
if chest_color ~= ctf.player(player:get_player_name()).team then
|
||||||
local owning_team = meta:get_string("owner_team")
|
minetest.chat_send_player(player:get_player_name(), "You're not on team " .. chest_color)
|
||||||
if owning_team ~= ctf.player(player:get_player_name()).team then
|
|
||||||
minetest.chat_send_player(player:get_player_name(), "You're not on team " .. owning_team)
|
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -139,9 +142,8 @@ for _, color in pairs(colors) do
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local owning_team = meta:get_string("owner_team")
|
if chest_color ~= ctf.player(player:get_player_name()).team then
|
||||||
if owning_team ~= 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 " .. owning_team)
|
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -154,17 +156,32 @@ for _, color in pairs(colors) do
|
||||||
can_dig = function(pos, player)
|
can_dig = function(pos, player)
|
||||||
return false
|
return false
|
||||||
end,
|
end,
|
||||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
minetest.log("action", player:get_player_name() ..
|
minetest.log("action", player:get_player_name() ..
|
||||||
" moves " .. (stack:get_name() or "stuff") .. " " .. (stack:get_count() or 0) .. " to chest at " .. minetest.pos_to_string(pos))
|
" moves " .. (stack:get_name() or "stuff") .. " " .. (stack:get_count() or 0) .. " to chest at " .. minetest.pos_to_string(pos))
|
||||||
end,
|
end,
|
||||||
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||||
minetest.log("action", player:get_player_name() ..
|
minetest.log("action", player:get_player_name() ..
|
||||||
" takes " .. (stack:get_name() or "stuff") .. " " .. (stack:get_count() or 0) .. " from chest at " .. minetest.pos_to_string(pos))
|
" takes " .. (stack:get_name() or "stuff") .. " " .. (stack:get_count() or 0) .. " from chest at " .. minetest.pos_to_string(pos))
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
nodenames = {"group:team_chest"},
|
||||||
|
interval = 2, -- Run every 10 seconds
|
||||||
|
chance = 1, -- Select every 1 in 50 nodes
|
||||||
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
|
local current_owner = assert(chest_name_to_team[node.name])
|
||||||
|
|
||||||
|
local territory_owner = ctf.get_territory_owner(pos)
|
||||||
|
if territory_owner and current_owner ~= territory_owner then
|
||||||
|
ctf.warning("ctf_team_base", "Wrong chest, changing to " .. territory_owner .. " from " .. current_owner)
|
||||||
|
minetest.set_node(pos, "ctf_team_base:chest_" .. territory_owner)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_on_generated(function(minp, maxp, seed)
|
minetest.register_on_generated(function(minp, maxp, seed)
|
||||||
for tname, team in pairs(ctf.teams) do
|
for tname, team in pairs(ctf.teams) do
|
||||||
for _, flag in pairs(team.flags) do
|
for _, flag in pairs(team.flags) do
|
||||||
|
@ -206,9 +223,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
||||||
z = flag.z + dz
|
z = flag.z + dz
|
||||||
}
|
}
|
||||||
minetest.set_node(pos, chest)
|
minetest.set_node(pos, chest)
|
||||||
local meta = minetest.get_meta(pos)
|
local inv = minetest.get_meta(pos):get_inventory()
|
||||||
meta:set_string("owner_team", tname)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:add_item("main", ItemStack("default:cobble 99"))
|
inv:add_item("main", ItemStack("default:cobble 99"))
|
||||||
inv:add_item("main", ItemStack("default:cobble 99"))
|
inv:add_item("main", ItemStack("default:cobble 99"))
|
||||||
inv:add_item("main", ItemStack("default:cobble 99"))
|
inv:add_item("main", ItemStack("default:cobble 99"))
|
||||||
|
|
Loading…
Reference in a new issue