北大侠客行MUD论坛

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

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

[复制链接]
发表于 2015-2-25 01:20:30 | 显示全部楼层 |阅读模式
现在遇到一个问题,就是在同一个房间里,有两个触发器A和B,触发器A中用到的一个变量,是在触发器B中进行赋值,但Mush似乎是同时执行A和B,所以有时候A会报错,因为B还没来的及进行赋值。

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

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-2-25 01:37:13 | 显示全部楼层
触发器可以设置优先级
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-2-25 01:39:35 | 显示全部楼层
为什么必须用B赋值不能直接用A赋值呢
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-2-25 06:59:56 | 显示全部楼层
楼主触发的思路本身就有问题。
不如摆出来让大家参谋下。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-2-25 10:32:44 | 显示全部楼层
综上,
1,设置触发器优先级。
2,改变思路。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-2-25 10:41:03 | 显示全部楼层
本帖最后由 littleknife 于 2015-2-25 10:45 AM 编辑

如果楼主是困惑与多行触发的问题,可以参考如下方法:这里要注意的是第二行不能用“^”开头。因为多行触发算一个整体触发。另外,还有,wait.lua需要支持多行触发的方法:mulregexp。
至于新模式wait.lua可以参考http://pkuxkx.com/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)
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-2-25 11:15:57 | 显示全部楼层
思路是这样,我在写一个指伙记的遍历,触发器B抓当前房间的路径,用来判断是否成功的进入下一房间,同时记录走过的路径, 触发器A是抓伙记的名字,然后反转B中记录的路径,退回去推车。
现在的问题的有时会出现,反转的路径少了最后一步,试过改触发器优先级,但还是会出现问题
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-2-25 13:48:44 | 显示全部楼层
不能用同一个触发来判断是否离开当前房间和当前房间是否有伙计么?
不如贴出来大家讨论一下
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-2-25 15:01:35 | 显示全部楼层
思路是这样,我在写一个指伙记的遍历,触发器B抓当前房间的路径,用来判断是否成功的进入下一房间,同时记录 ...
bbz 发表于 2015-2-25 11:15 AM



    是不是因为你在遇到伙计的时候,由于伙计所在房间的方向未被抓取,所以你少了一步呢?若是这样,你以房间名为触发来确定抓取路径成功与否,也许有问题。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-2-25 15:15:50 | 显示全部楼层
本帖最后由 bbz 于 2015-2-25 07:17 AM 编辑

回复 9# littleknife


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

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

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

  5.    SetVariable("flag","true")
  6. end


  7. Function A()
  8.    flag = getVar("flag")
  9.    while flag=="false" do
  10.         wait.time(2)
  11.         flag = getVar("flag")
  12.    end

  13.    -- 获求走过的路线,返回去推车
  14.    .....
  15. end
复制代码
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 04:09 PM , Processed in 0.011799 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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