techage/power/protection.lua
2022-01-03 21:40:31 +01:00

72 lines
1.7 KiB
Lua

--[[
TechAge
=======
Copyright (C) 2019 Joachim Stolberg
AGPL v3
See LICENSE.txt for more information
TA3/TA4 Power line Protection
]]--
local M = minetest.get_meta
local S = techage.S
local RANGE = 8
local IsNodeUnderObservation = {}
-- Register all nodes, which should be protected by the "techage:power_pole"
function techage.register_powerline_node(name)
IsNodeUnderObservation[name] = true
end
local function powerpole_found(pos, name, range)
local pos1 = {x=pos.x-range, y=pos.y-range, z=pos.z-range}
local pos2 = {x=pos.x+range, y=pos.y+range, z=pos.z+range}
for _,npos in ipairs(minetest.find_nodes_in_area(pos1, pos2, {
"techage:power_pole", "techage:power_pole_conn",
"techage:power_pole2"})) do
if minetest.get_meta(npos):get_string("owner") ~= name then
return true
end
end
return false
end
local function is_protected(pos, name, range)
if minetest.check_player_privs(name, "powerline")
or not powerpole_found(pos, name, range) then
return false
end
return true
end
function techage.is_protected(pos, name)
return is_protected(pos, name, RANGE+3)
end
local old_is_protected = minetest.is_protected
function minetest.is_protected(pos, name)
local node = techage.get_node_lvm(pos)
if IsNodeUnderObservation[node.name] and is_protected(pos, name, RANGE) then
return true
end
return old_is_protected(pos, name)
end
minetest.register_privilege("powerline", {
description = S("Allow to dig/place Techage power lines nearby power poles"),
give_to_singleplayer = false,
give_to_admin = true,
})
techage.register_powerline_node("techage:power_line")
techage.register_powerline_node("techage:power_lineS")
techage.register_powerline_node("techage:power_lineA")
techage.register_powerline_node("techage:power_pole3")