魔兽世界:暴雪3月22日蓝贴,再次收紧插件权限,小众插件将消失
暴雪3月22日蓝贴收紧插件权限,史诗团本前小众插件将消失!了解冷却API改动、插件适配方案与对战斗提示的影响。
在午夜史诗团本和大秘境正式开启前,暴雪在WoWUI Discord上发布了一则通知,对插件权限进一步收紧,并且给出了替换方案,看不懂代码的玩家可以直接看小探最后的结论。

来自暴雪的再次问候!史诗难度团队副本与大秘境本周开启,我们将在每周重置前通过热修复加入一些最后时刻的改动,以修复部分可被利用的漏洞。
我们意识到,其中一些改动会带来干扰,并可能需要你在最后时刻调整插件,对此我们深表歉意。此次改动的一部分涉及移除 ActionButton_ApplyCooldown 的安全委托部分。我们已经新增了一些 API 来替代其原有功能,但仍会密切关注是否存在尚未被替代的功能反馈。
免责声明:以下说明面向插件作者,因此仅聚焦于插件安全性相关的改动。游戏其他部分(无论是界面还是其他内容)的改动不在此列。
冷却系统
移除了被污染代码通过 SetCooldown、SetCooldownFromExpirationTime、SetCooldownDuration 和 SetCooldownUNIX 使用“私密数值”配置冷却框架的能力。
此改动不会影响 SetCooldownFromDurationObject。今后,这是唯一可用于使用私密数值配置冷却框架的方法。
ActionButton_ApplyCooldown 这个 Lua 函数不再通过安全委托执行。
这意味着,当热修复上线后,现有将私密数据传入该函数的代码将会触发 Lua 报错。不过,该函数的所有逻辑都可以通过新的 isActive、shouldReplaceNormalCooldown 布尔字段以及 duration 对象来复现(详见下文)。
Action/Spell 冷却 API 现在将 isEnabled 和 maxCharges 作为非私密数据返回。
Action/Spell 冷却 API 新增返回一个非私密布尔值 isActive,当界面需要显示冷却时,该值为 true。
对于普通冷却:当 isEnabled 为 true 且 startTime > 0 且 duration > 0 时为 true。
对于充能冷却:当 maxCharges > 1 且 currentCharges < maxCharges 且 startTime > 0 且 duration > 0 时为 true。
对于失去控制(LoC)冷却:当 startTime > 0 且 duration > 0 时为 true。
当 isActive 为 false 时,返回 duration 对象的相关 API 将返回一个零时长对象。
Action/Spell 冷却 API 现在会受到玩家身上“冷却光环”类法术的影响并返回相应结果。
例如,如果某个动作按钮绑定的是 PvP 饰品(适应徽记),其被动效果是在触发失去控制效果时自动解除并带有 1 分钟冷却,那么当该减益存在时,GetActionCooldown API 将会追踪这 1 分钟冷却。
这意味着插件无需再调用 C_UnitAuras.GetCooldownAuraBySpellID API。
冷却系统(续)
Action/Spell 的失去控制冷却 API 现在返回结构化表,而不是拆分的多个返回值。
这些函数已重命名为带有 “Info” 后缀(例如 GetSpellLossOfControlCooldownInfo),旧函数仍保留但已标记为弃用,仅用于返回 startTime 和 duration。
新的结构化表包含多个旧 API 中没有的字段。除了上述 isActive 外,还包括 modRate(私密)以及 shouldReplaceNormalCooldown(非私密)。当失去控制冷却的结束时间晚于该技能/法术的普通冷却时,shouldReplaceNormalCooldown 为 true。
新增 C_LossOfControl.GetActiveLossOfControlDuration(unitToken, index) API,返回 duration 对象。
新增 GetTotemDuration(slot) API,返回 duration 对象。
其他改动
原本在 12.0.5 中引入的限制(禁止对私密字符串使用 %.1s 这类精度格式化)已提前至 12.0.1。
因此,format("%.1s", secretwrap("Jar Jar Binks")) 将不再被截断为 "J"。
当单位身份为私密时,UnitCreatureID API 现在返回 nil。
以下脚本对象方法在涉及私密属性时将返回 nil:Frame:GetEffectiveAlpha()、StatusBar:IsStatusBarDesaturated()、Texture:IsDesatured()。
修复了若干 C_TooltipInfo 在处理单位光环时安全性要求不一致的问题。
宏中使用 /wm 和 /cwm 的频率被限制为每秒最多 3 次。
在遭遇战进行期间,宏将不再允许发送战网密语。
以下 C_UnitAuras API 在玩家处于战斗状态时不可再调用:AddPrivateAuraAnchor、RemovePrivateAuraAnchor、SetPrivateWarningTextAnchor、AddPrivateAuraAppliedSound、RemovePrivateAuraAppliedSound。
这波改动本质上是一次针对插件权限与安全机制的收紧,核心目标很明确:堵漏洞、防自动化、减少“读私密信息”的插件行为。对插件生态的影响可以从几个关键点来看。
首先,短期影响会比较明显,甚至有点“阵痛”。移除了 ActionButton_ApplyCooldown 的安全委托之后,很多依赖这个函数传递“私密冷却数据”的插件会直接报 Lua 错误。像常见的冷却监控、技能提示、WA 字符串里的一些高级逻辑,都可能需要紧急修改。简单说就是:一部分插件会在本周直接“坏掉”或者显示异常。
其次,各类战斗提示插件会受到重点冲击。暴雪这次明确限制了“私密数据”的流动,比如冷却时间、控制效果、光环等信息的读取方式被重构。过去插件可以通过一些方式获取更精确甚至“本不该知道”的信息,现在必须走官方 API,而且还加了 isActive、duration object 这种更规范但更受控的结构。
结果就是:一些“过于智能”的提示(比如提前预判、自动追踪隐藏机制)会被削弱,甚至做不到以前那种精度。
第三,插件作者需要重写一部分底层逻辑,但不是无解。
暴雪其实给了替代方案,比如:
新增 isActive、shouldReplaceNormalCooldown,统一使用 duration object,冷却 API 直接整合了光环影响这意味着功能没有完全被砍,而是从“绕规则实现”变成“必须按规则实现”。
优秀插件(如主流框架)大概率会在几天内完成适配,但小众插件可能就此停更。


