北大侠客行MUD论坛

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

圣诞礼物分享:快速指令串let,丢弃定时器和触发器也是可以的啦

[复制链接]
发表于 2017-12-24 23:10:15 | 显示全部楼层 |阅读模式
本帖最后由 suwuji 于 2017-12-25 04:12 AM 编辑

alias内粘贴,命令行或者Execute内使用
----------------------------------------------------------------------------------

      match="^let([^ ]*) (.*)"
   enabled="y"
   echo_alias="y"
   group="基本处理"
   regexp="y"
   send_to="12"
   sequence="99"
  >
  
require "wait"
local split = utils.split

--保持repe的串变量
let_do%1 = "%2"

print("let_do%1='%2'")

if let_mark%1 ~= true then
   let_mark%1 = true
   wait.make(
   function ()
     local fastcount=0
         while let_mark%1 == true do
                 while let_mark%1==true do
                        fastcount = fastcount + 1
                        local sw = split(let_do%1,"|")
                        for k,v in ipairs(sw) do
                          v=string.gsub(v,"@",";")
                          if string.find(v,"^wait") ~=nil then
                                  local timewait = string.gmatch(v,"wait (.*)")
                                  for vv in timewait do
                                         wait.time(vv)
                                  end
                           else
                                  if string.find(v,"^on ")~=nil then
                                         v = string.gsub(v,"!","|")
                                         local regwaitt = string.gmatch(v,"on (.*)")
                                         local mreg=nil
                                         for vv in regwaitt do
                                                if mreg==nil then
                                                   mreg = vv
                                                end
                                         end
                                        if mreg~=nil then
                                                local lll,www = wait.regexp(mreg,10)  --正则匹配10秒超时,适当调节可以处理地点、人物等等触发
                                           --没有触发不执行后续指令,继续循环
                                           if lll~=nil then
                                              --匹配执行后续
                                           else
                                              --未匹配继续循环
                                                  break
                                           end
                                         end
                                  else
                                        Execute(v)
                                  end
                           end           
                        end
                        --这个地方必须延时0.1秒,否则如果语句有错,会导致不停循环卡死
                        wait.time(0.1)
                 end
         end
   end
   )
end


  



      match="^let([^ ]*)$"
   enabled="y"
   group="基本处理"
   regexp="y"
   send_to="12"
   sequence="100"
  >
  let_mark%1=nil
print("let_mark%1=nil")

  

----------------------------------------------------------------------------------------------------------------————————————————————————————————
用法举例:
重复冥想,间隔5秒mingxiang一次可以输入let mingxiang|wait 5
张三丰处请教18跌间隔1秒来一次可以输入let qingjiao|wait 1
复杂点的,跳楼,在鼓楼小院输入 let enter@do 7 up|out|on 你已稳稳地站在地上|wait 2
等等等..........................
还可以仅仅单次执行一串指令例如let look|chat* hi|wait 2|chat* hero|let

说明:
基本符号用到了|@分割
|符号用来分割每批次指令串,以及wait定时和reg 正则匹配,默认会有0.1秒延时
@用来分割一批指令串中的各个项目,相当于替换@为;符号用Execute发出去
例如跳楼的,实际执行Execute("enter;do 7 up")0.1秒后执行了Execute("out") 再等待落地后,等待2秒

实时改变语句效果直接let xxx新的串即可
例如原本是在跳楼,可以输入let look|wait 2,可以时时改变效果为定时两秒look一下

停止重复,单输入let

单用let一个那么是不健壮的。
如果需要几个let并行执行那么可以采用let1 xxx;let2 xxx;等等形式;(letX X是任意合法非空串)
通过并行的let组合可以较容易达到分支执行、并行执行的效果(可能需要调整超时时间)。
例如鼓楼跳楼可以并行写作:
let on 鼓楼小院 -|wait 2|enter@do 7 up;
let1 on 鼓楼七层 -|out;
let2 on 不能移动|wait 1|enter@do 7 up;
letNoNo on 永远没有执行后续|chat* hi;
l;
意思是等待地点是鼓楼小院那么执行2秒等待,进入登上去。并行,当地点是鼓楼七层,则跳出去。末尾look一下鼓楼小院,开始循环.附加一个let2 监视如果是不能移动那么等等1秒再enter上楼,let3 除非你simulate一下否则是不会执行后续动作的。(注意,此处只是举例复杂的用法写法,可以写出比较复杂的机器。当前示例的跳楼并行写法并不完全稳定,反而是定时纯定时let enter@do 7 up@out|wait 2即可稳定跳楼)
停止则需要let;let1;let2;letNoNo;

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2017-12-25 10:21:50 | 显示全部楼层
回复 1# suwuji


    对我这种指令小白来说,这不是礼物
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2017-12-25 10:31:06 | 显示全部楼层
回复 2# huajiang


    简单啊,命令行直接let chat* kiss huajiang|chat|wait 2,就可以循环不止啦,比去开个定时器快多啦。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2017-12-25 11:05:44 | 显示全部楼层
感谢楼主分享~~虽然最初看起来有点复杂,不过看明白之后用起来还是挺方便的。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2017-12-26 21:02:15 | 显示全部楼层
膜拜楼主ing
个人觉得用checkbusy更好,自己照着抄了一个总是不满意,楼主能写一个吗?
checkbusy(mingxiang):检查busy与否,busy-->1秒后再检查,不busy-->执行mingxiang。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2017-12-27 19:56:33 | 显示全部楼层
回复 5# musasi

   实际上冥想就暴力点,1秒冥想一下就好,let mingxiang|wait 1即可
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2017-12-29 20:32:37 | 显示全部楼层
试了一下,非常适合俺。
我用是坛子里一款很老的没人维护的路径,就缺这种wait的函数。。
多谢多谢
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2018-12-30 21:40:09 | 显示全部楼层
靠,这个简单暴力,我喜欢。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 09:38 PM , Processed in 0.012076 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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