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