北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 7738|回复: 17

ZMUD遍历,计划找到某NPC后停止,可是找到后,都多走下一步才停,怪了。

[复制链接]
发表于 2011-4-29 14:27:57 | 显示全部楼层 |阅读模式
ZMUD 版本721,

yangzhou, 是随便设的20 来步路, 就是走到曲清之后还要多走几步。

#alias zhaonpc {#var step 1
#var findnpc 0
#var area @yangzhou
#var steps %numitems( @area)
bianli}

#alias bianli {#if (@step<=@steps) {#if (@findnpc=0) {
    #wa 500
    %item( @area, @step)
    #add step 1
    bianli
    } {xixi}}}

#tri {^??%s曲清} {#var findnpc 1}

这是从糖果老板那里照搬过来的。我想不清楚问题出在什么地方。

[ 本帖最后由 hotel 于 2011-4-29 02:31 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-4-29 14:33:19 | 显示全部楼层
#wa 时间太短了吧,可能没来及触发,也就是过去以后才触发停下来
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-4-29 14:40:16 | 显示全部楼层
原帖由 zine 于 2011-4-29 02:33 PM 发表
#wa 时间太短了吧,可能没来及触发,也就是过去以后才触发停下来



调整了一下, 把 WA 该成 了1500,还是走到曲清之后,又走了一步。怪了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-4-29 14:48:02 | 显示全部楼层
把wa向上调一层
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-4-29 15:07:16 | 显示全部楼层
原帖由 labaz 于 2011-4-29 02:48 PM 发表
把wa向上调一层



#alias bianli {#if (@step<=@steps) {#wa 500;
#if (@findnpc=0) {
%item( @area, @step)
     #add step 1
     bianli
     } {xixi}}}


终于能到地方停下了。真奇怪,从原来的那个代码逻辑上来说应该是没问题的啊。怎么执行过程中会有差异呢?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-4-29 15:15:07 | 显示全部楼层
bianli和bianli之间要留时间等触发,否则if判断是立即执行的
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-4-29 15:16:57 | 显示全部楼层
原来的代码:
#if (@step<=@steps) {
    #if (@findnpc=0) {
        #wa 500  //即使在此期间触发了#var findnpc 1,以下的代码仍将执行,所以会多走一步
        %item( @area, @step)
        #add step 1
        bianli
        } {xixi}}

修改后的代码:
#if (@step<=@steps) {
    #wa 500 //如果在此期间触发了#var findnpc 1,接下来在判断findnpc=1的时候就会停下来
    #if (@findnpc=0) {
        %item( @area, @step)
        #add step 1
        bianli
        } {xixi}}}
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-4-29 15:57:52 | 显示全部楼层
试验反向返回, 出现新问题了。

#var fangxiang {n|e|nw|ne|nu|nd|eu|ed|u|enter|s|w|se|sw|sd|su|wd|wu|d|out}
#var fangxiangb {s|w|se|sw|sd|su|wd|wu|d|out|n|e|nw|ne|nu|nd|eu|ed|u|enter}


#tri {^??你嘻嘻地笑了起来。} {goback}

#alias goback {#if (@step>=1) {#wa 500;
  %item( @fangxiangb, %ismember( %item( @area, @step), @fangxiang))
  #add step -1
goback  } {haha}}

原本设想,用%ismember 获取前一个方向在 fangxiang 中的数字位置,再从fangxiangb 中查找到它的反方向,从而回到出发点。但是碰到个问题, trigger 触发之后,第一个输出的方向,是刚才最后一步的方向,而不是它的反方向。 第2 个发出来的方向,才是正确的返回方向。 问题出在哪呢?

我对这些功能函数不太懂,一点一点的学。一点一点的试验。

[ 本帖最后由 hotel 于 2011-4-29 04:55 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2011-4-29 16:03:00 | 显示全部楼层
%ismember返回的应该是找到的第一个元素,路径list变量里一般都有重复元素,不能用这个方法
直接用@step应该就可以了

%item( @fangxiangb, @step)

[ 本帖最后由 alucar 于 2011-4-29 04:04 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2011-4-29 16:34:19 | 显示全部楼层
原帖由 alucar 于 2011-4-29 04:03 PM 发表
%ismember返回的应该是找到的第一个元素,路径list变量里一般都有重复元素,不能用这个方法
直接用@step应该就可以了

%item( @fangxiangb, @step)



实验了一下,在我这里没有运行。我去翻下函数资料。 一点一点试验。

%item( @area, @step), @step 是已经走到的第几步, @area 是一个string类型的变量, %item() 应该是输出string中指定的步数的命令, 是不是问题出在这里? 是不是应该用其他函数,获得string中指定步数的那个方向?

[ 本帖最后由 hotel 于 2011-4-29 04:41 PM 编辑 ]
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-1 09:41 PM , Processed in 0.009698 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表