v6.2.0 - HoT Timer System Overhaul & Nameplate Fixes

HoT Timer fixes (Regrowth duration, Instant-HoT detection, SuperWoW UNIT_CASTEVENT support, HealComm compatibility), Nameplate zoom/flicker fixes, Druid Rip/Rake combo point tracking, Ferocious Bite refresh fix, energytick talent filter.

See README.md for full changelog.
This commit is contained in:
Meow
2026-01-10 03:42:42 +01:00
parent 10a1def220
commit 77147242f4
6 changed files with 80 additions and 15 deletions
+47 -5
View File
@@ -1,6 +1,6 @@
# pfUI - Turtle WoW Edition
[![Version](https://img.shields.io/badge/version-6.1.1-blue.svg)](https://github.com/me0wg4ming/pfUI)
[![Version](https://img.shields.io/badge/version-6.2.0-blue.svg)](https://github.com/me0wg4ming/pfUI)
[![Turtle WoW](https://img.shields.io/badge/Turtle%20WoW-1.18.0-brightgreen.svg)](https://turtlecraft.gg/)
[![SuperWoW](https://img.shields.io/badge/SuperWoW-Enhanced-purple.svg)](https://github.com/balakethelock/SuperWoW)
[![Nampower](https://img.shields.io/badge/Nampower-Optional-yellow.svg)](https://gitea.com/avitasia/nampower)
@@ -14,6 +14,48 @@ This version includes significant performance improvements, DLL-enhanced feature
---
## What's New in Version 6.2.0 (January 10, 2026)
### 🔮 HoT Timer System (libpredict.lua)
-**Regrowth Duration Fix** - Corrected duration from 21 to 20 seconds (matching actual Turtle WoW spell duration)
-**GetTime() Synchronization** - All timing calls now use `pfUI.uf.now or GetTime()` for consistent timing across all UI elements
-**Instant-HoT Detection Fix** - Fixed Rejuvenation/Renew not being detected when cast quickly after Regrowth
- Problem: `spell_queue` was overwritten before processing
- Solution: Instant HoTs now processed immediately at cast hooks with `current_cast` tracking
-**SuperWoW UNIT_CASTEVENT Support** - Precise Instant-HoT detection using UNIT_CASTEVENT
- Only fires on successful casts (not attempts), eliminating false triggers from GCD/range failures
- Graceful fallback to hook-based detection for players without SuperWoW
-**HealComm Compatibility** - Full compatibility with standalone HealComm addon users
- 0.3s delay compensation for Regrowth messages
- Duplicate detection (0.5s window) prevents double timers
-**PARTY Channel Support** - HoT messages now sent to PARTY channel for 5-man dungeons
### 🎯 Nameplate Improvements (nameplates.lua)
-**Target Castbar Zoom Fix** - Fixed current target castbar not showing when zoom factor is enabled
- Multi-method target detection: alpha check, `istarget` flag, and `zoomed` state
- Proper GUID lookup for target castbar info (was incorrectly using string "target")
-**Flicker/Vibration Fix** - Eliminated nameplate flicker near zoom boundaries
- Alpha check changed from `== 1` to `>= 0.99` (floating-point fix)
- Zoom tolerance changed from `>= w` to `> w + 0.5` (prevents oscillation)
-**libdebuff Nil-Checks** - Added safety checks to prevent errors when libdebuff data is unavailable
### ⚡ Spell Queue (nampower.lua)
-**Error Handling** - Added pcall wrapper for `GetSpellNameAndRankForId` to prevent error spam when spell ID not found
### 🐱 Druid Improvements
-**Rip Duration** (libdebuff.lua) - Now dynamically calculated based on combo points (10/12/14/16/18 seconds for 1-5 CP)
-**Ferocious Bite Refresh** (turtle-wow.lua) - Now refreshes both Rip AND Rake (previously only Rip), preserving existing duration
### ⚡ Energy Tick (energytick.lua)
-**Talent/Buff Energy Filter** - Ignores energy gains from talents/buffs (e.g., Ancient Brutality and Tiger's Fury) to prevent tick timer reset from non-natural energy gains
---
## What's New in Version 6.1.1 (January 8, 2026)
### 🐛 Bugfixes
@@ -172,8 +214,8 @@ Turtle WoW includes TBC spells in the Vanilla client. This version includes all
---
**Version:** 6.1.1
**Release Date:** January 8, 2026
**Version:** 6.2.0
**Release Date:** January 10, 2026
**Compatibility:** Turtle WoW 1.18.0
**Optional DLLs:** SuperWoW, Nampower, UnitXP_SP3 (enhanced features when available)
@@ -333,7 +375,7 @@ Same as original pfUI - free to use and modify.
---
**Version:** 6.0.0
**Release Date:** January 5, 2026
**Version:** 6.2.0
**Release Date:** January 10, 2026
**Compatibility:** Turtle WoW 1.18.0
**Status:** Stable
+4
View File
@@ -38,6 +38,10 @@ function libdebuff:GetDuration(effect, rank)
elseif effect == L["dyndebuffs"]["Kidney Shot"] then
-- Kidney Shot: +1 sec per combo point
duration = duration + GetComboPoints()*1
elseif effect == "Rip" or effect == L["dyndebuffs"]["Rip"] then
-- Rip (Turtle WoW): 10s base + 2s per additional combo point
-- Base in table is 8, so: 8 + CP*2 = 10/12/14/16/18
duration = 8 + GetComboPoints()*2
elseif effect == L["dyndebuffs"]["Demoralizing Shout"] then
-- Booming Voice: 10% per talent
local _,_,_,_,count = GetTalentInfo(2,1)
+16 -6
View File
@@ -7,6 +7,9 @@ pfUI:RegisterModule("energytick", "vanilla:tbc", function ()
energytick:RegisterEvent("UNIT_DISPLAYPOWER")
energytick:RegisterEvent("UNIT_ENERGY")
energytick:RegisterEvent("UNIT_MANA")
energytick:RegisterEvent("CHAT_MSG_SPELL_SELF_BUFF")
energytick:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS")
energytick:SetScript("OnEvent", function()
if UnitPowerType("player") == 0 and C.unitframes.player.manatick == "1" then
this.mode = "MANA"
@@ -18,6 +21,14 @@ pfUI:RegisterModule("energytick", "vanilla:tbc", function ()
this:Hide()
end
-- Filter nur eigene Energy-Gewinne von Talents/Buffs
if event == "CHAT_MSG_SPELL_SELF_BUFF" or event == "CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS" then
if string.find(arg1, "You gain") and string.find(arg1, "Energy from") then
this.ignoreNextGain = true
end
return
end
if event == "PLAYER_ENTERING_WORLD" then
this.lastMana = UnitMana("player")
end
@@ -38,7 +49,10 @@ pfUI:RegisterModule("energytick", "vanilla:tbc", function ()
this.badtick = diff
end
elseif this.mode == "ENERGY" and diff > 0 then
this.target = 2
if not this.ignoreNextGain then
this.target = 2
end
this.ignoreNextGain = false
end
this.lastMana = this.currentMana
end
@@ -69,14 +83,10 @@ pfUI:RegisterModule("energytick", "vanilla:tbc", function ()
energytick.spark:SetWidth(C.unitframes.player.pheight + 5)
energytick.spark:SetBlendMode('ADD')
-- update spark size on player frame changes
local hookUpdateConfig = pfUI.uf.player.UpdateConfig
function pfUI.uf.player.UpdateConfig()
-- update spark sizes
energytick.spark:SetHeight(C.unitframes.player.pheight + 15)
energytick.spark:SetWidth(C.unitframes.player.pheight + 5)
-- run default unitframe update function
hookUpdateConfig(pfUI.uf.player)
end
end)
end)
+11 -2
View File
@@ -32,13 +32,22 @@ pfUI:RegisterModule("turtle-wow", "vanilla", function ()
end
end
-- refresh rip duration on ferocious bite
-- refresh rip and rake duration on ferocious bite (Turtle WoW feature)
local match = string.find(arg1, "Ferocious Bite")
if match and arg2 then
local name = UnitName("target")
local level = UnitLevel("target")
-- Refresh Rip mit existierender Duration
if libdebuff.objects[name] and libdebuff.objects[name][level] and libdebuff.objects[name][level]["Rip"] then
libdebuff:AddEffect(name, level, "Rip")
local existingDuration = libdebuff.objects[name][level]["Rip"].duration
libdebuff:AddEffect(name, level, "Rip", existingDuration)
end
-- Refresh Rake mit existierender Duration
if libdebuff.objects[name] and libdebuff.objects[name][level] and libdebuff.objects[name][level]["Rake"] then
local existingDuration = libdebuff.objects[name][level]["Rake"].duration
libdebuff:AddEffect(name, level, "Rake", existingDuration)
end
end
+1 -1
View File
@@ -3,7 +3,7 @@
## Author: Shagu
## Notes: A complete user interface replacement.
## Notes-ruRU: Полная замена пользовательского интерфейса.
## Version: 6.1.1
## Version: 6.2.0
## SavedVariables: pfUI_profiles, pfUI_addon_profiles, pfUI_cache
## SavedVariablesPerCharacter: pfUI_config, pfUI_init, pfUI_playerDB
+1 -1
View File
@@ -3,7 +3,7 @@
## Author: Shagu
## Notes: A complete user interface replacement.
## Notes-ruRU: Полная замена пользовательского интерфейса.
## Version: 6.1.1
## Version: 6.2.0
## SavedVariables: pfUI_profiles, pfUI_addon_profiles, pfUI_cache
## SavedVariablesPerCharacter: pfUI_config, pfUI_init, pfUI_playerDB