ltblue@tx 发表于 2015-4-16 14:12:06

关于随机行走的问题

今天送信,没找到李捕头,于是手动找(正好无聊中)
然后也没找到.....
于是查找了相关代码
每个随机行走的人,都有这么一条语句,以李捕头为例
set("chat_msg", ({
             "李捕头挺了挺胸脯,朗声笑道:“听说本官来了,那些为非做歹的人无一不闻风而逃。 \n",
             (: random_move :)
       }) );

关键就在random_move这里

我又在npc.c中,找到这个函数

int random_move()
{
        mapping exits;
        string *dirs;
        object me = this_object();

        if( !environment()
        || !mapp(exits = environment()->query("exits"))
        || me->is_fighting() || me->is_busy()
        || me->query("jingli") < me->query("eff_jingli") / 2 ) return 0;

        dirs = keys(exits);
        if (sizeof(dirs) < 1) return 0;
        add_temp("random_move", 1);
        command("go " + dirs);
}

这样就是随机行走了。
虽然c不懂哈,但大体就是这么个函数

ltblue@tx 发表于 2015-4-16 14:16:26

另外,在go.c文件中,找到以下内容
if (random(me->query_temp("random_move")) > 15)
//                                || strsrch(base_name(environment(me)), min) != 1)
                                        me->return_home(dest);
                        }
中间一段被注释掉了,就剩下唯一的条件了。
结合1楼那段,大体结论就是

随机行走,最多走15步,然后就返回了
换句话说,李捕头出生地在广场北,最多可以走15步,然后就回家
不过,关于回家的路径问题还不好确定,万一跑到长江南怎么办......回不去了呢还......又或者是自动瞬移回去?

recollec@tx 发表于 2015-4-16 15:19:39

这个应该是过一段时间自动回原点的

juvair@ts 发表于 2015-4-16 15:29:27

落叶要归根的,哪儿出来回哪儿去,瞬移

mifeng@tx 发表于 2015-4-26 20:12:20

刷新的时候瞬移回去,所以走到哪里都行   ;P;P;P

xlang@ts 发表于 2015-5-1 01:39:17

15格 好大的范围,楼主找找看令狐冲 移动有什么特点?

ltblue@tx 发表于 2015-5-1 19:54:25

xlang@ts 发表于 2015-5-1 01:39 static/image/common/back.gif
15格 好大的范围,楼主找找看令狐冲 移动有什么特点?

感觉大体弄明白了,虽然有些根本的还是不懂...

xlang@ts 发表于 2015-5-2 14:49:34

ltblue@tx 发表于 2015-5-1 19:54 static/image/common/back.gif
感觉大体弄明白了,虽然有些根本的还是不懂...

发来看看啊               
页: [1]
查看完整版本: 关于随机行走的问题