作者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