北大侠客行MUD论坛

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

新客户端 Muder 机器人入门使用

[复制链接]
发表于 昨天 07:48 PM | 显示全部楼层 |阅读模式
本帖最后由 wendaokoujin 于 2025-7-5 07:54 PM 编辑

在客户端编写脚本时,常见的方式主要有两种:

1. 代码文件编写方式(如 Paotin)


这种方式完全通过编写代码文件来实现机器人逻辑,并通过加载脚本文件来运行。例如:执行破阵任务时加载 pz.tin,剑心居任务则加载 jxj.tin

  
  • 优点
       

            
    • 模块化程度高,便于针对不同场景分别维护;

    •       
    • 可借助 VSCode 等 IDE 提供的自动补全、语法高亮、重构等开发工具,提升编写效率。

    •    

      

  •   
  • 缺点
       

            
    • 对无开发经验的玩家上手门槛较高。

    •    

      

  • 2. 可视化设置方式


    通过图形化界面将功能分为变量、别名、触发器等部分,用户可以分别进行设置。



        
    • 优点
         

              
      • 上手门槛低;

      •       
      • 别名和触发器已经能满足绝大多数(80%以上)的需求。

      •    

        

    •   
    • 缺点
         

              
      • 缺乏模块化管理,难以组织复杂逻辑或复用功能。

      •    

        






    Muder 的实现方式



    Muder 早期采用第一种方式(代码文件),当前则更倾向于第二种方式(可视化配置)。其脚本系统分为三个层级:


    1. 系统分类


    由客户端预置并维护的基础函数和变量,不建议用户修改

    这些函数定义在 wwwroot/scripts/sysfun.js 文件中,同时在图形界面中也可查看说明。



        
    • 示例函数sys.info('haha'):在界面上打印文本

    •   
    • 示例变量sys.name:当前玩家的中文名称




    2. 通用分类


    适用于所有角色共用的脚本逻辑。

    考虑到许多玩家拥有多个角色,而一些通用功能(如任务机器人)不需要重复编写,通用分类可以有效提升脚本复用率。



        
    • 可按模块(任务)进行组织管理,例如每个主流任务对应一个模块;

    •   
    • 每个模块可包含独立的变量、函数、别名和触发器;

    •   
    • 不同模块在界面上通过图标和颜色加以区分;

    •   
    • Muder 默认实现了一个“基础”模块,建议不要修改此模块,可作为参考模版创建自己的模块。



        
    • 示例函数com.xy_extend('恒山','hi'):逍遥游走到恒山后,然后hi打个招呼

    •   
    • 示例变量,通常都放在vars下com.vars.xxx:定义了一个变量在vars下,叫xxx





    3. 玩家分类


    专属于当前角色的脚本配置,组织方式与“通用分类”相同。和通用的区别是:通用前缀是 com. ,玩家分类的前缀是 my.



        
    • 每位玩家可以为特定角色设置个性化模块;

    •   
    • Muder 默认不提供任何模块,完全由玩家自行维护与扩展。






    北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
     楼主| 发表于 昨天 07:59 PM | 显示全部楼层

    系统变量说明(vars)




        
    • id
      描述:玩家ID
      示例:sys.id

    •   
    • name
      描述:玩家名称
      示例:sys.name

    •   
    • password
      描述:玩家密码
      示例:sys.password



    系统函数说明(funs)




        
    • send(cmd)
      描述:发送指令给Mud服务器
      示例:sys.send('ls')

    •   
    • note(text, color)
      描述:记事本记事
      示例:sys.note('hello', 'green')

    •   
    • timer(index, label, value, iscountdown, format)
      描述:设置不同的定时器到界面上
      示例:sys.timer(1, 'test', 100, true, 'ss')

    •   
    • info(msg)
      描述:打印信息在界面上
      示例:sys.info('hello')

    •   
    • error(msg)
      描述:打印错误信息在界面上
      示例:sys.error('error: hello')

    •   
    • alias(name, command)
      描述:为命令设置别名
      示例:sys.alias('k', 'killall')

    •   
    • action(id, pattern, func, isRaw)
      描述:注册文本或正则触发器
      示例:sys.action('id1','看到了', function(){ sys.send('hi'); })

    •   
    • unalias(name)
      描述:移除指定命令别名
      示例:sys.unalias('go')

    •   
    • unaction(id)
      描述:移除指定命令触发器
      示例:sys.unaction(id)

    •   
    • enablealias(name)
      描述:启用指定命令别名
      示例:sys.enablealias('go')

    •   
    • disablealias(name)
      描述:禁用指定命令别名
      示例:sys.disablealias('go')

    •   
    • enableaction(id)
      描述:启用指定命令触发器
      示例:sys.enableaction(id)

    •   
    • disableaction(id)
      描述:禁用指定命令触发器
      示例:sys.disableaction(id)

    •   
    • random()
      描述:生成一个随机数
      示例:sys.random()

    •   
    • onSend(id, callback)
      描述:注册发送指令前的回调
      示例:sys.onSend('id', function(cmd){})

    •   
    • onReceive(id, callback, isRaw)
      描述:注册接收消息回调
      示例:sys.onReceive('id', function(msg){}, true)

    •   
    • delay(seconds, commandOrFunc)
      描述:延迟执行命令或函数
      示例:sys.delay(2, 'look')

    •   
    • undelay(timerId)
      描述:取消延迟执行
      示例:sys.undelay(timerId)

    •   
    • tick(seconds, commandOrFunc)
      描述:定时循环执行
      示例:sys.tick(5, 'look')

    •   
    • untick(timerId)
      描述:取消定时循环
      示例:sys.untick(timerId)

    •   
    • sleep(seconds)
      描述:异步延迟
      示例:await sys.sleep(2)

    •   
    • actionOnce(pattern, func, timeout)
      描述:只触发一次监听
      示例:sys.actionOnce('你得到了', () => sys.send('get all'), 30)

    •   
    • batch(commands[], delaySec)
      描述:批量顺序执行命令
      示例:await sys.batch(['look', 'go east'], 1)

    •   
    • reversePath(path)
      描述:反转路径字符串
      示例:sys.reversePath('w;w;s')

    •   
    • find(name, desc, timeout)
      描述:查找房间内物品或NPC
      示例:await sys.find('小贩', '一个卖东西的小贩', 3)

    •   
    • try(command, successText, timeout, failTexts[])
      描述:等待成功或失败文本
      示例:await sys.try('go east', '你到达了东门', 10, ['这里没有路'])

    •   
    • retry(command, successText, interval, maxRetry)
      描述:重试直到成功或次数耗尽
      示例:await sys.retry('go east', '你到达了东门', 2, 5)

    •   
    • test(text, isRaw)
      描述:模拟文本触发器
      示例:sys.test('看到了', false)



    北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
     楼主| 发表于 昨天 08:12 PM | 显示全部楼层

    我们来看看触发器的基本使用方式,如下图所示:



    场景一:字符串触发


    这个图对应的触发条件就是字符串:


    您要将另一个连线中的相同人物赶出去

    对应触发的指令是:


    y

    也就是“确定赶出去相同人物”的确认操作。






    场景二:正则表达式触发



    这个图对应的触发条件是一个正则表达式


    JavaScript 的正则表达式语法与其他语言基本类似:



        
    • 如果你用过其他客户端或语言的正则表达式语法

    •   
    • 可以直接复制已有的表达式,让 AI 帮你转换成 JS 正则



    对应触发的操作是一个函数:


    function() {
      // 触发时执行的代码
    }

    或者异步版本:


    async function() {
      // 可使用 await 的异步函数
    }

    注意:函数必须以 functionasync function 开头。


    不了解 async 的概念?可以咨询 AI,获取更详细的解释和用法。






    颜色模式选项(颜色匹配触发)


    在设置触发器时,有一个复选框:


    颜色模式

    使用方式可以参考https://www.pkuxkx.net/forum/thread-50176-1-1.html
    北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
    发表于 12 小时前 | 显示全部楼层
    厉害 加油
    北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

    GMT+8, 2025-7-6 01:53 PM , Processed in 0.010878 second(s), 16 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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