作者laechan (小太保)
看板mud_sanc
标题Re: [wizs] 怪物掉落物系统
时间Sat Jan 17 15:57:12 2009
现在来看 /d/obj/mob_drop 下的档案,先看 /d/obj/mob_drop/mob_drop.h
:::::::::::::: /d/obj/mob_drop/mob_drop.h ::::::::::::::
// Laechan@Sanc add in 2007/11/25
// 掉宝机率设定
// 600 代表 60%, 以此类推
#define MOB_DROP_D "/d/obj/mob_drop/mob_drop_d.c"
#define DROP_CHANCE ([\
"60":600,\
"55":550,\
"50":500,\
"45":450,\
.
.
.
(靠北这个 2007 年就写了,我这一年多都在干嘛...Orz)
这东西的用意就是,好比说我们定义了一串 drop_chance(请看掉落
机率设定那篇),设法就是
mixed drop_chance=({});
drop_chance = ({"物品a", "60", // 掉落机率 60%
"物品b", "2.5", // 掉落机率 2.5%
"物品c", "0.1", // 掉落机率 0.1%
})
则在做 for 回圈时它的主要写法就是..
j=sizeof(drop_chance);
total=1000;
for(i=0;i<j;i=i+2)
{
k = DROP_CHANCE[ drop_chance[i+1] ];
if(random(total)<k)
{
执行掉落物品;
break;
}
total=total-k;
}
它的用意就是,因为 "0.1%" 这种东西实际上是 1/1000,所以
才会定义一个对照用的东西,这样在给定机率时就可以给字串的
"0.1",在做判断时它就会自动对回 1 这个数字。
它有两种好处...
一、因为机率的设定几乎是固定的。就固定那几种而已,50% 啦
、30% 啦、20% 啦、15% 啦(不会很机车的设 23%, 17% ..)
,而越低的机率就会越用到小数点,如 3.5%、2.5%、..
既然就固定这几个而已,那只要全把它们定义起来就行了。
二、有时候我们会想要调整机率。例如「扣除 5% 以下的东西不
算,取得机率 5% 以上的东西,在某个节庆期间的机率全部
乘以 2」,在这情况下一样只需更动上面的设定档即可。
(而不用再去改各位 wiz 们所自订的 mob_drop_ob)
所以各 wiz 们在设定机率时请务必先去看看 mob_drop.h 有没有
定义你想设的机率,若没有的话请跟 highelf 反映,好让他补上
去。
在一般情况下 "60" 就是对到 600,"0.2" 就是对到 2,其它以此
类推。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.131.225.67