# KP_DashMeter 快跑兄弟--伤害统计插件更新日志

V1.8.4 （2026.6.2）

1. 修复：Pets.lua 栈溢出（stack overflow）—— GetActor 宠物解析无限递归

   【现象】战斗事件触发时 Lua 抛出 "stack overflow" 错误，调用栈显示
   Pets.lua:60 → GetOwner → GetActor → ... → GetActor 循环数百次后崩溃。

   【根因】GetActor() 中 FixPetsHandler 后备链传入宠物的 actorflags：
   · GetActor(petGuid, petName, petFlags)      ← petFlags 含 0x3000 (PET|GUARDIAN)
   · → FixPetsHandler(petGuid, petFlags)        ← 返回 ownerGUID, ownerName
   · → GetActor(ownerName, ownerGUID, petFlags) ← BUG! 仍传入 petFlags!
   · → bit_band(petFlags, 0x3000) ≠ 0          ← 重新识别为宠物
   · → 再次走宠物分支 → FixPetsHandler / GetOwner → 无限递归 

   【修复】两重保护：
   · 新增 _getActorRecursionGuard 递归守卫表，同一 actorid 不重复进入
   · FixPetsHandler 路径递归调用改为传 nil 替代 actorflags，彻底切断循环
   · 所有 return 路径（6处）均清理守卫，避免守卫泄漏

V1.8.3 （2026.6.2）

1. 重大修复：水元素/镜像伤害不显示、统计不准确的根因修复

   【根因】GetActor() 中宠物 owner 解析失败后，宠物被标记为 enemy actor，
   导致所有伤害数据被 log_damage 的 `if actor.enemy then return` 过滤丢弃。
   该问题是 V1.8.1 修复未能解决水元素问题的真正原因：
   · V1.8.1 修复了 spell_damage 中的宠物检测（spellid 后缀），
     但 GetActor 中 owner 解析失败导致的伤害丢弃链没有解决
   · 镜像(31216)和水元素(37994)是临时守护者，不在 partypet/raidpet 标准槽位中，
     PetContainer.PetScan() 扫描不到它们 → GetOwner 中 tooltip 扫描也经常失败
   · 失败后 PetContainer.IgnorePet() 永久加入黑名单，后续 SPELL_SUMMON 注册也救不回

   【修复】GetActor() 新增第三层 FixPetsHandler 完整后备链：
   · 原有: IsPetInCache? → GetOwner  (缓存检查 + Tooltip)
   · 原有: flags检查? → GetOwner     (同上)
   · 新增: flags检查? → FixPetsHandler  (7步完整后备) ← 核心修复
     ├─ guidToOwner 缓存
     ├─ guidToClass 缓存
     ├─ IsMine (这是我自己的宠物?)
     ├─ FindOwnerBySpecialPet (名字+职业匹配)
     ├─ 当前战斗演员名字匹配
     ├─ 单位列表扫描
     └─ Tooltip 扫描
   · 导出 FixPetsHandler 到 DashMeter.FixPetsHandler 供 GetActor 使用
   · 此修复覆盖镜像(31216)和水元素(37994)在内的所有特殊宠物

2. 修复："自己的水元素不显示，别人的正常"不对称问题的真正根因

   【根因】FixPetsHandler 中第三条 IsMine(flags) 只检测 AFFILIATION_MINE (0x1)。
   但在 WotLK 3.3.5 中，守护者(Water Elemental, 镜像等)作为临时召唤物，
   其 combat log srcFlags 只设置 CONTROL_PLAYER (0x100)，可能不设置 AFFILIATION_MINE (0x1)：
 
   自己的水元素 flags: TYPE_GUARDIAN(0x2000) | CONTROL_PLAYER(0x100) | ...
                       ❌ 缺少 AFFILIATION_MINE(0x1)
   → IsMine(flags) → band(flags, 0x1) = 0 → FALSE → 跳过！
   → FixPetsHandler 后续步骤(名字匹配/单位扫描/Tooltip)全部失败
   → FindActor 创建 enemy actor → 伤害丢弃 ❌

   【别人的为什么正常】网络延迟让 SPELL_SUMMON 先到 → PetContainer 缓存成功
   → 后续 PetScan/Tooltip 路径找到主人；或通过 FindOwnerBySpecialPet 匹配到

   【修复】FixPetsHandler 新增 CONTROL_PLAYER 后备检测（IsMine 之后，第4步之前）：
     bit_band(flags, CONTROL_PLAYER 0x100) ~= 0 && bit_band(flags, TYPE_PET|GUARDIAN 0x3000) ~= 0
     → 判定为玩家自己的宠物 → 直接返回 DashMeter.userGUID/DashMeter.userName
   · 只对 TYPE_PET/GUARDIAN 类型生效，不会误判非宠物实体


V1.8.2 （2026.6.2）

1. 修复：BOSS击杀后小怪伤害被错误归类为首领伤害

   【现象】成功击杀BOSS后，后续小怪（如黑曜石圣殿杀完萨塔里奥后的
   小火元素/雏龙）的伤害仍计入"首领伤害总量"。

   【根因】ENCOUNTER_END 中的时序竞态：
   · BOSS死亡 → combat_end() 结束战斗段 → 玩家立刻打后续小怪
   · 新战斗段已创建，但 encounterData 尚未清除（要到函数末尾才清）
   · spell_damage 检查 inEncounter=true → 将小怪伤害误判为首领伤害

   修复 -- ENCOUNTER_END 路径A提前清除遭遇数据：
   · combat_end() 之后立即调用 OnEncounterEnd() 清除 encounterData
   · 函数末尾的 OnEncounterEnd() 保留作为兜底（重复清除无害）
   · 确保后续战斗段不会继承已结束的BOSS战状态

2. 修复：BigWigs/DBM 回调绕过"智能停止"开关，导致BOSS死后小怪被强制切分段

   【现象】不勾选"智能停止"时，BOSS死后击杀的小怪仍被独立记录为
   新分段（显示为"失败的首领战"），而非合并到同一条BOSS记录中。

   【根因】设置→调整→Tweaks→首领死亡 中的"智能停止"开关只控制了
   DashMeter:SmartStop() 内部的延时停止路径，但 BigWigs bosskill 回调和
   DBM bosskill 回调直接调用了 DashMeter:StopSegment()，完全绕过了
   smartstop 开关的检查（Functions.lua:1552, 1583）。

   【修复】BigWigs 和 DBM 回调统一改为调用 DashMeter:SmartStop(set)，
   让三条BOSS死亡路径全部汇入 SmartStop 统一入口：
   · BossContainer:BossDefeated() → SmartStop(set)
   · BigWigs bosskill 回调 → SmartStop(set)
   · DBM bosskill 回调 → SmartStop(set)
   勾选=延迟停止/不勾选=合并记录，开关统一生效。

3. 优化：BOSS记录默认数量 25→35，硬编码统一为常量
   · 新增 DashMeter.DEFAULT_BOSS_SEGMENTS = 35（Init.lua）
   · 新增 DashMeter.DEFAULT_TRASH_SEGMENTS = 15（Init.lua）
   · 修复 SegmentManager 小怪兜底值 or 10 与默认值 15 不一致的 bug
   · 全部引用处统一改为常量

V1.8.1 （2026.5.31）

1. 重大修复：BOSS战面板数据显示"冻结"——双路径直接窗口刷新

   【根因】虽然 boss_refresh_timer 和 update_timer 每 0.5-1 秒调用 UpdateDisplay(true)，
   且 force=true 绕过了所有节流检查，但 BOSS 战中显示仍会"冻住"。
   经过全面代码追踪发现：KP_DashMeter 的定时器刷新路径
   虽然理论上畅通，但实际运行中可能因为某些我们尚未定位的条件导致窗口未能更新。

   改造 -- 双路径直刷方案（不再依赖 UpdateDisplay 链的任何检查）：
   · 路径A - boss_refresh_tick (Boss.lua)：每 0.3 秒直接调用 win:UpdateDisplay()
     完全绕过 DashMeter:UpdateDisplay() 的所有检查逻辑
   · 路径B - OnCombatEvent (Core.lua)：每次 CLEU 处理完成后立即刷新窗口
     节流至每 0.3 秒一次
   · 两条路径并行保证：无论哪条路径被阻塞，另一条一定能让显示更新

2. 修复：合并宠物伤害后，法师自身技能列表不显示水元素/宠物技能

   【现象】开启"合并宠物"后，查看自己的技能详情时不显示宠物的冰箭/水箭等技能，
   但查看其他玩家的技能详情时却能正常显示其宠物技能。

   【根因】spell_damage() 中的宠物检测只依赖 PetContainer.IsPetInCache() 单一路径。
   而 GetActor() 有多路后备（缓存 + flags 检查 + tooltip），所以：
   · 总伤害正确 → GetActor 通过 flags 后备成功将伤害重定向到主人
   · 技能名丢失 → spell_damage 的单路检测失败（竞态：伤害事件比 SPELL_SUMMON 先到）
     导致 spellid 不带宠物后缀，宠物技能无法在技能列表中识别显示

   修复 -- spell_damage 多路宠物检测（与 GetActor 对齐）：
   · 路径A: PetContainer.IsPetInCache (主路径，不变)
   · 路径B: guidToOwner 后备缓存 (新增)
   · 路径C: PET/GUARDIAN flags 位检测 (新增)
   · 三路并行检测确保：即使缓存未就绪，flags 等固有信息仍能识别宠物


V1.8.0 （2026.5.31）

1. 修复：同一BOSS先失败后成功时，第一次失败被误修正为"成功"

   【根因】ENCOUNTER_END 路径B（迟到的修正）按名称匹配时没有时间限制
   · 第二次成功击杀 → ENCOUNTER_END(success=1) → current=nil → 路径B
   · 按名称匹配到第一次的真实失败记录 → 错误将其修正为"成功"
   · 例如：哈卡第一次团灭29秒 → 第二次成功击杀 → 第一次也显示"成功"

   修复 -- 路径B增加30秒时间窗口 (MAX_CORRECTION_AGE)
   · 只修正最近30秒内关闭的战斗段（竞态延迟最多几秒）
   · 从新到旧遍历，遇到超时记录直接停止搜索
   · 光速出本→重置→重打（通常>60秒）的场景不受影响

2. 修复：BOSS战数据停止更新——新增"事件活跃度"保护层

   【根因】WoW Classic 中 IsEncounterInProgress() API 不存在(nil)！
   · 原有5层保护中，第2层(EncounterProgress)在经典旧世完全无效
   · 实际只有 InCombatLockdown + IsGroupInCombat + 脱战计时 3层
   · 奈法利安等BOSS的P1→P2阶段间隙可超过5-10秒（打完龙蛋等落地）
   · 此时玩家脱战+团队无人战斗+无Encounter API → combat_end 关闭战斗段

   修复 -- 新增第4层保护：最近事件活跃度追踪
   · OnCombatEvent 处理每个战斗事件时记录 _last_event_time
   · combat_tick 检查：若最近20秒内有任何事件→战斗仍在进行→不结束
   · 这层不依赖任何API，纯粹基于事件流，覆盖所有阶段转换/间隙场景
   · 最终保底：需同时满足 无事件≥20秒 + 脱战≥10秒 + ≥10个tick
   · 保护层级：CombatLockdown → EncounterProgress(WLK+) → GroupInCombat → **事件活跃度(20s)** → 脱战计时(10s)

3. 代码优化：BOSS脱战保底阈值从5秒提升至10秒

V1.7.9精简版 （2026.5.31）

1. 修复：偶尔已成功击杀的BOSS错误显示为"失败"

   【根因】combat_tick() 与 ENCOUNTER_END 事件的竞态条件
   · BOSS死亡 → 玩家脱战 → combat_tick 检测OOC → combat_end() 结束战斗段
   · 此时 success 仍为 nil → 被标记为"失败" → 战斗段关闭(current=nil)
   · ENCOUNTER_END(success=1) 迟到 → current=nil → 整个处理被跳过
   · 战斗段永远停留在"失败"状态

   修复1 -- ENCOUNTER_END 新增路径B（迟到的修正）
   · 当 current=nil 时，反向搜索 sets[] 找到匹配的战斗段
   · 将 success 修正为 true，回退误记的失败计数，刷新显示

   修复2 -- combat_end() 增加最终安全门
   · 标记失败前额外检查 IsEncounterInProgress()
   · 若 API 仍标记遭遇战进行中 → 保持 success=nil，等待 ENCOUNTER_END 修正

2. 代码精简：删除所有未引用的文件和目录

   · 删除 Core/ 整个目录（旧版引擎残留，27个文件，从未被加载）
   · 删除 Libs/ 中未使用的库（10个库目录 + libs.xml）
   · 删除根目录未引用文件（Config.lua, ModulesConfig.lua, TestMode.lua, addon_version.txt）
   · 文件数从 900+ 降至 290，精简约 2/3

V1.7.8 （2026.5.31）

1. 修复：BOSS战中数据显示间歇性卡死不动的老问题

   【根因】combat_tick 可能在BOSS战中途（阶段转换/BOSS飞天等）短时脱离
   战斗状态时，误判为战斗已结束，调用 combat_end() 关闭了当前战斗段。
   combat_end → current=nil → boss_refresh_tick 自清理定时器 → 显示冻结。

   修复：BOSS战分支增加连续两次检测保护
   · 旧行为：UnitAffectingCombat 一次返回 false 就结束战斗
   · 新行为：需要连续两次 combat_tick（2秒）确认脱离才结束
   · 每次检测到还在战斗中则重置计数器

2. 修复：boss_refresh_timer 作用域冲突（Core.lua vs Boss.lua）
   · Core.lua combat_end 中试图取消的 boss_refresh_timer 与 Boss.lua 的
     定时器是不同的变量（不同文件作用域）→ 实际是 NO-OP
   · 新行为：combat_end 正确调用 BossContainer:CancelBossRefreshTimer()
   · 移除了 Core.lua 中的死代码（boss_refresh_timer 声明、死掉的
     boss_refresh_tick 函数副本、DashMeter._encounter_* 伪变量清理）

3. 修复：BOSS战中宠物死亡导致该帧战斗事件数据丢失
   · Engine/Core.lua UNIT_DIED 宠物检查使用 return 直接退出整个
     OnCombatEvent → 该帧所有伤害/治疗/吸收事件被跳过
   · 修复：改为条件判断跳过世界BOSS检测，不影响事件处理流程

4. 代码清理：移除 Engine/Core.lua 中的死代码
   · local boss_refresh_timer 变量（Core.lua 始终为 nil）
   · local boss_refresh_tick() 函数副本（从未被调用）
   · DashMeter._encounter_id/name/time/zoneMapID 重置（从未被读取）

V1.7.7 （2026.5.31）

1. 紧急修复：小怪战斗被错误标记为BOSS战的严重Bug

   Bug根因 -- encounterData 泄漏
   · V1.7.6 将 combat_end 统一由 combat_tick 驱动（P1修复），导致一个时序竞态：
     - combat_tick 先结束战斗（current=nil）
     - ENCOUNTER_END 后到达，检查 DashMeter.current → nil → 整个函数体被跳过
     - OnEncounterEnd() 从未被调用 → encounterData 永久残留
     - 下一次战斗（即使是小怪），check_boss_fight 发现 encounterData 存在
     - → SetBossInfo() → gotboss=true → 小怪被标记为BOSS战！

   修复1 -- ENCOUNTER_END 中的 OnEncounterEnd 无条件执行
   · 旧行为：if not DashMeter.disabled and DashMeter.current 包裹整个函数体
   · 新行为：拆分为两层：
     - 外层：if not DashMeter.disabled（仅检查插件是否禁用）
     - 内层：if DashMeter.current then（战斗段相关逻辑）
     - OnEncounterEnd 在外层无条件执行，确保 encounterData 始终被清理
   · 影响文件：Engine/Container/Boss.lua

   修复2 -- check_boss_fight 增加 encounterData 时效性防御检查
   · 当 encounterData 存在但超过5分钟未更新时，主动清除脏数据
   · 作为双重保险，防止任何其他路径导致的 encounterData 泄漏

