[wizs] 虛擬物品系統&怪物掉落物系統修改
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間13年前 (2012/11/29 15:41)推噓2(2推 0噓 5→)留言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
11/30 16:54, 2F
→
11/30 16:55, , 3F
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
12/03 09:47, 6F
→
12/03 09:48, , 7F
12/03 09:48, 7F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
29
45