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毫秒