2. 修复老问题：BOSS战中数据显示静止不动

   Bug根因 -- StartBossRefreshTimer 在高频事件中反复取消重建定时器
   · BOSS 战中，check_boss_fight 在每个战斗事件（每秒数十次）中调用
     StartBossRefreshTimer()，该函数取消已有定时器然后创建新的
   · 在高密度事件流下（大团战斗每秒上百个事件），定时器永远等不到
     0.5秒的触发间隔就被新事件取消 → boss_refresh_tick 永远不触发
   · 导致 BOSS 战中显示条"打着打着就不动了"
   · 战斗结束时，combat_end 强制刷新，所以最终数据是正确的

   修复 -- StartBossRefreshTimer 改为幂等操作
   · 旧行为：if timer exists → cancel → create new（每次都重建）
   · 新行为：if timer exists → return（已在运行则跳过，防止高频重置）
   · 影响文件：Engine/Container/Boss.lua

   附加清理 -- combat_start 中移除死代码
   · Core.lua combat_start 中有一段 BOSS 定时器启动代码，但此时
     gotboss 已被重置为 nil，该代码永远不会执行，且使用了独立的
     Core.lua 本地变量（与 Boss.lua 的定时器不同步），已清理

V1.7.6 （2026.5.31）

1. 战斗逻辑二次修复
   修复三个在 V1.7.5 重写后仍可能出问题的核心路径：

   P1 -- PLAYER_REGEN_ENABLED 不再直接调用 combat_end()
   · 旧行为：PLAYER_REGEN_ENABLED 在条件通过后直接调用 combat_end()，形成双出口
   · 新行为：仅取消注册事件，由 combat_tick 统一驱动战斗结束
   · 理由：combat_tick 是战斗结束的唯一出口（Single Source of Truth），
          双出口可能导致竞态——tick 和事件同时触发结束

   P2 -- combat_start 移除内部嵌套的 combat_end 调用
   · 旧行为：combat_start 内检查 update_timer 标志后调用 combat_end() 结束上一段战斗
   · 新行为：移除嵌套调用，仅保留 bIsClosed 残留战斗段的安全网清理
   · 理由：所有调用者（NewSegment/PLAYER_REGEN_DISABLED/OnCombatEvent）均已确保
          进入前无活跃战斗段；嵌套调用导致 leaving_combat 标志在函数内部被污染

   P3 -- BOSS战 combat_tick 新增 InCombatLockdown() 保护
   · 旧行为：BOSS战 ticker 仅检查 IsEncounterInProgress() + IsGroupInCombat()
   · 新行为：最先检查 InCombatLockdown()，再检查 IsEncounterInProgress()
   · 理由：使用 _InCombatLockdown()（Blizzard内部API），BOSS战中
          InCombatLockdown() 比 IsEncounterInProgress() 更可靠，
          后者在 ENCOUNTER_START/END 之间可能闪烁导致误判脱离

V1.7.5 （2026.5.31）

1. 战斗逻辑全面重写（核心修复：BOSS战数据异常不动）
   重写了 combat_end / combat_start / combat_tick / PLAYER_REGEN_ENABLED / OnCombatEvent
   五大核心函数的战斗生命周期管理逻辑。

   问题分析：
   · _in_combat_end 全局标志可能在异常路径下永久卡住，导致所有后续战斗段永远无法正常结束和保存
   · combat_tick 使用 InCombatLockdown () 检测战斗状态，BOSS战中该API返回值不准确，导致 tick 永不触发 combat_end
   · PLAYER_REGEN_ENABLED 对BOSS战过度保护，IsEncounterInProgress + 未击杀双重检查阻止了自然结束
   · combat_start 内部调用 combat_end 形成级联依赖，若 combat_end 卡住则整个链路断死
   · OnCombatEvent 新战斗检测缺少 UnitAffectingCombat("player") 前置检查（关键API）

   修复方案：
   · combat_end：用 set.bIsClosed 标记替代全局 _in_combat_end 标志，确保每个战斗段独立管理重入保护
   · combat_end：先停止所有定时器再处理数据，避免定时器回调访问已关闭的战斗段
   · combat_tick：用 UnitAffectingCombat("player") 替代 InCombatLockdown() 检测战斗状态
   · combat_tick：BOSS战中先检查 IsEncounterInProgress()，仅在遭遇结束后+团队脱离时才结束
   · combat_tick：非BOSS副本小怪战只检查玩家自身，团队战检查全队状态
   · PLAYER_REGEN_ENABLED：简化判断链，使用 UnitAffectingCombat + 团队状态分层检测
   · combat_start：添加 leaving_combat 保护，避免在 combat_end 执行中创建新战斗
   · combat_start：强制清空已关闭战斗段的残留（bIsClosed=true 但 current 未置 nil 的异常情况）
   · OnCombatEvent：新增 UnitAffectingCombat("player") 作为新战斗创建前置条件
   · OnCombatEvent：简化 tentative 逻辑，第一个有效事件直接调用 combat_start 而非延迟确认
   · process_set：现在由 combat_end 统一设置 endtime/time，避免重复计算

2. 修改设置后统计条颜色自动变回职业颜色修复
   - 现象：在设置面板修改任意选项后、或过地图/加载界面后，统计条颜色又变回职业颜色
   - 根因：Bar.lua 的 ApplySettings 函数（每次设置变更/过地图时都会调用）中有一段
     "强制更新所有已存在的条形图颜色"循环，对所有 `.class` 不为空的统计条无条件调用
     `bar:SetColor(classColor, ..., true)`——`true` 参数会设置 `lockColor=true` 永久锁定为
     职业颜色，完全忽略了 `classcolorbars` 设置项。
   - 修复：循环中新增 `p.classcolorbars` 检查：
     · classcolorbars=true → 按职业颜色 + 锁定（原行为）
     · classcolorbars=false + 有职业 → UnsetColor() 清除锁定 → 用 barcolor 默认色
     · 无职业信息 → 用 barcolor 默认色（原行为）


V1.7.4 （2026.5.30）

修复的问题

1. BOSS转阶段期间面板数据显示冻结修复
   - 现象：转阶段时面板显示的数据停止刷新，BOSS死亡后才恢复正常
   - 根因：UpdateDisplay 的数据去重优化（检查 damage/healing/absorbed 数值是否变化）未考虑 force 标志。
     BOSS转阶段期间无敌/不可攻击 → 无新伤害事件 → 数据值不变 → 即使 force=true 也被跳过
   - 修复：数据去重仅对非强制更新（`not force`）生效，BOSS战强制刷新时即使数值不变也正常更新面板


V1.7.3 稳定版（2026.5.28）

修复的问题

1. 目标切换到怪物时反复提示"未找到名为 xxx 的在线玩家"修复（彻底修复）
   - 根因：多个 Blizzard API 对非 unitID 的名字字符串调用时，WoW Classic 内部都会触发 /who 查询
   - 已修复的危险调用：
     (a) Init.lua Private.IsPlayer - 删除 UnitIsPlayer(name) 分支，玩家判定仅依赖 flags/GUID 前缀
     (b) Functions.lua SafeUnitClass - 改用 guidToClass 缓存替代 UnitClass(name)
     (c) Core.lua OnCombatEvent - UnitInRaid(name)/UnitInParty(name) 对NPC名字（如"冰吼"）触发 /who，
         新增 Player- GUID 前缀过滤，仅对真正玩家名字才调用团队/队伍检测API

2. 秒伤/仅首领伤害/仅小怪伤害 模式点击报错修复
   - 报错：`attempt to call global 'isEnemyActor' (a nil value)`
   - 根因：isEnemyActor 仅在 Damage 模块回调内部定义为局部函数，DPS/BossDamageOnly/TrashDamageOnly
     三个独立模块作用域不可见，导致 nil 报错且无法正常显示
   - 修复：将 isEnemyActor 提升至 Damage.lua 文件顶层作用域，所有模块共享

3. 鼠标悬停统计条时报错修复：SPEC_0 缺失本地化条目
   - 报错：`AceLocale-3.0: KP_DashMeter: Missing entry for 'SPEC_0'`
   - 根因：未选择专精的玩家（spec=0）触发 `L["SPEC_0"]` 查询，AceLocale 对缺失 key 直接报错
   - 修复：enUS/zhCN/zhTW 三语言均补全 `SPEC_0` 条目（No Specialization / 无专精 / 無專精）

V1.7.2 稳定版（2026.5.27）

修复的问题

1. Locale 文件错误修复及补全
   - enUS.lua 第 1-2 行在 `local L` 定义前使用 L 导致 nil 报错，影响 Falling/Drowning/Fatigue/Fire/Lava/Slime/Group/Dungeon 共 8 个条目
   - 修复：将条目移至 `local L` 定义之后
   - zhCN.lua / zhTW.lua 补全缺失的 Group/Dungeon 及环境伤害（Falling/Drowning/Fatigue/Fire/Lava/Slime）本地化条目


V1.7.1（2026.5.27）

修复的问题

1. 大幅降低进战斗瞬时开销
   - 移除战斗开始时的全员预扫描（ScanGroupBuffs），不再遍历所有团队成员及其Buff
   - Actor改为按需创建，仅在实际产生伤害/治疗等战斗数据时才分配，大幅降低进战斗瞬时开销

2. BOSS战中途统计中断修复
   - combat_tick 新增 IsEncounterInProgress() 保护：官方遭遇战进行中时，即使玩家暂时脱离战斗也不结束统计
   - PLAYER_REGEN_ENABLED 新增 IsEncounterInProgress() 保护：与上述逻辑一致，双重兜底
   - 解决了BOSS阶段转换、短暂脱离战斗等场景导致统计中断的问题

3. BOSS战结束后小怪被误标记为BOSS战修复
   - OnEncounterEnd 新增缓存清理：遭遇结束后清除 _encounter_id 等缓存的BOSS信息
   - CheckPendingEncounter 新增60秒过期检查：缓存超时的遭遇信息自动丢弃
   - 解决了黑曜石圣殿等副本中BOSS死后遗留的小怪被错误标记为失败BOSS战的问题

4. 第一击提示不生效修复
   - 根因：PrintFirstHit() 方法已实现但从未被调用，数据收集后缺少触发打印的逻辑
   - 修复：CheckFirstHit() 检测到第一击后自动调度 PrintFirstHit() 执行打印
   - 同时修复了描述文本误导向的"仅自己可见"措辞

5. 第一击提示新增频道选择
   - 在第一击开关下新增"第一击频道"下拉菜单
   - 支持选项：自己（仅自己可见）、说、小队、团队、副本、公会
   - 默认保持"自己"，与原行为一致；也可选择发送到队伍频道供团队查看

6. 0值条目导致面板卡顿修复
   - 根因：Damage.lua 使用 `amount > 0 or actorTime > 0` 条件，导致无伤害但有活跃时间的玩家也生成条目，这是我先前版本试验的遗留问题。
   - 修复：改为仅 `amount > 0`，无伤害数据的玩家不再产生 dataset 条目（排序/渲染都不参与）
   - 其他模块（治疗/承伤/吸收）已固有 `amount > 0` 检查，无需修改

7. PersonalCoverage 提示框 AceLocale 报错修复
   - 根因：`L["Buff"]` / `L["Debuff"]` 大写键名与 locale 文件中的小写 `L["buff"]` / `L["debuff"]` 不匹配
   - AceLocale 是大小写敏感的，导致 "Missing entry for 'Buff'" 报错
   - 修复：改为与 locale 一致的小写键名

8. 设置界面 Tweaks 选项卡布局优化
   - "预使用药水"移至第一击选项下方：order 从 0 改为 20（第一击频道=9，第一击=10）

9. 列表分段标签时间格式紧凑化
   - 原来：`3分钟 32秒` → 现在：`2'35"`（ASCII 引号避免 Unicode 渲染空格）
   - 仅涉及分段列表标签，提示框中完整时长保持原样，这样可以使得历史记录分段简洁明了。

10. enUS.lua 全局 L 为 nil 导致批量 Missing entry 报错修复
   - 根因：第 2 行末尾 `= true` 与 `local L = LibStub(...)` 之间缺少换行符，拼接成 `truelocal`
   - 影响范围：Falling、Drowning、Fatigue、Fire、Lava、Slime、Group、Dungeon 共 8 个条目全部报 Missing entry
   - 修复：补回缺失的换行符


V1.7.0[Beta]（2026.5.26）

插件重铸

1. 数据流架构统一
   - 新增模块统一采用 actor 挂载架构：数据通过 `DispatchSets` 写入 `set.actors`，与伤害/治疗模块一致
   - 事件处理流水线标准化：logApplied → logRefresh → logRemoved → logCombatEnd，完整覆盖光环生命周期
   - 战斗分段数据天然保留在 actors 表中，历史回溯不再需要额外快照机制
   - 新增模块通过 `RegisterForCL` 监听战斗日志，`DispatchSets` 自动分发到 current / total / tempsets

2. 详情窗口框架扩展（UI/GUI.lua）
   - `FillUpperDetailTable` 新增 `_realPercent` 字段支持，允许外部提供真实百分比（覆盖率等场景），而非硬编码为占总量的比例
   - 详情窗口数据构建流水线重构：覆盖率窗口与伤害/治疗窗口统一走 `FillUpperDetailTable` + `FillLowerDetailTable` 路径
   - 详情窗口支持传入战斗段 set，任意历史段均可回溯

3. 伤害量模式敌人过滤系统重构（Modules/Combat/Damage.lua）
   - 原有 `not actor.enemy` 仅依赖单一布尔标记，SavedVariables 序列化后 `false` 变 `nil` 导致拦截失效
   - 重构为 `isEnemyActor(actor)` 双重防护：`actor.enemy` 标记 + `class` 类型（BOSS/MONSTER/ENEMY/UNKNOWN/NEUTRAL）
   - 覆盖全部 5 个子模式：主伤害量、DPS、Boss 伤害、小怪伤害、法术来源
   - DPS 模式原完全缺少 enemy 检查，是敌人漏网重灾区，现已修复

新增模块

4. 个人覆盖率（PersonalCoverage）主窗口（Engine/Core/PersonalCoverage.lua）
   - 全新功能：追踪玩家自身施放的 Buff/Debuff 覆盖率，适用于所有职业
   - 窗口显示列：Uptime（持续时间）| 覆盖率% | A（应用次数）| R（刷新次数）
   - 实时跟踪：战斗中当前生效的光环会实时更新 uptime 和百分比
   - 过滤排除：自动跳过形态/姿态等全程 Buff（德鲁伊形态、战士姿态、牧师暗影形态、DK灵气等共 17 项）
   - 悬停提示框（spellTooltip）：显示 Buff/Debuff 类型、战斗时间、持续时间+百分比、A/R 次数详情
   - 左键下钻（mode_target）：点击技能进入目标列表子视图，查看该技能作用对象
   - 模式分类：归入 "Buffs and Debuffs" 分组，与 Details! Auras 视图布局一致
   - 数据存储：通过 `DispatchSets` 写入 `set.actors[player]._pcSpells`，历史分段天然保留

5. 个人覆盖率详情窗口（UI/GUI.lua `ShowCoverageDetailWindow`）
   - 右键点击覆盖率窗口打开专属详情页
   - 上层表格：按覆盖率降序列出所有 Buff/Debuff，显示技能名、覆盖率百分比、A+R 总次数
   - 下层表格：选中技能后展示覆盖率五级分档（100% / 80-99% / 60-79% / 30-59% / 0-29%）
   - 支持历史记录回溯——传入战斗段 set，可查看任意历史段的覆盖率详情
   - 三层数据回退兼容旧格式：`actor._pcSpells`（新）→ `set._personalCoverage`（旧快照）→ `personalCoverageSegments`（独立DB），自动检测并迁移

6. 公共 API
   - `DashMeter.GetPersonalCoverage(set)`：查询当前或任意历史段覆盖率数据，供其他模块调用
   - `DashMeter.ClearPersonalCoverageData()`：遍历 allSets 清理所有分段数据
   - `GetPersonalCoverage` 自动兜底：被调用时若模块 OnEnable 未执行，自动从 UnitGUID/UnitName 补全玩家身份

修复的问题

7. 覆盖率详情窗口调用约定修复（UI/GUI.lua Line 1079）
   - `DashMeter:GetPersonalCoverage(set)` → `DashMeter.GetPersonalCoverage(set)` （冒号→点号）
   - 冒号调用将 DashMeter 表自身作为 self 传入 set 参数，真实战斗分段被丢弃
   - 因 DashMeter 无 `.actors` 字段，函数直接返回 `{}, 0`，详情窗口永远显示"暂无覆盖数据"

8. 覆盖率百分比显示修复（UI/GUI.lua `FillUpperDetailTable`）
   - `percent` 原硬编码为"技能 uptime / 所有技能 uptime 之和"（如野性咆哮 105/636=16.5%）
   - 修复为真正的"技能 uptime / 战斗时间"覆盖率（105/120=87.5%），与小窗口一致

9. sortedData 初始化修复（UI/GUI.lua Line 496）
   - 修复重铸改动中误删 `local sortedData = {}` 导致所有伤害/治疗详情窗口崩溃

10. 死代码清理
    - 移除 `Core/` 目录（25 文件 / 825 KB）：TOC 仅加载 `Engine/Load.xml`，Core/ 从未被引用，纯冗余代码

