作者laechan (小太保)
看板mud_sanc
标题[闲聊] 今天 crash 的原因
时间Wed Sep 4 14:44:31 2013
wiz 使用的指令 runmap (跑地图程式) 写法不当。
理论上,应该像图形化介面 ftp 抓目录的模式,先进到最深
层去抓,再递回到要抓的目录根源,在主大陆跑的情况若执行
地点是「正中间」,则应该要先从最外围开始跑到最中心,但
目前 runmap 的写法则是从中央开始往外扩展,原本是可以靠
deep recursion 的机制来防止跑过头,但光靠这个不够。
然後理论上是可以写一些机制来防止跑过头,lazy,因此暂时
让这个指令专注在接 xxx.h 的功能上,而不再跑图。
(以後新型态区域越来越多时也会渐渐不太需要这个)
======================================================
那因为修 bug 後再 shutdown 系统会比较正常,所以就趁这个
机会将置底我提到的那两个 bug 一起修掉。
/open/cmds/times_check.c
bug 修了,并新增 check_names 函数,後面接 names 或档名,
它就会回传有该 names 或档案的目前设定情况:
> call /open/cmds/times_check;check_names;"/d/aty/bird/room/boat1"
times_check 区:
/d/aty/bird/room/boat1 ({ "/d/aty/bird/room/boat1", "start_plane" }) 128 秒後.
times_check_no_save 区:
/d/aty/bird/room/boat1 ({ "/d/aty/bird/room/boat1", "plane_1_5" }) 98 秒後.
/d/aty/bird/room/boat1 ({ "/d/aty/bird/room/boat1", "plane_1_2" }) 8 秒後.
/d/aty/bird/room/boat1 ({ "/d/aty/bird/room/boat1", "plane_1_3" }) 38 秒後.
/d/aty/bird/room/boat1 ({ "/d/aty/bird/room/boat1", "plane_1_4" }) 68 秒後.
/d/aty/bird/room/boat1 ({ "/d/aty/bird/room/boat1", "plane_1_1" }) -22 秒後.
顺便会回传目前 times_check 的心跳情况,1 就代表心跳正常
目前 times_check 心跳参数: 1.
(若 names 给 "xxx" 就是纯看心跳参数)
/open/cmds/vobjs_d.c
主要是之前 vobjs_d->vobjs_data("get_xxx","物品名或编号")
的读取有问题,趁这次修掉了。
> call /open/cmds/vobjs_d;vobjs_data;"get_carry";"f822"
房间(/open/cmds/vobjs_d)-> vobjs_data( "get_carry",
"f822" ) = 10
> call /open/cmds/vobjs_d;vobjs_data;"get_carry";"[L]"
房间(/open/cmds/vobjs_d)-> vobjs_data( "get_carry",
"[L]" ) = 10
物品共有 mark, name, desc, value, carry, no_sell, no_trade
等参数,均使用 get_xxx 的做法去读即可(如上面的 get_carry)
而要一次读多个就用 query_array:
tmps=vobjs_d->vobjs_data("query_array","物品名或编号");
> call /open/cmds/vobjs_d;vobjs_data;"query_array";"f822" <= 给名字亦可
房间(/open/cmds/vobjs_d)-> vobjs_data( "query_array",
"f822" ) = ({ "f822", "[L]", "张", "节庆物", 10, 10,
UNDEFINED, UNDEFINED,"一张画有全形大写「L」的字卡。\n" })
随便拿一个虚拟物品读 query_array 就会知道各栏位在 tmps 里
面的位置。要看表象资料就用 ob view 名字or编号 即可。而以上
面 no_sell 是 UNDEFINED 为例
> call /open/cmds/vobjs_d;vobjs_data;"get_no_sell";"f822"
房间(/open/cmds/vobjs_d)-> vobjs_data( "get_no_sell",
"f822" ) = 0
这就是说没有设定 no_sell 跟设定 no_sell = 0 是一样的意思。
wiz 们可参考并实际 call 测试。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.61.157.53
1F:→ laechan :之後又 shutdown 一次, 补充 book 之前没设到的部份 09/04 15:55