作者laechan (小太保)
看板mud_sanc
标题[wizs] 虚拟物品系统&怪物掉落物系统修改
时间Thu Nov 29 15:41:39 2012
原则上今天起一直到改完,我会将我修改的东西都编写在这
一篇上。原则还是一样,这两个东西没有完成的话後续的东
西都没办法进行。
(我一直到刚刚才有空,之前只有零星时间有空)
====================================================
/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)
1F:推 luna730715 :辛苦了 11/29 15:59
※ 编辑: laechan 来自: 210.61.157.53 (11/30 16:54)
2F:→ laechan :原则上 mob_drop 也会写快速设定/删除/移除指令 11/30 16:54
3F:→ laechan :vobjs -mob_drop /d/crazy/1/mob/tree1 set m001 = 1 11/30 16:55
4F:→ laechan :语法类似这样 11/30 16:55
5F:推 justinj :掉落机率可以随意变动吗?(想要某个条件下变高...) 12/03 08:35
这变成是全域的,或者是限定范围的,例如 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)
6F:→ laechan :justin 你看一下上面有无问题,自订函数若不太了解我 12/03 09:47
7F:→ laechan :再写个范例,原则上就是传回一个mapping的东西 12/03 09:48