北大侠客行MUD论坛

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

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

[复制链接]
发表于 2022-9-7 17:34:31 | 显示全部楼层 |阅读模式
本帖最后由 shanghua 于 2022-9-14 03:54 PM 编辑

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

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


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

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

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

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

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

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

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



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

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



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

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


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

function goOnZF(myzouwei)
    zf.zouwei = myzouwei
    zf.wuxing = getWuxingZF()
    tempTimer(2, [[send('zouwei '..zf.wuxing)]])
    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、练完:
触发:
  1. 阵法教习挥了挥旗喊道:五行阵演练到此结束
复制代码
触发代码:
  1. overZF(true)
复制代码
脚本代码:

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



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

6、站错
触发:
  1. 你站错了方位,整个五行阵全都乱套了,大家只好都停下来!
  2. 你站在这里发傻,导致整个阵型全乱套了,气得阵法教习跳起来只骂娘!
复制代码
这是两条独立触发,任何一条匹配到,都会执行代码,不要勾选多行匹配。
触发代码:
  1. overZF(false)
复制代码

交任务:
触发:
  1. ^你向冲虚道长打听有关『success』的消息。
  2. ^冲虚道长对道长拱了拱手.+
  3. ^\s+\D+点经验。
  4. ^\s+\D+潜能。
复制代码
触发代码:
  1. print('\n 完成')
  2. send('dazuo 100')
  3. enableTrigger('武当-任务恢复')
复制代码
交完任务后,穿插一个简单的打坐。

打坐

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

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

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





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

本版积分规则

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

GMT+8, 2024-4-20 02:29 AM , Processed in 0.010799 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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