Minetest (mesecons mod)luacontroller基础教程(2)
原文:是好康的
mesecons mod论坛内的介绍:也是好康的
digilnes mod github地址:更是好康的
第八章:digilines
Digilines是一个mod,它能与mesecons mod兼容。
digilines能模拟出各种电子产品的效果(如i2c,spi),可连接到luacontroller
luacontroller可以在多个接口进行digilines操作。
digilines_send(channel,msg)
以上的代码,其实就是简单的传输digilines信息,可以在任何luacontroller接口上发送,可以用数字,布尔值,字符串,甚至也可以用表格作为消息
但是,要达到luacontroller与另一个luacontroller信息传输的话,就要用到digilnes线,它的连接方式跟mesecon线一样
if event.type=="digilines"then
print(event.channel)
print(event.msg)
end
以上的代码,它的作用很显然,就不多说了
注意
digilnes信息也许是表,字符串,数字,布尔值,表,函数,零。
但是不鼓励用函数,因为这不符合总线隐喻(其实我也不知道这是什么玩意,姑且先用机翻),并可能在未来的更新中禁止。
数字信息的最大长度序列形式限制为50000个字符,可以用luacontroller_digiline_maxlen设置来调整。
如果频道不遵守键入限制或消息太长,digilines_send会返回false
以上就是luacontroller编程的基础知识了,单凭这些,就已经能创造出像mc那样的机器。更重要的是,要有创造力,更要发挥出创造力。
任务:
-
通过digilines线将一个luacontroller的PinA和PinB的状态传输在另一个luacontroller,并在那里输出(有种脱裤子放屁的感觉)
-
制作一个简单的加法器(稍微会点lua的都会)。你需要输入luacontroller与输出luacontroller,并通过digilines线连接他们
以下的都不很重要,如果感兴趣的就看几眼吧
第九章:杂项
由于访问os.date被认为是不安全的,因为它可能会崩溃lua(然而我写脚本时用调用os.date没有什么事),因此minetest服务器中,已经能用os.datetaable()来代替os.date的功能,此功能加上print指令能打印出服务器的现实时间
{ hour = 11,
min = 27,
wday = 7,
day = 2,
month = 1,
year = 2016,
sec = 42,
yday = 2,
isdst = false }
你能借此构建出一个显示现实世界时间的时钟
第十章:限制
即使整个代码在沙盒中运行,环境也必然受到限制,这样玩家就没有机会崩溃整个服务器(对付闲着没事的人干很有用)
这是源代码的摘录,现实环境中可用的非核心功能
{
print = safeprint,
pin = merge_portstates(vports, rports),
port = vports,
interrupt = getinterrupt(pos),
digiline_send = getdigiline_send(pos),
mem = mem,
tostring = tostring,
tonumber = tonumber,
string = string,
event = event
}
(这我觉得够用了)
除了这些,没有其他的了
不幸的是,为了防止对minetest服务器的服务攻击(ddos?有哪位懂的能告诉我下?),luacontroller上的代码执行仅限于一定数量的指令。在正常使用期间,不太可能达到此限制。但是,如果代码似乎仍无缘无故超时,则可以通过编辑默认值来调整指令单最大数量
mesecon.luacontroller_maxevents =10000
要在minetest.conf上编辑
luacontroller基础教程就到这里结束了,以后要做出新颖的机器为minetest圈贡献出自己的一份力吧