Mir NPC Script (GOM)
传奇(Mir2)GOM 引擎 NPC 脚本语言的 VSCode / Trae 支持:语法高亮、命令补全、calltip、snippet、跳转/引用/重命名、FCOLOR 颜色器、996 面板转换与实时预览,开箱即用,无需语言服务器。
效果预览
语法高亮(段落 / 指令 / 命令 / not 前缀 / FCOLOR 色块)

命令补全与 calltip(输入 MAP 过滤,签名参数提示)

996 面板预览(选区一键渲染排版效果)

功能特性
语法高亮
[@段落头]:整段同色(含 []),一眼定位脚本区块
#SAY / #IF / #ACT 等块指令:暗蓝色;not / ! 取反前缀:紫色;命令行首词:命令色
- 命令染色基于上下文而非命令表——内置命令、自定义命令、甚至命令表里没有的词,只要出现在命令位置都会正确着色
<文字> 元素、/FCOLOR= 色号、/@动作 链接、$变量、{内联样式}、行尾 \ 软换行、; 注释行
- 嵌套块结构解析:对话文本与命令行上下文精确区分,
#SAY 内的文字不会误判为命令
智能补全与提示
- 命令补全:命令上下文(
#IF / #ACT 块、段落内裸命令区)的行首输入命令前缀即弹出,约 500 条 GOM 命令,含中文说明与参数描述;对话文本内不会误弹
- Calltip(签名帮助):命令后敲空格显示参数签名,继续敲空格自动推进当前参数高亮
- Snippet:700+ 条代码片段,支持 Tab 跳转占位符
- Hover 悬停:命令显示说明与参数文档;段落名显示引用/定义统计
导航与重构
- 转到定义(F12):
/@main、goto @x、@@InPut 等引用跳转到 [@main] 段落
- 查找引用(Shift+F12):段落头反查全部引用位置
- 重命名(F2):改一处段落名或引用,全文件同步
- 大纲视图:段落结构树;
Ctrl+T 跨工作区搜索段落(自动识别 GBK/UTF-8 编码)
- 文档高亮:点击命令/段落/变量,高亮全文同名符号
颜色器
/FCOLOR=254 等色号旁显示对应颜色色块(内置 GOM 引擎 256 色表),点击色块打开取色器,选色后自动反写最接近的色号。
996 面板转换与预览
- 转换为 996 面板文本:选中对话内容(元素行 / 含
#SAY 的块),一键替换为 996 面板标签
- 面板预览:选中后在旁边分栏打开 Webview 渲染排版效果——宋体等宽布局、FCOLOR 配色、
/@动作 可点击、AUTOCOLOR 动画,与主工程 Web 工具渲染一致
数据管理(Webview)
命令面板 → Mir NPC: 命令与 Snippet 管理:
- 页签化管理 calltip 命令(名称/说明/参数)与 snippet(prefix/body/描述),带过滤与学习示例
- 内置数据可"覆盖编辑",自定义条目可增删
- 保存到工作区
.vscode/mir-npc/(可经 mir-npc.dataPath 配置),补全/calltip/snippet 即时生效,无需重载
快速开始
- 安装本扩展
- 打开
.npc / .mir / .gom 文件(其他扩展名如 .txt:点击右下角语言模式 → Mir NPC Script (GOM))
- 建议(脚本多为 GBK 编码):设置中为该语言指定编码
"[mir-npc]": { "files.encoding": "gbk" }
命令列表
| 命令 |
说明 |
Mir NPC: 命令与 Snippet 管理 |
打开数据管理 Webview |
Mir NPC: 转换为 996 面板文本 |
选区转 996 面板标签(也可右键菜单 / Ctrl+.) |
Mir NPC: 预览 996 面板效果 |
选区生成 HTML 面板预览(旁边分栏,也可右键菜单) |
配置项
| 配置 |
默认值 |
说明 |
mir-npc.dataPath |
.vscode/mir-npc |
自定义 calltip/snippet 数据目录(相对工作区根或绝对路径),文件为 functions.json / snippets.json |
已知限制
.txt 等扩展名不自动关联,需手动切换语言模式
- 脚本历史原因多为 GBK 编码,建议按上文设置;工作区符号搜索已自动做编码降级
- 命令行首词的染色是"命令上下文级"(不校验命令名是否存在),精确的命令匹配由补全/calltip 负责——两者职责分离
- 面板预览依赖宋体,非 Windows 环境可能回退为系统等宽字体,排版略有偏差
从源码构建
cd vscode
node build.js # 生成语法文件、转换器 bundle 并打包 dist\mir-npc-script-<ver>.vsix
node --test test/ # tokenizer / features / symbols 冒烟测试
code --install-extension dist\mir-npc-script-<ver>.vsix
说明:
build.js 零依赖打包(无需 vsce/npm),从 syntaxes/tmLanguage.template.json 生成最终语法,并用 esbuild 把主工程 src/generate*.js 打进 lib/converter.js(996 转换/预览共用同一套布局逻辑)
- 发布产物压缩与混淆:构建时所有 JS 自动经过
esbuild minify(标识符混淆、去注释)+ javascript-obfuscator(字符串抽取 + base64 编码)两步处理,抬高逆向成本。JS 无法真正加密(运行时必须可解),这是发布保护的行业现实方案;为不影响编辑器热路径(补全/诊断每次击键均运行),刻意未开启控制流压平等重型混淆
- 混淆配置:
stringArray + base64(阈值 0.75)、十六进制标识符;构建期用 vm.Script 做语法自检
- 依赖缺失时自动降级为原样复制,不会构建失败
- 调试开关:
MIR_NPC_NO_OBFUSCATE=1 环境变量可临时关闭混淆,构建未混淆版便于排查线上问题
javascript-obfuscator 为 devDependency(npm install 后可用);esbuild 复用主工程 node_modules
- README 截图可用
node images/gen.cjs 重新生成 HTML 页面(真实 grammar 分词渲染),再浏览器截图覆盖 images/*.png
node 不在 PATH 时,请用完整路径(本仓库开发环境示例:D:\nil\prjs\db_edit\mud2\tools\node-v20.20.2-win-x64\node.exe)
发布到 Marketplace
修改发布者:本包 publisher 为 mirscriptcvt 占位名。到 Publisher 管理 创建你自己的发布者,并同步修改 package.json 的 publisher 与 repository 字段
用 vsce 打包发布(marketplace 上传要求官方工具校验):
npm install -g @vscode/vsce
cd vscode
vsce package # 生成 .vsix(读取 .vscodeignore 排除源码/测试)
vsce publish # 需 Personal Access Token(Azure DevOps,勾选 Marketplace → Manage)
注意事项:
License
MIT
| |