Infernus 是什么
Infernus 的名字来源于《圣安地列斯》中 ID 为 411 的载具。
Infernus 是基于 samp-node 打造的库,用于在 JavaScript 层调用游戏的 SDK。
WARNING
Infernus 项目已进入维护阶段并将逐步归档,后续生态建设将由 omp-node 社区主导推进,诚邀感兴趣的开发者共同参与。
🚧 施工中
- omp-node 正在积极开发中,未来将取代
Infernus。 - 如果您想尝鲜
omp-node,或偏好原生语法而不喜欢过多封装,请关注 @open.mp/node。
差异
有关 omp-node 的具体情况,请以官方后续文档为准。以下内容仅供参考。
| / | Infernus + samp-node | omp-node |
|---|---|---|
| 运行环境 | Windows/Linux: Node.js 22.22.3 | Windows/Linux: Node.js 18+ |
| 模块规范 | CommonJS/ESModule | ESModule |
| 架构支持 | x86(稳定)/ x64(实验性,未经测试) | x86/x64 |
| 底层实现 | 通过 sampgdk → fakeamx → 原生调用 | 直接调用 omp-gdk/omp-sdk |
| 执行效率 | 低 | 高 |
| 兼容性策略 | 通过 polyfill 兼容层支持三方插件 | 插件需适配 SDK 并使用特定版本 |
| 设计理念 | 1. 提倡完全使用 Infernus 重构,避免 Pawn 代码 2. 强制采用 Steamer 替代原生接口 | 详见官方文档 |
缺陷
DANGER
是的,一切开始前需要了解这些缺陷。
一些缺陷极大影响了开发体验,建议以实验性的心态尝试使用 samp-node 生态开发。
总的来说,目前生态并不稳定,这是多方面因素导致的。
32 位与 Bindings 支持
很遗憾,本项目基于 32 位嵌入式 Node.js,对 bindings 的支持不稳定,您可能会遇到报错等情况。
在使用本项目前,请注意以下版本要求:
Node 版本匹配
- 请确保您的 Node 主版本号与 samp-node 依赖的版本一致。
- 例如 samp-node 依赖 22.22.3,则只能使用 22.x 版本。
- 不兼容的版本如 18.x、20.x、24.x 等将无法正常工作。
如果项目已创建:
- 先检查 Node 版本是否符合要求。
- 删除
node_modules文件夹。 - 重新运行
pnpm install。
环境支持说明:
better-sqlite3模块已在 Windows 平台测试通过。
也许未来 64 位的 omp-node 上能迎刃而解。
32 位 Node 环境内存受限,建议另外建立一个数据库操作的 Node 项目,运行在宿主机的 64 位 Node 上。例如用 NestJS 搭建 API 专门用于 CRUD,游戏服务端通过 HTTP 请求访问,或尝试更高级的 RPC 或 Socket 方式通信。
这样服务端只处理游戏逻辑,数据库逻辑交给独立项目,您还可以顺手开发一个后台管理系统,与服务端共用同一套 API。
组成
通常您只需关注第一层,即应用开发层。
Infernus 主要负责第二和第三层的工作,依赖于 samp-node 和 omp 游戏服务器。
如果您不知道如何开始,请参考快速上手。
| / | 层 | 说明 |
|---|---|---|
| 1 | 应用开发层 | 游戏模式,如自由或角色扮演 |
| 2 | 类包装层 | 通过类来调用函数式包装 |
| 3 | 函数式包装层 | 例如 samp/omp/streamer 的包装 |
| 4 | Samp Node | SDK 通往底层的桥梁 |
| 5 | Omp 游戏服务器 | 底层 |
为何开发
对于编程初学者而言,使用类似 C 的面向过程语言(Pawn)开发游戏脚本存在显著的学习门槛。相比现代面向对象语言(如 JavaScript),Pawn 的基础 API 更为繁琐——字符串拼接、数组操作等基本功能需手动实现,增加了开发复杂度。
此外,Pawn 语言生态存在以下局限:
- 异步支持薄弱:原生缺乏 JavaScript 中
Promise/async等现代异步范式。 - 国际化障碍:SA-MP 的 Pawn 编译器诞生较早,字符编码依赖操作系统本地化设置:
- 西欧系统默认采用
ISO-8859-1。 - 中文系统依赖
GBK。 - 与通用的 UTF-8 标准不兼容。
- 西欧系统默认采用
这种编码的强依赖性可能导致不可预见的兼容性问题,例如将 GBK 数据直接存入 UTF-8 数据库,未经转译就会出现乱码。
而基于 JavaScript 的开发方案则能充分利用 Node.js 生态的优势:
- 工具链丰富:日期处理(Day.js)、数据库驱动(MySQL、Redis、MongoDB)等成熟库应有尽有。
- 异步标准化:原生支持
Promise/async异步控制。 - 编码统一:全栈使用 UTF-8,彻底规避国际化兼容问题。
通过迁移至 JavaScript 技术栈,开发者可显著降低学习成本,同时获得更健壮的国际化支持与现代工具链赋能。
TIP
skills/omp-infernus-core-use/ 目录下提供了一个用于 @infernus/* 的 AI 智能体技能,可帮助 AI 编码助手在生成代码时理解框架的 API 和约定。请注意,该技能是实验性的且未经测试,请自行评估使用。