Skip to content

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-nodeomp-node
运行环境Windows/Linux: Node.js 22.22.3Windows/Linux: Node.js 18+
模块规范CommonJS/ESModuleESModule
架构支持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 的支持不稳定,您可能会遇到报错等情况。

在使用本项目前,请注意以下版本要求:

  1. Node 版本匹配

    • 请确保您的 Node 主版本号与 samp-node 依赖的版本一致。
    • 例如 samp-node 依赖 22.22.3,则只能使用 22.x 版本。
    • 不兼容的版本如 18.x、20.x、24.x 等将无法正常工作。
  2. 如果项目已创建:

    • 先检查 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-nodeomp 游戏服务器。

如果您不知道如何开始,请参考快速上手

/说明
1应用开发层游戏模式,如自由或角色扮演
2类包装层通过类来调用函数式包装
3函数式包装层例如 samp/omp/streamer 的包装
4Samp NodeSDK 通往底层的桥梁
5Omp 游戏服务器底层

为何开发

对于编程初学者而言,使用类似 C 的面向过程语言(Pawn)开发游戏脚本存在显著的学习门槛。相比现代面向对象语言(如 JavaScript),Pawn 的基础 API 更为繁琐——字符串拼接、数组操作等基本功能需手动实现,增加了开发复杂度。

此外,Pawn 语言生态存在以下局限:

  1. 异步支持薄弱:原生缺乏 JavaScript 中 Promise/async 等现代异步范式。
  2. 国际化障碍: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 和约定。请注意,该技能是实验性的且未经测试,请自行评估使用。