作者laechan (小太保)
看板mud_sanc
标题Re: [wizs] times_check
时间Sat Sep 7 00:15:30 2013
理论上现在应该不会停了,心跳停止的原因在於 times_check
函数在执行过程中产生错误所致,一般来说会产生错误的片段
if(file_exists(times_check[tmp][tmp2][0]) ||
file_exists(times_check[tmp][tmp2][0]+".c"))
{
ob=find_object_or_load(times_check[tmp][tmp2][0]);
if(!ob)
{ ob=clone_object(times_check[tmp][tmp2][0]);
大概就是将上面 find_object_or_load 及 clone_object 的部
份用 catch 包起来即可,这两个片段的撰写用意在於,以book
为例,实际上 cancel_effect 是呼叫到 /d/book/xxxx.c 而非
玩家身上的实体书(即实体书的存在意义变成只剩下 min-max),
但即便一堆玩家身上有实体书,/d/book/xxxx.c 本身也可能因
为系统 reborn 的缘故而清掉,因此用两道程序重新载入。
(不过这并不是好的做法。另外 file_exists 判断应该可略过)
目前问题比较大的是 study 而非 times_check,从这次更动的
经验可知道
当原本一个 call_out 的东西改成 times_check 方
式时最好重写相关判断。
以这次的问题为例,当玩家 study 时 times_check 就出现一
笔资料,因此
1.必须避免 times_check 出现两笔以上相同的资料
要嘛避免,不然就是 times_check 有办法判断只有一笔有作
用目前用 file_name(book) 及 login_on 来处理。
2.必须避免因 times_check 错误造成玩家无法再读
这个最好的做法就是让原本 ppl->set_temp("study 的设定
加进 time()+n 的判断,这样就算 times_check 停止心跳,
经过一段时间後玩家也可以再 study。
这个修改需 shutdown。
3.在 set_times_check 及 set_times_no_save 加入心跳判断
当呼叫者是玩家,且 times_check 无心跳时,告诉玩家讯息
并且中止 set_times。
4.实体书泛滥的问题
为避免以後玩家 book 越屯越多,将采底下处理..
1.book 将改虚拟书
└但是上面关於 book 的修改还是可用在 egingin 等书上
2.虚拟书可用 ob read 去读,每读一次
a.加 0~n (0 代表可能读了没心得)
b.加 1~n (代表读一次至少加 1)
3.虚拟书没有认主问题,可 ob sell 也可 ob trade,亦可
堆叠,而且方便做堆叠上限,我基本上也不会管制数量,
但是读了一次书後要等一阵子才能再读第二次,则是确定
的。
以上会列入下礼拜修改重点,玩家身上的实体书将无法再读,
玩家也无法再打到实体书,但是可打到虚拟书,预定全面实装
时间将在中秋节後(因为要改很多东西)。
预定会先新增 /std/new_ob/vobjs/b 目录及各书本实体档。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.61.157.53
1F:推 justinj :测试书店内read...下午回来後就没在read了..然後其中 09/07 17:01
2F:→ justinj :一只没法子再按read(因为按过了.).但times那边没有. 09/07 17:02
3F:→ justinj :不过study反而还可以动.. 09/07 17:02