[wizs] 怪物掉落物系統
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間17年前 (2009/01/17 15:23)推噓0(0推 0噓 0→)留言0則, 0人參與討論串1/5 (看更多)
主檔: /adm/daemons/mob_drop.c
(實際檔案已經移到 /u/h/highelf/mob_drop.c)
#define MOB_DROP_PATH "/d/obj/mob_drop/"
#include "mob_drop.h"
/d/obj/adm 下有 d_master.c 檔,所有 wiz 都會有自己的目錄權限
,例如 quest 的就是 /d/obj/mob_drop/quest。
目前 highelf 擁有該目錄的主設定權。
mapping setting_data_ob=([]);
在 mob_drop.c 裡頭有一個 setting_data_ob 資料,這東西跟上面
的 mob_drop.h 裡頭定義的 setting_data 是相關的。
:::::::::::::: /u/h/highelf/mob_drop.h ::::::::::::::
#define setting_data ([\
"/d/crazy/1/mob":"laechan/crazy1",\
])
上面的意思就是,只要怪物的檔名是「/d/crazy/1/mob」開頭的話,
該怪物在陣亡時會掉落什麼物品,就由「/d/obj/mob_drop/laechan/crazy1.c」
來控制。
它的好處就是,因為很多 wiz 都會自訂掉落物控制檔,依照目錄名
來分的話就不會去設到別人的,而且同一目錄的怪物也幾乎等於同一
區域的怪物(所以這裡就可勾勒出,若未來移怪物到 /area 下,其分
類方式也應該按照 /area/mob/大陸/區域名/ 來分)
而 /d/obj/mob_drop/laechan/crazy1.c 只要被載入,就會自動存到
setting_data_ob 裡頭去,儲存方式就是...
setting_data_ob["/d/obj/mob_drop/laechan/crazy1.c"] = crazy1物件
比方玩家開始殺這區域的第一隻怪,這時 setting_data_ob 就儲存了
crazy1.c 物件,等玩家殺第二隻怪時,系統就可以本地讀這個物件,
不用另外再去 find_object_or_load。
在 mob_drop.c 裡頭只有一個函數 mob_drop...
varargs void mob_drop(object ppl,object mob,string check)
ppl : 殺死怪物的玩家
mob : 被殺的怪物
check : 節慶判斷(varargs 針對的就是這個參數的可給可不給)
節慶的部份稍後再說。
mob_drop 函數會做幾件事...
一、先讀出 mob 這個怪物所在的目錄名
(我覺得這個有必要寫成 simul_efun...)
二、判斷該目錄有沒有被定義在 setting_data 中,例如上面的例
子,七域第一層的怪物若陣亡時,mob_drop 就會判斷到七域
第一層這個目錄有被定義。
三、如果有定義在 setting_data 中,就去讀相對的 setting_data_ob
,然後讓該 ob->mob_drop_check(ppl,files,check)
若沒有定義,就不做任何事
四、最後判斷節慶的部份
節慶的判斷有兩種,一種是「全域式」的,不管打死什麼怪物
都會做節慶判斷,另一種是「限定區域式」的,在特定節慶只
有打死特定目錄的怪才會做節慶判斷。
所以三的部份才會把節慶參數也一併傳過去。
例如說,我們設定在新年的時候打怪,會有 20% 的機率拿到紅
包袋,若沒拿到就執行原先的掉落設定,這時..
switch(check)
{
case "newyear":
if(random(100)<20)
{
add_user_vobjs(ppl,"laechan_newyear_redbag",1);
add_vobjs_msg(ppl,"laechan_newyear_redbag",1); // 這兩個可併在一起
break;
}
ob->mob_drop_check(ppl,files,check); // 改執行原先的判斷
break;
.
.
}
這樣的話,「打死任何怪」,就有 20% 的機率先判斷能不能拿到
紅包袋,不行的話就做原先的掉落設定,這時候原先的掉落物的
掉落機率就通通都要再打八折。
而上面的好處就是也可以針對「特定幾個目錄的怪物」來做節慶
相關判斷,所以實際上 ob->mob_drop_check 時是不需要傳節慶
相關參數過去的。(但有也無妨,以方便 wiz 為主)
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: laechan 來自: 220.131.225.67 (01/17 15:57)
討論串 (同標題文章)
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
15
19