V1.6.4（2026.5.22）
修复的问题
1. BOSS错误出现在伤害列表中的问题
- 修复了BOSS（最终BOSS、小BOSS等）作为敌人却出现在玩家伤害列表中的问题
- BOSS被识别后立即标记为 enemy，不再依赖后续 flags 判断，防止遗漏
- 同时修复了 dummy_actor 路径下的敌人标记缺失
2. 仇恨模块显示优化
- 移除仇恨列表总览条（>>仇恨列表<<），仅保留每个玩家的单独仇恨值
- 窗口标题改为 >目标名< 格式，简洁明了
3. 提示框/详情窗口刷新逻辑优化
- 详情窗口恢复为打开时静态渲染，去掉 OnUpdate 和关闭清理
- 提示框恢复为鼠标移上时静态渲染一次，去掉 OnUpdate 实时刷新

V1.6.3（2026.5.22）
主要改进
1. 黑曜石圣殿BOSS战修复
- 修复了2+1或1+1组合战斗中小BOSS提前击杀后错误显示"失败"的问题
- 通过记录实际死亡事件和多种验证方式，确保已击杀的小BOSS正确显示为成功
- 新增小BOSS NPC ID映射：塔尼布隆（801/30451）、沙德隆（802/30452）、维斯佩隆（803/30449），萨塔里奥（800）为最终BOSS
2. 治疗技能组成显示优化
- 提示框和详情窗口中的治疗技能列表默认显示有效治疗量（扣除过量治疗），与主面板保持一致
- 新增设置选项"提示框显示有效治疗"：位于常规选项 → 提示框区域
- 开启时（默认）：显示有效治疗量（扣除过量治疗），与主面板数据一致
- 关闭时：显示总治疗量（包含过量治疗），恢复之前的显示方式
- 同时修正了Healing Taken、Total Healing等模块的治疗技能显示

V1.6.2（2026.5.21）
功能增强
1. 历史记录显示功能改进
- 新增历史记录显示限制选项：在设置界面添加了"历史记录显示限制"选项，与小怪记录和BOSS记录选项放在一起
- 用户可自定义显示的历史记录数量，不再受硬编码限制
- 默认值设为50，可根据需要调整
2. 界面文本优化
- 将"当前片段"改为"当前"，将"总体数据"改为"总体"，以减少面板表头文字长度
- 简体中文：当前/总体
- 繁体中文：當前/總體
3. 修正了法师宠物水元素偶尔不能正确识别的问题，确保正确显示，包括了水元素和血水元素

V1.6.1（2026.5.20）
主要改进
1. 优化UI刷新机制
- 解决UI闪烁问题：修复了战斗过程中无意义刷新UI的问题
- 智能刷新控制：只有在实际伤害、治疗或吸收数据发生变化时才刷新UI
- 节流机制：添加了0.05秒的刷新频率限制，避免频繁更新导致的卡顿
2. 完善战斗记录机制
- 全部战斗记录：现在所有战斗事件都会被记录，包括无伤害的战斗（如施放精灵火）
- 战斗发起者追踪：记录并显示每次战斗的发起者信息
历史记录完整性：确保所有战斗事件都保存到历史记录中
3. 改进Current视图行为
- 自动映射机制：当用户查看"Current"视图时，自动映射到最新的历史记录
- 无缝切换：战斗结束后，界面平滑过渡到显示刚刚结束的战斗记录
- 避免空界面：即使无伤害战斗也会显示发起者信息，而非空白界面
4. 增强显示逻辑
- 零数据可视化：修改了Damage模块，确保0伤害数据也能正确显示
- 智能过滤：只显示真正参与战斗事件的玩家，避免无关人员显示
- 保持数据一致性：总体数据累加不受影响，统计准确性保持不变
功能增强
1. First Hit功能优化
- 扩展适用范围：First Hit功能现在适用于所有战斗类型，不仅限于BOSS战
- 本地可见提示：在选项描述中明确标注功能仅自己可见
- 发起者通报：显示战斗发起者的详细信息
2. 用户体验改进
- 减少界面跳跃：消除战斗开始/结束时的界面闪烁
- 数据连续性：保持战斗数据的连续显示
- 历史记录可访问：所有战斗记录都可通过历史记录功能查看
修复的问题
- UI闪烁问题：解决了战斗过程中界面频繁闪烁的问题
- 空战斗记录：修复了无伤害战斗不被记录的问题
- 历史记录缺失：解决了某些战斗无法在历史记录中查看的问题
- 数据显示异常：修复了0数据战斗不显示的问题
- 视图切换混乱：解决了战斗结束后视图自动跳转的问题

V1.6.0（2026.5.18）
- 对黑曜石圣殿的处理逻辑做了更精确的调整：
  - 正确显示击杀小BOSS的记录
  - 区分单独战斗与组合战斗：
    - 单独击杀小BOSS：标记为成功
    - 组合战斗（2+1、3+1等）：只有击杀萨塔里奥才算成功
  - 智能检测战斗类型：
    - 检测当前战斗中是否同时存在萨塔里奥（NPC ID: 28860）
    - 如果小BOSS被击杀但萨塔里奥仍在活动中，则属于组合战斗，应标记为失败
    - 如果只是单独击杀小BOSS且没有萨塔里奥参与，则标记为成功
- 修复"attempt to compare number with nil"报错
- 重新设计了死亡标签的显示记录，确保在战斗结束后详细显示死亡原因（生命值变化、减伤、治疗技能等）

V1.5.8（2026.5.16）
- 修复了总体数据重复累加的问题
  - 问题原因：`combat_end()` 和 `generate_total()` 都在累加数据到 `total`，导致数据被重复计算
  - 修复方案：删除了 `combat_end()` 中重复累加数据到 `total` 的逻辑，只在 `combat_end()` 结束时调用 `generate_total()` 重新计算总体数据
  - 症状：在团本中显示7000~8000万，但实际只有3992万（约2倍重复）
- 修复了小怪和BOSS战斗数据被错误合并的问题
  - 问题原因：`DashMeter._time` 只在 `combat_end` 和 `combat_start` 时更新，打完小怪后等了1分钟，`DashMeter._time` 还是旧时间，导致重新进战斗时误判为15秒内的战斗而重用旧记录
  - 修复方案：在战斗记录重用判断中使用 `time()`（当前时间）而不是 `DashMeter._time`，确保使用真实的当前时间判断是否超过15秒
- 修复了伤害条上的DPS和提示框中的DPS有时显示不一致的问题
  - 问题原因：伤害条使用 `set:GetTime()`（战斗总时间）计算DPS，而提示框使用 `actor:GetTime()`（演员活跃时间）
  - 修复方案：让伤害条也使用演员活跃时间来计算DPS，与提示框保持一致
- 修复了删除BOSS记录后总体数据异常的问题
  - 问题原因：`SubtractActorFromTotal` 函数只处理了数字字段，没有处理技能数据表，导致技能数据被保留而数字字段被减去，造成数据不一致
  - 修复方案：扩展 `SubtractActorFromTotal` 函数，正确处理技能数据表的减法运算
- 修复了删除BOSS记录后总体数据异常的问题
  - 问题原因：`SubtractActorFromTotal` 函数只处理了数字字段，没有处理技能数据表，导致技能数据被保留而数字字段被减去，造成数据不一致
  - 修复方案：扩展 `SubtractActorFromTotal` 函数，正确处理技能数据表的减法运算
- 修复了BOSS战中统计偶尔停止的问题
  - 问题原因：`UpdateDisplay`函数在BOSS战中重置了changed标志，导致UI更新中断
  - 修复方案：确保在BOSS战中也保持changed标志以维持UI更新
- 修复了分段时间在战斗结束后不停止的问题
  - 问题原因：`StopSegment`函数未取消`update_timer`，导致分段时间继续运行
  - 修复方案：在`StopSegment`函数中取消`update_timer`
- 修复了删除历史记录后总体数据消失的问题
  - 问题原因：`DeleteSet`函数创建了新的空的total set，而不是重新计算
  - 修复方案：在`DeleteSet`函数中调用`DashMeter.generate_total()`重新计算总体数据
- 修复了确认对话框有时在点击确定后不关闭的问题
  - 问题原因：回调函数中的错误阻止了对话框关闭
  - 修复方案：添加错误处理确保对话框总是关闭
- 修复了`attempt to call global 'generate_total' (a nil value)`错误
  - 问题原因：`generate_total`函数被转换为`DashMeter.generate_total()`方法，但某些地方未更新调用
  - 修复方案：更新所有`generate_total()`调用为`DashMeter.generate_total()`
- 修复了战斗记录混合问题
  - 问题原因：ENCOUNTER_START事件的pending信息错误地应用到之前的战斗
  - 修复方案：在`combat_end`函数中清除过期的pending encounter信息
- 修复了删除历史记录后面板显示未更新的问题
  - 问题原因：删除操作后未触发面板刷新
  - 修复方案：在`DeleteSet`函数中添加面板刷新逻辑
- 优化了战斗记录保存逻辑
  - 降低了最小战斗时间阈值，确保快速击杀的小怪也能被记录
  - 避免了短时间战斗导致的UI闪烁问题


V1.5.7（2026.5.15）
代码优化：
- 重构了 Core.lua 中的重复代码，提升代码可维护性：
  - 新增常量定义：
    - `DAMAGE_KEYS`：伤害数据键数组（damage, totaldamage, overkill, absorbed, blocked, resisted, glancing, critical, boss_damage, trash_damage）
    - `E_DAMAGE_KEYS`："e"键对应的伤害键集合（用于竞技场/首领模式）
    - `SPELL_TABLE_KEYS`：技能数据表键集合（damagespells, healspells, spells等）
  - 新增公共函数：
    - `MergeSpellTable(target, source, init_defaults)`：合并技能数据表，支持初始化基本数值字段
    - `SubtractActorFromTotal(total, set)`：从总计中减去演员数据
  - 优化位置：
    - `DeleteBossRecords` 函数：使用常量替代硬编码判断，使用公共函数替代重复代码
    - `DeleteTrashRecords` 函数：使用常量替代硬编码判断，使用公共函数替代重复代码
    - `generate_total` 函数中的 `add_set_to_total`：使用常量替代硬编码判断
    - `clean_set` 函数：技能记录合并使用 `MergeSpellTable` 函数
    - `process_set` 函数：技能记录合并使用 `MergeSpellTable` 函数
    - `combat_end` 函数：使用常量替代硬编码判断
  - 优化效果：
    - 消除约 120 行重复代码
    - 消除 7 处硬编码判断
    - 修复了常量拼写错误（healingpells → healingspells）
    - 增强了参数验证和错误处理
- 修复了Tweaks.lua中的"attempt to index field 'hooks' (a nil value)"错误
  - 问题原因：mode.hooks没有被初始化就被调用
  - 修复方案：添加了判空检查，在调用原始函数前先检查Private.SetItemRefOriginal是否存在

V1.5.6[Beta]（2026.5.9）
问题修复：
- 修复了总体伤害数据异常的问题（总体数据超过各项单独记录相加）
  - 问题原因：在 `combat_end()` 中手动累加了演员数字和字符串字段，导致数据被重复计算
  - 修复方案：移除 `combat_end()` 中演员数字和字符串字段的累加代码，只保留技能数据表的累加
  - 演员的数字字段（如 damage、healing 等）现在由 `generate_total()` 函数正确计算
- 修复了总体数据治疗量技能详情不显示的问题
  - 在 `generate_total()` 和 `combat_end()` 函数中添加了 `healingspells` 和 `absorbspells` 的处理
- 修复了BOSS战中小怪伤害被错误分类为BOSS伤害的问题
  - 问题原因：`IsBoss` 函数中的 `boss1-boss5` 单位检测没有验证目标是否真的是BOSS，在BOSS战中WoW会将小怪也分配到这些单位槽位
  - 修复方案：在 `IsBoss` 函数中添加验证，只有当NPC ID在 `BossIds` 表或 `BossDatabase` 中时才认为是BOSS
- 修复了单人打木桩时，旁边其他玩家战斗导致信息条闪烁的问题
  - 问题原因：1) `combat_end` 战斗结束后 `update_timer` 继续运行，每秒调用 `UpdateDisplay(true)` 强制刷新 UI；2) 事件过滤逻辑在玩家脱离战斗后、战斗实际结束前仍有短暂时间窗口处理其他人的战斗事件；3) `GetActor` 函数无条件设置 `self.changed = true` 导致频繁刷新
  - 修复方案：
    - 在事件处理最开始添加全局过滤器，单人非战斗状态下忽略所有非玩家相关的战斗事件
    - 修改 `GetActor` 函数，只在 actor 是新创建或被修改时才设置 `self.changed = true`
    - 优化信息条 feed 函数，在单人非战斗状态下返回 nil，避免频繁更新
    - 在事件过滤逻辑中使用 `UnitAffectingCombat("player")` 替代 `self.inCombat`，更准确地判断玩家是否真的在战斗中
- 修复了战斗过程中数据不实时更新的问题
  - 问题原因：`combat_tick` 函数中单人战斗时使用 `IsGroupInCombat()` 判断战斗状态，而单人时该函数返回玩家自己的战斗状态，导致玩家短暂脱离战斗时战斗被错误结束
  - 修复方案：修改 `combat_tick` 函数，区分单人战斗和团队战斗：
    - 团队战斗：使用 `IsGroupInCombat()` 判断
    - 单人战斗：使用 `UnitAffectingCombat("player")` 判断
- 修复了Tweaks.lua中mode.hooks为nil导致的报错
  - 问题原因：mode.hooks没有被初始化就被调用
  - 修复方案：添加了判空检查，当mode.hooks不存在时直接返回
- 修复了Functions.lua中set.starttime为nil导致的算术运算错误
  - 问题原因：GetSetTime函数在set.starttime为nil时仍尝试执行time() - set.starttime
  - 修复方案：添加了判空逻辑，当set.starttime为nil时返回1
- 重构了BOSS识别系统，完善多目标BOSS识别和伤害分类
  - 改进了BossContainer:IsBoss函数：
    - 在ENCOUNTER战中放宽检测，所有boss1-boss5单位都被识别为BOSS（支持多目标BOSS）
    - 在非ENCOUNTER战中严格验证，通过BossIds/BossDatabase检查是否是真正的BOSS
  - 改进了BossContainer:RefreshBossUnits函数：
    - 在ENCOUNTER战中直接添加所有boss1-boss5单位到BOSS列表
    - 在非ENCOUNTER战中验证后才添加到BOSS列表
  - 改进了Damage.lua中的伤害分类逻辑：
    - 在ENCOUNTER战中，用BossDatabase的NPC ID列表来区分BOSS和小怪伤害
    - 只有目标NPC ID在当前遭遇的BOSS列表中时，才算作BOSS伤害
    - 其他目标（包括小怪）都算作小怪伤害
  - 修复了多目标BOSS战（如4DK、双子战）的伤害分类问题
    - 之前要么所有目标都被识别为BOSS，要么都被识别为小怪
    - 现在正确识别所有BOSS目标，并正确分类伤害
  - 修复了BOSS战中小怪伤害被错误计入BOSS伤害的问题
    - 之前小怪被误判为BOSS，伤害被计入BOSS伤害
    - 现在通过BossDatabase的NPC ID列表正确识别BOSS，小怪伤害正确计入小怪伤害
- 修复了战斗中有时时间不更新导致秒伤过大的问题
  - 问题原因：在 `create_set` 和 `ResumeSegment` 函数中设置了 `set.time = 0`，导致 `GetSetTime` 函数直接返回固定时间而不是实时计算
  - 修复方案：
    - 在 `create_set` 函数中将 `set.time = 0` 改为 `set.time = nil`
    - 在 `ResumeSegment` 函数的三处都将 `set.time = 0` 改为 `set.time = nil`
    - 在恢复战斗时重新设置 `set.starttime = time()`，确保时间计算正确
    - 现在 `GetSetTime` 函数会使用 `time() - set.starttime` 实时计算时间，秒伤计算也会正确
- 修复了战斗中数据不实时更新的问题
  - 问题原因：只有 BOSS 战才有 0.5 秒的实时刷新定时器，非 BOSS 战（打木桩、小怪战）只有 1 秒刷新，数据不实时
  - 修复方案：
    - 修改了 `combat_start` 函数，不管是 BOSS 战还是非 BOSS 战，都启动实时刷新定时器
    - 修改了 `boss_refresh_tick` 函数，让它在所有战斗中都工作，而不只是 BOSS 战
    - 修改了 `combat_tick` 函数，在战斗中强制刷新显示，确保数据实时更新
    - 使用用户配置的 `updatefrequency`（默认 0.5 秒）作为刷新频率
    - 用户可以在**常规选项**的**高级**标签页调整刷新频率，范围 0.05 秒 ~ 3 秒
    - 现在所有战斗都是实时刷新的了！

