Mechanisms can't affect doors you don't own
This commit is contained in:
parent
fc6b2c8165
commit
71b1b193f6
@ -64,6 +64,12 @@ end
|
|||||||
|
|
||||||
local function actuator_timeout(pos_actuator, actuator_area_min, actuator_area_max)
|
local function actuator_timeout(pos_actuator, actuator_area_min, actuator_area_max)
|
||||||
local actuator = minetest.get_node(pos_actuator)
|
local actuator = minetest.get_node(pos_actuator)
|
||||||
|
|
||||||
|
-- Get name of last player that triggered the actuator
|
||||||
|
local meta = minetest.get_meta(pos_actuator)
|
||||||
|
local last_triggerer_str = meta:get_string("last_triggerer")
|
||||||
|
local last_triggerer_obj = minetest.get_player_by_name(last_triggerer_str)
|
||||||
|
|
||||||
-- Turn off actuator
|
-- Turn off actuator
|
||||||
if minetest.get_item_group(actuator.name, "xdecor_actuator") == 2 then
|
if minetest.get_item_group(actuator.name, "xdecor_actuator") == 2 then
|
||||||
local def = minetest.registered_nodes[actuator.name]
|
local def = minetest.registered_nodes[actuator.name]
|
||||||
@ -78,7 +84,11 @@ local function actuator_timeout(pos_actuator, actuator_area_min, actuator_area_m
|
|||||||
local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
|
local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
|
||||||
for d=1, #doors do
|
for d=1, #doors do
|
||||||
if not door_is_actuatored(doors[d]) then
|
if not door_is_actuatored(doors[d]) then
|
||||||
door_close(doors[d])
|
local dnode = minetest.get_node(doors[d])
|
||||||
|
local ddef = minetest.registered_nodes[dnode.name]
|
||||||
|
if (ddef.protected and last_triggerer_obj) or (not ddef.protected) then
|
||||||
|
door_close(doors[d], last_triggerer_obj)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -92,10 +102,17 @@ local function actuator_activate(pos_actuator, actuator_area_min, actuator_area_
|
|||||||
return
|
return
|
||||||
elseif ga == 1 then
|
elseif ga == 1 then
|
||||||
local def = minetest.registered_nodes[actuator.name]
|
local def = minetest.registered_nodes[actuator.name]
|
||||||
|
-- Turn actuator on
|
||||||
if def._xdecor_actuator_on then
|
if def._xdecor_actuator_on then
|
||||||
minetest.set_node(pos_actuator, { name = def._xdecor_actuator_on, param2 = actuator.param2 })
|
minetest.set_node(pos_actuator, { name = def._xdecor_actuator_on, param2 = actuator.param2 })
|
||||||
|
|
||||||
|
-- Store name of last player that triggered the actuator
|
||||||
|
local meta = minetest.get_meta(pos_actuator)
|
||||||
|
meta:set_string("last_triggerer", player_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Turn on neighboring doors
|
||||||
local minp = vector.add(actuator_area_min, pos_actuator)
|
local minp = vector.add(actuator_area_min, pos_actuator)
|
||||||
local maxp = vector.add(actuator_area_max, pos_actuator)
|
local maxp = vector.add(actuator_area_max, pos_actuator)
|
||||||
local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
|
local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
|
||||||
@ -271,7 +288,7 @@ xdecor.register("lever_on", {
|
|||||||
minetest.register_lbm({
|
minetest.register_lbm({
|
||||||
label = "Restart actuator timers (X-Decor-libre)",
|
label = "Restart actuator timers (X-Decor-libre)",
|
||||||
name = "xdecor:restart_actuator_timers",
|
name = "xdecor:restart_actuator_timers",
|
||||||
nodename = { "group:xdecor_actuator" },
|
nodenames = { "group:xdecor_actuator" },
|
||||||
run_at_every_load = true,
|
run_at_every_load = true,
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
local g = minetest.get_item_group(node.name, "xdecor_actuator")
|
local g = minetest.get_item_group(node.name, "xdecor_actuator")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user