北大侠客行MUD论坛

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

少林新手任务机器试行教学

[复制链接]
发表于 2016-12-27 15:36:37 | 显示全部楼层 |阅读模式
本帖最后由 linjpen 于 2016-12-28 02:26 PM 编辑

直接进入正题:新手攻略看这里:http://pkuxkx.net/forum/viewthread.php?tid=18648&
技术指导1:http://pkuxkx.net/forum/viewthread.php?tid=38551&
技术指导2:http://pkuxkx.net/forum/viewthread.php?tid=37846&
技术指导3   http://pkuxkx.net/forum/viewthread.php?tid=39080&
一、挑水:没什么好说的,用SetSpeedWalkDelay,网速快用2000,保险用3000。
二、劈柴:借用cappuccino大大的基本能搞定了。
  1. map_wood = {
  2.   ["小段"] = "small",
  3.   ["弯曲"] = "bending",
  4.   ["直"] = "straight",
  5.   ["大段"] = "large",
  6.   ["光滑"] = "smooth",
  7.   ["粗糙"] = "rough",
  8.   ["树枝"] = "branch",
  9.   ["树杈"] = "crotch",
  10.   ["树干"] = "trunk",
  11.   ["树根"] = "root",
  12. }

  13. ^你从柴堆上拿走了一根(\S+)的(\S+)。$
  14. DoAfter(1, "put " .. map_wood["%1"] .. " " .. map_wood["%2"])
复制代码

三、诵经和超度
           先把诵经地址,经书名字和经书章节抓下来

  例:^[>]*\s*道果禅师说道:「今天的早课安排在(\S+),请某某诵唱(\S+)的(.*)
      SetVariable ("sjdd", "%1")
      SetVariable ("jsmz", "%2")
      SetVariable ("jszj", "%3")
      print(GetVariable("sjdd") , GetVariable("jsmz"))
因为诵经都在寺内,基本都在干路上,做一个遍历数组;比如sjbl={s;e;e;e;e;s;w;}--内容我是乱写的,具体自己遍历输入
然后进行遍历,路上抓取房间名:
       匹配:^[> ]*.*\n(\S+)\s+\-\s+\Z
       发送:    SetVariable("roomid", "%1")     
当房间名等于诵经地址一致时停下来开始找经书:if GetVariable("roomid") == GetVariable("roomid") then
                                                                        EnableTrigger("walk", false)--停止走路
                                                                        Execute("zhaojing")  --开始找经书
                                                                        end
之所以借用包裹来选经是因为后面超度回来借经书太坑了:
匹配:^[> ]*你从包袱中拿出一本(\S+)。$
  1. table.insert (shuming, "%1")--抓经书名到数组
  2. SetVariable ("shuming", "%1")       --存取变量
  3. if GetVariable("shuming") == GetVariable("jsmz") then
  4. print(GetVariable("shuming"))  
  5. for i,v in ipairs(shuming) do            --遍历数组
  6. if v ~= GetVariable("jsmz") then Execute("put "..v.." in bao")-- 把其他经书放包裹
  7. end
  8. end
  9. DoAfter(2,"page 1")
  10. else  Execute("get shu from bao")
  11. end
复制代码


然后翻经书,继续抓经书章节名字:
匹配:^[> ]*(.*)\n\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\n\=\=\s+\=\=\Z
发送:SetVariable("lsjszj","%1")
当这个临时章节名和诵经章节名市停止翻经书,准备诵经:if GetVariable("lsjszj") == GetVariable("jszj") then
Execute("ok")--做一个行为动作做触发.
匹配:^\=\=\s+(\S+)\s+\=\=$
记录经书内容:table.insert (jsnr, "%1")
匹配:^\S+经\s+第(\S+)页\/总\S+页.*
然后把它转成一个变量SetVariable ("nr",table.concat(jsnr))
然后可以用DoAfter(1,"chanting " .. GetVariable("jsys") .. " " .. GetVariable("nr") .. "") 诵经了,--哈哈,比起整本经书记录下做数据库是不是省力很多了。(不过我也不会做数据库,,,,,)
之后就是ljback(),路径反转,返回。
  1. ljback=function()
  2.         if lj == nil then
  3.         lj=GetVariable("lj")
  4.         lj = Split(lj,";") end
  5.                 lj = revlj(lj)
  6.    SetVariable ("lj", table.concat(lj, ";"))
  7. --EnableTrigger("sj_walk", false)
  8. EnableTrigger("sj_back", ture)
  9. print(GetVariable("lj"))
  10. end
复制代码

五、敲钟(击鼓)
     这个就是颜色触发了,没什么可说.
    指导贴:http://pkuxkx.net/forum/viewthread.php?tid=8697&