V1.5.5（2026.5.7）
功能更新：
- 优化了测试模式的职业数据，严格依据WCL-P3数据：
  - 更新了各职业的伤害范围，确保排名顺序符合预期
  - 前三名（毁灭术、敏锐贼、冰法）伤害提高5%
  - 火法调整到第10名以后
  - 猫德、邪恶DK、惩戒骑等职业的排名调整
  - 修复了测试模式只显示治疗量不显示伤害量的问题
  - 修复了测试数据方差导致排名混乱的问题（固定variance为1.0）
问题修复：
- 修复了合并小怪战斗没有技能详情数据导致总体显示不显示技能详情的问题
  - 在 `generate_total()` 函数中添加了对 `spells` 表的处理
  - 在 `combat_end()` 函数中添加了技能数据的实时累加，避免战斗结束后卡顿
- 修复了战斗结束时卡顿的问题
  - 在 `combat_end()` 中直接将技能数据累加到总体数据，而不是等到查看总体数据时才计算
  - 性能消耗分散到每次战斗结束，而不是集中在查看总体数据时

V1.5.4[Beta]（2026.5.7）
功能更新：
- 添加了窗口淡出功能：
  - 在"外观"选项卡中添加了三个新选项：
    - "离开战斗时淡出"：离开战斗时窗口淡出，默认不勾选
    - "单人时淡出"：不在队伍中时窗口淡出，默认不勾选
    - "淡出透明度"：设置淡出时的透明度（默认90%）
- 优化了设置界面的滑块选项：
  - 统一了滑块宽度：高度、宽度、间距、位移、材质高度、亮度都改为双宽度
  - 调整了亮度选项的位置：从颜色选项区域移动到位移选项后面
  - 为所有滑块选项的鼠标提示添加了默认值信息（中文本地化）
- 修改了历史记录限制设置：
  - `setslimit`（BOSS记录）：默认30，限制0-30
  - `setstokeep`（普通战斗记录）：默认15，限制0-30
问题修复：
- 修复了BOSS识别问题（天启四骑士4DK、黑曜石圣殿等）
  - 完善了BOSS数据库中的ID信息
  - 优化了isBoss判断逻辑，增加了boss1-boss5单位检测作为备用方案
  - 修复了BOSS死亡检测逻辑，支持多目标BOSS情况
- 修复了随机副本中提示"你现在没有在一个队伍中"的错误（影响所有职业）
  - 修改了队伍状态检查逻辑，不再使用GetRaidRosterInfo（跨服组队场景下不可靠）
  - 改为使用UnitName/UnitClass API来获取队伍成员信息，支持跨服组队
  - 修复了Functions.lua中多处队伍成员检查逻辑，添加了对LE_PARTY_CATEGORY_INSTANCE的支持
- 修复了死亡记录名字重复显示问题
  - 在mode_deathlog:Enter函数中添加了win.actorname = label
  - 确保两种显示模式下都能正确设置玩家名字
- 修复了确认对话框超时自动关闭的问题
  - 进副本重置、入队重置、离队重置的确认对话框现在不会在30秒后自动消失
  - 只有用户点击"确定"或"取消"按钮后才会关闭
- 修复了单人打木桩时，旁边其他玩家战斗导致信息条闪烁的问题
  - 问题原因：1) `combat_end` 战斗结束后 `update_timer` 继续运行，每秒调用 `UpdateDisplay(true)` 强制刷新 UI；2) 事件过滤逻辑在玩家脱离战斗后、战斗实际结束前仍有短暂时间窗口处理其他人的战斗事件
  - 修复方案：
    - 在 `combat_end` 中直接取消 `update_timer`，避免战斗结束后无意义的定时刷新
    - 在事件处理中添加条件：单人且不在战斗中时，忽略其他人的战斗事件
    - 优化 `UpdateDisplay` 函数：移除 `self.current` 存在就强制刷新的逻辑，改为只在有数据变化时刷新
- 修复了术士传送门拉进副本没有提示的问题(在 PLAYER_LEAVING_WORLD 事件中正确更新实例状态)
- 修复了BOSS数据库中大量ID错误的问题：
  - 黑曜石圣殿：萨塔里奥 ID 30458→28860，塔尼布隆/沙德隆 ID 互换- 纳克萨玛斯：天启四骑士名称对应修正
  - 冰冠堡垒：修复玛洛加尔领主、亡语者女士、脓肠、腐面、普崔塞德教授、死亡使者萨鲁法尔、辛达苟萨、巫妖王的 ID
  - 太阳之井高地：修复卡雷苟斯、布鲁塔卢斯、菲米丝、艾瑞达双子、穆鲁的 ID
  - 黑暗神庙：修复高阶督军纳因图斯、苏普雷姆斯、阿卡玛之影、塔隆·血魔、古尔图格·血沸、伊利达雷议会、莎赫拉丝主母的 ID
- 修复了BOSS战斗伤害分类错误的问题（如瘟疫使者诺斯，4DK）
  - 问题原因：官方ENCOUNTER事件报告的BOSS名称与战斗日志中的实际名称不一致（例如"瘟疫使者诺斯" vs "药剂师诺斯"），导致BOSS伤害被错误地计入小怪伤害
  - 修复方案：在官方BOSS战中，优先使用GUID检测目标是否是BOSS，其次才使用名称匹配
- 修复了副本内团队小怪战有时无法生成战斗记录的问题
  - 问题原因：副本内小怪战使用 `IsGroupInCombat()` 检查团队战斗状态，只要团队中有人还在战斗，战斗记录就无法生成
  - 修复方案：
    - 副本内小怪战：只检查玩家自身的战斗状态（`InCombatLockdown()`）
    - 副本内BOSS战：仍然检查团队战斗状态，确保团队都脱离战斗才结束记录
    - 副本外：保持团队战斗状态检查
  - **回滚说明**：此修复在某些情况下会导致统计条闪烁（如战士打完小怪后显示战士的，然后显示其他人的，然后又返回战士的）。原因是玩家脱离战斗后 `InCombatLockdown()` 为 false，导致战斗被错误结束，但团队其他人还在战斗，产生新的战斗分段，造成 UI 在不同分段之间切换闪烁。已回滚此修复，统一使用 `IsGroupInCombat()` 检测战斗结束。
- 修复了战斗记录重复创建的问题（同时创建两个同样名字的BOSS记录，一个有数据一个没有数据）
  - 问题原因：`save_current_segment` 函数保存战斗记录时只检查了 `mobname` 和时间，没有检查是否有实际战斗数据
  - 修复方案：
    - 添加数据检查逻辑：必须有伤害/治疗数据或玩家数据才保存
    - 最小战斗时间从1秒增加到5秒
    - 避免创建空的或只有BOSS名称但没有实际数据的战斗记录
- 优化了战斗记录保存逻辑，简化了设置选项：
  - 小怪记录（Trash segments）：默认15条，最大30条
  - BOSS记录（Boss segments）：默认25条，最大30条
  - 如果开启了"自动合并小怪"选项，最多显示2条小怪记录 + 1条合并记录 = 3条小怪相关记录
  - 删除了持久化BOSS战斗记录的概念，改为简单的数量限制
  - 修改了 `clean_sets` 函数，分别限制小怪记录和BOSS记录的数量

V1.5.3[Beta]（2026.5.3）
问题修复：
- 修复了总体伤害统计错误的问题，确保总体伤害 = BOSS伤害 + 小怪伤害
  - 更新了 Prototypes.lua 中的 GetDamage()、GetDPS()、GetDamageTargets() 等函数
  - 更新了 Modules/Damage.lua 中的显示逻辑
  - 修复了Tooltip中百分比分母错误的问题
  - 完善了 setPrototype:GetDamage() 方法，根据当前伤害类型返回正确的伤害值
  - 在 Core.lua 的 combat_end() 函数中，添加了对 boss_damage 和 trash_damage 字段的累加处理
  - 完善了 generate_total() 函数，确保在重新计算总体数据时也能正确处理 boss_damage 和 trash_damage
  - 修复了战斗结束后总体数据错误的问题：移除了 UpdateDisplay() 中每次非战斗更新都调用 generate_total() 完全重算总体数据的代码，避免了数据被错误覆盖
  - 只在 Reset() 函数中调用 generate_total()，确保重置数据后总体数据正确
  - 同时也处理了竞技场/首领模式的数据（以e开头的键）
- 修复了BOSS战斗记录可能重复统计的问题
  - 问题原因：`combat_end()` 函数可能被多次调用（ENCOUNTER_END事件和PLAYER_REGEN_ENABLED事件都可能触发）
  - 修复方案：在 `combat_end()` 函数中添加了 `_in_combat_end` 保护标志，确保每个战斗记录只会被保存一次
功能调整：
- 增加了BOSS战（持久记录）的最大保留数量，从25条提升到30条
- 设置了默认BOSS战记录数为25条
- 重构了BOSS伤害统计逻辑，完全按照WCL标准实现
  - 在官方BOSS战中，只有对当前遭遇名称完全匹配的目标伤害才算BOSS伤害
  - BOSS战中的小怪伤害现在会正确计入小怪伤害统计
  - 修改了Damage.lua和PrecisionEngine.lua中的isBoss判断逻辑
  - 支持同时存在的多个BOSS情况，所有已注册的BOSS都计入BOSS伤害
界面改进：
- 重新设计了报告功能界面，频道列表更清晰有序
- 频道名称更简洁直观，按类别分组显示（自己/复制粘贴/说/小队/团队/副本/公会/悄悄话等）
- 增加了报告行数的上限，从25行提升到30行
- 改进了Tooltip显示逻辑
  - 在总体模式下，现在会分开显示首领伤害和小怪伤害
  - 显示格式：首领伤害（占比%）+ 小怪伤害（占比%）+ 总计伤害
  - 所有伤害类型统一使用白色显示，视觉更统一
- 优化了中文本地化翻译
  - 将所有"BOSS"相关翻译改为"首领"，以和小怪伤害统计日志对齐。
  - 首领伤害、首领DPS、首领伤害总量、仅首领伤害等
- 移除了常规选项中重复的"死亡日志记录事件数"设置，避免混淆
- 修复了Options.lua中的语法错误（缺失的}）
- 改进了pre-potion预用药水的实现逻辑

V1.5.2（2026.4.30）
问题修复：
- 修复了打断通报在死亡状态下插件报错的问题（SendChatMessage被保护功能阻止）
- 修复了Auras.lua中GetTime方法为nil导致的报错
- 修复了Core.lua中Segment Saved日志format参数为nil的报错
- 修复了击杀世界BOSS后，事件处理逻辑错误导致BOSS统计一直未停止的问题
- 优化了PLAYER_REGEN_ENABLED事件处理逻辑，对于已成功击杀的BOSS战也能正确结束
- 修复了药水统计重复的问题（玩家喝了2次药水却统计了4次）
- 修复了战斗记录保存时序问题，这个问题导致了某些战斗记录不显示（确保新战斗记录在clean_sets执行前已保存）

V1.5.1（2026.4.28）
BOSS战检测逻辑重构 - 官方事件优先策略
核心改动：
- 重写 check_boss_fight 函数，将ENCOUNTER事件检测移到函数最开头
- 移除重复的ENCOUNTER检测代码，避免逻辑混乱
- 早期返回机制：一旦检测到ENCOUNTER事件，立即返回，避免后续逻辑干扰
- 容错性增强：即使BossDatabase中没有该BOSS，只要游戏触发ENCOUNTER事件即可正确识别
BOSS战检测优先级（调整后）：
1. 【最高优先级】官方ENCOUNTER事件（首要判定依据）
   - 检查是否有未处理的 ENCOUNTER_START 事件
   - 检查是否正在进行官方BOSS战（ encounterData ）
   - 只要官方事件触发，就强制标记为BOSS战，不管数据库中是否有该BOSS ID
   - 即使数据库遗漏或错误，也能正确识别BOSS战
2. 【次优先级】其他检测逻辑
   - 世界BOSS名称检测
   - 数据库BOSS ID匹配
   - boss1-boss5单位检测
问题修复：
- 修复了BOSS被错误识别为小怪的问题（如"拉文索尔"、"碧蓝巫术师"等）

主要改进--死亡日志模块的重新设计：
1. 更丰富的事件记录
   - 新增了 ENVIRONMENTAL_DAMAGE（环境伤害）的记录
   - 新增了 SPELL_CAST_START 和 SPELL_CAST_SUCCESS（敌人施法）的记录
   - 新增了 SPELL_INTERRUPT（打断）的记录
   - 所有事件现在都有了 event_type 标记，便于区分
2. 优化的记录配置
   - 最大记录事件数：从14增加到了30
   - 时间窗口：从60秒优化为15秒，更聚焦于死亡前的关键事件
   - 可在设置中自定义这些参数
3. 增强的战斗上下文
   - 记录死亡时的战斗名称（如果是BOSS战）
   - 记录区域名称
   - 死亡时会显示伤害统计摘要
4. 改进的UI显示
   - 事件标签现在显示事件类型标记：[施法]、[打断]、[环境]、[死亡]
   - 不同事件类型用不同颜色标记
   - 敌人施法有专门的图标
   - 开启了Survivability列，显示伤害摘要
5. 增强的工具提示
   - 显示战斗名称和区域
   - 显示总承受伤害
   - 显示前3个主要伤害来源
   - 显示事件类型
   - 所有数据都有美观的颜色标记
6. 更好的颜色自定义
   - 新增了"环境伤害"和"敌人施法"的颜色设置选项
   - 保持原有所有颜色选项
7. 功能提升
   - 更好地追踪死亡原因
   - 看到敌人的关键施法
   - 分析伤害来源
   - 了解死亡时的战斗环境
   - 查看完整的时间线

V1.5.0[Beta]（2026.4.28）
化繁为简，移出大量不必要的代码和功能，尝试彻底解决卡顿问题。
1. 修复了黑曜石圣殿三个小BOSS不显示分段记录的问题
  - spell.targets 没有包含GUID字段 ：在Damage.lua中， spell.targets[dmg.dstName] 只包含 amount 和 total ，不包含 guid 字段
  - BOSS检查失败 ：由于 target.guid 是 nil ， BossContainer:IsBoss(targetGUID) 无法正确识别BOSS
  - 在设置 spell.targets[dmg.dstName] 时添加了 guid 字段，确保正确识别BOSS
2. 删除了 send_combat_end_message 函数 
   - 这个函数引入了大量不必要的 C_Timer.After 延迟回调
3. 简化了 combat_end 函数
   - 移除了 process_actors_batch 递归分批处理
   - 移除了所有 C_Timer.After 延迟执行
   - 移除了复杂的BOSS检测逻辑 （在战斗结束时遍历所有演员）
   - 移除了 DashMeter._in_combat_end flag
   - 移除了不必要的BOSS刷新定时器取消代码
4. 创建了依托于WCL-P3的各职业天赋两分钟的真实模拟数据，用于测试和验证插件的性能和稳定性。

V1.4.9（2026.4.28）
- 移除对于英雄训练假人31146的特殊BOSS化处理
- 修复上一版本的报错问题
- 优化优化分批处理数据机制
- 继续优化延迟执行战斗结束处理
- 继续优化了进入战斗的数据处理
V1.4.8（2026.4.26）
1. 战斗结束性能优化
- 实现 combat_end 函数分批处理
  - 每次处理10个演员，使用 C_Timer.After 延迟执行下一批
  - 将actors从表转换为数组，便于分批处理
  - 找到BOSS后立即结束处理，避免不必要的计算
- 实现 process_set 函数分批处理
  - 每次处理5个模式，使用 C_Timer.After 延迟执行下一批
  - 所有模式处理完成后再触发事件和保存数据
2. 代码优化
- 添加 send_combat_end_message 统一函数
  - 减少重复代码，统一战斗结束消息发送逻辑
- 优化字符串操作
  - 缓存 strlower 结果，避免重复的字符串操作
  - 使用预计算的 lower_mobname 和 lower_target
3. 延迟执行优化
- 所有消息发送都使用 C_Timer.After(0.1, ...) 延迟执行
- 减少主线程阻塞，避免战斗进入和结束时的卡顿

V1.4.7（2026.4.26）
1. 治疗量标签不显示问题
- 修复了 Healing 模块的 Private 表初始化问题
- 现在单独启用 KP_DashMeter 时也能正常显示治疗量
2. 插件加载错误导致的不显示框体问题
- 移除了 Tweaks 模块对 AceHook-3.0 库的依赖
- 修复了 Core.lua 中 GetAddOnMetadata 函数的安全调用
3. 模块初始化错误导致的报错
- 为 DamageTaken 模块添加了 metadata 初始化
- 为 Absorbs 模块添加了 metadata 初始化
4. 修复先前移除AceHook-3.导致的部分模块依赖错误

