SpellEfficiency

SpellEfficiency

《魔兽世界:无限》:打开法术书时,在侧面板列出每个法术每个等级的效率指标,辅助法系/治疗做技能等级取舍(downranking)。

战斗

SpellEfficiency 法术效率

《魔兽世界:无限》插件:打开法术书时,在侧面板列出每个法术每个等级的效率指标,辅助法系/治疗做技能等级取舍(downranking)。

数值不自己套公式,而是读取法术书本身显示的计算后结果(已含天赋、装备、等级、光环),插件只做文本解析和除法——属性或天赋怎么变都不失真。

主要功能

  • 七列指标:名称(等级) | 消耗 | 效果(均) | DPM | DPCT | HPM | HPCT
    • DPM = 均伤/法力,HPM = 均疗/法力(省蓝视角)
    • DPCT/HPCT = 效果 ÷ max(施法时间, GCD 1.5s)(省施法时间视角,瞬发按一个 GCD 计)
    • DoT/HoT 按每跳 × 跳数折算总值;图腾按 持续 × 攻速;闪电之盾按 充能 × 触发率
  • 点击表头排序:DPM/DPCT/HPM/HPCT 四列可点,首点由大到小、再点同列翻转方向、点别的列切换排序键;当前排序键高亮并带 ▼/▲ 箭头
  • 默认折叠:只显示 20 个有数值的法术,无数值的(buff/功能技)隐藏;底部「展开全部」切换显示全部
  • 自动刷新:跟随法术书显隐;换装/属性/冷却/天赋变化时数值自动重算(法术书关闭期间零计算,事件防抖合并)

开发者:Hook 实时排序数据

主组件对外暴露排序完成后的数据,便于基于数值开发新功能(高亮最优等级、动作条提示、插件联动等):

SpellEfficiency.Hooks:Register("OnDataReady", function(ordered, ctx)
    -- ordered: 排序后的行表(折叠态为前 20 行)
    --   row.item = { slot, spellID, name, rank, isPassive }
    --   row.c    = { manaCost, avg, dpm, hpm, dpct, hpct, kind }
    --   row.index = 法术书原始顺序(同值排序的稳定键)
    -- ctx = { expanded, sortKey, desc, total, keyedCount }
    for _, row in ipairs(ordered) do
        -- 例如:找出当前排序下效率最高的法术
    end
end)
  • "OnDataReady":SidePanel 每次排序完成、渲染前触发(行数据只读)
  • "OnSnapshotRebuild":法术快照重建完成,参数 snapshot
  • 每个 hook 独立 pcall 隔离,单个报错不影响主流程;Unregister(name, fn) 可注销
  • 用法:在本插件之后加载的任意代码(如你自己的小插件)注册即可

命令

  • /sef:开关侧面板
  • /sef reset:强制刷新缓存
  • /sef debug:打开可复制的诊断窗口(接口状态、法术明细 + 原始描述、 10 例解析自检)——核对数值/反馈 bug 时用

运行环境

  • 目标客户端:魔兽世界无限 B测(wow_classic_beta,build 1.60.1.70124,## Interface: 16001)
  • 接口依据:warcraft.wiki.gg - Spellbook 及 C_SpellBook / C_Spell 各 API 页
  • 兼容:16001 为代码覆盖目标;11509(经典旧世)同套 API,未实测

目录结构

SpellEfficiency/
├── SpellEfficiency.toc   # 清单,加载顺序:Core → Modules
├── Core/
│   ├── Init.lua          # 入口:插件表、SavedVariables、斜杠命令、诊断报告
│   ├── Locale.lua        # 本地化字符串(zhCN 默认,enUS 回退)
│   ├── ApiCompat.lua     # 运行期接口探测 + 法术书枚举封装
│   ├── Events.lua        # 统一事件分发、防抖
│   └── Hooks.lua         # 扩展钩子(OnDataReady / OnSnapshotRebuild)
├── Modules/
│   ├── SpellIndex.lua    # 法术书结构快照(法术 × 等级列表)
│   ├── ValueExtract.lua  # 消耗/效果数值提取(含 10 例内置自检)
│   ├── Calc.lua          # DPM/DPCT/HPM/HPCT 计算与 revision 缓存
│   ├── SidePanel.lua     # 锚定法术书的面板 UI(排序/折叠/展开)
│   ├── Refresh.lua       # 刷新策略:事件 → 脏标记 → 可见时重建
│   └── DebugView.lua     # 可复制的诊断窗口
├── Scripts/deploy.ps1    # 部署到客户端 AddOns 目录
├── Scripts/package.ps1   # 打包发布 zip(仅 toc + Core/Modules 的 lua + Media/*.tga)
├── Scripts/make-icon.ps1 # 渲染图标(GDI+ 生成 Media/icon.png + icon.tga)
├── Media/icon.tga        # 插件图标(toc IconTexture 引用)
├── Media/icon.png        # 图标预览(README 用,不进包)
└── docs/ARCHITECTURE.md  # 架构设计