北大侠客行MUD论坛

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

Mush抓取变量的问题

[复制链接]
发表于 2010-3-14 16:53:00 | 显示全部楼层 |阅读模式
skills后需要抓取技能等级比如
伏摩剑 (fumo-jian)                       - 勉勉强强  50/     0│

我用了^│[\s□]+\S+\s+\((\S+)\)\s+-\s*\S+\s*(\d+)/\s+(\d+)\s*│$ 来抓取fumo-jian 等级50 和当前等级经验(这里是0)
用Note(%1,%2,%3)发送到游戏来测试 发现都是应该正常抓取了,但是如果发送的LUA脚本解析去
就会发现第一个变量抓取为nil,当技能中间带连字符(-),时,会有Run-time error log如下:
[string "触发器: "]:1: attempt to perform arithmetic on global 'fumo' (a nil value)
这里有2点不明白:
1.为什么第一个关于技能的抓取不了,不支持(string)?
2.这个Run-time error为什么会产生呢?第一个问题的连锁反应?
不知道有高手碰到类似的问题没有?是怎么解决的啊 ,请多指教指教
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-3-14 17:17:26 | 显示全部楼层
这个都有现成的模板啊,给你贴一个。

      enabled="y"
   group="status"
   match="^│(.*)\((\S+)\)\s+-\s*\S+\s*(\d+)\/.*│$"
   name="skills"
   regexp="y"
   send_to="12"
   sequence="200"
  >
  SetVariable(Replace("skills_%2", "-", "_", true),"%3"*1)
  


然后在Lua或JS中调用getVariable取值。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-3-14 17:23:27 | 显示全部楼层
原帖由 hba 于 2010-3-14 05:17 PM 发表
这个都有现成的模板啊,给你贴一个。

  
  SetVariable(Replace("skills_%2", "-", "_", true),"%3"*1)
  


然后在Lua或JS中调用getVariable取值。


其实我的需求有点不太一样。
我并不知道我需要哪个技能,需要抓到这个信息后,进行比较 得到信息。
还有为什么会产生这个问题 比较迷惑 没搞懂原因 =。=

[ 本帖最后由 xiangbs 于 2010-3-14 05:25 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-3-14 17:33:20 | 显示全部楼层
比如
伏摩剑 (fumo-jian)                       - 勉勉强强  50/     0│

我需要得到fumo-jian 50 0 这3个信息
通过检查fumo-jian知道是不是我需要的技能信息,在决定后边是不是要舍弃
现在卡在这里了 不知道什么原因
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-3-14 18:13:33 | 显示全部楼层
参数调用的时候用("%1",%2,%3)
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-3-14 18:41:43 | 显示全部楼层
在忙着干活,没注意这个帖....

我来解释一下,为什么会出现这种情况
在mush中的lua的抓取挺有意思的.虽然楼主的正则都是写对了,也抓到了.
但在取值给lua的时候,漏了一个东西.
在mush中,你抓取后要送往lua进行运算的内容,如果是数字的,如楼主上面说的
  1. fumo-jian 50 0
复制代码
其中 50 0这两部分没有问题,lua就接收了.但lua认为fumo-jian是一个变量,你看上面的出错信息是的意思大致是----fumo-jian 是一个不存在的变量(意思差不多吧,我E文不好)
如果你想让lua认可这个,就得加上"",告诉lua,这是一个字符串.

-----

呃.再补充一点内容....
虽然50 0这两个内容lua接受了,但,如果你要在后面的代码中进行一下判断,比如说,当<80的时候,你想做什么工作.----也就是说,要把这50当成数字来处理的时候,lua就又会报错不认帐了.
解决的方法是
比如说,你把那个50存到一个变量 lvtmp 里
lvtmp = 50
然后,你想做运算的时候

  1. if lvtmp < 80 then
  2.   xxxx
  3. end
复制代码

这是不行的,lua不认,
你改成

  1. if (lvtmp)*1 < 80 then
  2.   xxxx
  3. end
复制代码

就可以了,或者用个函数也可以,一时间想不起来了,有兴趣你可以查一下

[ 本帖最后由 lzkd 于 2010-3-14 06:50 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-3-14 19:09:22 | 显示全部楼层
吃了饭回来都给解决了啊  谢谢谢谢
。。。话说这些问题真是奇怪啊
难道是因为LUA是弱类型的原因?
最早开发的人是怎么总结出来的 。。

[ 本帖最后由 xiangbs 于 2010-3-14 07:12 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-3-14 19:32:12 | 显示全部楼层
原帖由 lzkd 于 2010-3-14 06:41 PM 发表
就可以了,或者用个函数也可以,一时间想不起来了,有兴趣你可以查一下


刚好我前几天看过Lua相关的这一章,我来说吧,就是tonumber()函数,如果string是字符类型的数字将转成数字类型的数字,而string不是正确的数字则该函数返回nil。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-3-14 20:11:12 | 显示全部楼层
呵呵,加油啊~ 各位~
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-3-14 20:55:41 | 显示全部楼层
原帖由 ddid 于 2010-3-14 08:11 PM 发表
呵呵,加油啊~ 各位~


嘿嘿....ddid同学....
身为目前北侠mush推广最有力的我,向身为北侠目前最热爱mush的你,提出要求------你看我这么卖力推广mush,申请个奖励不过分吧????

哇卡卡!!!!嘿嘿!!!
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 08:02 PM , Processed in 0.013146 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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