V1.4.6（2026.4.25）
- 插件处理战斗事件时，可能会与DBM产生资源竞争，导致性能问题。
- 上版本代码尝试直接修改 DBM.EndCombat 函数，这种方式验证了会干扰DBM的正常运行流程导致进入战斗和结束战斗的卡顿位置。
- 新版本则直接优先使用DBM的回调系统，如果DBM支持 RegisterCallback 方法，就使用这种方式来监听EndCombat事件。
- 如果DBM不支持回调系统，就使用改进的钩子方式，先调用原始函数，然后使用 ScheduleTimer 异步处理DBM消息。
- 通过以上两种方式，避免了直接修改DBM函数可能导致的性能问题，提高了插件的性能和稳定性，并且解决了进入战斗和脱离战斗卡顿的问题，同时提高了与DBM的兼容性。

V1.4.5（2026.4.26）
1. 性能优化
- 优化 Core/Core.lua 中的 clean_sets 函数
  - 移除技能数据部分合并，减少嵌套循环复杂度
  - 简化演员数据处理，只合并必要的数值字段
  - 减少对象创建，避免为每个技能创建新对象
  - 优化小怪记录合并逻辑，提高处理速度
  - 合并遍历 ：将BOSS检测和目标统计合并到一次遍历中
  - 提前退出 ：在找到BOSS后立即退出循环
  - 复用数据 ：在设置mobname时复用之前统计的目标数据
  - 减少函数调用 ：减少了重复的 GetInstanceInfo() 调用
2. 卡顿问题修复
- 解决开怪和退出战斗时的卡顿问题
- 显著减少CPU占用，提高插件响应速度
- 保持功能完整，保留所有必要的数值字段和演员基本信息
- 确保框架稳定性，避免因优化导致的崩溃
- 减少了遍历次数 ：从原来的2-3次遍历减少到1次
- 减少了CPU使用 ：避免了重复的计算和函数调用
3. 代码优化
- 统一局部变量使用，减少重复的Locale对象创建
- 简化时间范围更新逻辑
- 优化记录清理流程，提高整体性能
4. BOSS战斗优化
 - 优化BOSS战数据更新机制，确保数据及时更新

V1.4.4（2026.4.24）
1. 核心系统重构
- 新建 Core/Container/Boss.lua - 全新的BOSS检测容器
  - 使用 boss1-boss5 游戏原生单位检测 BOSS（最准确的方式）
  - 处理 ENCOUNTER_START/END 事件
  - 支持世界BOSS检测
  - 提供向后兼容的 API 接口
  - 放弃使用 LibBossIDs-1.0
- 更新 Core/Load.xml - 在 Functions.lua 之前添加 Boss.lua 加载
- 更新 Core/Core.lua
  - 在 ENCOUNTER_START/END 事件中添加 BossContainer 调用
  - 修复BOSS战数据停止更新问题
  - 优化BOSS战实时刷新机制（0.5秒刷新频率）
  - 修复自动切换功能
2. BOSS数据库完善
- 增加更多BOSS的 ID 和名称
- 包含BOSS的区域、地图 ID、难度等信息
- 支持BOSS技能和阶段数据
- 为经典旧世、TBC、WLK团本添加详细BOSS信息
- 优化BOSS数据库函数
  - 重写IsBossInDatabase函数
  - 添加GetBossInfo函数
3. BOSS和小怪伤害分离
- 在各容器中添加boss_damage和trash_damage字段
- 优化伤害记录逻辑，确保伤害正确分类
- 增强「仅BOSS伤害」和「仅小怪伤害」模式
  - 只显示对应目标类型的法术
  - 修复数据显示问题
4. 英雄训练假人特殊处理
- 为英雄训练假人（31146）添加特殊处理，确保假人被正确识别为BOSS
- 此功能是为了测试DPS统计功能
- 当玩家脱离战斗时，假人战斗立即结束并自动标记假人战斗为成功BOSS战
- 此处理仅对主城的英雄训练假人生效，不影响其他BOSS战
5. 战斗结束处理优化
- 在 combat_start 函数中添加 PLAYER_REGEN_ENABLED 事件注册
- 确保BOSS战不会因为玩家暂时脱离战斗而停止统计
- 修复语法错误和移除实验性功能
6. 修复了分段名称有时变成"未知"的问题，确保战斗分段名称在新战斗创建后保持不变

v1.4.3R-Debug（2026.4.18）
1. 错误处理
- 添加了 Core/EarlyDiagnostic.lua 文件，在插件加载的 最开始 执行，用于检查插件是否加载成功
- 增强 Init.lua 错误处理，确保插件加载时不会因为错误而崩溃
- 如何使用诊断功能？/KPDDEBUG
2. 修复 GetSet 函数
- 确保当 current 、 sets[1] 和 last 都为 nil 时，返回一个空的集合
- 避免 setPrototype:Bind(nil) 导致的错误，确保始终有有效的数据集合
3. 增强 UpdateDisplay 函数
- 添加了窗口级别的 changed 检查，确保即使全局 changed 标志为 false，只要有窗口需要更新，就会执行更新
- 优化了更新逻辑，确保在需要时正确更新显示
4. 修改战斗逻辑
- 增加BOSS战的最小保存时间 ：从1秒增加到3秒，避免短暂战斗被保存
- 添加失败BOSS战的时间检查 ：只有战斗时间超过5秒的BOSS战才标记为失败
- 保持小怪战的原有逻辑 ：小怪战仍然保持1秒的最小保存时间
5. 新设计了BOSS战实时刷新的方案，采用更简单稳定的方案
- 之前添加的 boss_refresh_timer 与原有的 update_timer 冲突
- 定时器的启动和取消逻辑过于复杂，容易出错
- 简化刷新机制 ：移除单独的 boss_refresh_timer ，改用更简单的方案
- BOSS战强制更新 ：在 UpdateDisplay 函数开始处检测BOSS战，强制设置 force = true
- 立即更新 ：在 SetBossInfo 函数中调用 UpdateDisplay(true) 确保BOSS信息设置后立即显示
6. 解决BOSS战数据显示延迟问题
- 修复 UpdateDisplay 函数
- 将 self.current.type == "raid" or self.current.gotboss 的判断移到函数开头
- 这样即使 self.current 存在，也能正确检测 raid 战并强制更新
- 避免被 self.current 为 nil 的检查阻挡
- - 在 combat_start 函数中调用 DashMeter:UpdateDisplay(true)，确保战斗开始时立即更新
1.4.3R (2026-04-17)
- 增强：BOSS 战期间添加实时刷新机制，确保数据实时更新，舍弃上一个版本的数据修复导致的历史记录不显示的问题
- 在 combat_start 函数之前添加BOSS刷新定时器函数和变量声明
- 在 combat_start 函数末尾（设置 update_timer 和 tick_timer 之后），如果检测到是BOSS战，启动实时刷新定时器
- 改善了仇恨模块的专精图标显示，目前根据单位的专精ID显示对应的图标，修复了先前版本一直只显示职业图标的显问题
1.4.2(2026-04-16)
1. 修复数据实时更新问题
- 在 OnCombatEvent 函数结尾添加 self.changed = true，确保每次战斗事件处理后都会标记数据已更改
- 在 DispatchSets 函数中添加 self.changed = true，确保所有模块的数据更新都会触发 UI 刷新
- 解决BOSS战中间数据不动的问题，现在数据会实时变化
- 确保伤害、治疗等数据在事件发生后立即更新显示
2. 修复：进副本/队伍/离队时的重置逻辑，改为和"重置全部数据"一样的逻辑（直接重置所有数据，不需要按Shift确认）
1.4.1(2026-04-14)
1. 修复战斗结束后统计条闪烁的问题
- 添加对环境伤害的智能判断，完全阻止环境伤害触发新战斗
- 添加战斗结束后15秒内的残留伤害过滤，包括法术伤害、DOT、AOE等
- 确保小怪死后的残留效果（如烈焰宝珠的灼烧）不会触发新战斗
- 保持15秒时间窗口来处理残留伤害，同时确保真正的新战斗能正常开始
2. 修复破甲统计模块
- 扩展破甲技能支持，添加了所有破甲相关技能的识别
- 优化破甲技能的检测逻辑，使用表查找代替硬编码的技能名称比较
- 添加了 sunder_spells 表 ：用于存储所有破甲技能的名称
- 支持36个不同的破甲技能ID，包括战士、萨满等职业的破甲技能
- 支持的破甲攻击 ：7386, 7405, 8330, 11596, 11597, 11971, 13444, 15502, 15572, 16145, 21081, 25225, 30901, 47467, 47893, 50370, 53618, 54188, 58567
- 支持的破甲法术 ：8647, 8649, 8650, 11197, 11198, 24317, 25051, 26866, 27991, 47607, 58809, 59350, 59608, 60842, 64978, 65936, 71554
3. 修复所有专精ID的本地化翻译问题
- 添加完整的专精ID列表到所有语言文件（zhCN、zhTW、enUS）
- 支持所有职业的所有专精，包括死亡骑士、战士、圣骑士、猎人、潜行者、牧师、萨满祭司、法师、术士、德鲁伊
- 确保鼠标悬停时不再出现 AceLocale-3.0 错误

1.4.0(2026-04-14)
1. 修复死亡记录显示问题
- 修复死亡记录中生命值显示错误的问题，确保实时显示当前生命值
- 修复生命百分比计算错误，确保百分比随生命值变化而正确递减
- 修复 UnitHealthInfo 函数返回值处理，正确获取当前生命值和最大生命值
- 在死亡记录末尾添加死亡标记，显示"XX死亡了"的信息
2. 修复进本重置功能
- 修复 ShowPopup 函数中缺失的函数定义，确保询问对话框正确显示
- 修改进本重置默认设置为"询问"，避免无提示直接重置，可在设置里设置选项
- 添加同一副本同一天只提示一次的限制，避免重复提示
- 修正说明文本，使设置说明更加清晰
3. 优化战斗记录管理
- 修改普通战斗记录默认数量为10，持久段（如BOSS战）数量显示为25.
- 记录数量显示可在配置-常规-高级选中更改默认记录数量
4. 优化BUFF和DEBUFF的显示问题
- BUFF可以正确的按照时间显示触发
- 饰品、天赋等所有类型BUFF都可以正常显示
5. 优化驱散、复活、药水等显示逻辑，确保正确显示
6. 优化能量、法力、符文、怒气的所有获取来源
7. 修复已知的其他问题
- BOSS战的数据不显示问题
- 历史记录详细数据消失问题
- 职业天赋识别问题
- 窗口刷新问题
- 修正汉/英文本中的术语
- 确保所有功能正常运行

1.3.9(2026-04-13)
1. 修复了职业显示和职业颜色问题
- 修复了 GetActor 函数中的缩进问题，确保职业信息能够正确设置
- 修改了 check_cached_names 函数，移除了对 flags 的依赖，确保跨服组队玩家的职业信息能正确缓存
2. 修复BUFF、DEBUFF、死亡记录等等显示问题
- 修改了 Auras.lua 模块中 DEBUFF 事件的注册条件，将 {src_is_interesting = true} 改为 {dst_is_interesting = true} ，确保怪物给玩家上的 DEBUFF 能被记录
3. 修复了驱散记录问题
- 确保 Dispels.lua 模块正确注册事件，能够记录玩家的驱散操作
4.修复了BOSS战伤害暂时不显示战斗结束又出现的问题
- OnCombatEvent 函数结尾没有设置 self.changed = true，导致列表看起来"不动了"，尽管数据还在继续收集.
5.修复了面板显示数据但是单点进去不显示数据详细记录的问题
- 当战斗结束后， DashMeter.current 被设置为 nil 。当新战斗开始时， create_set(L["Current"], tentative_set) 会创建一个新的当前战斗记录，但是它会使用原来的 actors 表，这导致数据混乱。
- 在 create_set 函数中， set.actors = wipe(set.actors or {}) 会强制清空actors表。当战斗结束后， tentative_handler 函数会将 DashMeter.current 保存到 tentative_set 中。如果很快又有新的战斗事件触发， create_set(L["Current"], tentative_set) 会被调用，这会 清空 tentative_set.actors ，导致之前战斗的数据丢失！
- 修改 create_set 函数，不再强制清空actors表，而是保留已有的数据
6.修复了战斗者有新玩家加入战斗可能显示"未知目标"并且不统计战斗记录的问题
- 当新玩家在战斗中途加入队伍时， check_cached_names 函数只是从缓存中获取名称，如果缓存中没有，它不会添加新名称。这导致新玩家显示为"未知目标"，伤害也不被记录。
- 修改``check_cached_names`` 函数，使其在缓存中没有名称时，将战斗事件中的名称添加到缓存中

1.3.8 (2026-04-09)
- 适配 时光服最新客户端API
- 修复 GetAddOnMetadata 函数不存在的问题 ：添加了判空检查，确保在该函数不可用时插件仍能正常初始化。
- 修复 LibStub 库不存在的问题 ：添加了判空检查，确保在该库不可用时插件仍能正常初始化。
- 修复 Private 变量未初始化的问题 ：确保 ns.Private 变量在其他文件使用之前已经被初始化。
- 修复 profile 字段未初始化的问题 ：在 IsDisabled 函数中添加了对 self.profile 和 self.profile.modulesBlocked 的判空检查。
- 修复 AceHook-3.0 库不存在的问题 ：在 Tweaks.lua 中添加了对该库的判空检查，当库不存在时不加载该模块。
- 修复 metadata 字段未初始化的问题 ：将 DamageTaken.lua 中的 metadata 字段初始化移到模块创建时，避免在 OnEnable 中访问时为 nil。
- 修复BOSS战斗历史记录不显示数据的问题 ：修复了 log_damage 函数中的 isBoss 判断逻辑，确保它能正确识别BOSS战斗，并在战斗记录合并时确保 bossDamage 和 trashDamage 字段被正确合并。
- 修复 Damage.lua 中的 valuetext 计算表达式 ：添加了判空逻辑，确保在 value 为 nil 时使用 "0" 作为默认值。

1.3.7 (2026-04-07)
- 修复 战斗记录有时不显示的问题，添加了数据结构检查和验证，确保 `_G.KP_DashMeterCharDB` 和 `self.sets` 是有效的表
- 修复 空失败记录问题，确保只有有实际数据的战斗记录才会被保存，避免保存空记录
- 修复 非战斗伤害不刷新面板的问题，简化了非战斗事件处理，不在战斗中的伤害和治疗事件直接被忽略
- 修复 BOSS战斗数据问题，扩展了战斗事件类型，确保在 tentative 模式下战斗事件也能被正确处理
- 修复 死亡记录问题，修复了百分比计算避免出现999%的异常值，确保显示"XXX死亡了"的死亡记录
- 修复 副本重置提示问题，添加了缺失的变量定义，确保函数正常执行
- 修复 入队和离队提示功能，确保当玩家加入或离开队伍时，会根据设置来决定是否显示重置数据的提示
- 修复 历史记录和当前记录的显示逻辑以及maxsets（最大记录数）

1.3.6 (2026-04-05)
- 修复 左键点击菜单和小地图图标无响应的问题，确保左键点击能够正确打开菜单
- 添加 添加了历史记录选项，并且在历史记录中也添加了与主页面相同的快捷键删除功能
- 修复 点击记录后关闭界面的默认行为，恢复点击记录后关闭菜单的功能
- 修复 菜单显示位置问题，确保菜单能够正确显示在鼠标位置
- 修复 上一版本BOSS战斗记录问题，确保能够正确显示和保存

1.3.5 (2026-04-04)
- 修复 Core.lua 文件中的语法错误，删除多余的 else 块
- 修复 Functions.lua 文件中的错误，添加对 DashMeter.Units 的检查
- 修复 Damage.lua 文件中的缩进问题，确保所有伤害事件都能被正确处理
- 修复BOSS战斗记录问题，避免重复记录和时间显示错误
- 修复战斗记录数据问题，确保没有数据的记录不会被保存
- 修复队伍状态检查问题，避免随机本一直显示"你现在没有在一个队伍中"的提示
- 修复BOSS战斗显示问题，确保成功击杀的BOSS战能够正确显示
- 修复 Enemies.lua中的宠物和图腾伤害归属问题，确保敌方承受伤害的伤害来源组成正确显示主人名称
- 修复 Pets.lua 文件中的错误，添加对 petContainer 和 petContainer.UNIT_PET 的检查
- 修复 Auras.lua 文件中的错误，确保它使用 _G["DashMeter"] 来访问 DashMeter 对象
- 完善了技能图标识别逻辑，确保能够正确显示所有技能图标
- 优化战斗分类系统，实现更详细的战斗类型分类
- 扩展BOSS信息结构，添加更多BOSS相关字段
- 添加获取战斗类型、战斗名称、战斗时间等函数
- 确保在战斗过程中正确设置和更新战斗类型和BOSS信息
- 修复BOSS战斗记录不显示问题，确保BOSS战斗记录总是被保存，不管战斗时间多长
- 修改了 ENCOUNTER_END 事件处理函数，确保击杀状态能够正确设置
- 优化战斗结束后伤害处理，减少因 DOT 和 AOE 伤害导致的界面闪烁和卡顿
- 确保菜单能够正确显示在鼠标附近，同时避免坐标类型错误

