#74 环境清理后缺少安全代码片段编译器
状态: 待审核 · 分类: 界面与插件 · 插件与API
Clique等插件无法把法术绑定到键盘按键,安全处理程序在初始化时报错。
当前表现
问题:- 诸如 clique、danders 等插件无法把法术绑定到键盘按键上用于鼠标悬停施法 -> Blizzard_RestrictedAddOnEnvironment/RestrictedExecution.lua:79: attempt to call a nil value (loadstring_untainted=nil). 安全处理器在初始化时调用 CallRestrictedClosure 会崩溃。 根本原因: 在 Blizzard_EnvironmentCleanup.toc 第8行中,Blizzard_RestrictedAddOnEnvironment 的依赖规则([AllowLoadGameType classic, standard])遗漏了 camelot。因此,Blizzard_EnvironmentCleanup 过早运行,在 RestrictedExecution.lua 能将 loadstring_untainted 捕获到局部变量之前就把它清除了。 脱离战斗的独立复现方法: /run local f=CreateFrame("Frame",nil,UIParent,"SecureHandlerBaseTemplate"); f:Execute('self:SetAttribute("probe",true)'); print("Secure snippet:",f:GetAttribute("probe")) (结果:在 RestrictedExecution.lua:79 抛出 nil 错误) 建议的修复: 在 Blizzard_EnvironmentCleanup.toc 中,将第8行更新为:
预期表现
插件应该能够把法术绑定到键盘按键上并作用于框体,因为暴雪自带的点击施法功能只允许鼠标左/右键(可带或不带修饰键)绑定。
复现步骤
安装 clique、danders 或其他适用于 Forever 的、能把法术绑定到键盘按键的插件 -> 在 Forever 中这些法术不会生效,但在经典旧世或正式服中可以