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存到變數裡
arrow
arrow
    全站熱搜

    suzin 發表在 痞客邦 留言(0) 人氣()