找回密码
 注册
搜索
楼主: modman@tj

非猿类mush lua教学贴(简单应用)

[复制链接]
门派:天龙寺
 楼主| 发表于 2017-4-7 00:39:22 | 显示全部楼层
额,今天忙着改自己的机器人去了。。
继续说一下正则表达式的东西吧
还是这个
  1. '^(> )*你把 "ppp1" 设定为 "\\D*;perform\\s*(\\D*)\\s*" 成功完成。'
复制代码

^代表顶头。。这个和zmud一样
(> )* 代表0个或者几个>符号,*的意思是前面的那个东西出现0次或者很多次,后面的D*也是一样的
还有一种,我们用的mush里面很少出现的:
\s+   \s前面说了,代表空格。后面的+代表,这里至少出现一个空格。
所以,*代表0~∞;+代表 1~∞

之所以用两个斜杠,是lua到触发器的时候,有一个\会丢失。。(这样比较好理解)
这样大家应该可以写出自己需要触发的语句了。
门派:天龙寺
 楼主| 发表于 2017-4-7 00:55:49 | 显示全部楼层
二、说一下触发器的设置
以送信的lua里面一段为例:
  1.     DeleteTriggerGroup("songxin2_check")
  2.     DeleteTriggerGroup("songxin2_killer")
  3.     create_trigger_t('songxin_ask1',"^>*\\s*你向褚万里打听",'','songxin_ask')
  4.     create_trigger_t('songxin_ask2',"^>*\\s*这里没有这个人。$",'','songxin_nobody')
  5.     SetTriggerOption("songxin_ask1","group","songxin_ask")
  6.     SetTriggerOption("songxin_ask2","group","songxin_ask")
  7.     EnableTriggerGroup("songxin_ask",false)   
复制代码

这里面DeleteTriggerGroup就是删掉括号里那个分组的触发器,
create_trigger_t是创建触发器的一个子程序,不需要理解太多,照着已有的格式就可以
songxin_ask1,songxin_ask2 这个是触发器的名称,根据自己的需要写上就行1、2、3...一直排下去
然后是触发内容。上面说过怎么写了
最后的songxin_ask  songxin_nobody就是调用这两个子程序,比如songxin_ask,在编辑器里面搜索一下,就能找到
  1. function songxin_ask()
  2.     EnableTriggerGroup("songxin_ask",false)
  3.     EnableTriggerGroup("songxin_accept",true)
  4. end
复制代码

SetTriggerOption("songxin_ask1","group","songxin_ask") 这个呢,就是把已经命名的触发器分组到songxin_ask里面
这里有个小技巧,和fqyy学的。如果一大堆的触发器放在一个组里
可以写成:
  1. for i=1,2 do SetTriggerOption("songxin_ask"..i,"group","songxin_ask") end
复制代码

这个就是i从1循环到2,然后把"songxin_ask"..i 名称的触发器,都归到一个组里面,行数多的时候,这样写简单点儿。
比如有20句,只需要改成 for i=1,20就可以了。

我们在zmud的时候也会分组,便于开、关、删除
EnableTriggerGroup("songxin_ask",false) 这个就是关掉这个组,EnableTriggerGroup("songxin_ask",true)就是打开
也可以单独开关分组中的其中一个触发器
EnableTrigger("songxin_killer1",true) 或者 EnableTrigger("songxin_killer1",false)

就和Zmud中的 #t+ #t-用法一样
门派:古墓派
发表于 2017-4-7 14:02:28 | 显示全部楼层
modman@tj 发表于 2017-4-6 00:04
首先,做些准备工作

我这些日子用下来,觉得mush比zmud舒服的地方就是,改东西的时候,有个好用的编辑器 ...

请用luaeditor6.20非常好用。而且是绿色版
门派:天龙寺
 楼主| 发表于 2017-4-8 00:07:37 | 显示全部楼层
三、lua中的Table
这个东西,简单的就可以理解成一个一列或两列的表格,比如skill.lua中的
  1. skillEnable={["anying-fuxiang"] = "dodge",
  2. ["anran-zhang"] = "strike",
  3. ["bahuang-gong"] = "force",
  4. ["baihua-cuoquan"] = "cuff",
  5. ["banruo-zhang"] = "strike",
  6. ["beiming-shengong"] = "force",
  7. ["bihai-chaosheng"] = "force",
  8. ["canglang-goufa"] = "hook",
  9. ["canhe-zhi"] = "finger",
  10. ["caoshang-fei"] = "dodge",
  11. ["chongling-jian"] = "sword",
  12. }
复制代码

