samwhosung/benilla

游戏

一个用 Rust 和 Bevy 从零重写的 1.12.1 客户端,让你用自己的游戏数据连接私服,完整游玩原版内容。

825
183
Rust
Apache-2.0
创建于 3 个月前

如果你在跑 1.12.1 私服,或者想研究一个公开可读的完整游戏客户端实现,值得花时间;但它不是拿来就能替代正式客户端的成品。

解决什么问题

在私服上玩原版《魔兽世界》,通常要运行 2006 年的原始客户端可执行文件——它既不为跨平台或修改而设计,内部实现也是封闭的。想搞清客户端如何读取 MPQ、如何与世界服通信、如何渲染地形,只能靠反编译猜测。benilla 从零重写客户端,并读取你自己已有的游戏数据。变化发生在启动这一步:不再运行原版程序,而是构建 benilla,把 Data 目录和服务器地址交给它。

有什么不同

作者宣称的范围是完整客户端,而不只是查看器:角色创建、任务、专业技能、地下城、团队副本、战场、组队、公会、交易、邮件和拍卖行,外加一个 FrameXML/Lua 引擎,可运行原版界面和第三方 1.12 插件,例如 Questie、pfUI、Bagnon、Bartender2。资源读取(MPQ 补丁链、BLP、DBC、ADT、WDT、WDL、M2、WMO)和从 SRP6 认证到世界会话加密的网络栈都是从零写的,没有原版代码,没有第三方 WoW crate,也不打包游戏资源;逆向工程笔记放在独立的配套仓库。

实际好处是可读、可查。格式读取器和界面引擎核心是纯 Rust、不依赖 Bevy,渲染器可以脱离游戏单独运行,项目还发布了自动生成的模块与子系统地图以及与 1.12.1 的所有差异清单。这些对写工具或服务端的人有参考价值,不只是玩家。代价是它有意识地存在偏差:选项窗口和 ESC 菜单跟随 Classic Era 而不是 1.12;并且明确不追其他资料片或客户端版本。

谁值得试

适合:已经在运行 vmangos 这类 1.12.1 服务端、想要另一个客户端的人,或者想找一份可读的 WoW 格式与协议实现来学习的开发者。不适合:想要直接下载成品的人——项目不提供预编译包,作者明确表示针对某服务器定制的内容应放到 fork 里;也不适合需要反作弊兼容的人,因为 Warden 不在计划内,强制启用它的服务器会断开连接。

使用条件与边界

你必须拥有某个语言版本的 1.12.1 客户端(build 5875)来提供游戏数据;benilla 只读取它,并按该客户端的语言显示文本。还需要一台 1.12.1 服务器,通过 WOW_HOST/WOW_USER/WOW_PASS 或登录界面指定。构建需要稳定版 Rust 和 C 编译器,Linux 上还要装 ALSA、udev、pkg-config 等开发包;贡献指南说明了测试和玩家构建。设置、截图和插件放在仓库根目录的 benilla-config/ 下,安装插件就是往目录里放文件,而不是原版客户端那套目录结构。

“完整且可玩”是作者的状态描述;剩余工作被概括为把可用客户端变成完成品的一长串小功能,以及持续的插件、选项和性能工作,都记录在 issues。由于没有预编译产物,每个版本都要 checkout 对应 tag 再构建,main 是开发分支。所给材料中没有跨服务器的性能或兼容性测试报告,开发只提到针对 vmangos。

HotRepo 点评

HotRepo 只记录到一次日榜出现:2026-10-26,当时仓库为 819 stars、当天 +13。仅凭这一天的快照无法判断关注度能否持续,证据不足,而且仓库才 94 天。决定投入前,先看你依赖的具体 1.12.1 行为在差异文档里是怎么写的,尤其是界面和插件部分。

Hacker News 讨论

本文由 AI 根据项目 README 生成,更新于 2026年10月26日,以项目官方文档为准。