TRIGGER
Syntax: #TR [id] pattern command [classname] [options]
這是ZMud最強力的功能之一,讓你可以定義從MUD接到符合的字串時要執行的命令。
如果id存在,這個觸發會以id當作短名建立,否則這個觸發的名字跟跟pattern一樣。
id可以給複雜的觸發pattern一個短名,或以同一個pattern建立多個觸發。
pattern就是要符合的文字,pattern要用大括號{}包起來。
pattern表示從MUD接收到而要讓這個觸發執行(或稱fire)的文字。
pattern可以包含特殊符合記號或萬用字元。
command是當從MUD收到pattern時要執行的指令。
因為command通常由超過一個單字組成,必須要用大括號{}包起來。
classname是可有可無的,表示這個trigger屬於哪個class。
trigger可以經由class開關,如果沒給classname,則認為是當前的class。
options是可有可無的,用在Export跟Import命令。
options是一個字串list,接受的值有
- "nocr" 不要每行的結束測試trigger
- ”prompt" 在每次從MUD收到文字時測試trigger(即使沒有收到換行,用在觸發MUD提示列)
- "case" 使這個pattern有大小寫之分
- "verbatim" 逐字符合pattern,不分析pattern裡的任何特殊字元或萬用字元
- "notrig" 當這個觸發執行時防止其他觸發fire
- "color" 這個pattern包含ANSI色彩
- "disable" 啟動時關閉這個trigger
- "line=coloe" 設定觸發fire時該行的顏色
要設定進階觸發選項時,通常會到Settings對話窗。在對話窗裡,你可以決定是在每一行觸發,還是收到一塊資料時就觸發。
回應MUD的提示列,例如使用者名稱跟密碼,需要收到一塊資料就觸發,因為通常提示列不會換行。
參考Pattern Matching頁面取得更詳細的資訊。
簡單的觸發
#TRIG {chats} {#COLOR red}
當收到一行含有chats這個字,把這行改為紅色。
自動登入的觸發
#TRIG {^Username:} {#CH}
#TRIG {^Password:} {#PW}
在Preferences對話盒,關閉trigger on newline並打開trigger on prompt,因而這些巨集不會等待換行字元。
注意pattern開頭的^是強制符合行首(一行的開始)
觸發的參數
#TRIG {^You get (%d) coins} {split %1} autosplit
當看到一行長的像You get [數量] coins,coins的數量會存在%1參數裡。再來指令會使用這個數值去分錢給隊友。
使用了autosplit的class名字,所以可以用#t+跟#t-來開關這個觸發。
進階:在一行中擷取資料
#TRIG {^~[&hp/&{maxhp}hp &mana/&{maxmana}ma~]} {#IF (@hp < @maxhp/10) {cast 'heal'}} "" "prompt"
pattern裡面 &varname 的格式告訴觸發要把符合的文字存在哪個變數。
這是個簡捷的寫法,來代替使用(*)然後把%nn存到@varname。
在這個例子裡我們在試著符合MUD提示列,因為MUD提示列不以換行結束,所以我們加上"prompt"的選項。
MUD提示列長的像這樣子 [100/150hp 50/70ma]
我們用了一些小招數(trick)在pattern定義裡(也就是為什麼這是進階範例)
首先我們要符合提示列開頭的 [ 字元,但 [ 是特殊字元,
所以真的要符合 [ 而不是解釋成特殊字元時,在它前面要加上一個 ~ ,
~ 字元告訴zmud不要解釋下一個字元的特別性能,把它當作一般的字元。
你會需要用到 ~ 在符合任合特殊字元時,例如 [, @, ( 等等,要符合~自己,當然是用 ~~。
下一個招數是確定maxhp跟maxmana變數只包含數字,而不會把hp或ma也包進去。
記得 &varname 同等於(*),所以通常會符合文字也會符合數字,
因此,我們把hp跟ma字串也放進pattern,
但是如果pattern裡寫了&maxhphp,zmud怎麼會知道maxhp是變數名而hp是文字?
所以我們把變數的名字用大括號{}包起來,把它跟文字隔開,
&{maxhp}hp就會告訴觸發把數字資料存在@maxhp,然後試著符合hp文字
看一下#setprompt指令,有更容易的方法來取得MUD提示列的資料
=============== 紅貓碎碎念 ====================
實用程度:100% 好用到爆,每個人都應該要會用
(這篇還真長)
Trigger是很好用的東西,但#trigger指令就不一定了
通常我們很少從command line直接建立一個trigger,從對話盒的介面設定比較多
這篇有教了一些trigger的概令,所以還是應該要看一看
在機裡面使用到#trigger指令也是有可能,不過我不會用到複雜的option或id
通常就 #trigger {pattern} {command} class這樣簡單的格式而己,
真要用到option,我會用介面先建好一個那樣的trigger,在zmud的介面就有建立該trigger的語法可以看。
最後進階那部分 &varname這種語法是新的,4.62好像不能用。
因為習慣的關係,我還是會先符合某些類別,再把%1, %2存到變數裡