summaryrefslogtreecommitdiff
path: root/mesecons_luacontroller
diff options
context:
space:
mode:
authorJeija <norrepli@gmail.com>2013-01-14 17:58:14 +0100
committerJeija <norrepli@gmail.com>2013-01-14 17:58:14 +0100
commit0d441444219816bac6dfd3da0d3997c763bc1669 (patch)
treeed9e8649dfb441775fe86d18771505e35cfd2d87 /mesecons_luacontroller
parent240fb83e8b55c66ec223fabe5877257648a0f84e (diff)
downloadmesecons-0d441444219816bac6dfd3da0d3997c763bc1669.tar
mesecons-0d441444219816bac6dfd3da0d3997c763bc1669.tar.gz
mesecons-0d441444219816bac6dfd3da0d3997c763bc1669.tar.bz2
mesecons-0d441444219816bac6dfd3da0d3997c763bc1669.tar.xz
mesecons-0d441444219816bac6dfd3da0d3997c763bc1669.zip
Bugfixes and improved stability of the luacontroller
Diffstat (limited to 'mesecons_luacontroller')
-rw-r--r--mesecons_luacontroller/init.lua29
1 files changed, 16 insertions, 13 deletions
diff --git a/mesecons_luacontroller/init.lua b/mesecons_luacontroller/init.lua
index c125ec9..c72dfa7 100644
--- a/mesecons_luacontroller/init.lua
+++ b/mesecons_luacontroller/init.lua
@@ -72,23 +72,16 @@ end
local action_setports_off = function (pos, ports, vports)
local todo = {}
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
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
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
if vports.d ~= ports.d and not ports.d then
- table.insert(todo, mesecon:addPosRule(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
+ mesecon:receptor_off(pos, {rules.d})
end
end
@@ -102,6 +95,7 @@ local action = function (pos, ports)
..tonumber(ports.a and 1 or 0)
if name ~= newname and vports then
+ mesecon:swap_node(pos, "air")
action_setports_off (pos, ports, vports)
mesecon:swap_node(pos, newname)
action_setports_on (pos, ports, vports)
@@ -164,6 +158,7 @@ end
local getinterrupt = function(pos)
local interrupt = function (time, iid) -- iid = interrupt id
+ if type(time) ~= "number" then return end
local meta = minetest.env:get_meta(pos)
local interrupts = minetest.deserialize(meta:get_string("lc_interrupts")) or {}
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 {}
for _, i in ipairs(interrupts) do
- if i == event.iid then
+ if minetest.serialize(i) == minetest.serialize(event.iid) then
return true
end
end
@@ -231,6 +226,13 @@ local interrupt_allow = function (meta, event)
return false
end
+local ports_invalid = function (var)
+ if type(var) == "table" then
+ return false
+ end
+ return "The ports you set are invalid"
+end
+
----------------------
-- Parsing function --
----------------------
@@ -251,8 +253,9 @@ lc_update = function (pos, event)
-- create the sandbox and execute code
local chunk, msg = create_sandbox (code, env)
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 ports_invalid(env.port) then return ports_invalid(env.port) end
do_overheat(pos, meta)
save_memory(meta, mem)