Re: [心得] 區域寫作 mob_prog 2
※ 引述《eplis (Eplis)》之銘言:
※ 引述《eplis (Eplis)》之銘言:
這篇主要是介紹 mob 專用指令,我會列出比較常用的
對於想做區域的人應該很夠了
上一篇介紹的是mob的程式,假設mob要產生一個任務道具那該怎麼做
以下是所有的mob指令:
mpjunk
mpechoat
mpechoaround
mpkill
mpmload
mpoload
mpgoto
mpat
mptransfer
mpforce
mpmodify 2012/12/17新增
mprandomatk 2012/12/18新增
以下開始一一介紹:
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,第二個是做啥事,
請在安全合理公平的範圍內自由發揮。
mpmodify,新的指令!直接讓mob增加玩家的某個謎參數值用的
例如你要玩家蒐集三個物品A,以往的做法如下:
>give_prog obj~
if obj($n) ==0
mpjunk obj
mset $n obj 1
else
if obj($n) ==1
mpjunk obj
mset $n obj 2
else
if obj($n) ==2
mpjunk obj
tell $n 恭喜你蒐集完了
endif
endif
endif
~
要一個一個判斷他的值是多少,非常的麻煩,現在可以直接用mpmodify指令
語法是 mpmodify [變數] [玩家ID] [數值]
[變數]: 就是謎的變數
[玩家ID]: 通常是用 $n
[數值]: 數值只接受 0~1000 (也許未來會變?)
所以我要改變玩家傳奇護腿(legendleg)的數據,想要讓他+1的話就只需要這樣寫
>xxx_prog~
mpmodify legendleg $n 1
~
就這樣!完全不需要去判斷他原本數據是多少!
很簡單吧!
以後寫區域寫迷的人可以更輕鬆,減少程式量了!
我也不用一直debug了 T_T
mprandomatk 這個指令是讓NPC隨機攻擊任一玩家,機率性的,不一定每次
呼叫都會成功變換目標,免得讓王太難捉摸
只需要讓 mob 做這個指令就會自動進入判定換目標了
ex:
>fight_prog 100~
if rand(30)
mprandomatk
endif
~
王每次戰鬥會有30%機率進行換目標判定,建議不要太常呼叫這指令
尤其小怪不要用,放在戰鬥時間長的王就好
講完了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 也是個大工程!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.251.218.246
推
10/14 17:14,
10/14 17:14
→
10/14 17:16,
10/14 17:16
→
10/14 17:47,
10/14 17:47
→
10/14 17:48,
10/14 17:48
→
10/14 18:06,
10/14 18:06
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.218.24.252
推
12/19 00:51,
12/19 00:51
推
12/19 01:45,
12/19 01:45
推
12/19 03:33,
12/19 03:33
→
12/19 03:34,
12/19 03:34
→
12/19 03:34,
12/19 03:34
推
12/19 09:26,
12/19 09:26
→
12/19 10:32,
12/19 10:32
--
Mars-瑪爾斯群英傳,為一種多人的地下城文字網路遊戲(MUD),
以西方魔法奇幻風格為背景,讓玩家扮演各種職業進行冒險、解謎。
IP:220.135.242.105:8888 討論板: PTT mud_mars
Eplis @ Mars
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.218.24.252
討論串 (同標題文章)
完整討論串 (本文為第 5 之 5 篇):
mud_mars 近期熱門文章
10
10
PTT遊戲區 即時熱門文章
15
19