bbz 发表于 2015-2-25 01:20:30

请教一个Mush中多个触发器执行Lua脚本的 顺序问题

现在遇到一个问题,就是在同一个房间里,有两个触发器A和B,触发器A中用到的一个变量,是在触发器B中进行赋值,但Mush似乎是同时执行A和B,所以有时候A会报错,因为B还没来的及进行赋值。

我现在的解决方案是在触发器A中设置一个Flag,A执行完成后就修改这个Flag为True,然后B中就一直Wait这个Flag为True后才继续执行。
现在这个方案虽然可以解决问题,但还是觉得不够好,请问还有别的方案可以解决这个问题吗?

北大侠客行MUD,中国最好的MUD

cappuccino 发表于 2015-2-25 01:37:13

触发器可以设置优先级

creat 发表于 2015-2-25 01:39:35

为什么必须用B赋值不能直接用A赋值呢

feehoo 发表于 2015-2-25 06:59:56

楼主触发的思路本身就有问题。
不如摆出来让大家参谋下。

xxxcc 发表于 2015-2-25 10:32:44

综上,
1,设置触发器优先级。
2,改变思路。

littleknife 发表于 2015-2-25 10:41:03

本帖最后由 littleknife 于 2015-2-25 10:45 AM 编辑

如果楼主是困惑与多行触发的问题,可以参考如下方法:这里要注意的是第二行不能用“^”开头。因为多行触发算一个整体触发。另外,还有,wait.lua需要支持多行触发的方法:mulregexp。
至于新模式wait.lua可以参考http://pkuxkx.net/forum/viewthread.php?tid=36707&from=favorites
Execute("ask jian gong about mine;mine")
local l,w=wait.mulregexp({
      {"^(> |)*你向监工打听有关『mine』的消息。\\n监工说道:好,你下井去采\\(mine\\)些矿石上来,放到那边的车上,干了活官府自然会给钱。\\w*",true,2},
       {"^(> |)*经过这次锻炼,你对武学也有了一些体会\\w*"},
                              })
print("l",l)

bbz 发表于 2015-2-25 11:15:57

思路是这样,我在写一个指伙记的遍历,触发器B抓当前房间的路径,用来判断是否成功的进入下一房间,同时记录走过的路径, 触发器A是抓伙记的名字,然后反转B中记录的路径,退回去推车。
现在的问题的有时会出现,反转的路径少了最后一步,试过改触发器优先级,但还是会出现问题

creat 发表于 2015-2-25 13:48:44

不能用同一个触发来判断是否离开当前房间和当前房间是否有伙计么?
不如贴出来大家讨论一下

littleknife 发表于 2015-2-25 15:01:35

思路是这样,我在写一个指伙记的遍历,触发器B抓当前房间的路径,用来判断是否成功的进入下一房间,同时记录 ...
bbz 发表于 2015-2-25 11:15 AM http://pkuxkx.net/forum/images/common/back.gif


    是不是因为你在遇到伙计的时候,由于伙计所在房间的方向未被抓取,所以你少了一步呢?若是这样,你以房间名为触发来确定抓取路径成功与否,也许有问题。

bbz 发表于 2015-2-25 15:15:50

本帖最后由 bbz 于 2015-2-25 07:17 AM 编辑

回复 9# littleknife


是的,在进入伙记的房间时,触发器B虽然成功抓到了路径,但还没来的及SetVariable,这时触发器A就去GetVariable,所以少了一步。

所以 我现在 在A中加了一个wait,等待B执成完成后才继续执行, 看起来可以解决这个问题Function B()
   SetVariable("flag","false")

   -- 抓取路径,设置走过的路线
   .....

   SetVariable("flag","true")
end


Function A()
   flag = getVar("flag")
   while flag=="false" do
      wait.time(2)
      flag = getVar("flag")
   end

   -- 获求走过的路线,返回去推车
   .....
end
页: [1] 2
查看完整版本: 请教一个Mush中多个触发器执行Lua脚本的 顺序问题