插件开发 Addon Development

插件是如何工作的

插件开发的原理

所有的插件都是基于 “事件驱动” 的编程模型. 所谓 “事件驱动” 就是, 游戏过程中会有各种 “事件”, 也叫 event. 一些 event 的例子有:

  1. 别人给你发私聊

  2. 你引到怪了

  3. 你升级了

  4. Boss 释放技能了

而你可以用 lua 编写函数, 里面可以通过调用 WOW API 来 “做一些事情”. 这些 “做事情” 就叫做 action. 一些 action 的例子有:

  1. 你给别人回复消息

  2. 游戏界面弹出一条弹窗

  3. 将动作条上的技能高亮等

而每一个 event 被触发的时候是有相关数据的 context data, 例如你升级了, 就会有你的角色的信息, 升级的等级. 而 action 则可以将这些信息作为输入, 对其进行处理. 所有的插件本质上就是 event + action 的排列组合. 我们来拿一些有名的插件当例子:

  1. DBM, boss 战插件. 这里的 event 就是 战斗日志 combat log, 而这里的 action 就是根据 combat log 来自动更新提示. 例如 boss 刚进战斗, 20-30 秒后就会放一个什么技能, 那么 DBM 的 action 就是画一个计时条倒计时.

  2. TitanPanel 信息插件. 这里的 event 可以是你登陆, 这里的 action 就是你一旦登录就会搜集你的人物和背包信息, 并画一个 titan bar.

关于 Protected API

什么是 Protected API

暴雪对一部分 API 做出了限制, 这些 API 只能被暴雪内部的程序, 比如编译好的客户端程序所调用, 但不允许第三方程序例如插件所调用. 这其中就包括 Target 选择目标, 以及 CastSpell 施放技能. 这是因为如果开放了这些限制, 那么就可以做出非常变态的插件, 例如自动根据战斗情况条件判断放技能, 自动治疗血少的目标等, 这就非常影响平衡性了. 如果你的插件里使用了这些 API, 那么你的插件将无法使用. (不可能就因为你用了包含被限制的 API 的插件就封你号, 这样会误封不小心下到不合法插件的玩家)

如何绕过 Protected API 限制

这个限制是可以被绕过的, 具体做法是对客户端程序进行反编译 (例如大名鼎鼎的 IDA pro 工具), 然后修改一些源代码, 再进行编译然后给客户端打补丁. 具体做法请参考这篇博文 https://www.romanh.de/article/Unlocking-API-Functions-in-WoW-335a-using-a-Disassembler. 然后你就可以在插件里调用这些 API 了.

绕过限制是会被封号的

暴雪的客户端程序在连接服务端程序时会对各个文件进行完整性检查 (比较 hash 值), 如果发现编译后的 exe 文件被修改了, 那么服务器就会认为你对客户端程序进行了篡改, 无论你进行了什么篡改, 服务器都认为这是违法的, 会将你直接封号. 这种反作弊机制叫做 Warden. 当然私服上不一定有这个选项, 如果是你自己的私服, 你可以选择将 Warden 关闭.

参考资料