把 Z-Perl(X-Perl 的续作,作者 Resike)移植到 魔兽世界 12.1(Midnight)正式服 的分支:重新命名、重做 12.x 兼容层,并修完"机密值 (Secret Values)"机制带来的一堆显示问题。
A rebranded port of Z-Perl (the continuation of X-Perl by Resike) to WoW 12.1 retail, with a rewritten 12.x compatibility layer for the Secret Values system.
| 框体 | 状态 |
|---|---|
| 玩家 / 目标 / 目标的目标 / 焦点 / 宠物 | ✅ 职业颜色、精确血量与法力数值、百分比、头像、增益减益 |
| 小队 / 小队宠物 | ✅ 同上 |
| 团队 / 团队宠物 | ✅ 同上 |
| 团队工具窗(团队助手 / 主坦 / 花名册 / 增益监控) | |
| 其他 | 施法条、仇恨指示、距离检测、点击施法、鼠标提示、完整选项面板 |
- 下载本仓库(
Code → Download ZIP,或git clone)。 - 把
QueFrame、QueFrame_*这些文件夹整个放进World of Warcraft/_retail_/Interface/AddOns/。 ⚠️ 新装的插件必须退出到角色选择界面再进入游戏(或重启客户端)——/reload不会扫描新目录,这是暴雪的设定。- 游戏内输入
/que打开设置面板;/que layout会输出各框体与血条/法力条的实际尺寸(显示异常排查用)。
暴雪在 12.0 引入了"机密值(Secret Values)":战斗/受限场景下 UnitHealth、UnitPower、
UnitClass、UnitIsPlayer 等会向插件的执行路径返回机密值。机密值不能比较、不能做算术、
不能当表键,否则立刻抛 Lua 错误。
本分支的处理方式:
- 能显示,但不算:
FontString:SetFormattedText是官方允许接收机密值的接口,所以血量/法力 数值是原始值直接显示(3284/3284),不是推算值。百分比通过引擎的 curve (C_CurveUtil.CreateCurve(),0→0 / 1→100)原生换算,避免自己乘 100。 - 职业颜色:只在读到明确的
UnitIsPlayer == true时上职业色;读到false(怪物)不上; 读不到时只信"这个框体曾经确认是玩家"(按 GUID 校验),宁可素色也不给怪物穿一件错的职业色。 - 12.x 删掉的 API 逐个补兜底:
SetPortraitToTexture(已删除)、GetSpellInfo(移到C_Spell)、SecureAuraHeaderTemplate(移除)等。 local X = X这种加载期全局捕获会静默拿到nil,一调用就抛错并中断该函数后续所有语句 —— 这类地雷已全插件扫描清理。- 依赖战斗日志的特性(部分高亮/施法追踪)在 12.x 对插件不再开放,已做降级。
- 目标框血条 / 蓝条不再"填不满框体":
QueFrame_StatsFrame_Setup现在能识别"被传入 statsFrame" 的调用(QueFrame_Globals.xml中 statsFrame 模板自身的 OnLoad 就是这么调的)。此前该调用会立刻 return —— 谁也没为它做过初始排版。每次更新都会重排的框体(玩家 / 目标的目标 / 焦点)看不出来, 而目标框只在"蓝条显隐变化"或"打开选项面板"时才重排,于是整场停在 XML 模板的原始几何 (160×40 的框里 112×10 的条、上下各空 9px)。现在所有框体创建时都会按当前模式排一次。 - 蓝条显隐后的高度同步:12.x 机密值分支里
SetManaType显示蓝条后直接return,现在补上 框体高度与重排,蓝条出现时堆叠关系正确。 - 暴雪小队框体的隐藏:
QueFrame_KeepBlizzFrameHidden内部把函数当表索引 (QueFrame_KeepBlizzFrameHidden[frame])会抛错并中断该函数后续语句,导致 OnShow 隐藏钩子 从未装上(BugGrabber 里连报 10 次)。改用独立注册表。 - slash 帮助文本:把残留的
/xperl改为/que,并补上/que layout说明。
- 数值文字是精确原始值,但读取仍受暴雪限制:在受限场景(副本 / 团队 / 战场 / 竞技场 / 部分战斗) 插件可能读不到部分数据,此时会退化为"只显示能拿到的部分",不会显示错误数字。
- 依赖战斗日志的功能(HoT / 盾高亮等)在 12.x 不可用。
- 部分职业的职业能量条(连击点 / 氤氲 / 符能…)使用了暴雪的模板,12.x 上模板会对插件路径产生污染, 已按职业降级处理(对应职业的能量条可能不显示)。
- 团队工具窗(RaidAdmin / RaidHelper / RaidMonitor)是移植版,仍在验证中。
- 上游:Z-Perl(X-Perl 的续作,作者 Resike)。
- 本分支:QueFrame,由 Que 完成 12.1 移植与修复。
- 许可:GNU GPL v3(沿用上游许可,全文见根目录
LICENSE)。 依 GPL v3:保留原作者版权与署名、本项目同样以 GPL v3 发布、再分发时请一并保留LICENSE与署名,并注明所做的修改。 - 内置第三方库(LibStub、CallbackHandler-1.0、LibHealComm-4.0、LibClassicDurations 等) 遵循各自的许可。
QueFrame is a port of Z-Perl (the continuation of X-Perl by Resike) to World of Warcraft 12.1 retail (Midnight), rebranded and with a rewritten compatibility layer for the 12.x Secret Values system.
Highlights: class colours, exact health/power values and percentages (secret values are handed
straight to the widget formatter instead of being computed), removed 12.x APIs shimmed, and every
load-time global capture that had silently become nil audited and fixed.
Licensed under GPL v3 (as upstream). Original credit: Resike / X-Perl / Z-Perl.