不少新玩家对 Mud 技术原理不太了解,对程序也了解不多,就很难坚持玩下去,特别是想到要自己编写脚本就很头疼。
下面我对 Mud 的技术原理和一些概念做一些分享,让大家能快速理解和上手。
一、Mud 架构简述
Mud 总体上分为客户端和服务端:
- 服务端 就是
mud.pkuxkx.net 所在的服务器(端口号如8080暂不展开)
- 客户端 有很多种,从最早的 zmud 到现在各种现代客户端,其本质都一样
一旦客户端和服务器建立连接后,就开始数据交互,主要有以下几种情况:
- 客户端发指令 → 服务器返回文本 → 客户端显示
客户端发送:look
服务端返回:
这是一家价钱低廉的客栈,生意非常兴隆……你可以看看(look):paizi。
玩家看到后,可能输入新的指令,比如买东西、移动等。
- 服务器主动推送文本(无需客户端发送)
慕容龘往西离开。
【求助】蛮嗨江湖高举双手,大声叫道:我是新手!!! (mhjh||new)
比如有人路过、发言、频道聊天,服务器会主动推送。
- 服务器推送隐藏数据:GMCP
GMCP 是一类隐藏的结构化数据,包含:
这些数据不显示出来,但对脚本非常重要,后面我们会详细讲。
二、为什么要写脚本?
完全手动玩 Mud 很难坚持下去,游戏的很多乐趣和效率都依赖“机器人”或脚本支持。
而编写脚本的核心,其实就两个目标:
- 辅助自己输入指令
- 根据服务器返回的文本自动触发操作
三、辅助输入指令:别名
示例 1:快速补血
原指令 exert recover 太长,我设置别名 e1 ,如下:
sys.send('exert recover')
战斗时只需输入 e1 即可。

示例 2:疗伤 + 补血 组合
每场战斗之后,会受伤,一般需要先治伤,exert heal,一次还不行,经常需要多次,但是几次不确定,看受伤的程度,受伤治愈后,还得再补血一次 exert recover才算完成
async function(){
//尝试疗伤最多10次,如果提示了'你现在气血充盈,没有受伤。'就马上结束,说明不到10次就痊愈了,每2次治疗之间间隔0.2秒,因为连续治疗是不允许的
await sys.retry('exert heal', '你现在气血充盈,没有受伤。', 0.2, 10)
sys.send('e1')
}
设置别名为 ee ,一键完成整个流程。

示例 3:带参数的别名
比如买干粮,指令为:
buy gan liang 10
设置别名 b1 ,代码如下:
function(arg){
//arg是多个参数的集合,arg[0] 表示第1个参数,比如 b1 2 3 ,那么arg[0]就是2,arg[1]就是3,但是第二个参数用不上,只需要arg[0]
sys.send('buy gan liang ' + arg[0])
}
执行 b1 2 表示买 2 包干粮。

|