[wizs] 虛擬物品系統&怪物掉落物系統修改

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間13年前 (2012/11/29 15:41), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串1/2 (看更多)
原則上今天起一直到改完,我會將我修改的東西都編寫在這 一篇上。原則還是一樣,這兩個東西沒有完成的話後續的東 西都沒辦法進行。 (我一直到剛剛才有空,之前只有零星時間有空) ==================================================== /adm/daemons/vobjs_d.c 新增 mapping mob_drop=([]); 這意思是 mob_drop 的相關設定也設在 vobjs_d.c 裡頭, 而且設定指令也用 vobjs 來做。 wiz 同樣不需瞭解 mob_drop 的資料結構。 完工 ==================================================== vobjs 新增 -quick 語法: vobjs -quick 物品名稱;種類標頭;kind;desc;value;carry 它可以允許 wiz 快速設定一種虛擬物品。 > vobjs -quick 毒刺棘的葉;m;怪掉落;;10;99 > vobjs -list 編號 名稱 設定者 性 質 攜帶 價錢 ============================================================================ m001 毒刺棘的根 laechan 怪掉落 99 10 一個毒刺棘的樹根,可以向收集品商人購買。 m002 毒刺棘的葉 laechan 怪掉落 99 10 一個毒刺棘的葉,可以向收集品商人購買。 s001 生命水晶 laechan 特殊 1 10000 一顆清澈無暇的水晶,包含著諸神的魔力在裡面。 ============================================================================ 上面指令的好處就是,wiz 可以把「大批」要做的東西都先 在記事本編好,然後一次貼上即可。敘述的部份是可以空白 的(它會帶出預設值),而其實種類標頭以後的東西都可以空 白,例如.. > vobjs -quick 毒刺棘的葉;m;;;;; > vobjs -list 編號 名稱 設定者 性 質 攜帶 價錢 ============================================================================ m002 毒刺棘的葉 laechan 怪掉落 99 10 一個毒刺棘的葉,可以向收集品商人購買。 ============================================================================ 這意思就是,性質為怪掉落、攜帶量99、價錢10、以及敘述 都有「預設值」。 為了方便起見,我並沒有採「遞迴」的做法,以後有空再做 即可,採遞迴在執行的效率上是比較高的。 完工 ==================================================== 新增 vobjs -mob_drop 語法。 > vobjs -mob_drop 怪物掉落物設定選單: ================================ 1.創建新目錄 2.刪除某目錄(laechan 限定) 3.列出所有目錄 4.列出某一目錄下的所有設定 5.列出所有目錄下的所有設定 6.進入某一目錄做細部設定 7.離開 ================================ 請選擇: 完工 =================================================== 完成 mob_drop 的功能 1 及功能 3。 請選擇: 1 請輸入目錄(如 /d/crazy/1/mob): /d/crazy/1/mob /d/crazy/1/mob 目錄初始化 ok! 請選擇: 3 目錄列表: /d/crazy/1/mob 使用目錄做為主 key 的好處,就是底下的怪物就不需要給 完整的路徑名,例如要設 /d/crazy/1/mob/tree1.c 的資料 時,只需要給 tree1 這個 key name 就行了。 完工 =================================================== 完成 mob_drop 的功能 6。 > vobjs -mob_drop 怪物掉落物設定選單: ================================ 1.創建新目錄 2.刪除某目錄(laechan 限定) 3.列出所有目錄 4.列出某一目錄下的所有設定 5.列出所有目錄下的所有設定 6.進入某一目錄做細部設定 7.離開 ================================ 請選擇: 6 請輸入目錄(如 /d/crazy/1/mob): /d/crazy/1/mob /d/crazy/1/mob 這個目錄不存在喔!! 請輸入要創建的目錄(如 /d/crazy/1/mob): /d/crazy/1/mob /d/crazy/1/mob 目錄初始化 ok! 怪物掉落物設定選單: ================================ 1.創建新目錄 2.刪除某目錄(laechan 限定) 3.列出所有目錄 4.列出某一目錄下的所有設定 5.列出所有目錄下的所有設定 6.進入某一目錄做細部設定 7.離開 ================================ 請選擇: 6 請輸入目錄(如 /d/crazy/1/mob): /d/crazy/1/mob 格式: 怪物檔 set xx = 機率/怪物檔 del xx/怪物檔 remove/怪物檔 list /d/crazy/1/mob: tree1 set m001 = 100 設定 ok. 格式: 怪物檔 set xx = 機率/怪物檔 del xx/怪物檔 remove/怪物檔 list /d/crazy/1/mob: tree1 set m002 = 100 設定 ok. 格式: 怪物檔 set xx = 機率/怪物檔 del xx/怪物檔 remove/怪物檔 list /d/crazy/1/mob: tree1 list ([ "m001" : 100, "m002" : 100 ]) 請按 enter 鍵繼續... 格式: 怪物檔 set xx = 機率/怪物檔 del xx/怪物檔 remove/怪物檔 list /d/crazy/1/mob: list ([ "tree1" : ([ "m001" : 100, "m002" : 100 ]) ]) 請按 enter 鍵繼續... 格式: 怪物檔 set xx = 機率/怪物檔 del xx/怪物檔 remove/怪物檔 list /d/crazy/1/mob: tree1 del m002 刪除 ok. 格式: 怪物檔 set xx = 機率/怪物檔 del xx/怪物檔 remove/怪物檔 list /d/crazy/1/mob: tree1 list ([ "m001" : 100 ]) 請按 enter 鍵繼續... 格式: 怪物檔 set xx = 機率/怪物檔 del xx/怪物檔 remove/怪物檔 list /d/crazy/1/mob: tree1 remove 移除 ok. 格式: 怪物檔 set xx = 機率/怪物檔 del xx/怪物檔 remove/怪物檔 list /d/crazy/1/mob: list ([ ]) 請按 enter 鍵繼續...q 格式: 怪物檔 set xx = 機率/怪物檔 del xx/怪物檔 remove/怪物檔 list /d/crazy/1/mob: q 怪物掉落物設定選單: ================================ 1.創建新目錄 2.刪除某目錄(laechan 限定) 3.列出所有目錄 4.列出某一目錄下的所有設定 5.列出所有目錄下的所有設定 6.進入某一目錄做細部設定 7.離開 ================================ 請選擇: q 感謝你的使用. 簡單的說就是進入某一個目錄做操作,若目錄不存在就會 直接跳到目錄創建的功能,輸入目錄就能創建。 共有四種操作指令: set - 設定資料 del - 刪除資料 remove - 移除資料錄 list - 列出設定 完工 =================================================== -- ※ 發信站: 批踢踢實業坊(ptt.cc)

