skywars/_map_handler/map_utils.lua

58 lines
1.6 KiB
Lua

function skywars.kill_players_out_map(arena)
for pl_name in pairs(arena.players) do
local player = minetest.get_player_by_name(pl_name)
local pl_pos = player:get_pos()
local map_area = VoxelArea:new{MinEdge = arena.min_pos, MaxEdge = arena.max_pos}
if map_area:contains(pl_pos.x, pl_pos.y, pl_pos.z) == false then
player:set_hp(0)
end
end
end
function skywars.load_mapblocks(arena)
minetest.load_area(arena.min_pos, arena.max_pos)
minetest.emerge_area(arena.min_pos, arena.max_pos)
end
minetest.register_node("skywars:barrier", {
description = "Unbreakable transparent node",
drawtype = "airlike",
paramtype = "light",
sunlight_propagates = true,
air_equivalent = true,
drop = "",
inventory_image = "sw_node_barrier.png",
wield_image = "sw_node_barrier.png",
groups = {oddly_breakable_by_hand = 2},
can_dig = function(pos, player)
if minetest.get_player_privs(player:get_player_name()).skywars_admin then
return true
end
return false
end
})
function skywars.iterate_area_nodes(min_pos, max_pos, func)
for x = 1, max_pos.x - min_pos.x do
for y = 1, max_pos.y - min_pos.y do
for z = 1, max_pos.z - min_pos.z do
local node_pos = {
x = min_pos.x+x,
y = min_pos.y+y,
z = min_pos.z+z
}
local node = minetest.get_node(node_pos)
local func_result = func(node, node_pos)
if func_result then return func_result end
end
end
end
end