作者laechan (小太保)
看板mud_sanc
标题Re: [系统] 虚拟物品系统 & 怪物掉落虚拟物品系统测试
时间Sun Jan 18 22:50:18 2009
第二阶段的测试以怪物掉落物的部份可以掉「实体物品」,实作
方式如下...
:::::::::::::: /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