最后放一些遍历必要代码,其实都是上面“”技术指导3“”里的内容:
   
  1. function Split(szFullString, szSeparator)  --数组路径转换
  2. local nFindStartIndex = 1
  3. local nSplitIndex = 1
  4. local nSplitArray = {}
  5. while true do
  6.    local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)
  7.    if not nFindLastIndex then
  8.     nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))
  9.     break
  10.    end
  11.    nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)
  12.    nFindStartIndex = nFindLastIndex + string.len(szSeparator)
  13.    nSplitIndex = nSplitIndex + 1
  14. end
  15. return nSplitArray
  16. end

  17. function revlj(nowlj)--返回路径
  18.    local lj=nowlj
  19.    local i=table.getn(lj)
  20.    local newlj={}
  21.    for newi=1,i do
  22.         newlj[newi]=revfx(lj[i+1-newi])
  23.    end
  24.    return newlj
  25. end

  26. function revfx(fx)--返回方向
  27.        if fx=="enterbj" then return "outbj"    end
  28.        if fx=="outbj" then return "enterbj"    end
  29.        if fx=="swboxiaolu" then return "boxiaolune"    end
  30.        if fx==nil then return     end
  31.        if fx=="south" then return "north"    end
  32.        if fx=="east" then return "west"   end
  33.        if fx=="west" then return "east"   end
  34.        if fx=="north" then return "south"   end
  35.        if fx=="southup" then return "northdown"   end
  36.        if fx=="southdown" then return "northup"   end
  37.        if fx=="westup" then return "eastdown"   end
  38.        if fx=="westdown" then return "eastup"   end
  39.        if fx=="eastup" then return "westdown"   end
  40.        if fx=="eastdown" then return "westup"   end
  41.        if fx=="northup" then return "southdown"   end
  42.        if fx=="northdown" then return "southup"   end
  43.        if fx=="northwest" then return "southeast"   end
  44.        if fx=="northeast" then return "southwest"   end
  45.        if fx=="southwest" then return "northeast"   end
  46.        if fx=="southeast" then return "northwest"   end
  47.        if fx=="enter" then return "out"   end
  48.        if fx=="out" then return "enter"   end
  49.        if fx=="up" then return "down"   end
  50.        if fx=="down" then return "up"   end

  51.        if fx=="u" then return "d"   end
  52.        if fx=="d" then return "u"   end
  53.        if fx=="s" then return "n"    end
  54.        if fx=="e" then return "w"   end
  55.        if fx=="w" then return "e"   end
  56.        if fx=="n" then return "s"   end
  57.        if fx=="su" then return "nd"   end
  58.        if fx=="sd" then return "nu"   end
  59.        if fx=="wu" then return "ed"   end
  60.        if fx=="wd" then return "eu"   end
  61.        if fx=="eu" then return "wd"   end
  62.        if fx=="ed" then return "wu"   end
  63.        if fx=="nu" then return "sd"   end
  64.        if fx=="nd" then return "su"   end
  65.        if fx=="nw" then return "se"   end
  66.        if fx=="ne" then return "sw"   end
  67.        if fx=="sw" then return "ne"   end
  68.        if fx=="se" then return "nw"   end
  69.            if fx=="open gate" then return "knock gate"   end
  70.            if fx=="enter shudong" then return "out"   end
  71.            if fx=="kaimen" then return "qiaomen"   end
  72.            if fx=="qiaomen" then return "kaimen"   end
  73.            if fx=="yzshudong" then return "yzshudongb"   end
  74.            if fx=="yzshudongb" then return "yzshudong"   end
  75.                       if fx=="enter dong" then return "outdong"   end
  76.                               if fx=="outdong" then return "enter dong;sw"   end

  77.        return fx
  78. end

  79. function zhfx(fx)--赶车方向
  80.        local fx=fx
  81.        if fx=="u" then return "up"   end
  82.        if fx=="d" then return "down"   end
  83.        if fx=="s" then return "south"    end
  84.        if fx=="e" then return "east"   end
  85.        if fx=="w" then return "west"   end
  86.        if fx=="n" then return "north"   end
  87.        if fx=="su" then return "southup"   end
  88.        if fx=="sd" then return "southdown"   end
  89.        if fx=="wu" then return "westup"   end
  90.        if fx=="wd" then return "westdown"   end
  91.        if fx=="eu" then return "eastup"   end
  92.        if fx=="ed" then return "eastdown"   end
  93.        if fx=="nu" then return "northup"   end
  94.        if fx=="nd" then return "northdown"   end
  95.        if fx=="nw" then return "northwest"   end
  96.        if fx=="ne" then return "northeast"   end
  97.        if fx=="sw" then return "southwest"   end
  98.        if fx=="se" then return "southeast"   end
  99.        return fx
  100. end

  101. function transnumberc(str)--中文数字转阿拉伯数字
  102. if str=="" then return 0 end
  103. local a,b=string.find(str,"万")
  104. if a==nil then
  105.   local strtemp=string.gsub(str,"零","")
  106.   local res=0
  107.   a,b=string.find(strtemp,"^.+千")
  108.   if a~=nil then
  109.    res=res+getnumberfromchinese(string.sub(strtemp,1,2))*1000
  110.    strtemp=string.sub(strtemp,b+1)
  111.   end
  112.   a,b=string.find(strtemp,"^.+百")
  113.   if a~=nil then
  114.    res=res+getnumberfromchinese(string.sub(strtemp,1,2))*100
  115.    strtemp=string.sub(strtemp,b+1)
  116.   end
  117.   a,b=string.find(strtemp,"^.*十")
  118.   if a~=nil then
  119.    if b~=2 then
  120.     res=res+getnumberfromchinese(string.sub(strtemp,1,2))*10
  121.    else
  122.     res=res+10
  123.    end
  124.    strtemp=string.sub(strtemp,b+1)
  125.   end
  126.   if strtemp~=nil then
  127.    res=res+getnumberfromchinese(strtemp)
  128.   end
  129.   return res
  130. else
  131.   return transnumberc(string.sub(str,1,a-1))*10000+transnumberc(string.sub(str,b+1))
  132. end
  133. end
  134. function getnumberfromchinese(str)
  135. if str=="一" then return 1 end
  136. if str=="二" then return 2 end
  137. if str=="三" then return 3 end
  138. if str=="四" then return 4 end
  139. if str=="五" then return 5 end
  140. if str=="六" then return 6 end
  141. if str=="七" then return 7 end
  142. if str=="八" then return 8 end
  143. if str=="九" then return 9 end
  144. return 0
  145. end

  146. function zhfxlj(lj)--赶车用
  147.     --local lj=lj
  148.     local temi=1
  149.     for i,v in ipairs(lj) do lj=zhfx(v) end
  150.     return lj
  151. end
