作者laechan (小太保)
看板mud_sanc
标题Re: [wizs] 直觉化的虚拟物品系统
时间Thu Sep 25 14:48:35 2008
※ 引述《laechan (小太保)》之铭言:
後续更动部份
: 一、资料读取时的严谨判断(避免因一个资料库出问题就造成整个资料库无法载入)
从 wiz 自定的资料库 set_vobjs 到总资料库的部份, 已完成严谨判断。
这部份的主判断为「若 /adm/daemons/vobjs_d.c 出问题,wiz 在 update
自定的资料库时,不会做资料同步到总资料库的动作」, 我在这个部份有加
上讯息提示.
从总资料库 query wiz自定的资料库的 vobjs_data 内容的部份,也已完
成严谨判断。
这部份的主判断为「若 wiz 自订的资料库出问题,就不载入该资料库」,
会出现的问题包括资料库物件本身的 error(无法被 update)、以及在定义
资料时设定错误(例如资料漏设了一定要设的 name 跟 file)等情况.
新增的判断则是,总资料库在载入一个 wiz 所建的资料库之所有资料前
, 会先移除该资料库先前载入总资料库的所有资料, 移除完後才载入新的
资料库的所有物品资料, 以确保所载入的资料都是最新的.
例如该 wiz 先前建了一百笔资料, 後来改成十笔, update 之後总资料库
里头该 wiz 所建的资料就只会剩下十笔, 而且都是最新的.
: 三、确定 mark 的用途以及是否需要另外的 remark 资料
: (mark 参数用来做为特殊判断则是确定的, 因为以後要尽量减少实体物品读取)
已经确定虚拟物品除了 name 及 file 之外, 还可额外载入 mark 及
remark 资料栏, mark 一般用来做为解任务的判断用, remark 则真的
就是备注用, 例如底下设定范例..
"crystal" : ([ "name" : "生命水晶",
"file" : "/adm/daemons/eq/crystal",
"mark" : "pre_die", // <=当做该虚拟物品的特殊参数
"remark" : "玩家戴这个在身上就可避免阵亡的东西.",
])
mark 及 remark 是显示给 wiz 看的(所以玩家下任何指令都不会看到这两个),
正确的说连 file 也是只显示给 wiz 看的, 玩家只会看到 name, 以及身上所带
的虚拟物品数量.
而虚拟物品除了 name、file、mark、remark 以外的资料都不会被总资料库载入
,因为其它资料只需透过读取file=>读取实体物件=>query 实体物件的资料就可
以读到(例如物件的 short, long, mass 等资料).
: 四、完成一些全域函数的撰写.
: 二、确保即使虚拟物品指向的实体物品消失,虚拟物品还是可正常读取
: (只是没办法读到实体物品的资料, 已登录的 name, file, mark 照常可读取)
这两个一起写.
已完成四个全域函数...
set_user_vobjs(目标玩家,物品id,数量);
add_user_vobjs(目标玩家,物品id,数量);
delete_user_vobjs(目标玩家,物品id);
这三个应该没啥问题, 我尽量都使用符合直觉的函数名, 方便 wiz 记忆
及使用.
query_vobjs_data(物品id,欲读取资料项);
这是不定变数用法, 没有给物品id也没有给欲读取资料项时, 就回传
「总资料库登录的全部资料」(mapping 格式).
有给物品id没有给欲读取资料项时, 就回传「总资料库所登录的某一
虚拟物品全部资料」(mapping 格式), 包括它的 name、file、...
有给物品id也有给欲读取资料项时, 就回传「总资料库所登录的某一
虚拟物品的该项资料」(string 格式).
经过重开机测试後, 系统物件 /adm/daemons/vobjs_d.c 已经可以成
功载入我自行设定的 /u/l/laechan/vobjs.c 的所有资料.
其它测试就等有其它 wiz 建好资料库後再来试.
: 六、决定是否让同一个实体物品,会有两个不同的虚拟物品key名.
: (例如 laechan_pre_die 可能跟 hlead_pre_die 共同指向生命水晶)
: 我猜应该是可行的, 只要 name 跟 mark 的设定做好就可.
: (由此来推三的话, mark 跟 remark 应该要视为不同的东西)
: Laechan
这应该是可行的.
例如某个实体物件 /u/l/laechan/stone.c, 我要它做为试链窟下的
解谜道具时, 我会在资料库如此定义...
"hole_stone1" : (["name" : "神奇的石头",
"file" : "/u/l/laechan/stone",
"mark" : "laechan_hole_stone1",
"remark" : "试链窟解谜用.",
]),
但是 torr 之後也希望该 stone 也能做为它善见城底下某个任务的
过关道具时, 他也可以在他的资料库如此定义...
"wide_stone" : (["name" : "神奇的石头", <= 名字可一样可不一样
"file" : "/u/l/laechan/stone", <= 指向同一个实体物品
"mark" : "wide_quest_stone",
"remark" : "善见城解任务用."
]),
这样一来, 玩家可能同一时间会拥有这两种虚拟物品,虽然它们都
指向相同的实体物件, 但它们其实是不同的东西.
query_user_vobjs("laechan_hole_stone1","mark") = "laechan_hole_stone1"
query_user_vobjs("hlead_wide_stone","mark") = "wide_quest_stone"
从这里可以衍生的概念就类似 RO 的「怪物掉落杂物」, 例如说打
某个区域总共会拿到底下可卖商店的虚拟物品...
物品1 x 50
物品2 x 30
物品3 x 20
.
.
但假若要让物品 1 2 3 4 ..... 全指向「同一个实体物件」的话,
则虚拟物品就应设定 name、file、long、value。
这样子一来,只需撰写「一个实体物件」,就可以让全部可卖店的
虚拟物品都去指向它。
所以衍生性修改为...
一、是否让虚拟物品资料设定部份,增加「long」以及「value」两
个栏位,甚至是其它的栏位...
若允许增加 long : 则 long 不能太长.
若允许增加 value : 该 value 栏必须为 int 型态
若允许增加其它栏 : 「哪些」是适合加入的栏位
二、尚未完成的指令 vobjs
(我看今天有没有空写好)
三、wiz 自建的资料库,是否需放标准继承用样本。
(就是放在 /std 下供 wiz 在建资料库时 inherit 用的东西)
四、该如何进行初步测试
五、是否需要一个动态资料库的存在(类似 chinese 那种)
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: laechan 来自: 61.225.160.127 (09/25 15:14)
1F:推 hermis :这个好玩,不过能延伸的任务只有收集物品的样子 09/25 16:34
2F:→ hermis :还会扩充其他功能吗? 09/25 16:34