Re: [心得] 區域寫作 mob_prog

作者: eplis (Eplis)   2013-01-16 11:03:26
※ 引述《eplis (Eplis)》之銘言:
mob_prog = mob_program 即 mob 的動作程式,舉凡是給它錢
告訴他什麼話,給他什麼東西都是由這邊操控,這是最簡易版的
程序控制,不需要真正寫到程式,但是也是一連串的邏輯控制就是了。
以下是一個例子 巨型野兔(huge hare)
>fight_prog 100~
if rand(25)
mset hare level 5
emote 咚!咚!咚!跳到了你的面前
bare multi $n
mset hare level 11
endif
~
>death_prog 100~
mpjunk all
if rand(10)
mpoload 5601 10
break
endif
if rand(35)
mpoload 5608 1
mpecho 你發現腳邊有一個土堆!
endif
~
|
兔子的動作主要分兩種 program,分別是 fight_prog 與 death_prog
program 種類有很多,格式是這樣:
注意!
任何prog內禁止使用tab、全形空白,compiler絕對不會報錯
但是你的prog內容會完全無效!!
>[prog_type] [argument]~
~
>是prog進入點
[prog_type]rog 種類,總共有以下
1. SPEECH_PROG //說話程式
2. RAND_PROG //隨機啟動程式
3. FIGHT_PROG //戰鬥程式
4. DEATH_PROG //死亡時啟動程式
5. HITPRCNT_PROG //mob血量百分比程式
6. ENTRY_PROG //生物進入房間起動的程式
7. GREET_PROG //生物見面啟動程式
8. GIVE_PROG //被給予時啟動程式
9. BRIBE_PROG //被給錢時啟動程式
1. speech_prog 就是你告訴他什麼話時會啟動的程式,例如
>speech_prog [p] 給我錢~
say 才不要咧!
~
當玩家 "tell mob 給我錢" 的時候,NPC會說"才不要咧!"
[p] 參數為了良好的程式習慣,就都要加就對了!
2. rand_prog 就是mob會不斷的隨機一個亂數,然後執行這段程式
>rand_prog 50~
say 耶 50% 機率可以說話!
~
嗯,沒錯!後面接的參數就是機率!這個 rand_prog 每個 tick
就會執行一次亂數,所以是非常吃系統資源的,我自己是完全禁
止使用這種prog,沒意義也沒效率
3. fight_prog 就是戰鬥的動作,後面接的也是參數。例如:
>fight_prog 100~
say 竟敢打我!
~
這個例子不是很好,因為它每一回合都會說一次 "竟敢打我!"
機率是 100% 嘛!來應用一下剛剛兔子的prog
>fight_prog 100~
if rand(25)
mset hare level 5
emote 咚!咚!咚!跳到了你的面前
bare multi $n
mset hare level 11
endif
~
這邊就是每回合都會進入這個戰鬥程式,第二行的 if rand(25) 代表有
25%的機率會進入這個條件,if 當然要用 endif 包起來,這就是程式的
概念,所以要寫難度高的、複雜的prog建議要有基礎的程式底子。
mset xxxx 是 mob 動作,這是改變兔子等級到 5 級,然後使用 bare multi
使用完後再改回 11 級,因為等級太高打玩家會太痛XD
4. death_prog 死亡時會啟動的程式,一樣用數字當作機率參數。
>death_prog 100~
mpjunk all
if rand(10)
mpoload 5601 10
break
endif
if rand(35)
mpoload 5608 1
mpecho 你發現腳邊有一個土堆!
endif
~
這個例子稍微複雜一點,死亡時清空身上的裝備(mpjunk all),這邊使用
mpjunk 而不是 mppurge,請注意以後清東西請用這個指令,不要再用mppurge
if rand(10) 有10%機率會產生(mpoload) 5601 這個物品
break 則是直接結束整個 death_prog
if rand(35) 有35%機率產生 5608,且在房間廣播 "你發現腳邊有一個土堆!"
某個很難打的重要戒指 death_prog 很簡單,
>death_prog 5~
mpoload xxx 1
~
這樣就了解了
5.hitprcnt_prog 血量比例程式,
當 mob 的 hp 低於某百分比時所進行的prog
>hitprcnt_prog 50~
say HP低於一半啦!
~
不過通常不會單獨使用,而是用另外一種方式出現在其他 prog 裡面
例如在 fight_prog 裡面常用
if hitprcnt($i) < 50
say 我的血量低於一半,開始變身!
mset eplis level 130
endif
這邊就是龍王不斷變強的秘密(?),每到一定的血量就提升自己的等級
6. entry_prog 該NPC進入到一個新房間會驅動的程式
>entry_prog 80~
say 我有80%的機率在走到新房間時會說這句話!
~
高階應用:如果想做NPC看到某個ID會做某個事情,很簡單
>greet_prog 100~
if name($n)== eplis
say 遇到 eplis 囉
endif
~
如果想做出解救npc/逃亡的效果,搭配上述的做法即可。例如我們要救出
ID是 eplis 的 npc,若是守衛看到eplis會攻擊eplis。
guard prog:
>greet_prog 100~
if name($n)==eplis
say 遇到 eplis 囉!快打他
mpkill eplis
endif
~
eplis prog:
>entry_prog 100~
say 我進到新房間囉!先觀察環境
look
~
基本上就是讓eplis這個npc到了新房間先look,
然後look就會觸發guard的greet_prog
7. greet_prog 碰到該mob會觸發的程式,
>greet_prog 100~
say 您好歡迎光臨!
~
通常作服務業賣商品的都要很有禮貌,所以都會作類似這種 prog
不過有時候NPC進到商店,理論上 NPC 不可能跟 NPC 買東西吧!
所以都還會加一個判斷式,判斷是不是人,阿不是啦!是不是玩家
8. give_prog 玩家給予物品時會觸發的程式,要記得物品名稱是完整名稱喔
>give_prog dragon pearl~
say 哇!這麼好給我飛龍珠!那我就收下啦!
mpjunk all
~
通常做迷的時候一定要把物品給刪除(mpjunk),避免玩家從你(mob)身上
得到好處之後殺人越貨再來一次XD
9. bribe_prog 賄賂程式,參數是金額
>bribe_prog 5000~
say 謝謝你給我5000金幣!
mpjunk coins
~
概念如同 give_prog,計得刪除金幣。
bribe_prog 還有一個概念,就是參數以上也視同接受,例如上面的例子
你給 mob 5001 金幣,他也是會說 歇歇你給我5000 金幣
所以要做出上下限的概念比較搞剛一點,要做這樣子:
>bribe_prog 5000~
say you gave at least 5000 coins!!
mpjunk coins
~
>bribe_prog 1~
say you gave less than 5000 coins!!
mpjunk coin
~
這樣給予不到5000金幣的時候也會有反應了!
補充:
現在的mob有內建四個變數,分別是 mobphase, mobvar1, mobvar2, mobvar3
可以自己靈活運用!設定的方式就是 mset $i mobphase 1
很多人喜歡做召喚怪、產生物品,以往因為 mpoload, mpmload xxx 只能一直產生
有些人會刻意讓mob無限產生導致系統不穩,現在可以透過設定變數來達到功能
舉例:
if mobvar1($i)==0
mset $i mobvar1 1
mpmload xxx
mpoload ooo
break
endif
如此一來就不會一直產生 xxx ooo 了
好了 prog 介紹到這邊,還有很很多的參數沒介紹到,再下一篇會出現
作者: prtsrc (ATM)   0000-00-00 00:00:00
推!!希望其他的也趕緊出來 O_o
作者: RosyLaLa (帥氣拉拉)   0000-00-00 00:00:00
Pan大大要投稿區域!!
作者: kons (kons)   0000-00-00 00:00:00
開條新路從哈里亞往亞伯特吧,不然要學游泳走芬士多河或者走很恐怖的雨林,走出來背包不見,錢少一半
作者: prtsrc (ATM)   0000-00-00 00:00:00
可以坐船 O_o
作者: eplis (Eplis)   0000-00-00 00:00:00
喝飛行也可以走河啊 況且魚還被nerf過
作者: marsmacoto (marsmacoto)   0000-00-00 00:00:00
雨林背包會不見? 有這種事情嗎?
作者: kons (kons)   0000-00-00 00:00:00
有,我解謎道具放背包被偷,現在不能解大地了
作者: laechan (揮淚斬馬雲)   2013-01-16 17:00:00
有 import 設定的功能嗎
作者: eplis (Eplis)   2013-01-16 17:29:00
沒有, 系統很陽春哪..不過我不太懂,可以請L大解釋一下嗎!
作者: laechan (揮淚斬馬雲)   2013-01-17 14:18:00
例如設定一隻 mob 可能要下多次指令來做細部設定那能不能只用一個指令,以"匯入資料"的方式來一次設好呢
作者: Jate (桔子)   2013-01-17 16:16:00
L大應該是指 類似mob屬性能先寫個excel表格 , 然後直接匯入生成基本的mob屬性吧
作者: laechan (揮淚斬馬雲)   2013-01-17 17:31:00
類似有個指令叫 import_prog < 某個設定檔然後該指令依據該檔案的內容, 去對怪物做各個 xxx_prog

Links booklink

Contact Us: admin [ a t ] ucptt.com