复制代码

走路的家伙:
  1. function bianli()
  2.   if lj == nil then
  3.         lj=GetVariable("lj")
  4.         lj = Split(lj,";")
  5.         end
  6.        local i=tonumber(GetVariable("bianli_i"))-------bianli_i是个计数器,表明现在走到数组的哪一个元素了。
  7.                         local x=revfx(lj[i]) --返回方向,走过头用
  8.        if tonumber(GetVariable("hubiao"))==1 then ------------hubiao个作为一个标志:如果为1就表明现在不带着镖车走,如果为0就得带着镖车走。        
  9.        if lj==nil or tostring(table.getn(lj))==GetVariable("bianli_i")
  10.            then Note("已经走完了,还走个屁啊")   
  11.            Execute(lj[i])------这才是行走的命令
  12.            EnableTrigger("sj_back", false)--结束走路
  13.            DoAfterSpecial(1,"renwuqidian()",12)--判断是否来到原点
  14.            else
  15.            print("lj变量:",GetVariable("lj"))
  16.        local s1="任务地点是: "..GetVariable("sjdd").."    当前行走段一共"..tostring(table.getn(lj)).."步,现在为 第"..GetVariable("bianli_i").."步"..",当前命令:"..lj[i]        
  17.               Note(s1)---------以上两行是用来提醒自己的。
  18.           Execute(lj[i])------这才是行走的命令  
  19.                   end                  
  20.            if tonumber(GetVariable("sj_start"))==1 then sj() end--判断是否在诵经,
  21.            elseif tonumber(GetVariable("hubiao"))==0 then
  22.                    if lj==nil then Note("已经走完了,还走个屁啊") return Note("到点了") end
  23.               local s1="当前行走段一共"..tostring(table.getn(lj)).."步,现在为 第"..GetVariable("bianli_i").."步"..",当前命令:"..lj[i]
  24.                    Note(s1)                                    
  25.                   end
  26.                   
  27.            end
复制代码



ps:本人纯粹新手,以上全都是拿来主义,做好这个少林新手机器,感觉推车也不远了,然后胡一刀,萧峰还会远吗,,前面在等着我们!!自己动手征服才会带来快感~
以上,与众新手共勉,祝希望北侠人越来越多,越来越火,永立不到!!!

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2016-12-27 17:16:43 | 显示全部楼层
收藏了,👍
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 04:12 AM , Processed in 0.009704 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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