?? zmud機器人制作.txt
字號:
本篇文章是《zmud使用指南》的姊妹篇。主要介紹在zmud環境下編制自動練功機器人。想玩好mud游戲,沒有高效優質的機器人將是很困難的事。機器人可以簡化枯燥重復的指令操作,可以進行準確的判斷控制。很難想象一個不懂得制作機器人的mud玩家會成為高手。
本文章的介紹將以zmud4.62中文版和中文mud游戲《俠客行》為例。制作機器人主要利用zmud中的trigger按鈕(機器人按鈕)。trigger的工作原理是判斷mud服務器回送的信息是否與trigger中的觸發器相同,相同則執行trigger中指定的命令或命令組。
trigger的組成部分:
class : 類名 -用于與其它的機器人相區別的名字。(相同功能的機器人多用相同的類名)
pattern : 觸發器-當mud服務器向你的電腦發送的信息與觸發器的文本相同時執行命令欄里的命令。
commands: 命令欄-滿足觸發器條件時執行的命令或命令組。(指令間以";"間隔)
實際上trigger就相當一個邏輯判斷結構。
if(如果) pattern 與mud 服務器匹配
then(那么)
do(執行) commands 1
else(否則)
do(執行) commands 2
下面以一個打坐吐納機器人為例講解:
______________________________________________________________________
class: pattern: commands:
----------------------------------------------------------------------
qifull 氣: 100/ 100 dazuo 10
jingfull 精: 100/ 100 tuna 10
dzend 你運功完畢,深深吸了口氣,站了起來。 tuna 10
tuend 你吐納完畢,睜開雙眼,站了起來。 dazuo 10
______________________________________________________________________
此機器人的作用是當使hp命令顯示玩家狀態時,如果精是滿的(屏幕顯示與pattern:"精: 100/ 100"完全相同時),觸發機器人類名為jingfull的機器人,執行tuna 10命令,開始吐納動作。當氣為滿值是與此相同執行打坐命令。當吐納完成后屏幕顯示"你吐納完畢,睜開雙眼,站了起來。",此時又觸發機器人tuend,執行dazuo 10命令。打坐完成后的顯示"你運功完畢,深深吸了口氣,站了起來。"又將觸發dzend,這樣循環下去,直到精不夠打坐或氣不夠吐納為止。為了讓機器人能在精氣恢復后自動繼續上述動作,還需要在標記計時器中設定每數秒執行一次"hp"命令,以隨時觸發此機器人達到循環打坐吐納的效果。此例中的"jing、qi、jingfull、qifull"是為了區分機器人而定義的類名。但有時候一組機器人只是為了完成一個功能,我們可以取相同的類名。如上例四個機器人的類名全部改為dztu。
______________________________________________________________________
class: pattern: commands:
----------------------------------------------------------------------
dztu 氣: 100/ 100 dazuo 10
dztu 精: 100/ 100 tuna 10
dztu 你運功完畢,深深吸了口氣,站了起來。 tuna 10
dztu 你吐納完畢,睜開雙眼,站了起來。 dazuo 10
______________________________________________________________________
在編制了許多功能不同的機器人之后,為了對機器人進行管理往往用按鈕來操作。制作機器人按鈕是通過菜單中定義按鈕選項來實現的。當toggle被選擇后,有按鈕按下和按鈕彈起兩種狀態。off caption為按鈕彈起的顯示內容,on caption為按鈕按下的顯示。on command為按鈕按下時執行的命令或命令組,off command為
按鈕彈起時執行的內容。此例要建立一個控制打坐吐納機器人的按鈕,應如下設置:
______________________________________________________________________
off caption : 打坐吐納
on caption : 停 止
on command : #t+ dztu
off command : #t- dztu
______________________________________________________________________
這樣在zmud的界面上方就出現了顯示為打坐吐納的按鈕,按下按鈕后顯示為停止并開始打坐吐納,再次按下按鈕就停止打坐吐納,按鈕彈起恢復后顯示為"打坐吐納"。指令#t+、#t-是zmud內建指令集中的指令。#t+表示打開機器人;#t-表示關閉機器人。
這樣一個簡單的機器人就完成了。
評價一個機器人的優劣主要是從復雜程度、功能、是否安全(安全主要是避免有些惡意玩家通過觸發你的機器人而將你致暈致死)、是否適合多種情況來綜合評價的。通過實際應用我們可能發現,上面的機器人還存在很多問題:
1、打坐吐納時間過長,可能因為食物和水的消耗而不能自然恢復精氣,造成停止打坐。
2、隨著年齡的增長精氣隨之增加,而造成不能觸發機器人而失效。
3、因為其它原因而導致的失敗,如日月神教使者的襲擊等。
對于每一個出現的問題我們都需要采取不同的對策,對機器人進行改造完善,以達到盡善盡美的程度。
第一個問題解決起來很簡單,只需要加一個自動進食的機器人即可。(事先須買好食物和水)
______________________________________________________________________
class: pattern: commands:
----------------------------------------------------------------------
dztu 你的精力增加了 halt;drink ji
______________________________________________________________________
第二個問題可以在每次精氣數值變化后手動修改,但這種解決方案似乎違背了制作機器人全自動化的初衷。實際上除此之外還是有解決方法的。我們通過zmud的強大功能把顯示在屏幕上的精氣數值抓取,用此數值進行判斷條件的滿足與否就能輕松的完成任務了。請看下面的機器人:
______________________________________________________________________
class: pattern: commands:
----------------------------------------------------------------------
status 精:%s(%d)/%s(%d) jing=%1;max_jing=%2
status 氣:%s(%d)/%s(%d) qi=%1;max_qi=%2
dztu 氣:@max_qi/ @max_qi dazuo 10
dztu 精:@max_jing/ @max_jing tuna 10
dztu 你運功完畢,深深吸了口氣,站了起來。 tuna 10
dztu 你吐納完畢,睜開雙眼,站了起來。 dazuo 10
dztu 你的精力增加了 halt;drink ji
______________________________________________________________________
比較一下兩個機器人的不同,我們發現在這個機器人中出現了幾個不同的符號:%s、(%d)。這些符號是zmud內建的通配符(相當于dos中的"*"、"?"),類似的還有* ---通配任何數字、字符或空白 ? ---通配任何單個字符
%d ---通配任何數字(0-9) %w ---通配任何字符串(a-z) %a ---通配任何數字或字串(%d+%w) %s ---通配空白(spaces、tabs)%x ---通配任何非空白pattern---精:%s(%d)/%s(%d) 表示用通配符通配相同位置的數字或空白。%s通配前后之間的所有空白符,(%d)通配此處的數字,括號表示作為一個變量的輸入。jing和max_jing為精的當前值和最大值的變量,按通配符在pattern中的順序,將(%d)通配的原值做為輸入賦給變量:jing=%1 (對應第一個(%d)) max_jing=%2 (對應第二個(%d))。如果當前屏幕顯示為:精: 140/ 150,則變量jing的值為140、變量max_jing的值為150。需要注意的是jing代表變量本身,而@jing代表變量jing的數值150。"精:@max_jing/ @max_jing"表示當精的數值全滿時觸發。 通過這種通配符和變量的應用,可以抓取任何數字和字符數據應用到機器人的制作當中。(如抓取自己及其他玩家的英文id和中文名字)。
______________________________________________________________________
class: pattern: commands:
----------------------------------------------------------------------
getid (%x)快步走了過來. chinese_name=%1;id here
autobow @chinese_name ?(%w)? english_id=%1;#wait 3000;bow @english_id
______________________________________________________________________
從這個例子可以看出getid類是抓取走來的玩家的中文名字並存儲在變量chinese_name中,id here是觀察此地玩家id的命令。autobow類是個捕捉英文id的機器人。通過上面抓取的中文名字,使用變量chinese_name的數值@chinese_name作為觸發並捕捉英文id的條件,把其后的英文字串存儲在變量english_id中。因為捕捉數值需要一定時間,所以需要延遲數秒(#wait 3000)再作出回應(bow @english_id)。不難看出這是個玩家走來后自動打招呼的機器人。在玩mud的過程中,戰斗是不可避免的。如何在戰斗中當氣少于某數值時自動逃跑是個非常常見的機器人。在這個機器人中對數值進行判斷再采取相應的動作是常見的應用。
______________________________________________________________________
class: pattern: commands:
----------------------------------------------------------------------
status 氣:%s(%d)/%s(%d) qi=%1;max_qi=%2
escape 檔案存儲完畢. #if @qi<100 {halt;quit} {addoil}
______________________________________________________________________
在這個機器人當中使用了zmud內建的指令#if,#if是一個判斷語句,標準格式爲: #if <關系表達式> {命令1} {命令2} 相當于如果條件滿足(即表達式值為真)則執行命令1,否則執行命令2.常見的關系操作符還有"< > <= >="等等,詳細的請參考zmud幫助。#if @qi<100 {halt;quit} {addoil}的意思就是當機器人被觸發后對條件進行判斷,如果當前的起氣少于100就退出戰斗,否則繼續戰斗。
在機器人的制作中經常需要利用zmud內建指令集中的指令和內建函數集中的函數,如上面例子里的#if、#wait、#t等等,只有對此熟練掌握,才能編制出優秀高效的機器人。因為指令集里的指令太多,不能在此一一介紹,將于另文《zmud內建指令集》中詳細解說。zmud中還有配合指令使用的內建函數集將于另文《zmud內
建函數集》中介紹。請有興趣的朋友參看。編制機器人和編制軟件程序一樣是一個有趣創造性的過程。一篇文章不能將所有的內容一一概括,本文主要是對編制機器人的方法作一個簡單的介紹,提供一些常見的編制思路和技巧。聰明的朋友可以舉一反三,不斷對此進行完善提出更有效優秀的思路。既做游戲中的高手,又在游戲中鍛煉了自己的編程能力,那才是本文真正重要的目的。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -