常言笑的家

          Spring, Hibernate, Struts, Ajax, RoR

          Zmud新手機器人指南

          機器人的主體構架是觸發器,類似電腦的操作系統。
          觸發器的原理,就是根據你給出的條件,自動偵測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-------------------------------------------------------------------------------
          -------------------------------------------------------------------------------
          簡易機器人的一些知識,就到此為止

          posted on 2011-08-15 20:51 常言笑 閱讀(7951) 評論(2)  編輯  收藏

          Feedback

          # re: Zmud新手機器人指南 2014-10-09 11:51 劉一笑

          歷久常新,一直有幫助啊  回復  更多評論   

          # re: Zmud新手機器人指南 2015-08-24 12:44 shader

          幫了新手大忙啊  回復  更多評論   



          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 句容市| 颍上县| 新建县| 湛江市| 翼城县| 静乐县| 刚察县| 轮台县| 松潘县| 都昌县| 柯坪县| 苏尼特左旗| 田林县| 锡林浩特市| 连城县| 会昌县| 胶州市| 凌源市| 明溪县| 清新县| 江陵县| 武夷山市| 鱼台县| 滁州市| 体育| 错那县| 仙游县| 黄陵县| 蓝山县| 萝北县| 油尖旺区| 石渠县| 姜堰市| 南江县| 灌云县| 崇仁县| 西盟| 丰台区| 通化市| 定远县| 长宁区|