feixiong 发表于 2012-3-1 19:32:22

LUA傻瓜式学习笔记与疑问5(lua脚本触发器及ZMUD模式比较)

本帖最后由 feixiong 于 2012-3-1 07:37 PM 编辑

如果大家看hellua或者胡小子两位的脚本会发现一个疑问:
       他们的MUSH 触发器里的文字,只是对应一个脚本就OK了,这和ZMUD天壤之别
zmud的脚本里是:
#TRIGGER {您上次是在*连线进入,请及时核对。} {#mess 这是宇宙流独立开发的路径机器人,请学会感恩我们宇宙流!} {yellboat} 519
       我就一直很迷惑,他们究竟是如何利用mush脚本达到ZMUD里的功能的j.
今天在六师兄 水鬼 的知道下我终于明白了,举个lua例子吧:
trigger:您上次是在*连线进入,请及时核对。 对应脚本:lianxian.busy
在脚本内的具体内容是:
lianxian.busy=function(n,l,w)
      Walk=1
      if string.find(l,"流氓") then
      print("流氓出现了:")
      lianxian.kill()
      end
end
这里固定采取 xxxx=function(n,l,w)的形式来实现ZMUD里的触发,N 代表名字,应该是ZMUD触发器里的类型,l就代表了   您上次是在*连线进入,请及时核对。这个我要匹配的文本,W呢代表了文本里我们设置的变量。
我举得例子只是在文本里查找 流氓 这个词,没用到变量,所以呢就string.find(l ,“流氓”)了
哈哈哈,开心吧,只要你跟着我的笔记看,我相信掌握起来会比我快很多



看了我通俗易懂的论述,再来看胡小子专业的论述:是不是很容易理解了哈哈

help----trigger选项:
sub MyTrigger (name, line, wildcards)
world.Note "Trigger " & name & " matched."
world.Note "Wildcard 1 was" & wildcards (1)
end sub

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

emyt 发表于 2012-3-1 22:34:30

本帖最后由 emyt 于 2012-3-1 02:53 PM 编辑

看看这帖,测试理解会会更好些
http://pkuxkx.com/forum/thread-23433-2-1.html

dreamnb 发表于 2012-3-14 19:57:50

感谢分享。学习了

heartyi 发表于 2012-3-22 13:01:46

好好学习,天天向上

feixiong 发表于 2012-3-22 20:18:18

回复 4# heartyi
把onlinego的 移过来 看着方便


    测试下,就出来了hp_stat_jing=function(n,l,w)

      for k, v in pairs (w) do

                world.Note ("n = "..n)

                world.Note ("l = "..l)

                world.Note ("w["..k.."] = "..v)

      end

end
复制代码
hp
≡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━≡
【 精神 】 1313/ 1313   【 精力 】 2517/ 2517(+   0)
n = hp_stat_jing
l = 【 精神 】 1313/ 1313   【 精力 】 2517/ 2517(+   0)
w = 1313
n = hp_stat_jing
l = 【 精神 】 1313/ 1313   【 精力 】 2517/ 2517(+   0)
w = 1313
n = hp_stat_jing
l = 【 精神 】 1313/ 1313   【 精力 】 2517/ 2517(+   0)
w = 100
n = hp_stat_jing
l = 【 精神 】 1313/ 1313   【 精力 】 2517/ 2517(+   0)
w = 2517
n = hp_stat_jing
l = 【 精神 】 1313/ 1313   【 精力 】 2517/ 2517(+   0)
w = 2517
n = hp_stat_jing
l = 【 精神 】 1313/ 1313   【 精力 】 2517/ 2517(+   0)
w = 0
n = hp_stat_jing
l = 【 精神 】 1313/ 1313   【 精力 】 2517/ 2517(+   0)
w = 【 精神 】 1313/ 1313   【 精力 】 2517/ 2517(+   0)
【 气血 】 2747/ 2747   【 内力 】 3986/ 3986(+   0)



测试了多行触发的结果^【 精神 】\s*(\d+)\s*/\s*(\d+)\s*\[\s*(\d+)%\]\s*【 精力 】\s*(\d+)\s*/\s*(\d+)\s*\(\s*\+\s*(\d+)\).*$\n^【 气血 】\s*(\d+)\s*/\s*(\d+)\s*\[\s*(\d+)%\]\s*【 内力 】\s*(\d+)\s*/\s*(\d+)\s*\(\s*\+\s*(\d+)\)
复制代码hp_stat_jing=function(n,l,w)

         world.Note ("n = "..n)

         world.Note ("l = "..l)

         for k, v in pairs (w) do

                world.Note ("w["..k.."] = "..w)

      end

end
复制代码
hp
≡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━≡
【 精神 】 1313/ 1313   【 精力 】 2517/ 2517(+   0)
【 气血 】 2747/ 2747   【 内力 】 3986/ 3986(+   0)
n = hp_stat_jing
l = 【 气血 】 2747/ 2747   【 内力 】 3986/ 3986(+   0)
w = 1313
w = 1313
w = 100
w = 2517
w = 2517
w = 0
w = 2747
w = 2747
w = 100
w = 3986
w = 3986
w = 0
w = 【 精神 】 1313/ 1313   【 精力 】 2517/ 2517(+   0)
【 气血 】 2747/ 2747   【 内力 】 3986/ 3986(+   0)
【 食物 】 0   / 410    [饥饿]【 潜能 】 230.5K   


n是个变量,值为触发名称
l是个变量,值为触发的匹配的最后一行
w是个table
w是包含了整个被匹配的行
w 包含第1个通配符的内容
........

zilin 发表于 2012-3-23 11:49:36

看不懂啊

xspe 发表于 2012-4-4 02:40:57

看着feixiong的笔记,我才发现feixiong和我遇到的问题差不多
页: [1]
查看完整版本: LUA傻瓜式学习笔记与疑问5(lua脚本触发器及ZMUD模式比较)