2016-06-12 11:30:32 -07:00
-- adds event handler for attempt to dig in protected area
-- tries to activate specially configured nearby distributor at points with coordinates of form 20i, registers dig attempts in radius 10 around
-- distributor must have first target filter set to 0 ( disabled ) to handle dig events
local old_is_protected = minetest.is_protected
2016-06-14 00:47:49 -07:00
local round = math.floor ;
2018-10-31 09:13:05 -07:00
local machines_TTL = basic_machines.machines_TTL or 16
2016-06-12 11:30:32 -07:00
function minetest . is_protected ( pos , digger )
local is_protected = old_is_protected ( pos , digger ) ;
if is_protected then -- only if protected
2016-06-14 00:41:47 -07:00
local r = 20 ; local p = { x = round ( pos.x / r + 0.5 ) * r , y = round ( pos.y / r + 0.5 ) * r + 1 , z = round ( pos.z / r + 0.5 ) * r }
2016-06-12 11:30:32 -07:00
if minetest.get_node ( p ) . name == " basic_machines:distributor " then -- attempt to activate distributor at special grid location: coordinates of the form 10+20*i
local meta = minetest.get_meta ( p ) ;
if meta : get_int ( " active1 " ) == 0 then -- first output is disabled, indicating ready to be used as event handler
if meta : get_int ( " x1 " ) ~= 0 then -- trigger protection event
meta : set_string ( " infotext " , digger ) ; -- record diggers name onto distributor
local table = minetest.registered_nodes [ " basic_machines:distributor " ] ;
local effector = table.mesecons . effector ;
local node = nil ;
effector.action_on ( p , node , machines_TTL ) ;
end
end
end
end
return is_protected ;
end
minetest.register_on_chat_message ( function ( name , message )
local player = minetest.get_player_by_name ( name ) ;
2016-07-31 13:30:30 -07:00
if not player then return end
2016-06-12 11:30:32 -07:00
local pos = player : getpos ( ) ;
2016-06-14 00:41:47 -07:00
local r = 20 ; local p = { x = round ( pos.x / r + 0.5 ) * r , y = round ( pos.y / r + 0.5 ) * r + 1 , z = round ( pos.z / r + 0.5 ) * r }
2016-06-13 23:32:02 -07:00
--minetest.chat_send_all(minetest.pos_to_string(p))
2016-06-25 10:05:39 -07:00
if minetest.get_node ( p ) . name == " basic_machines:distributor " then -- attempt to activate distributor at special grid location: coordinates of the form 20*i
2016-06-12 11:30:32 -07:00
local meta = minetest.get_meta ( p ) ;
if meta : get_int ( " active1 " ) == 0 then -- first output is disabled, indicating ready to be used as event handler
local y1 = meta : get_int ( " y1 " ) ;
if y1 ~= 0 then -- chat event, positive relays message, negative drops it
meta : set_string ( " infotext " , message ) ; -- record diggers message
local table = minetest.registered_nodes [ " basic_machines:distributor " ] ;
local effector = table.mesecons . effector ;
local node = nil ;
effector.action_on ( p , node , machines_TTL ) ;
if y1 < 0 then return true
end
end
end
end
end
)