[wizs] 怪物掉落物系統

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間17年前 (2009/01/17 15:23), 編輯推噓0(000)
留言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)
文章代碼(AID): #19SOThL_ (mud_sanc)
文章代碼(AID): #19SOThL_ (mud_sanc)