religiose 发表于 2013-1-31 21:53:46

学习MUSH第三日--脚本,插件,mush里

本帖最后由 religiose 于 2013-2-1 09:48 AM 编辑

通过这两天看贴加实践,发现所有的别名,触发器,定时器,函数等等,可以分别写在三个地方,有点儿犯糊涂。(mush 4.43绿色版)
总结如下,不对的地方请拍砖:
1,MUSH里
          菜单文件--》游戏属性和菜单游戏--》配置--》所有配置 里基本是一个地方。可以配置别名,触发器等等。
2,   菜单文件--》插件,这里能引用XML文件,XML里可以写一些触发器,别名,函数,命令等等。用LUA语言。
3,    MUSH的游戏--》配置---》脚本
          这里还能配置一个文件,是个LUA文件,这里一样能写东西,我试过写一些函数function,然后写一些语句直接执行,没问题。

我发现,在1中配置的触发器的发送里,可以调用3中的function,也可以调用2中的function。
但是2中写的触发器的send里,不能调用3中的function。当然,1和3中自己调用自己这个没问题。
总之,貌似3被孤立了,好像在游戏--》脚本中 配置一下没啥用。。。
如果想在2中调用一些LUA,这也是可以的,直接写一些LUA脚本,然后用include 包含进来就行了。。
谁能帮我解答一下,mush 中直接配置的那个脚本文件的地方有啥用呢??

北大侠客行MUD,中国最好的MUD

dcl 发表于 2013-2-1 06:38:33

1 里面的两个配置是一样的,针对当前游戏的,可以配置alias,trigger.... 3 是当前游戏的脚本。1和3本来就是一起起作用的。

2 是一1和3的合集,并且是独立于1和3的,也就是插件。

每个插件都有自己的guid,1 和3也可以看作是一套插件,只是它的id是空而已。

插件之间可以有依赖性,但最好不要这样。所以Mush也没有提供可以从一个插件修改另一个插件状态的函数,例如SetPluginVariable,但是有GetPluginVariable

插件之间如果实在是需要相互调用的话,最好通过alias来触发。
例如插件A想调用B里的函数,而且需要返回值,那么如何做呢?

首先在A里定义一个回调alias,例如callbackGetResultFromPluginB
然后再B里定义一个函数入口的alias,例如executeFunctionB,该alias接受一个参数(用于回调),而且该alias会调用B里的函数 function ExecuteFunctionB,并将参数传入该函数
插件A通过World.Execute(“executeFunctionB callbackGetResultFromPluginB”)函数来触发B里的alias (executeFunctionB),继而调用函数ExecuteFunctionB,在执行完成以后,将执行的结果附加到回调alias后并再次通过world.Execute(callbackpara + return value) 发送给mush,此时插件A就可以捕获到这个返回值。

这是我用Jscript的做法,不知道lua会不会有更直接的方式。

dcl 发表于 2013-2-1 06:42:18

1 里面的两个配置是一样的,针对当前游戏的,可以配置alias,trigger.... 3 是当前游戏的脚本。1和3本来就是一起起作用的。

2 是一1和3的合集,并且是独立于1和3的,也就是插件。

每个插件都有自己的guid,1 和3也可以看作是一套插件,只是它的id是空而已。

插件之间可以有依赖性,但最好不要这样。所以Mush也没有提供可以从一个插件修改另一个插件状态的函数,例如SetPluginVariable,但是有GetPluginVariable

插件之间如果实在是需要相互调用的话,最好通过alias来触发。
例如插件A想调用B里的函数,而且需要返回值,那么如何做呢?

首先在A里定义一个回调alias,例如callbackGetResultFromPluginB
然后再B里定义一个函数入口的alias,例如executeFunctionB,该alias接受一个参数(用于回调),而且该alias会调用B里的函数 function ExecuteFunctionB,并将参数传入该函数
插件A通过World.Execute(“executeFunctionB callbackGetResultFromPluginB”)函数来触发B里的alias (executeFunctionB),继而调用函数ExecuteFunctionB,在执行完成以后,将执行的结果附加到回调alias后并再次通过world.Execute(callbackpara + return value) 发送给mush,此时插件A就可以捕获到这个返回值。

这是我用Jscript的做法,不知道lua会不会有更直接的方式。

religiose 发表于 2013-2-1 09:46:56

回复 2# dcl


    DCL 果然大牛~~~ 以后还要多向你学习~

tanis 发表于 2013-3-7 10:51:59

lua更直接,http://www.gammon.com.au/forum/?id=10453
调用:
rc, a, b, c, d = CallPlugin ("80cc18937a2aca27079567f0", "show_message", "red", "green", "message", 42)
print ("rc =", rc) --> rc = 0
print (a, b, c, d) --> 1 2 3 4

插件中:
function show_message (fore_colour, back_colour, message, count)
for i = 1, count do
    ColourNote (fore_colour, back_colour, message)
end -- for
return 1, 2, 3, 4
end -- function show_message
页: [1]
查看完整版本: 学习MUSH第三日--脚本,插件,mush里