作者laechan (小太保)
看板mud_sanc
标题[wizs] 重写的 times_check
时间Tue Sep 10 02:19:56 2013
档案已於 2013/09/10 01:10am 重写完毕。
船只原先继承 /std/new_ob/boat.c 的部份我将 boat.c 的内容
改写为底下
inherit BOAT;
经测试,白鸟城的小渔船会回复为原先的跑船模式
callouts
Object Function Delay
------------------------------------------------------------------------------
/d/aty/bird/room/boat1 fly_next 32
「理论上」所有 inherit "/std/new_ob/boat.c" 的船都会回到
原先的模式;不是 inherit 上述档案的船请 wiz
务必修正。
========================================================
times_check 目前只有华丽与污痕书店套用新的呼叫方式,我开
放 ~laechan/skycastle 的权限给 norr 及 justinj,norr 为
可读可写,justinj 为可读。
(/open/cmds/times_check.c 则大家都可读可写,但请大家小心
修改,
要改之前务必线上喊一下并确定我在线上时没在发呆)
华丽与污痕书店主要是 read_xxx 函数及
times_check 函数。
(用 times_check 这个函数名,是要舍弃 cancel_effect 这个
较不泛用的名字)
现行的 times_check 呼叫方式如下
times_check->set_times_check(names,shop_files,({str}),sk/10);
这也是一般的呼叫法,事实上第 1~3 参数不一定要放什麽,只
要符合其类型(字串,字串,mixed)就可。
times_check 会将你传去的三个参数原封不动地放进一个 mixed
里头,请见 times_check.c:
times_check+=({ ({names,files,tmps}) }); <= 用 ({}) 包住
我在书店内则设计第 1 个参数传玩家的 id,第 2 个参数传书
店的档名,第 3 个参数传 ({"玩家正在读的书名"})。
则写在书店内的 times_check 函数,其一般格式亦如下
int times_check(string names,string files,mixed tmps)
{
.
.
也就是说 set_times_check 传了什麽给 times_check,它就原
封不动地再传回给书店,这时候我们就知道
1.哪一个玩家要接受 times_check -- 透过 names
2.files -- 这时候实际上是无作用的(因为有 shop_files 了)
但是若有必要就可做 if(files!=shop_files) 这类的判断
3.该玩家正在读的书名 -- 透过 tmps[0]
=========================================================
最後是书店实测结果,并介绍 times_check.c 的四个函数。
一开始,times_check.c 里面无资料:
> call /open/cmds/times_check;return_times_check
times_check=
([ ])
times_no_save=
([ ])
目前心跳参数: 1
然後开始读书
> read 灾难之墙DIY
你刷卡付了 5000 影特币,向店家租了《灾难之墙DIY》。
书店小姐:若有事要中途离开,不要离开内阅室太久喔~^_^
书店内阅室
这里是设於书店一角的开放式内阅室,除了提供巫师们租借
书报杂志在里头阅读,也有简易的餐饮服务。
明显出口有: south 和 north.
读了书之後若要再读,比方读随便一本书,会出现底下讯息:
> read 时空之门导论
read: 你已经有租了《灾难之墙DIY》在看了喔。
在等待的期间,下底下四个指令
> call /open/cmds/times_check;return_times_check
times_check=
([ "1378748057" :
({ ({ "laechan", "/u/l/laechan/skycastle/room/street/alley_shop1",
({ "灾难之墙DIY" }) }) }) ])
times_no_save=
([ ])
目前心跳参数: 1
> call /open/cmds/times_check;check_names;"laechan"
times_check 区:
({ "laechan", "/u/l/laechan/skycastle/room/street/alley_shop1",
({ "灾难之墙DIY" }) }) 52 秒後.
times_check_no_save 区:
目前 times_check 心跳参数: 1.
> call /open/cmds/times_check;check_names_in_files;
"laechan";"/u/l/laechan/skycastle/room/street/alley_shop1"
房间(/open/cmds/times_check)-> check_names_in_files(
"laechan", "/u/l/laechan/skycastle/room/street/alley_shop1" ) =
10
> call /open/cmds/times_check;return_tmps;
"times_check";"laechan";"/u/l/laechan/skycastle/room/street/alley_shop1"
房间(/open/cmds/times_check)-> return_tmps(
"times_check", "laechan", "/u/l/laechan/skycastle/room/street/alley_shop1"
) =
({ "灾难之墙DIY" })
之後过一段时间,书店的 times_check 函数顺利被呼叫:
你阅读了《灾难之墙DIY》里头艰深的文字,得到了一些心得...
你的技能,『灾难之墙』进步了(1003)!
这时再 call return_times_check 检查,确定有持续设定
> call /open/cmds/times_check;return_times_check
times_check=
([ "1378748427" :
({ ({ "laechan", "/u/l/laechan/skycastle/room/street/alley_shop1",
({ "灾难之墙DIY" }) }) }) ])
times_no_save=
([ ])
目前心跳参数: 1
* 你离开了书店,书店小姐将你租阅的书收走罗。
=====================================================================
到这里,书店与 times_check.c 之间的沟通就正常建立。
不管是 update 书店或是 update times_check.c,都不会影响
times_check 的正常运作。
预定明天开放书店让大魔导士测试内阅并观察一天,若没问题
就能进行 /std/new_ob/boat.c 的改版工作。
之後请所有船只继承 /std/new_ob/boat.c 请勿自己写。
(日後要加什麽功能请优先考虑加到 /std/new_ob/boat.c)
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.61.157.53
1F:推 pssjim :辛苦啦~ 09/10 02:28
※ 编辑: laechan 来自: 210.61.157.53 (09/10 02:31)
2F:推 justinj :之前是不想改到new_ob的部分...才想要用inherit然後 09/10 08:34
3F:→ justinj :+自己写一套.. 09/10 08:35
4F:→ laechan :如果是值得推广到全部船只舰艇的功能就考虑将其写进 09/10 09:00
5F:→ laechan :new_ob,自写专用继承档是像天空城之家(商店)那样 09/10 09:01