What is This#
Background#
我很喜欢多开的玩法. 我在魔兽世界中有 50 多个游戏账号, 180 多个游戏角色. 这就使得管理一堆角色的宏命令以及按键绑定成为了一件非常麻烦的事情, 经常是准备工作 8 小时, 实际玩了 1 小时. 于是我就希望能有一个工具能简化我的工作. 经过了一番探索, 我发现市面上没有任何软件或插件能满足我的需求. 于是我就决定自己写一个.
我希望这个软件有这些功能:
批量游戏角色宏命令管理: 我希望能用配置文件来管理每个游戏角色有哪些 Account 级的宏和 Character 级的宏. 例如有些宏是所有角色都需要的. 我希望只定义一次这个宏的内容就能让所有角色用上这个宏.
宏命令版本管理: 我希望能追踪一个宏命令的修改记录.
快速修改: 我希望在我可以非常快的在 Git 仓库中修改宏命令的内容, 然后一键同步到所有角色.
宏命令注释: 我希望能给宏命令加注释, 解释它的用途和工作原理.
宏命令元数据: 我希望能给宏命令添加元数据, 然后利用数据库之类的软件进行筛选.
多语种支持: 我希望能为同一个宏命令创建针对不同语种的多个版本.
下面我们来看看我们如何实现这个目标.
Why macros-cache.txt is not Working#
魔兽世界客户端在登录游戏之后会将宏命令缓存到 World of Warcraft/WTF/Account/ACCOUNTNAME/macros-cache.txt. 很多初次接触宏命令的开发者以为可以直接通过对 macros-cache.txt 进行修改来修改宏命令. 但这其实是不行的. 因为服务器的数据库中也会保存一份副本. 如果你的动作条上放置了宏命令, 那么动作条 ID 以及宏命令 ID 的绑定关系也会被记录在服务器的数据库中. 这里有一个坑, 游戏服务器上的 macro id 是自动生成的. 这会导致如果你退出游戏后修改了 macros-cache.txt 文件, 你在本地的 macro ID 和服务器上 macro ID 就可能不一致. 从而最终导致登录游戏后动作条上的宏命令丢失. 因为服务器会尝试给你的动作条上分配宏命令按钮, 可由服务器想要分配的 macro ID 在本地在 macros-cache.txt 中找不到.
Then What is the Correct Way#
魔兽世界客户端给插件作者预留了一套 API 接口, 其中有一些 API 是跟宏命令相关的, 例如 CreateMacro. 正确的做法是用 Lua 来保存宏命令的数据, 然后登录游戏后用 AddOn 来调用 API 将这些宏命令数据同步到服务器端, 这样就能保证服务器端和客户端的数据一致.
但这样做的缺点是, 你需要学习 Lua 语言, 你需要学习 WoW 的 API, 你需要学习 WoW 的 AddOn 开发. 这对于一个只想简单修改宏命令的玩家来说是非常不友好的. 之后我们再来说如何解决这一问题.
My Solution#
在计算机领域, 开发者往往会使用运维工具来给服务器安装软件. 这种方法的原理是, 这些软件的安装包和源代码存放在 repository 中 (repository 是一种软件仓库管理系统), 然后只需要用一个 配置文件 定义哪台服务器上安装哪些软件, 使用哪些版本, 最后用一个自动化脚本一键完成安装.
类似地, 我们可以维护一个宏命令的清单, 每个宏命令就是一个文件. 这个清单就等价于 repository. 然后只需要用一个配置文件定义哪些角色用哪些宏, 最后用一个自动化脚本就可以将这些宏应用到游戏中了. 而这些宏命令文件则可以通过 Git 版本控制来管理.
What’s Next#
有了以上知识, 下面我来介绍这个项目是如何解决这些问题的.