插件管理
“插件管理”支持 NUT(VScript)、SourceMod/Metamod 和混合插件。面板保留插件库中的原始文件,启用时根据类型部署到游戏目录。

插件类型与升级
已启用、未启用列表均显示类型:
| 类型 | 判断依据 | 启用方式 |
|---|---|---|
| NUT | scripts/vscripts/ 中包含 .nut,且无其他插件运行组件 | 非配置文件打包成独立 VPK,配置保留为散装文件 |
| SM | 包含 .smx 或 SourceMod/Metamod 运行组件 | 按原路径复制 |
| MIX | 同时包含 NUT 和 SM 运行组件 | 按原路径复制,热加载只作用于 .smx |
| 其他 | 配置/源码/资源包,或包含已有 VPK、地图等 | 按原路径复制 |
| 待识别 | 目录缺失、文件不可读等识别失败 | 修复后刷新列表,启用前再次检查 |
CFG、EMS 配置、材质等辅助文件不会把纯 NUT 变成 MIX。SourceMod 的 scripting/spcomp.exe、spcomp64.exe 和 compile.exe 编译工具不会使 SM 平台包被判为“其他”;仅有源码或编译工具时仍不算 SM 运行插件。上传解压完成或商店下载完成时识别并保存类型;手动放入插件库的目录在刷新列表时补充识别,启用前再次检查实际文件。
类型独立保存在插件库的 plugins.yaml 中。首次升级会保存原文件为 plugins.yaml.v1.bak,补充缺失的类型、稳定 ID 和部署方式,保留其他配置字段。识别规则升级时依据元数据中的 type_detection_version 重新识别一次,修正已保存的旧结果;其他启动只补充缺失或无效的元数据,不重复扫描已有有效类型。
升级不会移动已启用插件的文件:以前散装部署的 NUT 继续按旧文件清单禁用;下次启用才改用 VPK。解析失败或配置版本过新时会报错,并保留原文件。
NUT 部署与冲突
纯 NUT 的非配置文件生成 left4dead2/addons/manager_nut_<插件 ID>.vpk,直接放在 addons 根目录,不依赖任意子目录的自动挂载。打包前后保留 scripts/vscripts/ 等相对路径,并校验生成文件;打包或保存部署记录失败会回滚本次文件操作。
cfg/、ems/ 下的全部文件,以及其他路径中的 .cfg 不进入 VPK,按原路径部署。目标文件已存在时保留当前内容,禁用 NUT 时也保留这些配置和数据。插件库中的默认配置不会被编辑器修改。
独立 VPK 可以容纳多个插件各自的 mapspawn_addon.nut、scriptedmode_addon.nut 和 director_base_addon.nut 入口;这是 Valve 的 Last Stand 更新 支持的加载方式。普通同名虚拟文件仍可能覆盖,因此面板会检查受管 VPK 与其他已启用插件的重叠路径,内容不同则阻止启用;同名散装脚本也会检查并提示处理。
面板不会自动合并脚本、重写命名空间,也不能消除全局变量、函数和事件回调的运行冲突。插件外的手动 VPK、地图内脚本不属于完整冲突检查范围。NUT 启停后请重启游戏服务器;面板不会通过 RCON 自动执行或热卸载 NUT。
已启用插件
已启用列表展示当前正在应用到服务器的插件。管理员可以:
- 禁用单个插件。
- 立即加载已经复制到游戏目录、但尚未热加载的
.smx。 - 立即重载正在运行的
.smx。 - 禁用并立即卸载
.smx。 - 批量禁用。
- 查看插件 README。
- 打开可识别的 CVAR 配置项。
“立即重载”和“立即卸载”依赖 SourceMod 能正常响应。个别插件不支持安全热重载,或卸载后仍不能完全释放,此时仍需重启游戏服。
插件“详情”中的 README 随面板切换亮色或深色主题,正文和表格内的行内代码使用对应主题的背景与文字颜色,整段代码块保持独立的深色配色。
立即加载、立即重载与立即卸载
普通的启用/禁用只复制或删除插件文件,需要重启服务器或换图后才会生效。“启用并立即加载 smx”和“禁用并立即卸载 smx”在文件操作之外,还会通过 RCON 执行 SourceMod 命令 sm plugins load / sm plugins unload,让 .smx 在运行中的服务器上立即生效,无需重启。
如果已经使用普通“启用”将插件复制到游戏目录,可以在已启用列表的“禁用”下拉菜单中选择“立即加载 smx”,补做 .smx 热加载,无需先禁用插件。
已启用插件也可以选择“立即重载 smx”。面板会对插件包内的每个 .smx 执行 sm plugins reload,适合更新配置或替换插件文件后重新初始化插件;能否安全重载取决于插件自身实现。
同样,如果已经使用普通“禁用”移除了插件文件,但运行中的 .smx 尚未卸载,可以在未启用列表的“启用”下拉菜单中选择“立即卸载 smx”,无需先重新启用插件。
在每行“启用/禁用”按钮旁的下拉箭头中选择对应操作即可。需要注意:
- 仅适用于包含
.smx文件的插件,不含.smx的插件请使用普通启用/禁用。 - 加载或卸载执行失败时会自动回滚已完成的步骤;组合启用/禁用操作还会还原插件文件状态。
- 多
.smx插件按文件名顺序逐个重载;某个文件重载失败后会停止,之前已成功重载的文件不会再次回滚。
未启用插件
未启用列表展示插件库中尚未应用的插件。管理员可以:
- 启用单个插件。
- 启用并立即加载
.smx。 - 立即卸载已经移除文件、但仍在运行的
.smx。 - 批量启用。
- 删除插件。
- 上传新的插件 ZIP。
- 打开插件商店安装远程插件。
插件配置
SM/MIX 沿用 CVAR 配置界面:如果插件包含 left4dead2/cfg/sourcemod/*.cfg,面板会尝试识别其中的 SourceMod CVAR 项,展示当前值、默认值和说明,并支持在线保存。
已启用的 NUT 由管理员使用全文编辑弹框编辑游戏服务器上的实际配置:
- 支持包内
.cfg,以及包内cfg/、ems/下的.txt、.ini、.json、.yaml、.yml。 - 包含
ems/插件目录/文件时,该目录内后来生成的上述文本配置也会显示;不会扫描其他插件的整个 EMS 目录。没有随包提供配置范围的插件,需要先按插件说明整理包结构。 - 支持 UTF-8、UTF-8 BOM 和可识别的 GBK,保存时保留编码、换行风格和文件权限;单文件上限 512 KiB,二进制、未知编码和符号链接不能编辑。
- 切换文件保留未保存的草稿;如果服务器文件在读取后已变化,保存返回冲突并保留草稿,需要重新读取后处理。
- 共享配置会显示关联插件。保存只写文件,不会重新打包 VPK、发送
exec或执行 NUT。
外置配置能否读取取决于脚本原本使用的接口和路径。通过 exec demo.cfg 读取的配置保留在 left4dead2/cfg/demo.cfg;FileToString("demo/Settings.cfg") / StringToFile 使用的配置保留在 left4dead2/ems/demo/Settings.cfg。打包不改变这些路径。.nut 中的配置表仍属于脚本内容,不按 CFG 外置;若插件硬编码了特殊磁盘路径,需要插件自身支持。
NUT 配置保存成功后会提示“配置何时生效由插件决定,必要时重启游戏服务器”。请按插件说明决定是否需要重载插件、换图或重启服务器。
插件预设
预设来自 backend/preset.yaml。应用预设会重置当前插件启用状态,并按预设启用指定插件和配置项。适合在“纯净服、多特、肉鸽、娱乐服”等不同玩法之间快速切换。
应用预设前建议先创建一次备份,避免覆盖现有配置后难以回退。
插件商店

插件商店可浏览、搜索和安装远程插件库中的插件,默认插件库为:
https://github.com/LaoYutang/l4d2-plugins-store商店支持:
- 配置 GitHub 代理。
- 配置 GitHub Token,提高 API 限额并访问自定义公开仓库。
- 指定自定义公开插件仓库,仓库结构需为每个插件一个目录,分支固定为
master。
导出插件
“导出所有插件”会把插件库打包为 ZIP,适合迁移或备份。导出期间会占用服务器 CPU 和网络带宽,建议避开游戏高峰期。
ZIP 导出包含插件库的原始文件与默认配置,不包含生成的管理器 VPK 或服务器上已编辑的配置。迁移当前配置时请同时使用备份管理。
插件 ZIP 的目录规范见 插件 ZIP 规范。
