作者hmml (hmml)
看板mud_sanc
标题Re: [心得] mushclient的doafterspeedwalk
时间Fri May 24 02:33:42 2013
个人是用这个代替speek walk,看起来很麻烦,
其实用起来非常好用,修改也很便利:
做一个别名,可能像这样: ^walk$
如果想用walk1、walk2...去切换路径...就用:^walk(\S+)$
现阶段不清楚怎麽做切换,就先跳过这段红字。
内容则是用lua的table类型来建立资料:
简短的写法像这样:
walk = {
'd','s','e','n','n',
}
如果每个步骤都很单纯,只有一道指令,可以用上面的格式,
如果比较复杂的,就用下面这种:
walk = {
[[d]],
[[s]],
[[e]],
[[n]],
[[n]],
}
如果要"厚工"一点,也可以这样:
walk = {
["1"] = [[d]],
["2"] = [[s]],
["3"] = [[e]],
["4"] = [[n]],
["5"] = [[n]],
}
自己建索引,只是当你建成後,想加一道步数到前头...
你会明白我为何非常建议你不这麽做。我比较建议第二种,
然後在後面加上注解:
walk = {
[[d]], --1,下塔
[[s]], --往南
[[e]],
[[n]],
[[n]], --5,快到城门口了
}
就算懒得改注解,也只是找位置稍微麻烦,不影响整体功能。
资料建好後,再加上计步器:
if step == nil then --没建立变数step的话,就是nil(不存在),所以做个判断
step = 1 --建立step,值为1。
Execute(walk[step]) --执行table关系表-walk-第一个项目。
step = step + 1 --将step的值累加1。
else --有建立的时候
Execute(walk[step])) --直接执行对应项
if step ~= nil then --如果step不等於nil,
step = step + 1 --将step的值加1,为不存在的变数加1的话会报错,所以做判断
end --结束 step ~= nil 的if
end --结束 step == nil 的if
然後新建一个timer,把别名填进内容中,Send to 记得选Execute。
自己设一个能接受的秒数。就是很基本的路径了。
遇到战斗就用
SetTimerOption ("计时器label", "Enabled", "n")
关了它。
开始战斗就用
SetTimerOption ("计时器label", "Enabled", "y")
去打开它,带队的话,因为队员结束战斗的时间不同步,所以
最好用DoAfterSpecial去设个容错时间:
DoAfterSpecial('5','SetTimerOption ("计时器label", "Enabled", "y")',12)
因为Timer再启动就会先执行一次内容,即:
动作>>等秒数>>动作
而非
等秒数>>动作
而函数也可以放到table里去排队,不过要另建别名才能和别的指令放一起
,不然会出错,否则就是单独放一个:
walk = {
[[d;heart clerical]], --往下走同时放公会之心
[[SetTimerOption ("计时器label", "Second", "6")]], --把时间改成6秒
[[s;en wudon slash]], --往南同时启用武当剑法
[[
#SetTimerOption ("计时器label", "Enabled", "n")]], --停住计时器
[[e]], --计时器启动後,立刻往东
[[]], --懒得改计时器时间,直接放一个空包弹,先等个6秒
[[]], --再等6秒,目前等了12秒。
[[n]], --第18秒,往北
[[n]], --如果确定不会被停住,可以跟前面的并成 2 n
[[
#SetTimerOption ("计时器label", "Enabled", "n")]], --到底了,停住计时器
}
想重走前一步,就把step = step - 1 还用没过
想倒回某一步,就是step = 数字 没用过
注意:别用这个当完全殭屍,OK?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.233.205.99
1F:推 aiggkimd :soga!!!! 05/24 08:40
2F:→ aiggkimd :这table是自己建一个文件档在路径填上去? 05/24 09:15
3F:→ aiggkimd :还是写在alias里面 05/24 09:15
4F:→ aiggkimd :if 那串是放在哪? 05/24 09:20
5F:推 aiggkimd :Execute括号里不用加"吗?第二个Exe後面是多一个 ) ?? 05/24 10:08
6F:→ hmml :全部写在alias里面,table在前,if在後 05/24 17:51
7F:→ hmml :Execute里的东西是变数的时候不须加'' 05/24 17:51
8F:→ hmml :字串才需要。 05/24 17:52
9F:→ hmml :对呀...漏删一个) 05/24 17:58
10F:推 aiggkimd :跑完所有步数就会出问题..我只能在最後加上 05/24 20:34
11F:→ aiggkimd :if step =最後一格 then step=1 才不会出问题 .orz 05/24 20:35
12F:→ aiggkimd :变一个loop. 05/24 20:35
13F:推 aiggkimd :不加那段,改if的第一行也行 05/24 20:43
14F:→ aiggkimd :不过这样就变成要自己算最後一步是第几步 05/24 20:45
我的处理方式是建立一个别名,如:
setwalk(\S+) --正则格式,(\S+)为%1
if '%1' == 'off' then --%1=off 则
#SetTimerOption ("计时器label", "Enabled", "n")--将计时器关闭
elseif '%1' == 'on' then --%1=on 则
#SetTimerOption ("计时器label", "Enabled", "y")--将计时器打开
else --其它
step = '%1' --设定计步器
end --结束
然後将table最後一步用上面这个别名取代:
原本是这样:
[[
#SetTimerOption ("计时器label", "Enabled", "n")]]
改成:
[[setwalknil;setwalkoff]]
↑ └关闭计时器。
└把计步归零(setwalk0)或移除(setwalknil)。
MushClient比较怪的地方,就是别的指令在table表可以塞很多个去执行,
但函数就必须一条一个位置,所以函数最好弄成一个别名去执行。
即:
一个别名放路径加上执行。
一个计时器用来执行上述的路径。
一个别名用来调整上述两项的各个设定。
以上三个是主体。再来就是依实际房间的描述或发生的事件,
建立必要的触发去开关它。
有需要的话:
再加一个定时器,定时去启动上述的计时器。
※ 编辑: hmml 来自: 220.132.196.45 (05/25 10:32)
15F:→ aiggkimd :soga!! 05/25 10:49
16F:→ aiggkimd :最後的step = '%1' 我改成 step = %1 才正常 05/25 15:31
17F:推 aiggkimd :用timer有个缺点,lag就全乱掉 05/25 17:09
18F:推 aiggkimd :我取消timer的用法,直接抓明显路口这句 05/25 17:15
19F:→ aiggkimd :没战斗就Execute路径,遇到战斗就不做动作 05/25 17:17
20F:→ aiggkimd :战斗结束在Execute路径,也是可以 05/25 17:17
21F:→ hmml :啊对!我忘了索引型态才要加''。sorry 05/25 23:57
22F:→ hmml :因为我是用刀客为基准去弄的,所以比较没去管lag.. 05/25 23:58
23F:→ hmml :step = '1' 资料型态为字串,用於['1'] = [[test]] 05/26 00:00
24F:→ hmml :step = 1 资料型态为数值,则用去现在这种table表 05/26 00:02
25F:→ hmml :圣殿的战斗有一个优点,就是战斗开始的讯息早路口讯 05/26 00:05
26F:→ hmml :息出现,所以来得及关掉路径触发。 05/26 00:06