北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 14407|回复: 10

Mushclient中wait.lua模块的扩展(更新版)

[复制链接]
发表于 2013-12-10 07:18:39 | 显示全部楼层 |阅读模式
本帖最后由 hasea 于 2014-1-20 08:38 PM 编辑

内容为上次(http://pkuxkx.com/forum/thread-36660-1-1.html)发出的模块更新版本。

这几天在写脚本,感到一些不方便的地方。昨晚在论坛讨论多行触发时,发现当多行触发和单行触发同时存在,会存在一些问题,虽然可以解决,但看起来很丑且复杂。比如下面这个:
  

在匹配单行的时候,一定要等下一行出现数据才会返回。这个是很让人难受的。当然你可以用好几行代码来避免这个问题!

我决定重新构建一种更简便的方法。

对于脚本来说,简洁优雅是我们一向的追求。


1、增加一个等待多个触发器返回的函数。用法如下:
   


以上函数将创建一个单行触发器,一个2行的多行触发器,一个定时器,一个协程对象。
这个与上例的比较好像差别不太,看起来还更多代码。但注意上面那个是有bug的,除非你能忍受。
这个函数的作用是不会再尝试对一行的正则匹配取两行数据。

注意上个版本在wait.regexp中使用table,只是为了看代码更加清晰。会把几个正则字符串合并为(字符串1|字符串2|字符串3)这种样式。这有很多限制。


2、把协程包装为一种更加简单的暂停机制使用。以便在需要的时候能够中断函数中的流程。用法如下:
  


这在mud遇到图片或是什么特殊情况,想来还是很好用的!!
注意在子线程中不能使用此函数来暂停,这样将会产生严重的错误。由于子线程一般没有需要暂停的情况,这好像是不实用的。所以没有为子线程增加暂停和唤醒函数了。


3、下面对模块中的所有函数做一下说明。
wait.time  (seconds)旧模块函数
wait.regexp (regexp, timeout, flags,  multi, multi_lines)旧模块函数,修改支持多行
wait.match (match, timeout, flags)旧模块函数
wait.make (f)旧模块函数
wait.mulregexp (regexps, timeout, flags)新增加函数。允许多行多触发器
wait.pause (sign)新增加函数。暂停函数进程
wait.wake (sign,text)新增加函数。恢复暂停的函数进程
以下为模拟子线程的触发函数
wait.subwait:new ()新增加函数。新建子线程
wait.subwait:close ()新增加函数。关闭子线程
wait.subwait:time (seconds)新增加函数。子线程中定时等待
wait.subwait:regexp (regexp, timeout,  flags, multi, multi_lines)新增加函数。子线程中的正则触发
wait.subwait:mulregexp (regexps,  timeout, flags)新增加函数。子线程中的多触发器等待函数

Fix:修正2个bug。 2014.1.20

附件:


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1精华 +10 +2 收起 理由
yhzzyahoo + 10 + 2

查看全部评分

北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-12-10 19:58:31 | 显示全部楼层
mush因你会更精彩!!
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2013-12-10 20:53:56 | 显示全部楼层
多谢两位北侠前辈的支持。
可惜看起来用的人不多。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-12-11 11:15:30 | 显示全部楼层
我是进来顶楼主的~
虽然我对单纯的机器人编写的热情已经褪得七七八八了,但楼主解决的正是曾经的我苦思而不得其的问题。我有一种可以瞑目了的赶脚,呵呵
希望时间能检验这些代码的稳定性(楼上小白鼠加油啊:)
期待楼主的更多创意
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-12-14 00:18:12 | 显示全部楼层
mush因你会更精彩!!
emyt 发表于 2013-12-10 11:58 AM



    静静真是爱学习呀。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-12-18 17:48:30 | 显示全部楼层
请教  flags,  multi, multi_lines 的意思和用法呀。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2013-12-18 19:45:26 | 显示全部楼层
本帖最后由 hasea 于 2013-12-18 07:47 PM 编辑

回复 10# qdz

flags:和原来wait.regexp函数第3个参数一样的参数。用来表示触发器的功能特性的一个标识组合。具体应该看mushclient文档。和mushclient中的AddTriggerEx函数第三个参数的取值是相同的。一般默认为nil即可。

multi:是否启用多行触发。默认为false。

multi_lines: 多行触发的行数。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-12-18 23:14:47 | 显示全部楼层
回复 11# hasea


    收到,谢谢。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2014-8-28 23:30:02 | 显示全部楼层
本帖最后由 kaillera 于 2014-8-28 11:36 PM 编辑

为啥我按照例子代码执行的时候会提示“attempt to index field 'subwait' (a nil value)”这样的错误,已经require "wait"了,mush版本4.90
  1. function subthread()
  2.         local st=wait.subwait:new()
  3.         wait.make(function()
  4.                 while true do
  5.                         print("-----sub-----")
  6.                         st:time(2)
  7.                 end
  8.         end)
  9.         return st
  10. end


  11. function mainfun()
  12.         wait.make(function()
  13.                 local st=subthread()
  14.                 for i = 1,5 do
  15.                         print("-----main----")
  16.                         wait.time(2)
  17.                 end--for
  18.                 st:close()
  19.                 print("-----close-----")
  20.         end)
  21. end
复制代码
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2014-12-28 21:50:34 | 显示全部楼层
试了一下用这个替代系统的wait会导致奔溃
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-12-1 03:18 AM , Processed in 0.012400 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表