zine 发表于 2010-8-31 11:51:11

jason来帮忙

// Room: /clone/misc/liangpeng.c
// create: by zine Aug 21 2010


inherit "/biwu/biwuroom";
#include <ansi.h>


void create()
{
        set("short", HIW"凉棚"NOR);
        set("long", @LONG
这是一个很大的凉棚,几个大柱子(pillar)支撑着顶棚。
LONG
        );
        set("exits", ([ /* sizeof() == 3 */
                "northwest" : __DIR__"grass",
        ]));
    set("item_desc", (["pillar" : "柱子已经烂掉了一半,如果你猛劈(pi)的话,也许整个顶棚会塌下来。\n",
        ]));
        set("no_clean_up", 0);
        set("pillar_hp", 3);
        setup();
}


void init()
{
        add_action("do_pi", ({ "pi" }));
        ::init();
}


int pi2(object me)
{       
        int i;
        object* allp;
        object here=environment();
        object room= load_object(__DIR__"grass");
        if(me->is_busy())
                {
                        return notify_fail("你正忙着呢。\n");
                }
        else
                {
                        if(query("pillar_hp") - 1 <= 0)
                                {   
                                        allp = all_inventory();
                                        for(i=0;i<sizeof(allp);i++)
                                                {       
                                                        allp->add_busy(15);
                                                }
                                        message_vision("$N大喝一声,把所有柱子砍断,凉棚塌了下来,把所有人埋在里面。\n", me);
                                        room->delete("exits/southeast");
                                        message("vision", "东南面一声巨响,凉棚已经完全塌陷,底下的人恐怕难以幸免。\n", room );
                                        message_vision(HIW"$N心里早有准备,在凉棚倒塌前一刻,已经逃出生天。\n"NOR,me);
                                        delete("exits/northwest");
                                        set("long","凉棚的顶棚已经完全塌了下来。\n");
                                        message("vision", "一个人影从废墟中急掠出来。\n", room );
                                        me->move(__DIR__"grass");
                                        me->add_busy(1);
                                        call_out("breakout", 1, here);
                                }
                        else
                                {       
                                        add("pillar_hp",-1);
                                        me->add_busy(random(2));
                                        message_vision("$N用力砍断了一根柱子。\n", me);
                                }       
                }
        return 1;
}


int do_pi()
{
        object me = this_player();
        if (me->is_busy() || me->is_fighting())
                {
                        return notify_fail("你正忙着哪!\n");
      }
        if(!present("gang fu", me))
                {
                        {
                                message_vision("$N大喝一声,一头向柱子撞了过去。\n", me);
                                me->add_busy(random(3));
                        }
                        if((int)me->query("qi")<200)
                                {
                                        me->unconcious();
                                }
                        else
                                {
                                        me->add("qi",-200);
                                }
                        return 1;
                }
        else
                {
                        message_vision("$N大喝一声,抓起钢斧,向柱子劈去。\n", me);
                        pi2(me);   
                        return 1;
                }
}


int breakout(object here)
{   
        int j;
        object* allvictim = all_inventory();
        message_vision("良久之后,被埋着的众人终于脱困而出。\n",here);
        message_vision("大劫余生,众人都不禁心有余悸,对江湖中争名夺利不再感兴趣。\n",here);
        for(j=0;j<sizeof(allvictim);j++)
                {
                        allvictim->move(__DIR__"grass");
                        allvictim->set_temp("hatepk",1);
                }
        return 1;
}




call_out的内容没有执行,按我zmud回应截图,call_out之前的指令都正常执行了


第一视角,动作执行者


第二视角,隔壁房间动作旁观者


第三视角,动作承受者,按说应该1心跳之后越狱成功,但没反应

zine 发表于 2010-8-31 11:53:40


刚才第二视角截图错误

ddid 发表于 2010-8-31 12:36:31

message_vision("良久之后,被埋着的众人终于脱困而出。\n",here);
message_vision("大劫余生,众人都不禁心有余悸,对江湖中争名夺利不再感兴趣。\n",here);

这两句把信息都传递给了房间,而没有给房间里的人看。

jason 发表于 2010-8-31 12:50:37

用printf来输出调试信息,检查代码是否执行。这个是最可靠得。
message_vision和message("vision" ,谁来解释一下?

zine 发表于 2010-8-31 13:18:47

改了一下,把message_version放到for后面整个int breakout()就执行了。
当然move之后,就看不到message_version的内容了
用tell_object解决。

我问一下,message_version把信息返回给房间,会影响下面指令的执行吗?

ivanfox 发表于 2010-8-31 13:39:07

这个对白有点像 西游 的 醉仙楼二楼

zine 发表于 2010-8-31 13:49:18

写这个房间是在看了唐山大地震之后获得灵感,
给埋过之后,如果能活着出来,估计啥想法都都不会了,只想好好和家人在一起。

reallove 发表于 2010-8-31 15:44:10

原帖由 jason 于 2010-8-31 12:50 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
用printf来输出调试信息,检查代码是否执行。这个是最可靠得。
message_vision和message("vision" ,谁来解释一下?

当this_player()为空的时候,printf信息也是没有的,记log文件最保险

reallove 发表于 2010-8-31 15:48:52

原帖由 zine 于 2010-8-31 01:18 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
改了一下,把message_version放到for后面整个int breakout()就执行了。
当然move之后,就看不到message_version的内容了
用tell_object解决。

我问一下,message_version把信息返回给房间,会影响下面指令的执行 ...

message_vision的参数通常是一个活动物体(人,动物==),不是房间,不然会出错
如果你要让整个房间的人都看见这条信息,使用tell_room这个函数

jason 发表于 2010-8-31 15:56:33

原帖由 reallove 于 2010-8-31 03:44 PM 发表 http://pkuxkx.com/forum/images/common/back.gif


当this_player()为空的时候,printf信息也是没有的,记log文件最保险

对,大多数情况下是没有问题的。log文件太麻烦了
页: [1] 2
查看完整版本: jason来帮忙