Minetest(mesecons mod)luacontroller基础教程(2)

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那样的机器。更重要的是,要有创造力,更要发挥出创造力。

任务:

  1. 通过digilines线将一个luacontroller的PinA和PinB的状态传输在另一个luacontroller,并在那里输出(有种脱裤子放屁的感觉)

  2. 制作一个简单的加法器(稍微会点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圈贡献出自己的一份力吧

ok,以后的教程多以实践为主