trace 发表于 2009-9-6 17:00:47

再请教个mush plugin的问题。

在mush的主页plugin里发现一个slowwalk的plugin作的很好。不过是匹配英语的。
他的plugin 网页在http://gammon.com.au/forum/?id=6008
现在我有个问题。他的plugin的匹配
Exits: north south
通过
<!ENTITY exits_trigger
      "^((?P<exits>\\)|(.*)Alas, you cannot go that way\\.)$" >
]>
我想改下这个plugin 让他匹配我们的pkuxkx
我们的提示是。这里明显的出口是
<!ENTITY exits_trigger
      "^((?P<exits>\\[这里明显的出口是.+\\])|(.*)这里没有明显的出口\\.)$" >
]>
可是改了后怎么都触发不了。
是不是plugin的字符问题?
我后来把下面的子程序第一行改成
line, wildcards = wait.regexp ("&exits_trigger;", &timeout_secs;)
   
    -- check for timeout
   
    if not line then
      ColourNote ("white", "red", "Speedwalk timed-out")
      speedwalk_thread = nil
      return-- give up
    end -- if
   
    -- check we didn't get told it was impossible
   
    if wildcards.exits == "" then
      ColourNote ("white", "red", "Speedwalk cancelled")
      speedwalk_thread = nil
      return-- give up
    end -- if
   
    -- pause before doing another if wanted
   
    if &delay_secs; > 0 then
      wait.time (&delay_secs;)
    end -- if pause wanted
      
end-- of iterating through each speedwalk line

-- all done!
我的修改:
line, wildcards = wait.regexp ("这里明显的出口是", &timeout_secs;)
这样可以走了。不过还是不太爽。请教下mush高手在plugin抓这个exit变量的方法。

maper 发表于 2009-9-6 19:29:27

没有仔细看这个插件的用处,楼主简单介绍一下吧。
我把我的抓取房间出口的trigger发出来你看看
<triggers>
<trigger
   enabled="y"
   group="system"
   lines_to_match="12"
   keep_evaluating="y"
   match="^(> )*\s+这里.*的出口是(.*)$"
   name="getroomexit"
   regexp="y"
   script="getroomexit"
   sequence="100"
>
</trigger>
</triggers>

getroomexit=function(name, line, wildcards,styles)
      j=0
    re = rex.new ("(\+)")
    re:gmatch (line, function (m, t)
         j=j+1
      exits_get=m
      exits_get_temp=m
            end )
         end
end

trace 发表于 2009-9-6 19:55:49

这个插件还是很有用的。
mush 的speedwalk 有很多缺点.
Too fast - so the MUD server doesn't process them all
太快,服务端处理不了
Too slow - you build in a pause and then it takes forever
太慢。浪费时间
Doesn't handle "you can't go that way" messages
对于这个方向没有出路的提示处理不了。(这个没有什么用,我感觉)
Cannot be paused while you chat, or kill a mob
在需要的地方暂停。(这个很有用)
Cannot be aborted if you change your mind
(在需要的地方放弃快速行走。这个也有点用)

这个plugin 可以实现!3s5e 向南走三步,向东走5步
到了满足条件的地方。trigger 输入pause speedwalk就会暂停
杀了盗宝人什么的 trigger输入resume speedwalk就会继续把刚才的快速行走走完
abort speedwalk放弃当前的快速行走。
可以设置每步停下的时间。默认是0.5秒。感觉这个已经很不错了。
就是他原来设置的英文mud。所以每个新房间的提示是 Exit:
我们的应该是这里明显的出口是:
这个东西提取不好。虽然我的方法也能用。但是还是希望能找到更好的方法。

maper 发表于 2009-9-6 20:05:22

跟我现在使用的走路方法是一样的,嘿嘿

trace 发表于 2009-9-6 20:39:59

是的。所以感觉这个plugin不错啊。
基本可以用了。我的方法比较土。呵呵。
页: [1]
查看完整版本: 再请教个mush plugin的问题。