1.3.4 (2026-03-31)
- 修复 AceHook-3.0 库缺失的问题，移除了对该库的依赖
- 修复 Options.lua 中 DashMeter:SetLabelFormats() 方法调用的问题，将其改为函数形式
- 修复 Functions.lua 中 RegisterModule 函数的问题，添加了对 options 表的检查
- 修复 Core.lua 中 SecureHook 方法调用的问题，使用 WoW 内置的 hooksecurefunc 函数替代
- 修复 Core.lua 中 KP_DashMeter.Units 表的语法错误
- 增大了选项窗口的默认大小，以免某些选项被遮挡或重叠
- 修复了破甲统计模块，让它能够识别所有破甲技能 ID
- 修复了进副本或小队时弹出的重置框体，使其能够完全重置所有数据，包括合并的小怪战斗分段记录

1.3.3 (2026-03-30)
修复
- 无法查看友方装备的问题
- 各种已知报错问题
- 数据条刷新问题
- 代码缩进问题
- 函数调用错误问题
- 本地化条目缺失问题
- 专精图标显示问题，增加了更多识别逻辑

1.3.2Beta (2026-03-27)
修复
- 修复专精图标显示问题
  - 优化GetUnitSpec函数，使其能够处理GUID作为参数，并在无法获取专精时返回nil
  - 修复GetSpecFromTalentTabInfo函数，添加中文天赋树名称到英文的映射
  - 修复ReGuessSpecs函数，解决GetActorList方法不存在的错误
  - 改进专精检测逻辑，确保在WLK版本中能够正确识别所有专精
- 修复亮度设置自动变暗的问题
  - 移除bar_setcolor函数中SetColor调用的locked参数，确保亮度设置能够正确应用
  - 当数据刷新或亮度设置变化时，条形图的颜色会重新计算并应用新的亮度值
- 修复每次刷新界面或重新进入游戏时都会弹出重置数据提示的问题
  - 修改CheckZone函数，确保只有当was_in_instance明确为false时才会触发重置提示
  - 在第一次运行时正确初始化was_in_instance变量，避免因nil值导致的错误判断
- 修复能量获取的问题
  - 改进spell_energize函数，按照Details的逻辑处理能量类型
  - 简化log_gain函数，直接使用战斗日志中的powertype
  - 修改RegisterForCL调用，添加dst_is_interesting = true标志，确保捕获饰品和图腾的能量恢复事件
- 修复默认条形图高度的问题
  - 修改误将默认条形图高度写成0.1的问题，默认1
  - 0.1显示一条直线，为最小。默认1充满条形图，为最大高度

1.3.1 (2026-03-26)
修复
- 修复亮度设置不生效的问题
  - 修复ApplySettings函数中遍历条形图的方法，使用正确的GetBars()方法获取所有条形图
  - 直接应用亮度调整到所有条形图，确保亮度设置立即生效
- 修复标题栏材质设置需要重置才能生效的问题
  - 在ApplySettings函数中重新创建backdrop对象，确保材质更新立即生效

1.3.0 (2026-03-25)
修复
- 增加了材质高度设置的功能，这样可以使得显示窗口更加多样化。
  - 修复CreateBar函数，确保新创建的条形图也能应用材质高度设置
  - 修复SetTextureHeight函数，确保前景纹理的宽度保持不变，这样SetValue函数设置的宽度仍然有效
  - 修复UpdateOrientationLayout函数，使其在设置方向时保留材质高度设置
- 修复亮度设置默认值问题，将默认亮度设置为1

1.2.9 (2026-03-25)
修复
- 修复BOSS伤害统计与Details/WCL不一致问题
- 移除伤害事件节流控制，确保高频伤害事件（如DOT、自动攻击）被完整记录
- 移除机制伤害过滤逻辑及相关配置项
- 修复Options.lua语法错误
- 修复BUFF/DEBUFF显示100% uptime问题（如切割、嫁祸、速度药水加速等）
- 解决Core.lua中endtime nil值错误
- 屏蔽系统BUFF"欢乐时光"(377749)显示
- 修正各个种族特长比如"奥术洪流"分类为DEBUFF的问题
- 修复"合并小怪战斗分段"显示不稳定及数据缺失问题
- 新增技能详情显示支持合并小怪分段

1.2.8 (2026-03-24)
修复
- 解决了"距离太远"的错误提示问题
1. 优化重写函数
   - _G.CheckInteractDistance - 始终返回true，避免距离提示
   - _G.CanInspect - 始终返回true，避免距离提示
   - _G.NotifyInspect - 空函数，避免触发检查
   - _G.IsItemInRange - 始终返回true，避免距离提示
2. 移除天赋查询相关功能
   - 修改了 lib.xml 文件，移除了对 LibGroupTalents-1.0 的引用，避免了天赋查询功能触发距离检查
3. 保留核心功能
   - 保留了 LibCompat-1.0.lua 中提供的核心功能，如 GetCreatureId 、 IsGroupInCombat 、 IsGroupDead 、 IsInPvP 、 UnitIterator 等，这些是KP_DashMeter所需的
- 修复世界BOSS战斗被标记为小怪的问题
- 修复附近其他玩家战斗导致显示条闪烁的问题
   - 修改了SourceInGroup和DestInGroup函数
   - 使用游戏内置的战斗日志标志来检查单位是否是队伍/团队成员
   - 结合宠物主人关系检查，确保只捕获队伍成员及其宠物的战斗事件
   - 直接检查玩家自己，确保玩家自己的战斗事件总是被捕获

1.2.7 (2026-03-23)
新增功能
1. 首领数据选项
   - 添加了"首领数据"选项，只统计成功的首领战斗数据
   - 在配置面板中添加了对应的选项开关，可在"常规"选项卡中找到
   - 优化了选项的位置，与"只保留首领战数据"选项相邻，方便用户管理
2. 非战斗状态显示优化
   - 修复了非战斗状态下条形记录闪烁的问题
   - 减少了非战斗状态下的不必要更新，提高插件性能
   - 优化了更新逻辑，只有在有有效战斗数据时才进行更新技术细节
1. 配置选项添加
   - 在 `Options.lua` 文件中添加了 `bossdataonly` 选项
   - 在 `Locales/zhCN.lua` 文件中添加了对应的中文翻译
   - 调整了选项的顺序，使"首领数据"选项与"只保留首领战数据"选项相邻

2. 数据过滤逻辑
   - 修改了 `Core.lua` 文件中的 `generate_total()` 函数，添加了对"首领数据"选项的支持
   - 当启用"首领数据"选项时，只统计满足以下条件的战斗数据：
     - 战斗是首领战斗（`set.gotboss` 为 true）
     - 战斗不是 wipes（`set.wipe ~= true`）
3. 野外世界BOSS处理
   - 确保野外的世界BOSS不会被计入"首领数据"统计
   - 通过检查战斗类型来区分副本内的首领战斗和野外的世界BOSS
4. 显示优化
   - 修改了 `Core.lua` 文件中的 `UpdateDisplay` 函数，添加了对非战斗状态的检查
   - 当处于非战斗状态且没有有效战斗数据时，减少更新频率，避免数据条闪烁
   - 优化了更新逻辑，只有在有战斗数据、最近战斗或历史记录时才启动更新定时器
修复效果
- 非战斗状态下，条形记录不再闪烁，提高了用户体验
- 插件性能得到优化，减少了不必要的计算和渲染

1.2.6 (2026-03-21)
修复
- 秒伤显示为"inf 亿"的问题
- 原因：当计算秒伤时，分母(时间)为零，导致除以零的情况
- 修复：在计算秒伤时，添加了 actortime > 0 的检查，确保分母不为零
- 结果：当时间为 0 时，秒伤会被计算为 0，而不是无穷大
- 仅BOSS伤害显示有小怪伤害的问题
- 原因：isBossTarget 函数的判断逻辑不够严格，导致一些小怪被误判为 boss
- 修复：改进了 isBossTarget 函数的判断逻辑，增加了更多非BOSS目标名称到排除列表中
- 结果：可以更准确地排除小怪，只统计真正的BOSS伤害
- "距离太远"的提示问题
- 原因：插件中使用的 IsItemInRange 和 CheckInteractDistance 函数可能会触发游戏的距离提示
- 修复：
- 重写了 IsItemInRange 函数，确保它不会触发距离提示
- 修改了 LibTalentQuery-1.0.lua 和 LibGroupTalents-1.0.lua 文件，在调用 CheckInteractDistance 函数之前，检查 unit 是否存在，避免触发距离提示
- 重写了 UnitPosition 函数，确保它不会触发距离提示
- 重写了 UnitIsVisible 和 UnitIsConnected 函数，确保它们不会触发距离提示
- 在关键库中添加了位面检查，确保只扫描同一位面的目标
- 减少了扫描频率，将 LibGroupInSpecT-1.1 库中的 INSPECT_DELAY 从 1.5 秒增加到 3.0 秒，将 LibGroupTalents-1.0 库中的扫描延迟从 1 秒增加到 2 秒
- 结果：减少扫描，避免频繁弹出"距离太远"的提示
- 保护功能调用错误
- 原因：在战斗中调用了受保护的按钮显示函数
- 修复：修改了威胁模块中的 SetUnit 和 UNIT_TARGET 函数，添加了战斗状态检查，确保它们只在非战斗状态下调用 Show() 函数
- 结果：避免了"Button:Show()"的保护功能调用错误
- 修复已知的各种报错问题。

1.2.5 (2026-03-20)

核心功能优化
1. 战斗结束后数据保持显示
   - 修改了 `SetModes` 函数，确保战斗结束后窗口继续显示刚刚结束的战斗数据
   - 避免不必要的Wipe，只有在没有战斗数据时才清空显示
   - 当 `self.last` 存在时（即战斗刚结束），强制设置窗口显示"current"，并立即更新显示
   - 确保数据正确显示，通过 `win:UpdateDisplay()` 确保窗口立即显示最新数据
   - 修改了 `combat_end` 函数，确保在战斗结束后仍然保持更新定时器运行，只有在没有战斗且没有历史数据时才取消定时器
   - 解决了战斗结束后数据不再实时更新的问题
2. 治疗量显示优化
   - 解决了治疗量显示延迟问题：
     - 修改了战斗开始检测逻辑，确保 `SPELL_ABSORBED` 事件能立即触发战斗记录
     - 在记录治疗量的函数中添加了实时更新显示的代码，确保治疗量在产生时立即显示
   - 解决了显示0治疗量技能的问题：
     - 修改了 `log_heal` 函数，只记录治疗量大于0的技能
     - 修改了 `mode_spell:Update` 和 `mode_target_spell:Update` 函数，只显示治疗量大于0的技能
   - 修复了总计治疗的计算：
     - 调整了 `log_heal` 函数，将被吸收的治疗量单独记录到 `absorb` 字段中
     - 修改了 `record_shield_heal` 函数，将护盾吸收量同时记录到 `heal` 和 `absorb` 字段中
     - 确保总治疗量的计算包括有效治疗、过量治疗和吸收
   - 修复了治疗量选项显示中重复技能的问题：
     - 修改了 `Absorbs.lua`，移除了将吸收技能记录到 `healspells` 的代码，避免重复显示
   - 优化了治疗相关方法：
     - `GetHeal` 方法：现在只返回有效治疗量（`heal` 字段）
     - `GetHPS` 方法：现在使用有效治疗量计算 HPS
     - `GetTotalHeal` 方法：现在使用已经计算好的 `totalheal` 字段
     - `GetTHPS` 方法：现在使用 `GetTotalHeal` 方法获取总治疗量来计算 THPS
3. 战斗记录优化
   - 修改了 `OnCombatEvent` 函数：
     - 添加了目标死亡检查：如果目标已经死亡，就不会触发新的战斗
     - 添加了同一目标DOT检查：如果是同一个目标的DOT持续伤害，并且上一个战斗结束时间不久（5秒内），就不会触发新的战斗
     - 记录最后一个目标的GUID，用于判断是否是同一个目标的DOT持续伤害
     - 优化了性能：减少GetUnitIdFromGUID和GetNpcIdFromGuid调用，优化逻辑流程，减少重复计算
   - 修改了 `combat_end` 函数：
     - 确保它在战斗结束时记录最后一个目标的GUID
   - 修改了 `process_set` 函数：
     - 添加了最小战斗时间的检查，只有当战斗时间大于1秒时才保存，或者是第一个战斗记录（即使时间小于等于1秒）
   - 修改了 `GetSet` 函数：
     - 让它在 `current` 为 nil 时优先使用 `sets[1]`（最新的战斗记录）而不是 `last`
4. UI交互优化
   - 修复了监控窗口第一级界面点击右键会退回到监控治疗量的问题：
     - 修改了 `Window:RightClick` 函数，当没有历史记录时，不执行任何操作
     - 保留了有历史记录时的回退功能，这样在子界面中仍然可以通过右键点击返回上一级
     - 保留了移除职业过滤器的功能，当有职业过滤器时，右键点击会移除过滤器
   - 修复了自动从伤害总量跳到当前战斗的问题：
     - 修改了 `DashMeter:SetModes` 函数，让它只在窗口的 `selectedset` 不是 "total" 时才切换到 "current"
     - 这样用户就可以保持在伤害总量界面，不会被自动切换到当前战斗
技术细节
1. 事件处理优化
   - 确保在处理 `SPELL_ABSORBED` 事件时，即使 `self.inCombat` 标志还没有被设置为 true，也会调用 `func(t)` 来记录治疗量
   - 在记录治疗量后立即更新显示，确保实时性
2. 数据记录优化
   - 移除了 `log_heal` 函数中的 `actor.role == "HEALER"` 条件，让所有治疗都能被及时记录
   - 对于护盾技能，只记录基础治疗量到 `actor.heal`，但不记录到 `healspells`
   - 确保护盾的实际治疗量在 `SPELL_ABSORBED` 事件中记录
3. UI显示优化
   - 修改了 `mode_spell:Update` 函数，使用 `base_spellid` 来避免重复显示相同的技能
   - 确保在技能详情面板中只显示一个护盾技能条目，记录实际吸收的伤害量
   - 技能列表现在会同时处理 `healspells` 和 `absorbspells`，将两者的数值相加显示
   - 目标列表现在使用 `GetAbsorbHealTargets` 方法，同时包含治疗量和吸收量
4. 性能优化
   - 优化了 `OnCombatEvent` 函数，减少了性能瓶颈：
     - 只有在非DOT事件时才调用GetUnitIdFromGUID检查目标是否死亡
     - 重新组织了逻辑，先检查时间窗口和目标是否相同，只有在必要时才检查是否是木桩目标
     - 统一使用10秒的时间窗口，简化代码逻辑
     - 避免了重复的时间计算，优化了条件判断的顺序
修复效果
- 战斗结束后窗口会继续显示刚刚结束的战斗数据，直到下一次战斗开始
- 战斗结束后数据仍然会实时刷新，不会出现数据卡住的情况
- 治疗量会实时显示，不会显示没有治疗量的技能
- 总治疗量会正确显示有效治疗、过量治疗和吸收的总和
- 治疗量选项中不会再显示重复的技能
- 战斗结束后不会再出现额外的1秒战斗记录
- 在监控窗口的第一级界面点击右键时，不会再意外地切换到其他监控类型
- 当用户在查看伤害总量时，战斗结束后仍然会显示伤害总量，不会被自动切换
- 插件性能得到优化，解决了掉帧严重的问题

1.2.2 -1.2.3-1.2.4(2026-03-19)

修复
- 修复护盾吸收量显示异常的问题
  - 修复Absorbs.lua中ignored_spells检查逻辑，确保护盾吸收事件不被错误过滤
  - 修复Healing.lua中ignored_spells检查逻辑，确保治疗事件不被错误过滤
  - 修复SPELL_HEAL_ABSORBED事件参数名称错误，正确使用extraspellid参数
  - 添加护盾技能识别逻辑，在spell_heal_absorbed函数中正确识别护盾技能
- 修复战斗开始延迟的问题
  - 将SPELL_ABSORBED事件添加到trigger_events表中，确保护盾吸收伤害时能立即开始战斗
  - 修改tentative初始值，让第一个事件就能立即开始战斗
  - 解决单人战斗时第一击不显示的问题
  - 解决起手套盾后治疗量延迟显示的问题
- 修复战斗结束后数据消失的问题
  - 修改SetModes函数，避免不必要的Wipe，只有在没有战斗数据时才清空显示
  - 战斗结束后保持显示，当self.last存在时（即战斗刚结束），强制设置窗口显示"current"，并立即更新显示
  - 确保数据正确显示，通过win:UpdateDisplay()确保窗口立即显示最新数据
- 修复治疗量显示延迟问题
  - 修改了战斗开始检测逻辑，确保SPELL_ABSORBED事件能立即触发战斗记录
  - 在记录治疗量的函数中添加了实时更新显示的代码，确保治疗量在产生时立即显示
- 修复显示0治疗量技能的问题
  - 修改了log_heal函数，只记录治疗量大于0的技能
  - 修改了mode_spell:Update和mode_target_spell:Update函数，只显示治疗量大于0的技能
- 修复DOT导致的多个战斗记录问题
  - 修改了OnCombatEvent函数，添加了目标死亡检查和同一目标DOT检查
  - 修改了combat_end函数，确保它在战斗结束时记录最后一个目标的GUID

改进
- 优化ignored_spells表的检查逻辑，使用`== true`判断代替直接判断，避免metatable返回空表导致的错误过滤
- 优化了提示"距离太远"的逻辑，避免在距离过远时重复提示
- 完全重写了isBossTarget函数，使其符合WCL官方规则
- 添加了常见非BOSS目标的排除列表
- 现在的只BOSS伤害统计逻辑：
  1. 真正的BOSS本体（通过名称匹配）- 统计
  2. 官方明确标记为"BOSS"的特殊随从（如深水领主的守卫）- 统计
  3. 所有分身、幻影、镜像等 - 不统计
  4. 所有转阶段、附属小怪 - 不统计
  5. 凤凰、凤凰蛋、武器小怪等 - 不统计
- 改进治疗量显示逻辑
  - 修改了战斗开始检测逻辑，确保在处理SPELL_ABSORBED事件时，即使self.inCombat标志还没有被设置为true，也会调用func(t)来记录治疗量
  - 添加了实时更新显示的代码，在记录治疗量后立即更新显示
- Modules/Damage.lua - 重写isBossTarget函数，添加缓存机制和非BOSS目标排除列表

1.2.1 (2026-03-17)

修复
- 修复BOSS战中转阶段时战斗统计过早停止的问题，确保BOSS战全程数据持续更新
- 修复本地化错误：添加缺失的一些本地化条目
- 修复重复的本地化条目，删除多余的重复定义条目
- Core.lua - 修改combat_tick函数，对BOSS战跳过自动结束检测
- Locales/zhCN.lua - 添加缺失的本地化条目，删除重复条目
- Locales/enUS.lua - 添加缺失的本地化条目，删除重复条目
- Locales/zhTW.lua - 统一本地化条目格式

1.2.0 (2026-03-15)

BOSS识别系统重构
- 使用游戏官方 ENCOUNTER_START 事件检测BOSS，100%准确
- 移除所有旧的硬编码BOSS ID列表，提高维护性和扩展性
- 自动支持所有新的BOSS和副本

机制伤害过滤功能
- 新增机制伤害过滤功能，准确过滤各种BOSS机制AOE伤害
- 新增自定义技能添加面板，可手动添加需要过滤的技能
- 技能详情默认显示于伤害-误伤标签，保留详细的伤害记录便于分析
- 自动修复：检测到配置文件缺少 mechanism_damage_filter 字段时自动使用默认值初始化

小怪记录管理优化
- 新的小怪显示逻辑：
  - 勾选"合并小怪战斗"：只保留最新的2条小怪记录，超过的合并到"合并小怪战斗"中
  - 未勾选"合并小怪战斗"：当历史记录达到20条时才合并所有小怪记录到"合并小怪战斗"中
  - 默认勾选"合并小怪战斗"，符合大多数玩家的使用习惯，可以在配置-常规选择中选择是否关闭
- 智能清理机制：当总记录数量超过限制时，优先删除最旧的失败BOSS记录
- 合并后的记录包含所有旧小怪战斗的伤害和治疗数据

删除功能增强
- 窗口右键菜单新增"删除所有首领记录"选项
- 窗口右键菜单新增"删除所有小怪记录"选项
- 删除操作增加确认对话框，防止误操作

威胁(仇恨)窗口优化
- 优化威胁(仇恨)窗口，标准化仇恨列表的所有核心功能
- 威胁窗口默认隐藏，可通过新增窗口按钮开启或者右键点击表头开启
- 独有的智能距离检测、丰富的警告系统和智能目标选择
- 不仅仅是一个简单的仇恨列表，更是一个功能更丰富、更智能的威胁监控系统

配置系统优化
- 修改部分变量名，提高代码可读性
- 更新 Config.lua 和 Options.lua 配置选项定义
- 重要提示：因为更新了大量配置选项，所以更新此版本需要手动删除 WTF\Account\KP_DashMeter.lua 配置文件重新载入插件

技术细节
- Core.lua - 重构BOSS识别逻辑，使用ENCOUNTER_START事件
- Core.lua - 优化小怪记录合并逻辑，支持条件判断
- Menus.lua - 添加删除首领/小怪记录菜单选项
- Options.lua - 添加机制伤害过滤配置选项
- Config.lua - 更新默认配置结构

---

1.1.9 (2026-03-14)

战斗记录管理优化
- 优先删除最早的失败BOSS记录，保留更多有效战斗记录
- 持久化BOSS失败次数，删除记录不影响计数
- 在战斗信息中显示BOSS失败次数，如 [失败次数: 3]
- 优化小怪记录合并时机，不在战斗中合并，只保留一条合并记录
- 添加 DashMeter:GetBossFailureCount 和 DashMeter:ResetBossFailureCount 函数

修复删除战斗记录时更新总计数据
- 删除战斗记录时，总计数据会自动更新，确保数据一致性

新增功能
- 窗口右键菜单新增"自动切换当前战斗"选项
- 勾选后新战斗开始时自动切换，未勾选允许查看历史记录

修复天赋相关错误
- 修复天赋点数类型转换错误，确保点数始终为数字类型
- 解决GetUnitSpec作用域问题，避免 nil value 错误
- 优化天赋数据缓存和同步逻辑

修复双击技能详细窗口显示问题
- 解决选择"总计"战斗时双击无法显示技能详细列表的问题
- 优化技能数据查找逻辑，确保能从其他战斗分段中正确获取

修复保护功能调用错误
- 重写 CheckInteractDistance 函数，使用 pcall 保护战斗中调用
- 重写 CanInspect 函数，避免距离提示

修复BOSS识别和显示问题
- 修复小怪显示为BOSS的问题，优化BOSS检测逻辑
- 修复天赋图标显示错误，修正图标坐标设置方式
- 修复战斗成功/失败状态，优化 ENCOUNTER_END 事件处理
- 添加风暴要塞BOSS ID映射，确保凯尔萨斯等BOSS正确识别
- 添加盘牙水库BOSS ID映射，确保深水领主等BOSS正确识别
- 添加凯尔萨斯随从映射，确保随从伤害正确归属
- 修复ENCOUNTER事件中的BOSS判断逻辑，避免将随从误判为BOSS
- 修复IsBoss和IsEncounter函数，确保BOSS识别准确
- 添加P3纳克萨玛斯BOSS ID映射，确保克尔苏加德等BOSS正确识别

修复保护功能调用错误
- 重写 CheckInteractDistance 函数，战斗中直接返回true避免保护功能调用
- 重写 CanInspect 函数，避免距离提示
- 修复 LibGroupTalents-1.0 和 LibTalentQuery-1.0 中的保护函数调用

新增功能
- 窗口右键菜单新增"自动切换当前战斗"选项
- 窗口右键菜单新增"自动删除垃圾分段"快捷选项

用户界面改进
- 将"自动切换到当前"改名为"自动切换当前战斗"，表述更清晰
- 修改"自动删除垃圾分段"描述为"立即删除"，与实际行为一致
- 修改子视图行默认值从3改为5，显示更多信息

---

1.1.8 (2026-03-13)

新增
- 完整的WLK版本技能映射表，支持所有职业专精识别
  - 德鲁伊：平衡(102)、野性(103)、守护(104)、恢复(105)
  - 猎人：兽王(253)、射击(254)、生存(255)
  - 法师：奥术(62)、火焰(63)、冰霜(64)
  - 圣骑士：神圣(65)、防护(66)、惩戒(70)
  - 牧师：戒律(256)、神圣(257)、暗影(258)
  - 盗贼：刺杀(259)、战斗(260)、敏锐(261)
  - 萨满：元素(262)、增强(263)、恢复(264)
  - 死亡骑士：鲜血(250)、冰霜(251)、邪恶(252)
  - 术士：痛苦(265)、恶魔(266)、毁灭(267)
  - 战士：武器(71)、狂暴(72)、防护(73)
- 基于技能的专精识别函数 GetSpecFromSpells(guid)
- 天赋通讯模块，使用AceComm-3.0实现天赋信息交换
  - 查询消息（Q）：当玩家加入团队/小队时发送
  - 天赋数据（T）：收到查询后回复天赋数据

改进
- 优化专精识别流程，采用混合方案：
  - 优先级1：检查specContainer缓存
  - 优先级2：使用基于技能的专精识别
  - 优先级3：使用天赋树检查（备用方案）
- 移除错误的BOSS ID，添加正确的BOSS映射
  - 删除不存在的"Witch of the Deep"（21218）
  - 添加鱼斯拉（The Lurker Below）ID 21213
  - 添加深水领主随从映射关系
- 修复空值保护，确保某些字段为nil时代码正常运行
- 禁用距离检测，CheckInteractDistance 总是返回 true，避免一直弹出"目标距离过远"错误提示

修复
- 修复BOSS战斗被错误标记为垃圾记录的问题
- 修复快捷键删除功能：
  - Alt+点击：删除所有非BOSS战记录（垃圾）
  - Ctrl+点击：删除所有失败的BOSS战记录
  - Shift+点击：删除当前选中的战斗记录
- 修复"attempt to perform arithmetic on field 'amount' (a nil value)"错误

技术细节
- 专精识别系统：
  - 创建 Core/Container/Specs.lua 专精容器
  - 实现 SpecSpellList 技能到专精的映射表
  - 实现天赋通讯协议
- BOSS识别优化：
  - 增强 DeleteAllTrashSegments 和 DeleteAllFailedBossSegments 函数
  - 添加额外的BOSS战斗识别检查

1.1.7 (2026-03-12)
增加
- 第一次安装插件进入时或者更新版本后显示提示信息
- 增加使用说明
- 增加更多快捷键删除战斗记录功能和提示，在分段可直接查看
  - Alt+点击 - 删除所有非BOSS战记录
  - Ctrl+点击 - 删除所有失败的BOSS战记录
  - Shift+点击 - 删除单个记录
修复
- 修复伤害面板只显示宠物伤害技能不显示宠物名字的问题
- 已知的其它的问题
拓展
- 增加对WoW怀旧服所有版本的支持，目前已经支持以下版本：
  100205  ← 正式服
  11505   ← 怀旧服Era (经典旧世)
  20505   ← TBC燃烧的远征怀旧服
  30405   ← WotLK巫妖王之怒怀旧服和时光服
  40401   ← Cata大地的裂变怀旧服
  50400   ← MoP熊猫人之谜怀旧服 
- 针对这个拓展再多说两句，本来是想支持所有的客户端版本的，但是由于时间和精力的限制，目前暂时只能支持到WLK/泰坦重铸时光服客户端版本了。如果有机会，肯定会拓展的啦。

1.1.6 (2026-03-11)
改进
- 移除了 CheckInteractDistance 调用， 这个函数会弹出内置的错误提示。
- 在城里（非战斗状态）直接使用默认系数 - 不进行任何距离检测
- 现在只在战斗中检测距离，不在战斗中直接使用默认系数 1.3，不会弹出"距离太远"提示了。
- 无论在城里还是副本里，都不会再看到"距离太远"的红色错误提示了。

1.1.5 (2026-03-11)

### 宠物识别和处理机制改进
新增
- 火元素图腾特殊处理：将NPC ID 15439（火元素图腾）的GUID修改为15438（Greater Fire Elemental），确保伤害正确统计
- 宠物主人链处理：如果召唤者本身是宠物，则获取其主人信息，确保宠物召唤的宠物也能正确归属
- 完整的宠物信息记录：同时记录主人名字和宠物名字到guidToName表

改进
- 容器层面宠物识别：在GetActor函数中直接处理宠物识别，不再依赖FixPets函数
- 递归获取主人Actor：如果识别为宠物，递归获取主人的Actor对象，直接返回主人
- 简化伤害统计逻辑：直接统计伤害到主人名下，不再需要单独处理petdamage
- FixPets函数简化：移除宠物识别逻辑，只保留技能名字格式化等辅助功能
- 缓存机制预留：添加宠物缓存变量，为后续优化预留接口

修复
- 修复萨满图腾、火元素等特殊宠物的伤害统计问题
- 修复宠物召唤宠物的情况，确保伤害归属正确

### 伤害统计机制改进

新增
- 创建专门的技能容器类：Core/Container/SpellContainer.lua
- SpellDamageTable类：记录详细的伤害数据
- SpellContainer类：管理技能容器

改进
- 记录更多伤害细节：
  - 普通命中：n_min, n_max, n_amt, n_total
  - 暴击：c_min, c_max, c_amt, c_total
  - 偏斜：g_amt, g_dmg
  - 抵抗：r_amt, r_dmg
  - 格挡：b_amt, b_dmg
  - 吸收：a_amt, a_dmg
  - 目标列表：targets
  - 额外信息：extra
- 使用缓存的时间戳系统（DashMeter._tempo）
- 添加定时器每秒更新时间戳，为实时DPS计算打基础
- 实现GetOrCreateSpell()、GetSpell()、GetAllSpells()方法

### 专精识别优化

新增
- 专精动态识别：在伤害、治疗、吸收模块中添加专精识别逻辑，通过玩家使用的技能自动识别专精
- 德鲁伊野性天赋动态切换：支持猫德和熊德根据使用的技能动态显示对应图标

修复
- 修复德鲁伊守护天赋无法识别的问题：添加 DruidGuardian = 104 天赋树映射
- 修复技能详情中 n_total、c_total、g_dmg 为 nil 时的算术错误
- 修复某些技能（如风剪）只有未命中而没有实际伤害时的报错问题

改进
- 优化德鲁伊专精识别：允许猫德（103）和熊德（104）根据使用的技能动态更新，解决猫德显示熊图标的问题
- 优化专精缓存机制：德鲁伊野性天赋不直接使用缓存，而是通过技能动态识别

### 技术细节

宠物系统优化：
- Core.lua - SPELL_SUMMON事件处理优化，添加火元素图腾特殊处理和宠物主人链处理
- Functions.lua - GetActor函数重写，在容器层面处理宠物识别
- Damage.lua - 移除FixPets调用，简化伤害统计逻辑
- Pets.lua - FixPets函数简化，保留兼容性接口

伤害统计优化：
- Core/Container/SpellContainer.lua - 创建技能容器类系统
- Modules/Damage.lua - 使用新的技能容器类和字段命名规范

专精识别优化：
- Modules/Damage.lua - 添加专精识别逻辑
- Modules/Healing.lua - 添加专精识别逻辑
- Modules/Absorbs.lua - 添加专精识别逻辑
- Core/Container/Specs.lua - SetSpec函数支持德鲁伊野性天赋动态更新
- Libs/LibCompat-1.0/LibCompat-1.0.lua - GetUnitSpec函数优化

空值保护：
- 在所有使用 spell.n_total、spell.c_total、spell.g_dmg 的地方添加 `or 0` 保护

1.1.4 (2026-03-10)

修复
- 修复标题栏点击范围过大导致拖动窗口时误触发切换功能的问题
- 修复计量条中名字上下未居中、贴底的问题，实现文字垂直居中
- 修复升级后窗口移动到附近不磁吸的问题，确保已勾选"粘附窗口"选项时功能正常
- 修复宠物伤害统计的处理逻辑，确保宠物的伤害能够正确统计和显示
- 修复伤害统计中的数据计算和显示问题，确保数据准确性和一致性
- 修复分段功能的逻辑和用户体验，确保分段功能能够正常工作

改进
- 优化标题栏点击功能：将表头点击触发模式菜单的功能从左键改为右键，左键仅用于拖动窗口
- 优化窗口拖动功能：确保左键点击表头仅用于拖动窗口，不触发其他功能
- 优化分段功能：改进分段的创建、切换和统计逻辑
- 优化设置面板：增加分段管理相关的选项，包括总是保留BOSS战、野外战斗视为小怪、合并垃圾分段、自动删除垃圾分段、垃圾分段抑制、单练时隐藏

技术细节
- 清理代码：移除了之前添加的左侧箭头图标按钮相关的所有代码
- 修改事件处理：调整表头点击事件的处理逻辑，右键点击触发模式菜单，左键点击用于拖动窗口
- 优化布局：调整计量条文字的垂直对齐方式，实现文字居中显示
- 修复窗口磁吸：确保窗口移动到附近时会正确磁吸
- 优化宠物统计：改进宠物伤害统计的处理逻辑
- 修复伤害计算：确保伤害统计数据的准确性
- 改进分段管理：优化分段功能的实现和用户体验

1.1.3 (2026-03-10)

新增
- Q版天赋图标：新增Q版风格的天赋图标，更加可爱生动
- 图标风格切换：在窗口设置中添加天赋图标风格选项，支持切换"正常图标"和"Q版图标"
- 默认使用Q版：新用户默认使用Q版天赋图标，老用户可在设置中切换风格图标，与普通风格图标区分开，方便用户选择

改进
- 优化图标系统：重构图标加载逻辑，支持多种图标风格扩展

1.1.2 (2026-03-10)

新增
- 模式选择下拉菜单：点击表头左侧文本区域可打开模式选择菜单，支持快速切换统计模式
- 点击空白处关闭菜单：点击菜单外任意位置自动关闭模式选择菜单，提升用户体验
- 菜单状态管理：第二次点击表头可关闭已打开的菜单，实现开关切换
- Shift+左键快速删除：按住 Shift 键点击左键可快速删除历史记录，并在聊天框显示删除提示
- 怀旧服所有角色宠物：添加怀旧服所有职业的宠物数据，确保宠物伤害正确统计到主人
- 专精系统：创建专精容器 Specs.lua，实现基于技能识别玩家专精的功能
- 专精识别映射表：添加所有职业的技能到专精映射表（SpecSpellList），包含12个职业共373个技能

改进
- 优化表头点击区域：仅左侧文本区域响应点击打开模式菜单，避免与按钮区域冲突
- 隐藏表头下拉箭头：隐藏表头下拉箭头图标，界面更简洁
- 隐藏拉伸按钮图标：隐藏右上角拉伸按钮的箭头图标和背景框体，保持界面整洁的同时保留拉伸功能
- 优化 WindowStretchStart：修改 WindowStretchStart 函数，避免关闭自定义大菜单
- 宠物功能增强：添加土元素图腾处理逻辑、DK亡者大军缓存、扩展宠物类型识别
- 宠物召唤宠物处理：添加宠物召唤宠物的逻辑，确保多级宠物正确归属
- 饰品宠物名称框架：添加饰品宠物名称处理框架

修复
- 修复菜单无法关闭：添加 _mode_menu_open 状态变量跟踪菜单状态，解决菜单无法关闭的问题
- 修复 CloseMenus 意外关闭大菜单：修改 CloseMenus 调用逻辑，避免意外关闭自定义大菜单
- 修复 OnHide 事件意外触发：优化 OnHide 事件处理，防止菜单被意外关闭
- 修复萨满图腾伤害不统计：修复萨满某些图腾（如火焰图腾、大地图腾等）伤害不被统计的问题
- 修复 ModeMenu 返回逻辑：修复 ModeMenu 函数未正确返回导致菜单被隐藏的问题
- 修复初始化顺序问题：将 SetupStorage 移到 OnInitialize，确保正确初始化
- 修复 sets 为 nil 的问题：添加 nil 检查，防止访问空表
- 修复重复的 UNIT_PET 注册：删除重复的事件注册，避免重复处理
- 修复 profile 为 nil 的问题：添加 nil 检查，确保配置正确加载
- 修复 AddMode 中 sets 为 nil 的问题：添加 nil 检查，防止添加模式时出错
- 修复 NPC 忽略列表：添加 Brann Bronzebeard 到忽略列表

技术细节
- 专精系统架构：
  - 创建 Core/Container/Specs.lua 专精容器
  - 实现 SpecSpellList 技能到专精的映射表（包含所有职业）
  - 实现 cached_specs 专精缓存
  - 实现 textureToSpec 天赋树纹理到专精的映射（怀旧服）
  - 实现 classToSpecs 职业到专精列表的映射
- 专精识别流程：战斗日志事件 → 玩家使用技能 → 查询 SpecSpellList → 缓存专精ID
- 菜单系统：
  - 在 Menus.lua 中实现 large_mode_menu 函数，创建自定义大菜单
  - 在 Menus.lua 中添加点击监听框架 clickFrame，检测点击空白处
  - 修改 Bar.lua 中的 anchorOnClick 函数，添加点击位置检测逻辑
  - 修改 SpecializedLibBars-1.0.lua，隐藏拉伸按钮图标和背景
  - 添加 GetCursorPosition 引用用于点击位置计算
  - 优化菜单生命周期管理，添加 OnHide 事件处理
- 宠物系统：完善宠物数据库，添加怀旧服所有职业的宠物 NPC ID 和名称映射
- 文件修改：
  - Core/Load.xml - 添加了 Specs.lua 加载
  - Core/Core.lua - 添加了专精识别逻辑

1.1.1 (2026-03-09)

修复
- 修复 GetPetOwnerFromTooltip 函数调用 nil 的错误，解决打世界BOSS时的报错问题
- 修复 tooltip 控件命名错误，确保正确获取宠物主人信息
- 修复 GetUnitPetFrom_UNITPET 函数的空值处理，添加空字符串兜底
- 优化 DoMaintenance 函数，缓存 GetTime() 结果避免重复调用

改进
- 优化窗口命名逻辑，所有窗口按顺序命名为"窗口1"、"窗口2"等
- 改进创建新窗口时的默认名称填充，自动计算窗口数量并填入默认名称
- 优化锁定/解锁按钮的提示文本，显示"解锁窗口1"、"解锁窗口2"等带窗口名称的提示
- 从第三个窗口开始默认显示伤害统计（自定义内容）

技术细节
- 调整 GetPetOwnerFromTooltip 函数的作用域，确保在调用前已定义
- 修复 WotLK 分支下 tooltip 控件命名错误，使用动态拼接的控件名称
- 为 GetPetOwnerFromTooltip 和相关函数添加返回值兜底
- 修改窗口创建逻辑，实现自动按顺序命名窗口
- 修改锁定/解锁按钮的提示文本显示逻辑

1.1.0 (2026-03-09)

修复
- 修复天赋图标显示错误的问题，根据实际图标文件重新计算所有天赋图标坐标
- 修复切换天赋后图标不更新的问题，添加 PLAYER_TALENT_UPDATE 事件监听，自动清除天赋缓存
- 修复德鲁伊天赋ID列表错误
- 修复单练的逻辑问题，设置里勾选单练隐藏可以正确显示了。
- 修复猎人特殊宠物可能报错的问题，比如变身凤凰宝宝

改进
- 重新校准天赋图标坐标，确保所有职业天赋图标正确显示
- 优化战斗状态检测，同时检查 DashMeter.inCombat 和 IsGroupInCombat()

技术细节
- 修改 Init.lua 中的 speccoords 表，根据实际图标布局重新计算坐标
- 修改 LibCompat-1.0.lua，添加 PLAYER_TALENT_UPDATE 事件监听器
- 修改 Core.lua 中的 Window:Toggle() 函数，使用 DashMeter.inCombat 替代部分 IsGroupInCombat() 调用
- 修改 LibCompat-1.0.lua 中的 specsTable，移除德鲁伊的 104(Guardian) 天赋ID

1.0.9 (2026-03-08)

修复
- 修复战斗结束后数据不显示的问题，确保战斗结束后窗口继续显示最近战斗记录
- 修复 UpdateDisplay 函数在战斗结束后不更新显示的问题（移除了 self.current 必须为真的限制）
- 修复历史记录不增加的问题，优化 combat_end() 中的数据保存逻辑
- 修复窗口切换逻辑，确保"总计"窗口在战斗结束后保持显示总计数据
- 修复"总计"分段不显示右键提示菜单的问题，现在可以在总计行上移动鼠标到角色名称上查看详情
改进
- 重构战斗数据显示逻辑，采用 Details 风格：
  - 战斗中实时显示当前战斗数据
  - 战斗结束后自动显示最近战斗记录（索引1）
  - 新战斗开始时自动切换到当前战斗
- 优化模式菜单排序，将"伤害量"排在"造成伤害"分类的第一位
- 统一中文术语，将"非BOSS"改为"非首领"，提升本地化质量
- 优化 SetModes() 函数，战斗结束后根据窗口设置决定是否切换显示
- 增强删除功能，新增"删除非首领记录"选项，可一键删除所有非BOSS战斗记录
- 更新角色天赋图标，使用更清晰的职业天赋图标

技术细节
- 修改 combat_end() 函数，正确保存战斗数据到历史记录，清空 DashMeter.current
- 修改 SetModes() 函数，战斗结束后保持窗口显示状态，不强制切换
- 修改 UpdateDisplay() 函数，移除 self.current 限制，确保战斗结束后正常更新
- 修改 combat_start() 函数，新战斗开始时根据窗口设置决定是否切换到当前战斗
- 优化 combat_start() 中的窗口切换逻辑，总计窗口保持不变，其他窗口切换到当前战斗

1.0.8 (2026-03-08)

修复
- 修复历史分段鼠标提示无法显示的问题
- 修复 SmartStop 函数中的语法错误（逻辑运算符错误）
- 修复 Damage.lua 中的 goto 语法错误，改用 Lua 5.1 兼容的循环控制方式
- 修复 DashMeter 全局变量初始化顺序问题，确保在 Init.lua 中不直接访问 DashMeter 全局变量
- 修复 Tables.lua 中 ns.spellnames 为 nil 的问题

重构
- 完全重构宠物处理系统，采用 Details 风格的宠物容器架构
- 将 Modules/pets.lua 的功能合并到 Core/Container/Pets.lua
- 删除 Modules/pets.lua 文件，简化代码结构
- 优化宠物容器系统的 API 设计，提供更清晰的接口

技术细节
- 新增宠物容器类，支持宠物数据的缓存、扫描和维护
- 实现 UNIT_PET 事件处理，自动跟踪宠物变化
- 添加宠物数据过期机制，定期清理旧数据
- 优化宠物主人查找算法，支持多种查找方式（缓存、扫描、tooltip）

1.0.7 (2026-03-07)

修复
- 修复"总计"分段无法锁定的问题，新战斗开始时不再强制切换到"当前战斗"
- 修复autocurrent选项会覆盖用户选择的"总计"或历史分段的问题
- 先前的报错问题

新增
- 参考Recount和Details逻辑，实现完善的宠物合并系统
  - 使用NPC ID识别特殊宠物（图腾、亡者大军、镜像、火元素、豪猪、野猪等）
  - 使用名字匹配机制作为辅助识别手段
  - 通过SPELL_SUMMON事件和宠物扫描双重机制识别宠物主人
  - 确保所有特殊宠物的伤害数据正确归纳到主人身上

改进
- 统一中文本地化术语，将所有"点击"改为"左键"，使操作提示更加清晰明确
- 改进宠物识别逻辑，结合Details的宠物容器系统和Recount的守护者追踪系统优点

1.0.6 (2026-03-06)

修复
- 修复"只BOSS伤害"模式的右键提示功能
- 修复"只BOSS伤害"模式的单点进入技能详情功能
- 修复"只BOSS伤害"模式的双击显示技能列表功能
- 修复"总计"分段的技能显示问题，确保双击时能正确获取技能数据
- 修复total_noclick函数的检查逻辑，确保在"总计"分段时能正确处理单击事件

改进
- 优化鼠标提示信息，移除重复的提示文本
- 改进双击处理逻辑，当演员对象缺少技能属性时，从其他分段中查找并复制技能数据

1.0.5 (2026-03-06)

修复
- 修复历史记录显示问题，确保保留的boss数据不会被删除
- 修复历史记录滚动功能，现在可以通过鼠标滚轮查看更多历史记录

改进
- 优化报告频道选项，重新排列频道顺序：自己、公会、小队、团队、副本、说、悄悄话、密语对象、复制和粘贴
- 调整表头按钮顺序为：分段、模式、重置、报告、设置

技术细节
- 修改clean_sets函数，确保保留的boss数据（set.keep为true）不会被删除
- 增加barmax默认值从10到15，显示更多可见记录
- 优化报告频道列表，只显示必要的频道选项

1.0.4 (2026-03-05)

改进
- 改进宠物识别逻辑，参考Details插件实现定期宠物扫描功能
- 添加PetScan函数，定期扫描团队/队伍中的宠物，建立宠物与主人的关联
- 优化FindOwnerBySpecialPet函数，通过宠物名称关键词识别宠物类型并匹配职业
- 改进FixPetsHandler函数，增加多种查找宠物主人的方式，提高宠物合并的成功率

修复
- 修复宠物与主人伤害合并功能，确保特殊宠物（如镜像、豪猪、食尸鬼等）能正确合并到主人
- 修复初始化插件后不统计数据的问题
- 修复详情页面显示错误的治疗量（如牧师盾治疗量显示为0）

1.0.3 (2026-03-05)

新增
- 重构技能详细窗口布局
- 添加技能图标、颜色方块、技能名称、伤害数值、占比、DPS、暴击次数、命中次数等完整信息展示
- 实现详细窗口滚动功能，支持大量技能数据的完整查看
- 右键菜单中添加"重置数据"选项
修复
- 修复多处翻译错误，确保界面显示正确的中文
- 修复详细窗口初始化状态问题，添加窗口状态重置机制
改进
- 优化详细窗口内容更新机制
- 改进主窗口与详细窗口的交互体验

---

1.0.2 (2026-03-04)

修复
- 修复宠物与主人伤害合并功能无效的问题
- 解决勾选"合并宠物"后宠物伤害仍单独显示的问题（如"黑锋石像鬼"）
- 修复详细窗口显示空白的问题，添加空数据处理逻辑
- 修复双击宠物后再双击其他玩家时详细窗口不显示技能的问题

改进
- 参考Details插件实现定期宠物扫描功能
- 在UpdateRoster中添加PetScan函数，主动扫描团队/队伍中的宠物
- 改进宠物识别逻辑，在SourceIsPet和DestIsPet函数中增加guidToOwner缓存检查
- 优化FixPetsHandler函数，增加多种查找宠物主人的方式：
  - 优先检查guidToOwner缓存
  - 通过名字匹配从当前战斗演员中查找主人
  - 保留原有的通过GetPetOwnerUnit和GetPetOwnerFromTooltip的查找方式
- 改进详细窗口逻辑，重置窗口状态避免状态污染

技术细节
- 宠物GUID未正确添加到guidToOwner缓存的问题已解决
- 即使flags无BITMASK_PETS标志也能识别宠物
- 定期扫描机制确保宠物主人映射及时更新

1.0.1 (2026-03-03)

新增
- 添加"只BOSS伤害"统计模式，在伤害模块中显示仅对BOSS目标的伤害
- 添加"首领战全程"统计模式（后续已移除）

修复
- 修复BOSS伤害选项不显示的问题
- 修复翻译错误
- 修复合并宠物功能，现在宠物伤害会正确合并到主人的统计中
- 优化宠物识别逻辑，解决宠物被错误识别为玩家的问题
- 修复IsPlayer函数的宠物检测逻辑

改进
- 优化中文翻译，"Damage to Bosses"映射为"首领伤害"
- 改进BOSS伤害统计的DPS显示
- 默认开启自动切换到当前战斗分段功能

1.0.0 (2026-03-03)

- 初始版本发布
- 融合 DashMeter、Details!、Recount 三款插件的优点
- 实现精准计算引擎
- 实现布局切换功能
- 实现模块化加载系统
- 新增技能详细窗口功能
- 新增双饼图可视化展示技能分布和伤害类型构成
- 新增未命中统计功能（未命中、躲闪、招架、格挡、抵抗、免疫等）
- 所有伤害类型名称中文化显示
- 新增双击玩家条打开技能详细窗口功能
- 新增右键返回上一层功能
- 新增ESC键关闭详细窗口功能
- 优化窗口外观，使用灰色透明边框
- 添加操作提示信息