或者job.lua中的
  1. WdjIgnores = {
  2.   ["苗疆蛇房"] = true,
  3.   ["苗疆卧室"] = true,
  4.   ["苗疆厨房"] = true,
  5.   ["苗疆前厅"] = true,
  6.   ["苗疆明月厅"] = true,
  7.   ["苗疆兵器房"] = true,
  8.   ["苗疆大门"] = true,
  9.   ["苗疆山坡"] = true,
  10.   ["苗疆山洞"] = true,
  11. }
复制代码

复杂的呢,可以这么理解,就是你家有个大柜子,柜子上有许多的抽屉,抽屉里面又用许多格子,分类放着各种物品。比如我们的Bag,这个里面的数据就比较多
在mush的输入行输入: /printTab(Bag) 一定注意,lua对大小写是敏感的,一定要区分大小写,Bag~=bag
  1. 光彩天地鞭 =        {
  2.                     ["fullid"] = "tiandi whip",
  3.                     ["kind"] = "whip",
  4.                     ["cnt"] = "1",
  5.                     id =                {
  6.                                         ["tiandi"] = "true",
  7.                                         ["tiandi whip"] = "true",
  8.                                         ["bian"] = "true",
  9.                                         ["whip"] = "true",
  10.                     },
  11. },
  12. 黄金卡 =            {
  13.                     ["fullid"] = "VIP Card",
  14.                     ["cnt"] = "1",
  15.                     id =                {
  16.                                         ["card"] = "true",
  17.                                         ["VIP Card"] = "true",
  18.                     },
  19. },
  20. 白银 =              {
  21.                     ["cnt"] = "5",
  22.                     ["fullid"] = "silver_money",
  23.                     id =                {
  24.                                         ["silver"] = "true",
  25.                                         ["silver_money"] = "true",
  26.                     },
  27. },
  28. 黄金 =              {
  29.                     ["cnt"] = "19",
  30.                     ["fullid"] = "gold_money",
  31.                     id =                {
  32.                                         ["gold_money"] = "true",
  33.                                         ["gold"] = "true",
  34.                     },
  35. },
复制代码


看一下英文,就知道这个表里面记录了什么
门派:天龙寺
 楼主| 发表于 2017-4-8 00:22:00 | 显示全部楼层
本帖最后由 modman@tj 于 2017-4-8 00:23 编辑

大神们已经把各种表都做好了,包括技能,背囊什么的,我们只需要简单的应用就可以。
怎么用呢?在shujian.lua开始的部分,有几个 xxx{}的   比如存储我们score数据的:score={}
这些都是表。想看他的数据,就去mush里面 printTab一下
取数据的时候 比如:
  1. Bag["黄金"].cnt
复制代码
对照上一楼的Bag表,这个就是读取你身上的gold数量
这个还是比较容易的吧!?

其实这一点上,mush比Zmud有着非常大的优势,不用每次都去做触发器,一个触发器搞定所有任务中使用的变量,全都存起来了,这样检查武器什么的,就变得很容易。
比如前几天我在qq群上问到的,如果uweapon丢了就不上山,这个怎么做?
大神给了个答案。。如下:
在shujian.lua里面有个子程序 check_jbox()这个是经常执行的,大家可以搜索一下,什么时候执行这个程序,在里面加上几句话:
  1. if job.zuhe==nil then job.zuhe={} end
  2.    for p in pairs(weaponUsave) do
  3.         if not isInBags(p) then
  4.                 job.zuhe["songmoya"]=nil
  5.                 messageShow('【'..p..'】丢了!先不上山了,在山下混日子。')
  6.         end       
  7.    end
复制代码

然后就搞定了。。。至于丢了之后去买二哈什么的,需要再做一个子程序,加到这里面就可以。

折腾了一晚上Zmud,不想打字了。。。待续!
门派:天龙寺
 楼主| 发表于 2017-4-9 00:15:58 | 显示全部楼层
上一贴说到找武器,今天就详细解释一下
for p in pairs(weaponUsave) do
    。。。。
end
这个就是从weaponUsave中一个个的找过去,从第一个找到最后一个的一个循环
这个记住就好
这时候p就分别对应每一个武器,第一遍循环对应第一个武器,第二遍。。。。一直到这个列表的总数
isInBags 这个是大神们已经做好的一个子程序。不用也行,直接写成 not Bag[p]就可以
因为Bag这个列表时刻更新着你身上的所有物品
这个物品在包里的话Bag[p]返回ture not Bag[p]就返回nil
这样就理解了吧!
可以在mush里面输入 /print(Bag['极品神通剑'])试一下。。身上有这个武器,就是true,没有就是nil
门派:不明
发表于 2017-4-9 06:56:31 | 显示全部楼层
楼主还是太厉害了,说实话,这玩意对于我来讲,简直就是天书。真心看不懂。
门派:天龙寺
 楼主| 发表于 2017-4-9 23:29:51 | 显示全部楼层
本帖最后由 modman@tj 于 2017-4-9 23:40 编辑

继续说表的问题,以大家都比较关心的songmoya为例。
首先,建立各个属性武功的表格,在job.lua中
  1. skillsjineng1 = {
  2.   ["金翅天王爪"] = true,
  3.   ["截手九式"] = true,
  4.   ["银索金铃"] = true,
  5.   ["龙爪功"] = true,
  6.   ["腾龙匕法"] = true,
  7.   ["弹指神通"] = true,
  8.   ["裂天斧"] = true,
  9.   ["虎爪绝户手"] = true,
  10.   --["抽髓掌"] = true,
  11.   ["九阴白骨爪"] = true,
  12.   ["慕容剑法"] = true,
  13. }--险
  14. skillsjineng2 = {
  15.   ["血刀经"] = true,
  16.   ["参合指"] = true,
  17.   ["美女拳法"] = true,
  18.   ["独孤九剑"] = true,
  19.   ["韦陀杵"] = true,
  20.   ["拈花指"] = true,
  21.   ["灵蛇鞭法"] = true,
  22.   ["玉箫剑法"] = true,
  23.   ["五罗轻烟掌"] = true,
  24.   ["铁掌掌法"] = true,
  25.   ["玄虚刀法"] = true,
  26.   --["天山杖法"] = true,
  27.   ["苗家剑法"] = true,
  28.   ["四象**刀"] = true,
  29. }--妙
复制代码

skillsjineng1~12代表各个属性的武功列表,如果像前几天的news,段家剑法改变了属性,这里就需要修改了
之前ptbx版的,技能里面没有无属性的列表,我就自己加了一个
  1. skillsjineng12 = {
  2.   ["冲灵剑法"] = true,
  3.   ["两仪剑法"] = true,
  4.   ["烈火剑"] = true,
  5.   ["无相劫指"] = true,
  6.   ["疯魔杖"] = true,
  7.   ["抽髓掌"] = true,
  8.   ["三阴蜈蚣爪"] = true,
  9.   ["天山杖法"] = true,
  10.   ["天山追魂钩"] = true,
  11.   ["金蛇剑法"] = true,
  12.   ["金蛇游身掌"] = true,
  13.   ["太祖拳"] = true,
  14.   ["回风鞭"] = true,
  15.   ["无上大力杵"] = true,
  16.   ["普渡杖"] = true,
  17.   ["无常杖"] = true,
  18.   ["韦驮棍"] = true,
  19.   ["慈悲刀"] = true,
  20.   ["修罗刀"] = true,
  21.   ["伏魔剑"] = true,
  22.   ["达摩剑"] = true,
  23.   ["两仪剑法"] = true,
  24.   ["玄阴剑法"] = true,
  25. }--无
复制代码

还有。现在的列表里面,mrjf和shlf是单独拎出来的,为了换更准确的武功
我自己上山的时候,特别怕dgb,所以我又单建立了一个表
  1. skillsjineng13 = {
  2.   ["打狗棒法"] = true,  
  3. }--奇
复制代码

这样在遇到打狗棒的时候,我就可以单独给他一个pfm alias了,记得把原来奇那个表里面的打狗棒删掉!
这样在songmoya.lua里面就有了判断属性,读取pfm alias的段落了
  1. if skillsjineng3[sxjob.skills1] then
  2.             local l_cmd=GetVariable("pgang")
  3.             if skills["dugu-jiujian"] then l_cmd=setpo..';'..l_cmd end
  4.               create_alias('yptpfm1','yptpfm1','alias ppp1 '.. l_cmd ..' '..sxjob.id1)
  5.                exe('yptpfm1')
  6. end
复制代码

如果技能属于skillsjineng3这个表里面的,就用pgang这个设定alias。。。这样就知道怎么改了吧!
门派:天龙寺
 楼主| 发表于 2017-4-9 23:39:47 | 显示全部楼层
至于怎么把数据读入表里面,去看一下shujian.lua里面的
score组 和hp组 的trigger,以及他们相对应的子程序就知道了,这个前面讲过怎么看,
大家可以自己研究一下下!
门派:天龙寺
 楼主| 发表于 2017-4-9 23:48:13 | 显示全部楼层
四、怎么写条件判断
这个东西,在各个不同语言里面其实都是一样的,需要对自己的逻辑思维进行一下整理。
猿类们都很熟悉这个过程。其实就是流程图。
尤其是复杂的判断,在写之前,找张纸大致画一下,整理一下思路,对程序的逻辑性和可读性有很大的帮助。

随便在网上找一个图,看一下!

另外就是,and or not,这几个关系搞清楚。说起来mush里面的这个判断真的不难。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|书剑永恒MUD ( 闽ICP备14012032号|闽公网安备 35050202000162号 )

GMT+8, 2025-6-7 03:28 , Processed in 0.062603 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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