58 lines
1.6 KiB
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 |