機器人的主體構架是觸發器,類似電腦的操作系統。
觸發器的原理,就是根據你給出的條件,自動偵測mud里出現的語句,符合條件后自動執行指令。說簡單點,就是條件反射。
一、基本觸發最基本的觸發,就是沒有任何編程內容,純粹的條件反射,非常適合新人編寫。這種觸發是工作量最大的,但是編寫容易,不容易斷,是機器人觸發器部分的主體。
如果需要使用多個指令指令,每個指令間用英文分號;隔開
例如,新人利用發呆室讀書,就可以只用一個基本觸發搞定。
觸發思想:
1、發呆室可以瞬間補滿精氣,那么發呆室外消耗精氣的過程就應該盡量縮短,節省時間,所以如果是讀書,應該用
du book for 50
2、發呆室發呆完有大概2秒的busy,無法移動。那么,為了避免busy,不用編程指令的時候,就必須針對這種情況增加觸發
3、避免干擾,set brief 1,減少不必要的地點描述;tune all,關閉所有聊天頻道以避免干擾
示例: 復制內容到剪貼板 代碼:
你發呆了一會兒
out------------------------------------------------------------------------------- 復制內容到剪貼板 代碼:
你的動作沒有完成,不能移動
out------------------------------------------------------------------------------- 復制內容到剪貼板 代碼:
發呆室
du book for 50;out;fadai三個觸發做成讀書機器人
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
二、#wa指令
#wa是觸發中最常用的指令,作用是等待指定的時間(依照#wa后面的數字來定,以毫秒為單位),然后執行后面的命令。
作用一:當一次發送出的命令過多時,會有溢出,最后的部分命令可能無法執行,導致機器人中斷,所以大量指令之間,需要一定的等待
作用二:許多事件都有一定的busy time,在這段時間內,會無法移動,或者無法使用pfm和exert或其他,那么,就需要針對busy time,設定等待
再看上面的讀書機器人,做出3個觸發,完全只是為了處理busy問題,而讀書和發呆,其實很簡單,所以如果解決了busy,一個觸發足夠
觸發思想:利用#wa解決發呆busy,然后以發呆為觸發條件進行指令,由于發呆大概有2秒的busy,為保守,#wa設定在三秒以上
示例: 復制內容到剪貼板 代碼:
你發呆了一會兒
#wa 3000;enter;du book for 50;out;fadai-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
三、觸發器分類
好的機器人應該具備幾個條件,從游戲本身來考慮,非要做個排名的話,我認為應該是安全,穩定,效率,適用面廣,當然如果你還能做到界面豐富生動,簡潔易修改等等那更好了。所以,良好的觸發器分類和運用是很重要的。
觸發器可以設定種類,一來能夠方便使用和整理;二來可以整類觸發器統一開關,能夠實現更多的用法
開關一類觸發器的指令是#t+(打開)和#t-(關閉),格式為#t+ 觸發器種類
使用示例:比如,一般情況下,內功支持的最大內力和最大精力基本相同,那么打坐吐納的時候,就可以輪流進行,共同提升。那么,就可以把打坐的一類觸發器設定為dz類別,吐納的一類觸發器設定為tuna類別,用#t+和#t-在適當的時候進行切換
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
四、通配符與變量提取
有了基本觸發和#wa,其實已經可以寫出幾乎所有機器人,但是有的難免繁瑣,而且不一定能夠達到最高效率,比如打坐,為避免浪費氣血,打坐的數值應該跟隨最大內力的變化而變化,這個要求,上面兩個方法就無法做到。
所以,接下來才是機器人的重頭戲,我覺得堪比人的記憶功能——通配符與變量提取
-------------------------------------------------------------------------------
通配符
名詞解釋
通配符:可能玩家在系統、瀏覽器等的搜索功能里面使用過。通配符,就是用一些指定的符號,來代表其他內容,這是計算機的一種創舉,把帶入了模糊思想精密的計算機程序中,能夠彌補計算機的很多不足。
變量:變量,說白了就是一個量,你用一個名字來指代這個量,而這個量的內容,可以是文字、符號、數字等東西。而變量的神奇之處就在于一個“變”字,變量值可以根據要求自動變化,就能進行為真正的動態運行。
通配符介紹:
* 星號是最簡單的通配符,指代一切字符? 問號指代一個或者零個字符
%s 這個通配符,指代任意長度的連續空格
%d 這個通配符,指代任意長度的連續數字%x 這個通配符,指代任意長度的不包含空格的字符%w 通配任何字母(a-z)
%a 通配任何數字和字母(等于%d+%w)
%n 通配任何以+或-開頭的數字
%x 通配任何非空格
[range] 通配任何在range范圍內的字符
^ 表示一行的開頭,想要你的trigger在一行的開頭才有效,就在最前面加上這個
$ 表示一行的結尾。
(通配符)將括號里面的內容依次提取存放到參數%1~%99里
我對mud學習的也不多,了解的通配符就這三個,但是這三個已經足夠了
-------------------------------------------------------------------------------
變量
變量提取:
變量的提取,就是根據你的指令,從語句中提取出需要的部分,保存為一個變量(變量名最好不要使用中文,并且要含義清楚,以免自己都弄忘記)。那么,提取的部分既然是變量,就是會變的,這就需要通配符來指代
通配符直接使用的時候,只有取代作用,不會提取數值
要提取通配符指代的部分,需要在通配符兩邊加上英文括號,括號內的通配符指代的部分就作為變量。
變量初始數值按照提取語句的順序,用%1、%2等指代。
然后,需要一個賦值過程來保存變量,人為制定一個變量,將%1、%2等值賦值到其中。以后,就可以使用該變量(變量不可在直接手動在指令欄中輸入的指令中使用),變量使用時,直接輸入@變量名,比如變量名為exp,那么使用時就是@exp
那么,既然括號在觸發器里面被理解為提取變量的一個標志,英文括號不可能成為觸發語句,所以,帶有類似(dodge)的語句,是無法進行觸發的
例如,我們可以用通配符和變量的提取,自動提取內力的數據
首先,需要分析語句格式 復制內容到剪貼板 代碼:
> hp
≡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━≡
【 精神 】 126 / 270 [100%] 【 精力 】 1054 / 766 (+ 0)
【 氣血 】 359 / 359 [100%] 【 內力 】 715 / 715 (+ 38)
【 食物 】 0 / 300 [饑餓] 【 潛能 】 8053
【 飲水 】 0 / 300 [饑渴] 【 經驗 】 105840
≡━━━━━━━━━━━━━━━━━━━━━━━◎北大俠客行◎━━≡
我們可以看見,內力一欄里,有許多空格,而為了避免數值位數不同造成空格數量的不同,通常用%s指代空格,而不是在觸發語句里面直接使用空格
內力后面有一個加力數值(+ 38),就像上面所說,括號不能作為觸發語句,那么這段就不能要
內力有兩個數值,一個是當前內力,一個是最大內力,我們應該把他們分別提取。提取數字,應該用(%d),兩個變量分別是%1、%2,我們可以把他們保存到neili和maxneili兩個變量中
那么,示例如下 復制內容到剪貼板 代碼:
原語句:【 內力 】 715 / 715 (+ 38)
觸發語句:【%s內力%s】%s(%d)%s/%s(%d)
觸發指令:neili=%1;maxneili=%2這樣,每次hp后,觸發器都能自動提取當前內力和最大內力的數值,分別保存到neili和maxneili兩個變量中----------------------------------------
附:括號問題的解決
介紹一個符號~,作用是讓其之后的第一個符號(比如括號)不進入變量提取格式的判斷
比如,如果我們想做個戰斗觸發器,每當黃血時自動吸氣,那么,我們就可以這樣寫這個觸發: 復制內容到剪貼板 代碼:
原語句:( 你氣喘噓噓,看起來狀況并不太好 )
觸發語句:~( 你氣喘噓噓,看起來狀況并不太好 ~)
觸發指令:exert recover
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
五、變量計算
有時,提取出來的數字形式的變量,我們不打算直接使用,而是計算后再使用。
比如,利用發呆室打坐吐納時,為避免浪費,如果每次打坐的數值是最大內力的1/4,那么能夠做到對氣血的比較有效的利用(怎么才能最大利用呢?請見誰能解釋一下, 心跳在mud 中是起什么作用的?,具體給個數值,dazuo的數目是有效內功/10的整數倍時最有效率,一倍最不容易浪費)
這時,就需要進行變量計算,把maxneili變量數值除以4,然后保存為一個新的變量
變量計算的指令是#math指令,此指令可以進行簡單的四則運算,格式為#math 新變量 變量計算式
例如我們把maxneili變量值除以四,然后為了避免四舍五入的影響,最后再+1(一切都是按照四則運算規則進行),那么運算指令就是
#math dazuo @maxneili/4+1另:如果只進行加減運算,可以使用#add指令,格式為#add 數字變量 改變數量,如#add num 1就是@num變量加一。
這樣,就可以把maxneili變量的數值除以4再加上1,保存為新的變量——dazuo
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
六、條件指令
下面,我們就要開始了解機器人中極其強大的條件指令。條件指令,是機器人的大腦,給予了機器人思考判斷的能力。
條件指令是根據你的條件進行判斷,如果滿足條件則執行一組指令,不滿足則執行另外一組指令
條件指令使用的命令是#if,格式有兩種
格式一:#if (條件) {指令}
格式二:#if (條件) {條件成立的指令} {條件不成立的指令}
格式一中,如果條件成立,便自動執行大括號內的指令,如果條件不成立,便自動跳過
格式二中,如果條件成立,便自動執行第一個大括號中的指令,如果條件不成立,便自動執行第二個大括號中的指令
示例:
還是用內力數值的變量提取。新人利用發呆室打坐吐納,就必須保證最大內力和最大精力都在1000以下。那么,內力和精力的數值提取觸發中,就可以加入#if指令進行判斷。
設計思想:用@maxneili的數值和999作比較,相等時就停止打坐,不相等就繼續 復制內容到剪貼板 代碼:
#if (@maxneili=999) {#t- dz;#t- tuna;halt;quit}-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
七、句首嚴格觸發
句首嚴格觸發,是指通過一些通配符的使用,盡量保證觸發語句出現在句首時才能觸發,這樣能讓機器人更加嚴密,不易中斷
^:這個符號的輸入方式是,在英文輸入狀態下,按著shift按鈕不放,按下鍵盤左邊的6
^符號用在觸發語句開頭,作用是進行嚴格觸發,當觸發語句開頭有^的時候,該語句必須位于行首才能被觸發
行首嚴格觸發作用:避免機器人錯誤觸發,比如我就有被空手道chat 你受傷過重xxxxx弄得quit的慘痛經歷…………
示例:
1、行首觸發 復制內容到剪貼板 代碼:
原語句:> 你深深吸了幾口氣,臉色看起來好多了。
觸發語句:^??你深深吸了幾口氣,臉色看起來好多了2、傷害觸發(注意傷害描述是英文括號加一個空格,那么如果要進行行首嚴格觸發,就要特別小心別漏了那個空格) 復制內容到剪貼板 代碼:
原語句:( 你受傷不輕,看起來狀況并不太好 )
錯誤觸發:^??( 你受傷不輕,看起來狀況并不太好 )
正確觸發:^????你受傷不輕,看起來狀況并不太好
或者:^??~(%s你受傷不輕,看起來狀況并不太好---------------------------------------------------------具體討論請看行首嚴格觸發的問題
八、定時器
定時器,就是根據你指定的時間為周期,定期執行指定命令
定時器的設置很簡單,就不贅述了
定時器的作用:定期執行指令,比如長周期定時存盤、hp查看屬性并且配合觸發提取數值,比如短周期定時繁復打坐等
定時器可以用指令開關,開啟定時的指令為#timer on或者#time on,關閉定時的指令為#timer off或者#time off,設定定時器時間為#ts 時間。
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
九、別名
別名,是為了方便操作而設計的。別名可以用一個指令來指代一串指令,其中,別名的名字不能用中文
別名是很常用的,北俠mud打包下載中,就把各區域往來的路徑制作成為別名。
而且,別名有一定的alias的作用。比如,我設定別名g,指令是get,那么我就可以使用g all來代替get all
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
十、宏鍵
宏鍵,就是以鍵盤按鍵作為條件執行命令,能夠極大程度的方便操作
我個人建議把小鍵盤設定為行走宏鍵
1:sw
2:s
3:se
4:w
5:l
6:e
7:nw
8:n
9:ne
同樣,常用的一些exert、perform、吃喝等指令可以做成宏鍵,建議把exert和perform制作到F1、F2一系列按鍵中,例如
F1:exert recover
F2:exert regenerate
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
十一、實用小指令
觸發器指令中,有一些指令作用很簡單,但是很使用,比如#mess和#cap、#show、#gag、#case、#help
#mess:自動用對話框發送制定內容提醒玩家
作用不用說了吧,任務、掛機等都非常實用
比如,我可以在剛才所說的自動停止打坐的條件指令里面加入#mess 內力已經到達999,自動停止打坐,那么,當內力到達999時,機器人除了自動停止打坐,還會彈出一個在所有windows窗口之前的對話框提醒玩:內力已經到達999,自動停止打坐。
-------------------------------------------------------------------------------
#cap:自動把該觸發語句用一個新的mud窗口顯示
這也是極其實用的,最常見的是把閑聊內容單獨用一個窗口顯示,避免遺漏重要信息
示例: 復制內容到剪貼板 代碼:
【閑聊】
#cap chat注:Zmud自動換行造成的多行,還是按照一行計算另:#cap也可以一次性提取多行,比如#cap 3 chat,就是提取三行
那么,當有人通過閑聊頻道說話的時候,內容除了在主窗口內顯示,還會出現在一個以chat命名的窗口內
-------------------------------------------------------------------------------
#show:顯示指定的內容
這個指令格式是 #show 指定內容
效果是在mud窗口里面顯示指定內容,字體顏色為Zmud默認顏色
這個指令可以用來進行提示
實例:
慕容任務里,用變量提取慕容復說的叛徒地址,儲存在@zone變量中,然后計時器里面以五秒為循環,執行指令#show 叛徒在@zone附近
如提示是歸云莊練功房,那么任務時,每隔五秒就會自動顯示
玉璽在『歸云莊練功房』附近另:
#say也有同樣效果,而且顏色更鮮明(Zmud訊息顏色),推薦用#say
-------------------------------------------------------------------------------
#gag:自動刪除一行內容,不予顯示
這是避免一些刷屏而使用的,比如可以屏蔽惡意刷屏,比如可以讓閑聊不顯示
示例: 復制內容到剪貼板 代碼:
【閑聊】
#gag那么,當有人通過閑聊頻道說話的時候,就可以自動刪除,避免影響
但是,#gag刪除的語句,只是不顯示,實際仍然存在,依舊會引發觸發。所以,用這個屏蔽閑聊不如tune chat,因為這個是用閑聊觸發,那么就算刪除不顯示,閑聊內容其實也已經進入了觸發,如果閑聊中有人說“你運功完畢”之類的話,仍然會觸動你的觸發
-------------------------------------------------------------------------------#case:根據變量數目執行目標指令格式:#case @數字變量 {指令一} {指令二} {指令三} …… {指令N} ……(注意要用@)原理:根據自動執行對應變量值的指令,如變量為2,則執行指令二示例:詳見wiki護鏢,貧道也是從那里學來的-------------------------------------------------------------------------------#help:Zmud幫助指令格式:#help或者#help xxx這是最全面的Zmud指南,并且可以詳細查詢,比如如果我想查詢if語句的功能和用法,就輸入#help if,回車
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
十二、按鈕
按鈕,比較實用,是制作一個按鈕,點下按鈕就可以執行命令。在zmud的按鈕欄中是找不到這個設置的,要點擊查看——按鈕,打開按鈕設置
按鈕設置,可以設定按鈕名稱和點下按鈕時執行的指令,并且還可以設定成開關式,按鈕在zmud窗口中的位置,同樣可以設置
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
十三、觸發測試
一套機器人制作好之后,不要忙著馬上使用,最好先進行測試,以發現一些問題
觸發測試有兩種方法
方法一:點擊常規按鈕,打開常規設置,選中左上角的顯示觸發信息
這樣,當觸發器執行時,會自動在mud窗口里顯示觸發信息,方便檢驗執行狀況
-------------------------------------------------------------------------------
方法二:打開觸發器窗口,選擇一個觸發,點擊右邊的測試選項卡
這個是觸發器的測試功能,可以檢驗你的觸發是否能夠進行。上方的句型欄是觸發器中設定的觸發語句,下方一欄是實際出現的指令,由你輸入
例如,上面所說的內力提取指令,如果我不知道英文括號不能作為觸發語句,把觸發語句設定為 復制內容到剪貼板 代碼:
^??【%s氣血%s】*【%s內力%s】%s(%d)%s/%s(%d)%s(+ 0)(思考:為什么要內力觸發前面的氣血部分?)
那么,為保險進行測試,就可以把實際的hp內容拷貝進下面一欄,比如 復制內容到剪貼板 代碼:
【 氣血 】 920 / 1316 [100%] 【 內力 】 1523 / 1784 (+ 0)然后點擊觸發測試,結果程序會告訴我,觸發無法匹配,那么我就知道,我這個語句有問題了,不能被觸發,然后就可以再檢查并修改
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
十四、狀態欄
狀態欄位于指令輸入欄上方灰色那條,默認為空白,右鍵點開可以進行顯示內容設置
狀態欄可以隨時顯示你想知道的內容,配合變量偵測和提取的觸發,可以極大程度的方便游戲。例如,我們可以把經驗、潛能、精力、內力、常用任務寫在狀態欄上。
如: 復制內容到剪貼板 代碼:
經驗:@exp | 潛能:@pot | 內力:@neili/@maxneili | 精力:@jingli/@maxjingli-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
簡易機器人的一些知識,就到此為止