mirror of
https://github.com/joe7575/techpack.git
synced 2024-08-20 13:14:12 +02:00
Controller bugs fixed
This commit is contained in:
parent
bdc277d8a2
commit
b2c050dc2a
@ -19,8 +19,16 @@ safer_lua.MaxTableSize = 1000 -- number of table entries considering string le
|
|||||||
local BASE_ENV = {
|
local BASE_ENV = {
|
||||||
Store = safer_lua.Store,
|
Store = safer_lua.Store,
|
||||||
math = {
|
math = {
|
||||||
floor = math.floor
|
floor = math.floor,
|
||||||
|
abs = math.abs,
|
||||||
|
max = math.max,
|
||||||
|
min = math.min,
|
||||||
|
random = math.random,
|
||||||
|
|
||||||
},
|
},
|
||||||
|
tonumber = tonumber,
|
||||||
|
tostring = tostring,
|
||||||
|
type = type,
|
||||||
ticks = 0,
|
ticks = 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +70,6 @@ function safer_lua.init(pos, init, loop, environ, err_clbk)
|
|||||||
if code then
|
if code then
|
||||||
local env = BASE_ENV
|
local env = BASE_ENV
|
||||||
env.S = {}
|
env.S = {}
|
||||||
env.S._G = _G
|
|
||||||
env.S = map(env.S, environ)
|
env.S = map(env.S, environ)
|
||||||
setfenv(code, env)
|
setfenv(code, env)
|
||||||
local res, err = pcall(code)
|
local res, err = pcall(code)
|
||||||
@ -85,7 +92,6 @@ function safer_lua.run_loop(pos, elapsed, code, err_clbk)
|
|||||||
env.event = false
|
env.event = false
|
||||||
env.ticks = env.ticks + 1
|
env.ticks = env.ticks + 1
|
||||||
env.elapsed = elapsed
|
env.elapsed = elapsed
|
||||||
setfenv(code, env)
|
|
||||||
local res, err = pcall(code)
|
local res, err = pcall(code)
|
||||||
if not res then
|
if not res then
|
||||||
err = err:gsub("%[string .+%]:", "loop() ")
|
err = err:gsub("%[string .+%]:", "loop() ")
|
||||||
@ -98,7 +104,7 @@ end
|
|||||||
function safer_lua.run_event(pos, code, err_clbk)
|
function safer_lua.run_event(pos, code, err_clbk)
|
||||||
local env = getfenv(code)
|
local env = getfenv(code)
|
||||||
env.event = true
|
env.event = true
|
||||||
setfenv(code, env)
|
env.elapsed = 0
|
||||||
local res, err = pcall(code)
|
local res, err = pcall(code)
|
||||||
if not res then
|
if not res then
|
||||||
err = err:gsub("%[string .+%]:", "loop() ")
|
err = err:gsub("%[string .+%]:", "loop() ")
|
||||||
|
@ -17,7 +17,7 @@ dofile('/home/joachim/minetest/mods/techpack/safer_lua/environ.lua')
|
|||||||
--code = Cache[key]
|
--code = Cache[key]
|
||||||
|
|
||||||
local function foo(self, val)
|
local function foo(self, val)
|
||||||
_G = self._G
|
--_G = self._G
|
||||||
print("Hallo", val)
|
print("Hallo", val)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -28,14 +28,15 @@ end
|
|||||||
local init = "init = 5"
|
local init = "init = 5"
|
||||||
local loop = [[
|
local loop = [[
|
||||||
$foo("hallo")
|
$foo("hallo")
|
||||||
S.foo("hallo")
|
$foo("hallo")
|
||||||
--S._G.print("Fehler")
|
|
||||||
$foo(math.floor(5.5))
|
$foo(math.floor(5.5))
|
||||||
$foo("Joe")
|
$foo("Joe")
|
||||||
a = Store()
|
a = Store()
|
||||||
a.set("a", 123)
|
a.set("a", 123)
|
||||||
$foo(a.get("a"))
|
$foo(a.get("a"))
|
||||||
$foo(ticks)
|
$foo(ticks)
|
||||||
|
if ticks == 10 then $foo("Fehler")
|
||||||
|
|
||||||
]]
|
]]
|
||||||
|
|
||||||
local env = {foo = foo}
|
local env = {foo = foo}
|
||||||
@ -43,7 +44,7 @@ local env = {foo = foo}
|
|||||||
|
|
||||||
local code = safer_lua.init(0, init, loop, env, error)
|
local code = safer_lua.init(0, init, loop, env, error)
|
||||||
if code then
|
if code then
|
||||||
print(safer_lua.run_loop(0, code, error))
|
print(safer_lua.run_loop(0, 0, code, error))
|
||||||
safer_lua.run_loop(0, code, error)
|
safer_lua.run_loop(0, 1, code, error)
|
||||||
safer_lua.run_loop(0, code, error)
|
safer_lua.run_loop(0, 2, code, error)
|
||||||
end
|
end
|
@ -16,7 +16,6 @@ local function on_timer(pos, elapsed)
|
|||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local percent = (sl_controller.battery_capacity - meta:get_int("content"))
|
local percent = (sl_controller.battery_capacity - meta:get_int("content"))
|
||||||
percent = 100 - math.floor((percent * 100.0 / sl_controller.battery_capacity))
|
percent = 100 - math.floor((percent * 100.0 / sl_controller.battery_capacity))
|
||||||
print("percent", percent, meta:get_int("content"))
|
|
||||||
meta:set_string("infotext", "Battery ("..percent.."%)")
|
meta:set_string("infotext", "Battery ("..percent.."%)")
|
||||||
if percent == 0 then
|
if percent == 0 then
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
@ -52,7 +51,7 @@ minetest.register_node("sl_controller:battery", {
|
|||||||
after_place_node = function(pos, placer)
|
after_place_node = function(pos, placer)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_int("content", sl_controller.battery_capacity)
|
meta:set_int("content", sl_controller.battery_capacity)
|
||||||
minetest.get_node_timer(pos):start(2)
|
minetest.get_node_timer(pos):start(30)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_timer = on_timer,
|
on_timer = on_timer,
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
sl_controller.register_function("get_input", {
|
sl_controller.register_function("get_input", {
|
||||||
cmnd = function(self, num)
|
cmnd = function(self, num)
|
||||||
_G = self._G
|
|
||||||
num = tostring(num or "")
|
num = tostring(num or "")
|
||||||
return sl_controller.get_input(self.meta.number, num)
|
return sl_controller.get_input(self.meta.number, num)
|
||||||
end,
|
end,
|
||||||
@ -28,7 +27,6 @@ sl_controller.register_function("get_input", {
|
|||||||
|
|
||||||
sl_controller.register_function("get_status", {
|
sl_controller.register_function("get_status", {
|
||||||
cmnd = function(self, num)
|
cmnd = function(self, num)
|
||||||
_G = self._G
|
|
||||||
num = tostring(num or "")
|
num = tostring(num or "")
|
||||||
return tubelib.send_request(num, "state", nil)
|
return tubelib.send_request(num, "state", nil)
|
||||||
end,
|
end,
|
||||||
@ -40,7 +38,6 @@ sl_controller.register_function("get_status", {
|
|||||||
|
|
||||||
sl_controller.register_function("time_as_str", {
|
sl_controller.register_function("time_as_str", {
|
||||||
cmnd = function(self)
|
cmnd = function(self)
|
||||||
_G = self._G
|
|
||||||
local t = minetest.get_timeofday()
|
local t = minetest.get_timeofday()
|
||||||
local h = math.floor(t*24) % 24
|
local h = math.floor(t*24) % 24
|
||||||
local m = math.floor(t*1440) % 60
|
local m = math.floor(t*1440) % 60
|
||||||
@ -53,7 +50,6 @@ sl_controller.register_function("time_as_str", {
|
|||||||
|
|
||||||
sl_controller.register_function("time_as_num", {
|
sl_controller.register_function("time_as_num", {
|
||||||
cmnd = function(self, num)
|
cmnd = function(self, num)
|
||||||
_G = self._G
|
|
||||||
local t = minetest.get_timeofday()
|
local t = minetest.get_timeofday()
|
||||||
local h = math.floor(t*24) % 24
|
local h = math.floor(t*24) % 24
|
||||||
local m = math.floor(t*1440) % 60
|
local m = math.floor(t*1440) % 60
|
||||||
@ -66,7 +62,6 @@ sl_controller.register_function("time_as_num", {
|
|||||||
|
|
||||||
sl_controller.register_function("playerdetector", {
|
sl_controller.register_function("playerdetector", {
|
||||||
cmnd = function(self, num)
|
cmnd = function(self, num)
|
||||||
_G = self._G
|
|
||||||
num = tostring(num or "")
|
num = tostring(num or "")
|
||||||
return tubelib.send_request(num, "name", nil)
|
return tubelib.send_request(num, "name", nil)
|
||||||
end,
|
end,
|
||||||
@ -77,7 +72,6 @@ sl_controller.register_function("playerdetector", {
|
|||||||
|
|
||||||
sl_controller.register_action("send_cmnd", {
|
sl_controller.register_action("send_cmnd", {
|
||||||
cmnd = function(self, num, text)
|
cmnd = function(self, num, text)
|
||||||
_G = self._G
|
|
||||||
num = tostring(num or "")
|
num = tostring(num or "")
|
||||||
text = tostring(text or "")
|
text = tostring(text or "")
|
||||||
tubelib.send_message(num, self.meta.owner, nil, text, nil)
|
tubelib.send_message(num, self.meta.owner, nil, text, nil)
|
||||||
@ -91,7 +85,6 @@ sl_controller.register_action("send_cmnd", {
|
|||||||
|
|
||||||
sl_controller.register_action("display", {
|
sl_controller.register_action("display", {
|
||||||
cmnd = function(self, num, row, text1, text2, text3)
|
cmnd = function(self, num, row, text1, text2, text3)
|
||||||
_G = self._G
|
|
||||||
text1 = tostring(text1 or "")
|
text1 = tostring(text1 or "")
|
||||||
text2 = tostring(text2 or "")
|
text2 = tostring(text2 or "")
|
||||||
text3 = tostring(text3 or "")
|
text3 = tostring(text3 or "")
|
||||||
@ -106,7 +99,6 @@ sl_controller.register_action("display", {
|
|||||||
|
|
||||||
sl_controller.register_action("clear_screen", {
|
sl_controller.register_action("clear_screen", {
|
||||||
cmnd = function(self, num)
|
cmnd = function(self, num)
|
||||||
_G = self._G
|
|
||||||
num = tostring(num or "")
|
num = tostring(num or "")
|
||||||
tubelib.send_message(num, self.meta.owner, nil, "clear", nil)
|
tubelib.send_message(num, self.meta.owner, nil, "clear", nil)
|
||||||
end,
|
end,
|
||||||
@ -118,7 +110,6 @@ sl_controller.register_action("clear_screen", {
|
|||||||
|
|
||||||
sl_controller.register_action("chat", {
|
sl_controller.register_action("chat", {
|
||||||
cmnd = function(self, text1, text2, text3)
|
cmnd = function(self, text1, text2, text3)
|
||||||
_G = self._G
|
|
||||||
text1 = tostring(text1 or "")
|
text1 = tostring(text1 or "")
|
||||||
text2 = tostring(text2 or "")
|
text2 = tostring(text2 or "")
|
||||||
text3 = tostring(text3 or "")
|
text3 = tostring(text3 or "")
|
||||||
@ -132,7 +123,6 @@ sl_controller.register_action("chat", {
|
|||||||
|
|
||||||
sl_controller.register_action("door", {
|
sl_controller.register_action("door", {
|
||||||
cmnd = function(self, pos, text)
|
cmnd = function(self, pos, text)
|
||||||
_G = self._G
|
|
||||||
pos = tostring(pos or "")
|
pos = tostring(pos or "")
|
||||||
text = tostring(text or "")
|
text = tostring(text or "")
|
||||||
pos = minetest.string_to_pos("("..pos..")")
|
pos = minetest.string_to_pos("("..pos..")")
|
||||||
|
@ -14,12 +14,13 @@
|
|||||||
|
|
||||||
local sHELP = [[SaferLua Controller
|
local sHELP = [[SaferLua Controller
|
||||||
|
|
||||||
Safer LUA is a subset of LUA with the following restrictions:
|
SaferLua is a subset of Lua with the following restrictions:
|
||||||
- No loop keywords like: for, while, repeat,...
|
- No loop keywords like: for, while, repeat,...
|
||||||
- No table construction {..}
|
- No table construction {..}
|
||||||
- Limited set of available functions
|
- Limited set of available functions
|
||||||
- Store() as alternative to LUA tables
|
- Store() as alternative to Lua tables
|
||||||
|
|
||||||
|
See: goo.gl/WRWZgt
|
||||||
]]
|
]]
|
||||||
|
|
||||||
local Cache = {}
|
local Cache = {}
|
||||||
@ -68,7 +69,6 @@ end
|
|||||||
|
|
||||||
sl_controller.register_action("print", {
|
sl_controller.register_action("print", {
|
||||||
cmnd = function(self, text1, text2, text3)
|
cmnd = function(self, text1, text2, text3)
|
||||||
_G = self._G
|
|
||||||
local pos = self.meta.pos
|
local pos = self.meta.pos
|
||||||
text1 = tostring(text1 or "")
|
text1 = tostring(text1 or "")
|
||||||
text2 = tostring(text2 or "")
|
text2 = tostring(text2 or "")
|
||||||
@ -176,6 +176,8 @@ local function error(pos, err)
|
|||||||
local number = meta:get_string("number")
|
local number = meta:get_string("number")
|
||||||
meta:set_string("formspec", formspec3(meta))
|
meta:set_string("formspec", formspec3(meta))
|
||||||
meta:set_string("infotext", "Controller "..number..": error")
|
meta:set_string("infotext", "Controller "..number..": error")
|
||||||
|
meta:set_int("state", tubelib.STOPPED)
|
||||||
|
minetest.get_node_timer(pos):stop()
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -209,15 +211,19 @@ local function start_controller(pos)
|
|||||||
local number = meta:get_string("number")
|
local number = meta:get_string("number")
|
||||||
if not battery(pos) then
|
if not battery(pos) then
|
||||||
meta:set_string("formspec", formspec0(meta))
|
meta:set_string("formspec", formspec0(meta))
|
||||||
return
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
meta:set_string("output", "<press update>")
|
||||||
|
meta:set_string("formspec", formspec3(meta))
|
||||||
|
|
||||||
if compile(pos, meta, number) then
|
if compile(pos, meta, number) then
|
||||||
meta:set_int("state", tubelib.RUNNING)
|
meta:set_int("state", tubelib.RUNNING)
|
||||||
minetest.get_node_timer(pos):start(1)
|
minetest.get_node_timer(pos):start(1)
|
||||||
meta:set_string("infotext", "Controller "..number..": running")
|
meta:set_string("infotext", "Controller "..number..": running")
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
meta:set_string("output", "<press update>")
|
return false
|
||||||
meta:set_string("formspec", formspec3(meta))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function stop_controller(pos)
|
local function stop_controller(pos)
|
||||||
@ -243,7 +249,6 @@ local function update_battery(meta, cpu)
|
|||||||
if pos then
|
if pos then
|
||||||
meta = minetest.get_meta(pos)
|
meta = minetest.get_meta(pos)
|
||||||
local content = meta:get_int("content") - cpu
|
local content = meta:get_int("content") - cpu
|
||||||
print("content", content)
|
|
||||||
if content <= 0 then
|
if content <= 0 then
|
||||||
meta:set_int("content", 0)
|
meta:set_int("content", 0)
|
||||||
return false
|
return false
|
||||||
@ -256,6 +261,9 @@ end
|
|||||||
local function on_timer(pos, elapsed)
|
local function on_timer(pos, elapsed)
|
||||||
local t = minetest.get_us_time()
|
local t = minetest.get_us_time()
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
if meta:get_int("state") ~= "running" then
|
||||||
|
return false
|
||||||
|
end
|
||||||
local number = meta:get_string("number")
|
local number = meta:get_string("number")
|
||||||
if Cache[number] or compile(pos, meta, number) then
|
if Cache[number] or compile(pos, meta, number) then
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user