hotel 发表于 2011-4-29 14:27:57

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

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 编辑 ]

zine 发表于 2011-4-29 14:33:19

#wa 时间太短了吧,可能没来及触发,也就是过去以后才触发停下来

hotel 发表于 2011-4-29 14:40:16

原帖由 zine 于 2011-4-29 02:33 PM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
#wa 时间太短了吧,可能没来及触发,也就是过去以后才触发停下来


调整了一下, 把 WA 该成 了1500,还是走到曲清之后,又走了一步。怪了。

labaz 发表于 2011-4-29 14:48:02

把wa向上调一层

hotel 发表于 2011-4-29 15:07:16

原帖由 labaz 于 2011-4-29 02:48 PM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
把wa向上调一层


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


终于能到地方停下了。真奇怪,从原来的那个代码逻辑上来说应该是没问题的啊。怎么执行过程中会有差异呢?

labaz 发表于 2011-4-29 15:15:07

bianli和bianli之间要留时间等触发,否则if判断是立即执行的

alucar 发表于 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}}}

hotel 发表于 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 编辑 ]

alucar 发表于 2011-4-29 16:03:00

%ismember返回的应该是找到的第一个元素,路径list变量里一般都有重复元素,不能用这个方法
直接用@step应该就可以了

%item( @fangxiangb, @step)

[ 本帖最后由 alucar 于 2011-4-29 04:04 PM 编辑 ]

hotel 发表于 2011-4-29 16:34:19

原帖由 alucar 于 2011-4-29 04:03 PM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
%ismember返回的应该是找到的第一个元素,路径list变量里一般都有重复元素,不能用这个方法
直接用@step应该就可以了

%item( @fangxiangb, @step)


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

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

[ 本帖最后由 hotel 于 2011-4-29 04:41 PM 编辑 ]
页: [1] 2
查看完整版本: ZMUD遍历,计划找到某NPC后停止,可是找到后,都多走下一步才停,怪了。