[心得] 區域寫作 mob_prog 2

看板mud_mars (瑪爾斯群英傳)作者 (Eplis)時間12年前 (2012/10/13 20:57), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串1/5 (看更多)
這篇主要是介紹 mob 專用指令,我會列出比較常用的 對於想做區域的人應該很夠了 上一篇介紹的是mob的程式,假設mob要產生一個任務道具那該怎麼做 以下是所有的mob指令: mpjunk mpechoat mpechoaround mpkill mpmload mpoload mpgoto mpat mptransfer mpforce 以下開始一一介紹: mpjunk,刪除物件指令,請用此指令取代mppurg 今天我們要刪除mob身上的金幣,則語法是 mpjunk coins 若要直接刪除全部則是 mpjunk all mpechoat,在某處使用廣播,利用這個方法mob可以直接遠端在某個房間進行廣播 此指令較少使用。 mpechoaround,在某個區域使用廣播,此指令較少使用。 mpkill,mob開始攻擊目標,例如 mpkill eplis mpmload,mob產生mob,例如編號007是一隻叫Eplis的mob 則產生一個Eplis的指令是 mpmload 007 不過通常我都會拒絕使用這個指令,除非是用在 death_prog 裡面 因為放在其他地方,沒有足夠的程式去支援控制產生多少隻mob 也就是你儘用 .are 檔案沒辦法控制數量,可能造成玩家大量產生mob 導至系統附單,所以一般來說我會禁止使用這個。 mpoload,mob產生物品的指令,有兩個參數,第一個事物品編號,第二個是等級 切記請勿 mpoload 比 mob 本身等級還高,例如Lv30的mob請不要mpoload Lv31的設定。 飛龍珠(Dragon pearl)的編號是 407,產生一個就是 mpoload 407 100 這樣就會產生一個 100 級的飛龍珠在 mob 身上。 聰明的玩家已經想到我怎麼做怪物掉落了,基本上就是寫在 death_prog 裡面 通常是長這個樣子 >death_prog 100~ mpjunk all if rand(30) mpoload 427 100 endif if rand(10) mpoload 426 13 endif ~ 這段程式就是mob死亡後會清空身上的物品,然後有30%機率產生物品編號427等級100 和10%的機率產生物品編號426等級13的物品,這兩者是獨立事件,互不相依。 如果你希望只掉落一個物品的話,就加入 break 語法,例如 >death_prog 100~ mpjunk all if rand(30) mpoload 427 100 break endif if rand(10) mpoload 426 13 endif ~ 這樣子的話當系統先產生了427這個物品,就不再往下走了,所以沒產生427 就有10%機率產生426,要搞清楚兩者個相依性。 mpgoto,mob前往何處,只有一個參數,就是房間編號。 如果希望mob前往一個編號228的房間,mmpgoto 228 mpat,mob在何處做啥事,參數有兩個,第一個就是房間編號,第二個是指令 這個較少使用。 mptransfer,傳送,兩個參數,第一個是房間編號,第二個是傳送對象ID mptransfer eplis 311就是傳送 Eplis 到哈水 mpforce,命令,兩個參數,第一個是命令對象ID,第二個是做啥事, 請在安全合理公平的範圍內自由發揮。 講完了mob指令還有一個東西很重要,我們常會用 greet_prog 來做一些迷的提示 但 greet_prog 是對任何生物都會觸發的,無論是 NPC or Player 總不可能 NPC 會主動找 NPC 解任務吧? 接下來講的是判斷,其實之前的例子已經使用過了,就是 rand 函式。 if rand(50) endif 要注意的是變數當中$n 代表的是玩家$i 代表的是NPC本身 以下列出常用的判斷式: isnpc($*) 判斷是否為NPC Ex: isnpc($n) 判斷眼前這個是 NPC 嗎 ispc($*) PC isimmort($*) imm isgood($*) 善良陣營 isfight($*) 戰鬥狀態 以下有判斷符號 == > < >= <= 這些都可使用 hitprcen($*) <= integer 判斷血量百分比是否小於等於多少 inroom($*) == integer 該NPC是否在房間編號 xxx level($*) == integer 對象的等級 class($*) == integer 對象的職業 name($*) == string 對象ID是否等於 string 大概就介紹到這邊,有這些東西應該就可以做出變化很大的區域了 所以玩家可以感受得到一個區域是可以很簡單,也可以很複雜的 下一篇要來介紹 object 也是個大工程! -- Mars-瑪爾斯群英傳,為一種多人的地下城文字網路遊戲(MUD), 以西方魔法奇幻風格為背景,讓玩家扮演各種職業進行冒險、解謎。 IP:220.135.242.105:8888 討論板: PTT mud_mars Eplis @ Mars -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.251.218.246

10/14 17:14, , 1F
mpload 只能 load 在同一格嗎? O_o
10/14 17:14, 1F

10/14 17:16, , 2F
mpm or mpo 都問一下 O_o
10/14 17:16, 2F

10/14 17:47, , 3F
你可以用mpat + mpload 來運作
10/14 17:47, 3F

10/14 17:48, , 4F
甚至可以用mpgoto + mpload 來做類似的事 不過效果不同
10/14 17:48, 4F

10/14 18:06, , 5F
mpmload mpoload
10/14 18:06, 5F
文章代碼(AID): #1GUML4aE (mud_mars)
文章代碼(AID): #1GUML4aE (mud_mars)