圣诞礼物分享:快速指令串let,丢弃定时器和触发器也是可以的啦
本帖最后由 suwuji 于 2017-12-25 04:12 AM 编辑alias内粘贴,命令行或者Execute内使用
----------------------------------------------------------------------------------
<aliases>
<alias
match="^let([^ ]*) (.*)"
enabled="y"
echo_alias="y"
group="基本处理"
regexp="y"
send_to="12"
sequence="99"
>
<send>
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
</send>
</alias>
</aliases>
<aliases>
<alias
match="^let([^ ]*)$"
enabled="y"
group="基本处理"
regexp="y"
send_to="12"
sequence="100"
>
<send>let_mark%1=nil
print("let_mark%1=nil")
</send>
</alias>
</aliases>
----------------------------------------------------------------------------------------------------------------————————————————————————————————
用法举例:
重复冥想,间隔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 回复 1# suwuji
对我这种指令小白来说,这不是礼物yct31 回复 2# huajiang
简单啊,命令行直接let chat* kiss huajiang|chat|wait 2,就可以循环不止啦,比去开个定时器快多啦。 感谢楼主分享~~虽然最初看起来有点复杂,不过看明白之后用起来还是挺方便的。 膜拜楼主ing
个人觉得用checkbusy更好,自己照着抄了一个总是不满意,楼主能写一个吗?
checkbusy(mingxiang):检查busy与否,busy-->1秒后再检查,不busy-->执行mingxiang。 回复 5# musasi
实际上冥想就暴力点,1秒冥想一下就好,let mingxiang|wait 1即可 试了一下,非常适合俺。
我用是坛子里一款很老的没人维护的路径,就缺这种wait的函数。。
多谢多谢 靠,这个简单暴力,我喜欢。
页:
[1]