Skip to content

插件管理

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

插件管理

插件类型与升级

已启用、未启用列表均显示类型:

类型判断依据启用方式
NUTscripts/vscripts/ 中包含 .nut,且无其他插件运行组件非配置文件打包成独立 VPK,配置保留为散装文件
SM包含 .smx 或 SourceMod/Metamod 运行组件按原路径复制
MIX同时包含 NUT 和 SM 运行组件按原路径复制,热加载只作用于 .smx
其他配置/源码/资源包,或包含已有 VPK、地图等按原路径复制
待识别目录缺失、文件不可读等识别失败修复后刷新列表,启用前再次检查

CFG、EMS 配置、材质等辅助文件不会把纯 NUT 变成 MIX。SourceMod 的 scripting/spcomp.exespcomp64.execompile.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.nutscriptedmode_addon.nutdirector_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.cfgFileToString("demo/Settings.cfg") / StringToFile 使用的配置保留在 left4dead2/ems/demo/Settings.cfg。打包不改变这些路径。.nut 中的配置表仍属于脚本内容,不按 CFG 外置;若插件硬编码了特殊磁盘路径,需要插件自身支持。

NUT 配置保存成功后会提示“配置何时生效由插件决定,必要时重启游戏服务器”。请按插件说明决定是否需要重载插件、换图或重启服务器。

插件预设

预设来自 backend/preset.yaml。应用预设会重置当前插件启用状态,并按预设启用指定插件和配置项。适合在“纯净服、多特、肉鸽、娱乐服”等不同玩法之间快速切换。

应用预设前建议先创建一次备份,避免覆盖现有配置后难以回退。

插件商店

插件商店

插件商店可浏览、搜索和安装远程插件库中的插件,默认插件库为:

text
https://github.com/LaoYutang/l4d2-plugins-store

商店支持:

  • 配置 GitHub 代理。
  • 配置 GitHub Token,提高 API 限额并访问自定义公开仓库。
  • 指定自定义公开插件仓库,仓库结构需为每个插件一个目录,分支固定为 master

导出插件

“导出所有插件”会把插件库打包为 ZIP,适合迁移或备份。导出期间会占用服务器 CPU 和网络带宽,建议避开游戏高峰期。

ZIP 导出包含插件库的原始文件与默认配置,不包含生成的管理器 VPK 或服务器上已编辑的配置。迁移当前配置时请同时使用备份管理

插件 ZIP 的目录规范见 插件 ZIP 规范