forked from minetest-mods/mesecons
Bugfixes and improved stability of the luacontroller
This commit is contained in:
parent
240fb83e8b
commit
0d44144421
@ -72,23 +72,16 @@ end
|
|||||||
local action_setports_off = function (pos, ports, vports)
|
local action_setports_off = function (pos, ports, vports)
|
||||||
local todo = {}
|
local todo = {}
|
||||||
if vports.a ~= ports.a and not ports.a then
|
if vports.a ~= ports.a and not ports.a then
|
||||||
table.insert(todo, mesecon:addPosRule(pos, rules.a))
|
mesecon:receptor_off(pos, {rules.a})
|
||||||
end
|
end
|
||||||
if vports.b ~= ports.b and not ports.b then
|
if vports.b ~= ports.b and not ports.b then
|
||||||
table.insert(todo, mesecon:addPosRule(pos, rules.b))
|
mesecon:receptor_off(pos, {rules.b})
|
||||||
end
|
end
|
||||||
if vports.c ~= ports.c and not ports.c then
|
if vports.c ~= ports.c and not ports.c then
|
||||||
table.insert(todo, mesecon:addPosRule(pos, rules.c))
|
mesecon:receptor_off(pos, {rules.c})
|
||||||
end
|
end
|
||||||
if vports.d ~= ports.d and not ports.d then
|
if vports.d ~= ports.d and not ports.d then
|
||||||
table.insert(todo, mesecon:addPosRule(pos, rules.d))
|
mesecon:receptor_off(pos, {rules.d})
|
||||||
end
|
|
||||||
|
|
||||||
for _, t in ipairs(todo) do
|
|
||||||
local link, rulename = mesecon:rules_link(pos, t)
|
|
||||||
if link then
|
|
||||||
mesecon:turnoff(t, rulename)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -102,6 +95,7 @@ local action = function (pos, ports)
|
|||||||
..tonumber(ports.a and 1 or 0)
|
..tonumber(ports.a and 1 or 0)
|
||||||
|
|
||||||
if name ~= newname and vports then
|
if name ~= newname and vports then
|
||||||
|
mesecon:swap_node(pos, "air")
|
||||||
action_setports_off (pos, ports, vports)
|
action_setports_off (pos, ports, vports)
|
||||||
mesecon:swap_node(pos, newname)
|
mesecon:swap_node(pos, newname)
|
||||||
action_setports_on (pos, ports, vports)
|
action_setports_on (pos, ports, vports)
|
||||||
@ -164,6 +158,7 @@ end
|
|||||||
|
|
||||||
local getinterrupt = function(pos)
|
local getinterrupt = function(pos)
|
||||||
local interrupt = function (time, iid) -- iid = interrupt id
|
local interrupt = function (time, iid) -- iid = interrupt id
|
||||||
|
if type(time) ~= "number" then return end
|
||||||
local meta = minetest.env:get_meta(pos)
|
local meta = minetest.env:get_meta(pos)
|
||||||
local interrupts = minetest.deserialize(meta:get_string("lc_interrupts")) or {}
|
local interrupts = minetest.deserialize(meta:get_string("lc_interrupts")) or {}
|
||||||
table.insert (interrupts, iid or 0)
|
table.insert (interrupts, iid or 0)
|
||||||
@ -223,7 +218,7 @@ local interrupt_allow = function (meta, event)
|
|||||||
|
|
||||||
local interrupts = minetest.deserialize(meta:get_string("lc_interrupts")) or {}
|
local interrupts = minetest.deserialize(meta:get_string("lc_interrupts")) or {}
|
||||||
for _, i in ipairs(interrupts) do
|
for _, i in ipairs(interrupts) do
|
||||||
if i == event.iid then
|
if minetest.serialize(i) == minetest.serialize(event.iid) then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -231,6 +226,13 @@ local interrupt_allow = function (meta, event)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local ports_invalid = function (var)
|
||||||
|
if type(var) == "table" then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
return "The ports you set are invalid"
|
||||||
|
end
|
||||||
|
|
||||||
----------------------
|
----------------------
|
||||||
-- Parsing function --
|
-- Parsing function --
|
||||||
----------------------
|
----------------------
|
||||||
@ -251,8 +253,9 @@ lc_update = function (pos, event)
|
|||||||
-- create the sandbox and execute code
|
-- create the sandbox and execute code
|
||||||
local chunk, msg = create_sandbox (code, env)
|
local chunk, msg = create_sandbox (code, env)
|
||||||
if not chunk then return msg end
|
if not chunk then return msg end
|
||||||
local success, msg = pcall(f, port)
|
local success, msg = pcall(f)
|
||||||
if not success then return msg end
|
if not success then return msg end
|
||||||
|
if ports_invalid(env.port) then return ports_invalid(env.port) end
|
||||||
|
|
||||||
do_overheat(pos, meta)
|
do_overheat(pos, meta)
|
||||||
save_memory(meta, mem)
|
save_memory(meta, mem)
|
||||||
|
Loading…
Reference in New Issue
Block a user