Re: [心得] mushclient的doafterspeedwalk
看板mud_sanc (Sanctuary - 聖殿)作者hmml (hmml)時間12年前 (2013/05/24 02:33)推噓6(6推 0噓 20→)留言26則, 2人參與討論串2/3 (看更多)
個人是用這個代替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
推
05/24 08:40, , 1F
05/24 08:40, 1F
→
05/24 09:15, , 2F
05/24 09:15, 2F
→
05/24 09:15, , 3F
05/24 09:15, 3F
→
05/24 09:20, , 4F
05/24 09:20, 4F
推
05/24 10:08, , 5F
05/24 10:08, 5F
→
05/24 17:51, , 6F
05/24 17:51, 6F
→
05/24 17:51, , 7F
05/24 17:51, 7F
→
05/24 17:52, , 8F
05/24 17:52, 8F
→
05/24 17:58, , 9F
05/24 17:58, 9F
推
05/24 20:34, , 10F
05/24 20:34, 10F
→
05/24 20:35, , 11F
05/24 20:35, 11F
→
05/24 20:35, , 12F
05/24 20:35, 12F
推
05/24 20:43, , 13F
05/24 20:43, 13F
→
05/24 20:45, , 14F
05/24 20:45, 14F
我的處理方式是建立一個別名,如:
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)
→
05/25 10:49, , 15F
05/25 10:49, 15F
→
05/25 15:31, , 16F
05/25 15:31, 16F
推
05/25 17:09, , 17F
05/25 17:09, 17F
推
05/25 17:15, , 18F
05/25 17:15, 18F
→
05/25 17:17, , 19F
05/25 17:17, 19F
→
05/25 17:17, , 20F
05/25 17:17, 20F
→
05/25 23:57, , 21F
05/25 23:57, 21F
→
05/25 23:58, , 22F
05/25 23:58, 22F
→
05/26 00:00, , 23F
05/26 00:00, 23F
→
05/26 00:02, , 24F
05/26 00:02, 24F
→
05/26 00:05, , 25F
05/26 00:05, 25F
→
05/26 00:06, , 26F
05/26 00:06, 26F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 3 篇):
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
31
60