Re: [系統] 虛擬物品系統 & 怪物掉落虛擬物品系統測試
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間17年前 (2009/01/18 22:50)推噓0(0推 0噓 0→)留言0則, 0人參與討論串2/4 (看更多)
第二階段的測試以怪物掉落物的部份可以掉「實體物品」,實作
方式如下...
:::::::::::::: /d/obj/mob_drop/laechan/crazy1.c ::::::::::::::
mapping mob_drop=([
// 毒刺棘
ORIGIN_MOB_PATH+"tree1":
({
"laechan_crazy1_treeroot", "45", // treeroot 掉落機率 45%
"laechan_crazy1_treetentacle", "35", // treetentacle 掉落機率 30%
"/d/crazy/1/obj/bone1", "10", // bone 的掉落機率 10%
}),
]);
簡單的說就是以「第一個字元」是不是 "/" 來區分虛擬與實體,
因為虛擬物品的開頭都是 wiz_id,所以不會有 "/" 的情況,也
因此有 "/" 的情況就可以用來判斷這是在講實體物品。
/d/obj/mob_drop/mob_drop_d.c 的物品掉落判斷部份預定修改如
下...
object ob;
j=sizeof(drop_chance);
total=1000;
// 逐一判斷
for(i=0;i<j;i=i+2)
{
vobjs_name=drop_chance[i];
k=DROP_CHANCE[ drop_chance[i+1] ];
if(random(1000)<k)
{
if(vobjs_name[0..0]=="/" && // 指實體物品
file_exists(vobjs_name+".c")) // 而且檔案存在
{
if(!catch(ob=clone_object(vobjs_name))) // 而且 clone 出來也沒問題
{
ob->move_to(ppl);
tell_object(ppl,"\n"HIW"[ 你得到了一個"+ob->query("short")+HIW+
"! ]"NOR"\n");
}
}
else
{
add_user_vobjs(ppl,vobjs_name,1);
add_vobjs_msg(ppl,vobjs_name,1); // 這兩行可併為一行
}
break;
}
total=total-k;
}
由以上可以擴充到 vobjs_name 的其它設定...
一般名字 : 指虛擬物品
/ 開頭 : 指實體物品
#xxx,oo : 指呼叫寫在 mob_drop_d.c 裡頭的函數,並把 oo 帶進去
#xxx,oo 是暫定的給法,以毒刺棘為例..
// 毒刺棘
ORIGIN_MOB_PATH+"tree1":
({
"#drop_int,200-300", "35", // 掉錢, 範圍 200~300
"laechan_crazy1_treeroot", "25", // treeroot 掉落機率 45%
"laechan_crazy1_treetentacle", "15", // treetentacle 掉落機率 30%
"/d/crazy/1/obj/bone1","10", // bone 的掉落機率 10%
}),
]);
那麼,上面的 for 就改為...
string tmp;
mixed tmps;
if(random(1000)<k)
{
if(vobjs_name[0..0]=="#") // 指呼叫函數
{
tmp=vobjs_name[1..strlen(vobjs_name)-1];
tmps=explode(tmp,",");
if(function_exists(tmps[0],ob) && sizoef(tmps)==2) // 而且有該函數也有參數
call_other(tmps[0],this_object(),ppl,tmps[1]);
}
else if ...
然後寫個 drop_int 函數..
void drop_int(object ppl,string var)
{
mixed tmps=explode(var,"-");
int a;
a=atoi(tmps[0])+random(atoi(tmps[1])+1); // +1 避免 bug
if(ppl)
{
ppl->add("wealth",a);
tell_object(ppl,"你得到了 "+a+" 影特幣.\n");
}
}
不過上面的程式算寫的比較複雜了,所以 "/" 與 "#" 的部份我再想
看看有沒有更適合的方式─當然,還是要以方便 wiz 設定較好。
(但反正至少是可以用的,初期不用設定太多,要盡量把系統弄完整了
再來擴大設定)
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.224.103.206
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 2 之 4 篇):
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
15
19