Macro Management for Multi-box Using SDM#
1. 简介#
1.1 我们要达成什么目标#
我很喜欢多开的玩法, 但是管理一堆角色的宏命令以及按键绑定成为了一件非常麻烦的事情, 经常是准备工作 8 小时, 实际玩了 1 小时.
我希望能用一个工具管理我的所有角色的宏命令, 并且能用工具在几种不同的配置之间切换. 如果我换了一批游戏角色, 我希望能最大化的利用对已有角色做的设置, 快速的给新角色配好宏命令. 例如我在服务器 A 上有 5 个 80 级的法师, 我在服务器 B 上新建了 5 个 80 级的法师, 我就希望能快速的迁徙过来. 这里的工具我希望能更高级一点, 而不是需要一个个登录角色在插件里点来点去, 复制粘贴. 因为这样依然工作量巨大.
另外很多宏命令是需要经常修改的, 例如我有一个宏是在不同的 Boss 战中将其替换为不同的内容. 而我有很多个职业, 我希望能一键将其批量替换掉.
宏命令的文本通常只适用于当前的客户端, 如果换了语种客户端就无法使用了. 例如国服客户端的宏在台服就用不了, 因为很多技能名字都不一样.
我希望对宏命令加上注释, 解释宏为什么这么写, 它的工作原理, 以及它的用法.
1.2 管理宏命令的难点#
服务器宏命令缓存机制可能会导致 macro-cache.txt 文件失效.
服务器端会储存每个宏命令的 ID, 以及动作条 ID 和宏命令 ID 的对应关系. macro-cache.txt 中的宏命令 ID 是缓存, 非常不稳定.
游戏默认的宏命令不带注释功能, 注释会占用宏命令字符, 使得 255 个字符的上限更加捉襟见肘.
游戏默认的宏命令不允许超过 255 个字符.
游戏的宏命令最终还是以服务器上的为主, 我们本地的 macro-cache.txt 只是一个缓存, 你无法通过简单修改本地 macro-cache.txt 文件来达到修改服务器宏命令的目的, 换了机器后很容易出现奇奇怪怪的问题.
在下一节, 我们将介绍 SDM 插件, 并且解释它是如何解决这些问题的.
2. SDM 插件#
2.1 SDM 工作原理#
SDM 插件可以将宏命令保存到 .lua 文件, 然后每次启动游戏时会自动将这些宏数据通过 API 发送给服务器端保持同步. 它支持自定义宏命令的 ID, 并且支持几乎无限长度的宏命令, 这点特别适合写一键输出循环.
这里有一个 SuperDuperMacro.lua 的例子, 你可以看到它的代码结构:
sdm_version = "1.8.3"
sdm_listFilters = {
["true"] = true,
["s"] = true,
["b"] = true,
["false"] = true,
["global"] = true,
["f"] = true,
}
sdm_iconSize = 36
--[[
sdm_mainContents 这是一个有序列表数据结构, 列出了所有的 Macro 在游戏 UI 中的顺序.
里面的每一个元素是 Macro ID
--]]
sdm_mainContents = {
0,
1,
}
--[[
sdm_macros 这是一个字典结构, 枚举了所有已经定义了的宏命令. 每个宏命令的编号就是 ID.
这里不允许有相同的 ID. 并且这个 ID 非常重要, 是你储存在服务端动作条上所放的宏命令的 ID.
如果你动作条上已经放了一个宏命令, 但是之后你手动修改了 ID, 虽然内容还是同一个宏, 但是动作条
上的按钮将消失.
--]]
sdm_macros = {
[0] = {
["type"] = "b",
["name"] = "Act1",
["ID"] = 0,
["text"] = "/s act1",
["icon"] = 1,
},
[1] = {
["type"] = "b",
["name"] = "Act2",
["ID"] = 1,
["text"] = "/s act2",
["icon"] = 1,
},
}
2.2 SDM 如何解决上面提到的难点#
.lua 文件只会被插件所管理, 而不会被服务器给覆盖掉.
SDM 会将本地 .lua 中的定义通过 API 发送给服务器, 从而保证本地的 ID 和服务器端的记录严格对应一致, 进一步保证了动作条 ID 和宏命令 ID 的对应关系的稳定性.
注释功能是由我们 wow_wtf_manager 项目解决的, 我们使用 yaml 文件来储存宏命令的信息, 这样就可以在 yaml 中加入注释了. 最终由我们的项目将其转换成 .lua 文件即可.
SDM 支持任意长度的宏命令.
SDM 永远以本地 .lua 为准, 换机器时只需要拷贝 .lua 文件即可.
3. 使用方法#
你要了解两个地方
wow_wtf_manager-project/app/${wow_server}/SuperDuperMacro/...: 这是你对某个魔兽世界服务器的宏命令文本数据管理的工作目录, 里面保存了你的宏命令的 ID, 内容, 和注释.wow_wtf_manager-project/wow_wtf_manager/app/${wow_server}/sdm_setup.py: 这里定义了你想要将哪些宏命令给哪些游戏角色.