Mud 版 (精华区)
发信人: Baggio (傻瓜牌生活), 信区: Mud
标 题: 动态ROOM实现方法 xiha
发信站: 哈工大紫丁香 (Tue May 4 20:32:09 1999), 转信
发信人: BitMan (一位人), 信区: Mud_Builder
标 题: [转载] 动态ROOM的一种实现方法 Ranma (转寄)
发信站: 深大荔园晨风站 (Sun Apr 5 19:19:49 1998), 转信
【 以下文字转载自 BitMan 的信箱 】
【 原文由 BitMan.bbs@bbs.net.tsinghua.edu.cn 所发表 】
发信人: sunn (眼睛), 信区: Mud_Builder
标 题: Re: 怎么做活动出口的ROOM?
发信站: BBS 水木清华站 (Mon Feb 16 17:42:19 1998) WWW-POST
【 在 tonylee (老柳) 的大作中提到: 】
: 【 在 minux (minux) 的大作中提到: 】
: : 呵呵,所有user都是同源的,怎么不能set ???
: 不是酱紫亚 我是说set exits 泥怎直接练到文件呢? 所有的房间豆是这个文件亚,
: set的话企不是等于又new了一个房间吗?(而不是泥想联的那个亚)
:
改了个想法
做了这么一个房间,destroy 后就变废墟了,rebuild之后就恢复了
请大家看看有什么隐患,
create()有错误,有改过来了。
不过还是很粗糙,见笑。
一着急又改错了,不过很简单,请大家自己改一下,试试看有什么问题,
尤其是对系统的影响,
请指教,谢谢。
zhenfa 对此房间影响不大,
是为其他功能设计的。
// Room: /d/snow/school.c
#include "/include/ansi.h";
inherit ROOM;
inherit F_SAVE;
int zhenfa;
//int do_change();
void create()
{
string longtxt,randtxt;
mapping *notes;
int num;
restore_object("/data/board/info_b");
notes = query("notes");
zhenfa=random(4);
set("short","书院");
if( !arrayp(notes) || num < 1 || num > sizeof(notes) )
{
switch( zhenfa ) {
case 0:
randtxt="远方传来悦耳的风铃声,给这片山林带来了不少生机。";
break;
case 1:
randtxt="远处传来清脆的木鱼声,给这片山林带来了不少生机。";
break;
case 2:
randtxt="远方飘动着的一缕炊烟,给这片山林带来了不少生机。";
break;
case 3:
randtxt="远处传来潺潺的流水声,给这片山林带来了不少生机。";
break;
}
longtxt =
"这里是一间宽敞的书院,虽然房子看起来很老旧了,但是打扫得很
整洁,墙壁上挂著一幅山水画,意境颇为不俗,书院的大门开在北边。
"+randtxt+"\n";
set("long", longtxt
);
set("exits", ([ /* sizeof() == 1 */
"south" : __DIR__"entry2",
"north" : __DIR__"entry",
"east":__DIR__"sheng",
"down":__FILE__,
]));
}
else{ num=sizeof(notes)-1;
if (notes[num]["status"]) {set("short","废墟");
set("long","这里是一片废墟,只有一块孤零零的石碑立在那里,气氛十分诡异");}
delete("exits/down");}
setup();
"/clone/board/try_b"->foo();
}
void init()
{ remove_call_out("help_signal");
call_out("help_signal",20);
this_player()->set("marks/zhen",zhenfa);
add_action("do_change","destroy");
add_action("do_rebuild","rebuild");
}
int help_signal()
{
string signal;
switch( zhenfa ) {
case 0:
signal=CYN "一阵风铃摇曳之声传来,清脆悦耳,让你不禁忘了心中的烦忧." NOR;
break;
case 1:
signal=HBYEL "一阵清脆的木鱼声传来,令你的心境顿时平静下来。" NOR;
break;
case 2:
signal=HIW "远方炊烟袅袅,使久涉江湖的你不禁想起家中的亲人。" NOR;
break;
case 3:
signal=BLU "远方流水潺潺,在这宁静的山林中显得格外的清晰。" NOR;
break;
}
write(signal+"\n");
return 1;}
int do_change(string arg)
{if (!arg) return notify_fail("请留言\n");
set("short","废墟");
set("long","这里是一片废墟,只有一块孤零零的石碑立在那里,气氛十分诡异");
delete("exits/down");
call_other("/clone/board/try_b","do_destroy",this_player(),arg);
return 1;}
int do_rebuild(string arg)
{
if (!arg) return notify_fail("请题字\n");
set("short","书院");
set("long", "这里是一间宽敞的书院,虽然房子看起来很老旧了,但是打扫得很
整洁,墙壁上挂著一幅山水画,意境颇为不俗,书院的大门开在北边。
\n" );
set("exits/down",__FILE__);
call_other("/clone/board/try_b","do_rebuild",this_player(),arg);
return 1;} //以上为房间原码
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: ppp97.east.cn.net]
※ 修改:·sunn 於 Feb 15 23:31:45 修改本文·[FROM: ppp52.east.cn.net]
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: ppp52.east.cn.net]
※ 修改:·sunn 於 Feb 16 17:42:19 修改本文·[FROM: 202.96.51.250]
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.96.51.250]
发信人: sunn (眼睛), 信区: Mud_Builder
标 题: Re: 怎么做活动出口的ROOM?
发信站: BBS 水木清华站 (Sun Feb 15 21:14:22 1998) WWW-POST
下面是石碑和石碑所继承info.c的原码
xkx for win95下通过
// bboard.c
// colored by ReyGod in 1/10/1997
#include <ansi.h>
#define BOARD_CAPACITY query("capacity")
inherit ITEM;
inherit F_SAVE;
void setup()
{
string loc;
if( stringp(loc = query("location")) )
move(loc);
set("no_get", 1);
restore();
}
string query_save_file()
{
string id;
if( !stringp(id = query("board_id")) ) return 0;
return DATA_DIR + "board/" + id;
}
string long()
{
mapping *notes;
int i;
string msg,msg1,msg2;
notes = query("notes");
msg = query("long");
if( !pointerp(notes) || !sizeof(notes) ) return query("long");
for(i=0; i<sizeof(notes); i++)
{if (notes[i]["status"]) {msg2=RED"逆我者亡";msg1= RED"灭门者:";}
else {msg2=HIY"遇强更强";msg1= HIY"重建者:";}
msg += sprintf("[%8s]" NOR " %-30s %19s " NOR "(%s)\n",
msg2, notes[i]["title"], msg1+notes[i]["author"], ctime(notes[i]["time"]
)[0..15] ); }
return msg;
}
void done_post(mapping note)
{
mapping *notes;
notes = query("notes");
if( !pointerp(notes) || !sizeof(notes) )
notes = ({ note });
else
notes += ({ note });
if( sizeof(notes) > BOARD_CAPACITY )
notes = notes[BOARD_CAPACITY / 2 .. BOARD_CAPACITY];
set("notes", notes);
save();
return;
}
int do_destroy(object ob,string arg)
{
mapping note;
if(!arg) return notify_fail("请留言。\n");
note = allocate_mapping(3);
note["title"] =arg ;
note["author"] = ob->query("name");
note["time"] = time();
note["status"]= 1;
done_post(note);
return 1;
}
int do_rebuild(object ob,string arg)
{
mapping note;
if(!arg) return notify_fail("请留言。\n");
note = allocate_mapping(3);
note["title"] =arg ;
note["author"] = ob->query("name");
note["time"] = time();
note["status"]= 0;
done_post(note);
return 1;
}
-------------------------
// /clone/board/baituo_b.c
inherit __DIR__"info1";
void create()
{
set_name("石碑", ({ "board" }) );
set("location", "/yhwnew/tryzhen");
set("board_id", "info_b");
set("long", "这是一块石碑。\n" );
setup();
set("capacity", 30);
replace_program(__DIR__"info1");
}
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: ppp97.east.cn.
net] --
※ 转载:.深大荔园晨风站 bbs.szu.edu.cn.[FROM: 202.192.140.221]--
※ 转寄:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 172.18.32.20]
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@fengyun.hit.edu.]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:5.998毫秒