shanghua 发表于 2022-9-7 17:34:31

mudlet基础脚本开发-4、武当门派任务 - 练阵

本帖最后由 shanghua 于 2022-9-14 03:54 PM 编辑

上一节 我们的开发框架已经搭好,这一节我们先填一层架子。

通过任务分发脚本,会关闭其他目录的触发,只激活练阵的触发,所以练阵脚本的开发思路:
1、换场:场地里有人,我们要换场子。而且在结束之后还要回来
2、开始:开始练的的时候会有正、反五行的提示,我们只记录正或反,别的不记
3、取五行:刚开始的时候都会有位置提示,只记这1个位置,别的不记,根据五行相生相克的规则,来自动走位,并且及时更新当前位置
4、走位:通过记录的“正”、“反”方向,来判断走位
5、练完:结束了,回去交任务,领赏
6、站错:结束了,回去放弃任务,正常情况下是走不到这一步的,因为不可能站错,但是不排除其他不确定因素,所以还是要做一个容错处理


先找一个自己记的住的位置,新建一个zf.lua文件,用vscode打开它,以下所有的脚本代码全都复制到这个文件里,最后把文件里的代码一起复制到mudlet的脚本里去。因为mudlet好像不能直接引用外部脚本文件,所以这么做既能起到备份的作用,又能方便开发,不用在触发和脚本之间切来切去。
以后修改都以这个文件为主,每次改完再复制到mudlet里去。虽然有点麻烦,但这是一个好习惯。

首先我们通过 这一节教程 接到任务后,去执行 startZF() 函数

1、换场
触发:
这个房间里正有人在演练阵法触发代码:
startZF()脚本代码:
function startZF ()
    local dirs = {'ne','e','se','nw','w','sw'}

    -- 演练场有人,换场
    if zf then
      -- 返回方向
      zf.dirBack = dirs

      zf.i = zf.i + 1
      if zf.i==7 then zf.i=1 end

      -- 进场方向
      zf.dir = dirs
    else
      zf = {
            dir = dirs,
            dirBack = dirs,
            -- 进场记数
            i = 1,
            -- 正反走位
            zouwei = myzouwei,
            wuxing = ''
      }
    end

    send(zf.dir)
    send('zhenfa')
end



2、开始
触发:
阵法教习从远处跑过说到:今天练『(.*)五行阵』,请大家注意走位触发代码:
goZF(matches)脚本代码:

function goZF (myzouwei)
    -- 正反走位
    zf.zouwei = myzouwei
end



3、取五行:
触发:
张三一会儿站在(.+)位。这个里的“张三”,要改成自己的中文姓名
触发代码:
lianZF(matches)脚本代码:

function lianZF(mywuxing)
    zf.wuxing = mywuxing
    tempTimer(2, [])
end


4、走位:
触发:
大家从自己现在的位置按照『(.+)五行阵』的要求往下走一步。触发代码:
goOnZF(matches)脚本代码:

function goOnZF(myzouwei)
    zf.zouwei = myzouwei
    zf.wuxing = getWuxingZF()
    tempTimer(2, [])
    expandAlias('chihe')
end;

function getWuxingZF()
    local wuxing

    if zf.zouwei=='正' then
      if zf.wuxing=='金' then
            wuxing = '水'
      elseif zf.wuxing=='木' then
            wuxing = '火'
      elseif zf.wuxing=='水' then
            wuxing = '木'
      elseif zf.wuxing=='火' then
            wuxing = '土'
      elseif zf.wuxing=='土' then
            wuxing = '金'
      end
    end

    if zf.zouwei=='反' then
      if zf.wuxing=='金' then
            wuxing = '木'
      elseif zf.wuxing=='木' then
            wuxing = '土'
      elseif zf.wuxing=='水' then
            wuxing = '火'
      elseif zf.wuxing=='火' then
            wuxing = '金'
      elseif zf.wuxing=='土' then
            wuxing = '水'
      end
    end

    return wuxing;
end

上边的代码就是五行相生相克的实现原理,掐指一算就知道下一步要走哪里,不需要去记录当前走的是哪一步。
chihe是一个别名,吃两口烧鸡,喝两口酒,不需要的可以注释掉

5、练完:
触发:
阵法教习挥了挥旗喊道:五行阵演练到此结束触发代码:
overZF(true)脚本代码:

function overZF(ok)
    send(zf.dirBack)
    zf = nil
    if ok then
      expandAlias('cxok')
    else
      expandAlias('cxover')
    end
end



cxok、cxover是两个别名,一个交任务,一个放弃任务

6、站错
触发:
你站错了方位,整个五行阵全都乱套了,大家只好都停下来!
你站在这里发傻,导致整个阵型全乱套了,气得阵法教习跳起来只骂娘!这是两条独立触发,任何一条匹配到,都会执行代码,不要勾选多行匹配。
触发代码:
overZF(false)
交任务:
触发:
^你向冲虚道长打听有关『success』的消息。
^冲虚道长对道长拱了拱手.+
^\s+\D+点经验。
^\s+\D+潜能。
触发代码:
print('\n 完成')
send('dazuo 100')
enableTrigger('武当-任务恢复')交完任务后,穿插一个简单的打坐。

打坐

触发:
你运功完毕,深深吸了口气,站了起来。触发代码:
tempTimer(1, [[
disableTrigger('武当-任务恢复')
expandAlias('cxjob')
]])起来之后,继续接任务。练阵脚本完成。

最后记得,把zf.lua里的代码复制到mudlet练阵脚本里去。

附上触发与脚本目录结构:





页: [1]
查看完整版本: mudlet基础脚本开发-4、武当门派任务 - 练阵