作者eplis (Eplis)
看板mud_mars
標題Re: [心得] 區域寫作 mob_prog 2
時間Tue Dec 18 23:27:29 2012
※ 引述《eplis (Eplis)》之銘言:
這篇主要是介紹 mob 專用指令,我會列出比較常用的
對於想做區域的人應該很夠了
上一篇介紹的是mob的程式,假設mob要產生一個任務道具那該怎麼做
以下是所有的mob指令:
mpjunk
mpechoat
mpechoaround
mpkill
mpmload
mpoload
mpgoto
mpat
mptransfer
mpforce
mpmodify 2012/12/17新增
以下開始一一介紹:
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
講完了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
推 prtsrc:mpload 只能 load 在同一格嗎? O_o 10/14 17:14
→ prtsrc:mpm or mpo 都問一下 O_o 10/14 17:16
→ Jate:你可以用mpat + mpload 來運作 10/14 17:47
→ Jate:甚至可以用mpgoto + mpload 來做類似的事 不過效果不同 10/14 17:48
→ eplis:mpmload mpoload 10/14 18:06
--
Mars-瑪爾斯群英傳,為一種多人的地下城文字網路遊戲(MUD),
以西方魔法奇幻風格為背景,讓玩家扮演各種職業進行冒險、解謎。
IP:
220.135.242.105:8888 討論板:
PTT mud_mars
Eplis @ Mars
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.218.24.252
推 Jate:恩 有這個就可以做聲望系統了xdddd 12/19 00:51
推 stabber111:原來如此 XDD 12/19 01:45
推 dasskabusk:希望聲望系統趕快出來 然後跟陣營連在一起 (不是善惡) 12/19 03:33
→ dasskabusk:而是跟國家 (哈里亞 亞伯特 諾瓦提莉亞) 特殊技能裝備 12/19 03:34
→ dasskabusk:之類的連在一起~~~ 12/19 03:34
推 prtsrc:讓每個人可以選擇國籍 XD 12/19 09:26
→ eplis:有國籍設計喔 只是完全沒內容XD 12/19 10:32
推 dasskabusk:我知道阿 所以我才說希望可以跟國籍系統連在一起阿 12/20 01:09