2. 系统函数介绍
Muder 提供了很多系统函数,sys 对象里都是系统相关的函数和变量。还有一个 com 对象和 my 对象后面也会提到。
2.1 系统变量(无需调用,直接读取)
2.1.1 `sys.id`:玩家 ID 示例:
sys.info(`我的ID是:${sys.id}`);
2.1.2 `sys.name`:玩家中文名称 示例:
sys.info(`你好,${sys.name}`);
2.2 系统函数(常用 API 与示例)
2.2.1 `sys.send`:发送指令给 Mud 服务器,这是最常见的函数
sys.send("look");
2.2.2 `sys.batch`:批量顺序执行命令,间隔秒数
await sys.batch(["look", "east"], 2);
说明:执行 look 指令后等待 2 秒再执行 east 指令,适合执行批量指令,比如边走路边检破烂,不过每个指令之间的时间是固定的。
2.2.3 `sys.repeat`:重复执行命令
sys.repeat("look", 3);
2.2.4 `sys.info` / `sys.warn` / `sys.error`:在界面打印信息/警告/错误
sys.info("hello");
sys.warn("This is a warning.");
sys.error("error: hello");
2.2.5 `sys.log`:首页左边的日志区域追加内容,
sys.log("hello", "green");
说明:第二个参数可以是颜色,方便区分不同日志
2.2.6 `sys.note`:记事本区域覆盖内容
sys.note("hello", "green");
说明:可以让 AI 把第一个参数转成 h5 格式,带各种颜色的文本。
2.2.7 `sys.timer`:界面定时器(索引 1-5)
sys.timer(1, "FULLME", 15 * 60, true, "ss");
说明:第一个参数是索引,第二个是显示的文字,第三个是时间 15*60 表示 15 分钟,第四个参数为 true 是表示倒计时,否则表示正计时,最后一个参数是时间的格式,ss 表示显示秒。这个示例就是用来执行 fullme 后,重新开始倒计时 15 分钟计时。
2.2.8 `sys.closeFullme`:关闭 fullme 窗口
sys.closeFullme();
2.2.9 `sys.delay` / `sys.undelay`:延迟执行与取消
const id = sys.delay(2, "look"); //过2秒后再执行look,有时候可以替代await sys.sleep(2)
sys.undelay(id); //取消延时执行
2.2.10 `sys.tick` / `sys.untick`:循环定时与清除
const tid = sys.tick(5, "look"); //每隔5秒执行一次look
sys.untick(tid); //取消循环
2.2.11 `sys.sleep`:异步等待秒数
await sys.sleep(2); //这个函数用的很多
2.2.12 `sys.alias` / `sys.unalias`:别名管理
sys.alias("k", "killall");
sys.unalias("k"); //取消别名
2.2.13 `sys.action` / `sys.unaction`:文本/正则触发器
const aid = sys.action("id1", "看到了", function () {
sys.send("hi");
});
sys.unaction(aid);
说明:很多情况触发器不希望一直生效,是希望在特定的情况下生效,然后过一会让它再失效。
2.2.14 `sys.actionOnce`:仅触发一次
sys.actionOnce("id1", "官兵拦住你说道:站住,把", "unwield all");
说明:有的时候短时间内会触发多次,比如问 NPC 任务,其他人也在问 NPC 任务,可以通过这个函数来触发一次就不会被再次触发。然后过 5 秒或更长时间后又恢复触发。
2.2.15 `sys.test`:模拟文本触发器测试
sys.test("看到了", false);
说明:这个通常用于测试一个触发器是否生效,相当于模拟发送一段文本来触发自己写的触发器
2.2.16 `sys.xy`:逍遥游移动,`xy` 为异步可等待
sys.go("扬州"); //不等待,直接发送
await sys.xy("扬州"); //等待到达
2.2.17 `sys.reversePath`:反转路径字符串
sys.reversePath("w;w;s");
说明:这个函数用的也很多,用来反转路径,相当于走过去,然后再方向走回来。
2.2.18 `sys.loadMap` / `sys.listMaps`:加载与列出地图,都是异步函数
await sys.loadMap("扬州");
await sys.listMaps();
说明:本来想提供更多地图相关的函数,包括城市内、跨城市的快速行走和遍历,但是这些函数有很多特例,个性化太强,所以放弃了,只提供了最基础的函数。
2.2.19 `sys.try` / `sys.retry`:等待文本或重试直到成功
await sys.try("tuna 10", "你吐纳完毕,睁开双眼,站了起来。", 10);
await sys.retry("dalao", "也许你可以返航了。可以使用hua back命令", 4, 60);
说明:这 2 个函数用的很多, try 表示执行一个指令 `tuna 10`,就执行一次,执行完就开始等待,如果出现 `你吐纳完毕,睁开双眼,站了起来。`这个函数就执行结束,如果 10 秒钟还没出现这个文本,也结束,超时结束。 retry 差不多,只不过是执行多次,上面的示例就是每隔 4 秒执行一次`dalao`指令,总共执行 60 次,也就是 240 秒
2.2.20 `sys.find`:当前房间查找物品/NPC(带超时)
await sys.find("girl", "一个卖东西的小贩", 3);
说明:这个函数用于查询一个 NPC 或物品,通过 `look girl` 指令去看它,看它的描述有没有包含`一个卖东西的小贩`的内容,如果有,就返回 true 这个函数通常用于遍历的时候,一个个人来查询其特征。
2.2.21 状态查询:`sys.status()` / `sys.isbusy()` / `sys.isfighting()` / `sys.room()`
const st = sys.status();
if (sys.isfighting()) sys.send("yun heal");
说明:这些函数也经常用到,获取完整的状态,判断是否忙,判断是否在战斗中,当前所在房间的信息
2.2.22 发送/接收钩子:`sys.onSend` / `sys.offSend` / `sys.onReceive` / `sys.offReceive`
sys.onSend("id", function (cmd) {
/* ... */
});
sys.offSend("id");
sys.onReceive(
"id",
function (msg) {
/* ... */
},
true
);
sys.offReceive("id");
说明:这是最底层的基础函数,我们在高级篇里再讲
2.2.23 GMCP 处理:`sys.onGmcp` / `sys.offGmcp`
sys.onGmcp("char.vitals", function (data) {
sys.info(data);
});
sys.offGmcp("char.vitals");
说明:这是最底层的基础函数,我们在高级篇里再讲
2.2.24 `sys.random`:生成随机数(时间戳+随机值)
const r = sys.random();
2.2.25 音频控制:`sys.playaudio` / `sys.stopaudio`
const audio = sys.playaudio("http://.../sound.wav", 0.5, true);
sys.stopaudio(audio);
2.3 com 和 my
com 和 my 对应 `通用` 和 `玩家` 页面 我们在通用界面上创建的变量会保存在 com.vars 下,在通用界面上创建的函数会保存在 com. 下,my也是同样的。com示例如下截图
通用变量
通用函数