11/29 15:59, , 1F
辛苦了
11/29 15:59, 1F
※ 編輯: laechan 來自: 210.61.157.53 (11/30 16:54)

11/30 16:54, , 2F
原則上 mob_drop 也會寫快速設定/刪除/移除指令
11/30 16:54, 2F

11/30 16:55, , 3F
vobjs -mob_drop /d/crazy/1/mob/tree1 set m001 = 1
11/30 16:55, 3F

11/30 16:55, , 4F
語法類似這樣
11/30 16:55, 4F

12/03 08:35, , 5F
掉落機率可以隨意變動嗎?(想要某個條件下變高...)
12/03 08:35, 5F
這變成是全域的,或者是限定範圍的,例如 RO 有所謂的 掉寶率增加 10%、或者打OX種類的怪物掉寶率增加 n% 這 樣的設計,前者就是全域,後者就是限定範圍。 那因為以「不改怪物檔案」為原則,所以你可以想像掉寶 的部份是這麼寫的.. "/adm/daemons/vobjs_d"->check_mob_drop(mob,base_name(mob)); int check_mob_drop(object mob,string files) { . . tmps=keys(mob_drop); foreach(tmp in tmps) if(mob_drop[tmp]>random(1000)) // 符合掉寶機率時 exec_mob_drop(tmp); // 就執行掉寶 . . } 那麼,可以動手腳的部份就是 1000 這個值.. 一、全域時 1000 -> 500 就代表掉寶率 x2 二、符合某條件時機率提高 if(....) another_random_value[tmp]=500; foreach(tmp in tmps) { if((int)another_random_value[tmp]>0) { if(mob_drop[tmp]>random(another_random_value[tmp])) exec_mob_drop(tmp); } else if(mob_drop[tmp]>random(1000)) exec_mob_drop(tmp); } 那麼,進一步來說,那個 if(....) 代表了 wiz 有自訂函 數的意思。那麼,做法就是如下.. if(function_exists("xxx",mob)) another_random_value=(mapping)mob->xxx(ppl); 也就是讓自訂函數去控制整組的 another_random_value。 而你自訂的 xxx 函數可能長這樣.. mapping xxx() { if(ppl符合某條件) return (["m001":500]); // m001 這物品的掉寶率增加 1 倍 return ([]); } 也就是只有符合特定條件時,才改變特定物品的掉寶率。 你可以由最下面往上看就知道我的意思,也就是你若有自 訂函數,那我可以寫支援自訂函數的程式段。 ※ 編輯: laechan 來自: 210.61.157.53 (12/03 09:35)

12/03 09:47, , 6F
justin 你看一下上面有無問題,自訂函數若不太瞭解我
12/03 09:47, 6F

12/03 09:48, , 7F
再寫個範例,原則上就是傳回一個mapping的東西
12/03 09:48, 7F
文章代碼(AID): #1Gjn6tGm (mud_sanc)
文章代碼(AID): #1Gjn6tGm (mud_sanc)