mirror of
https://github.com/brues-code/pfUI.git
synced 2026-09-22 15:46:56 +00:00
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:
@@ -1,6 +1,6 @@
|
||||
# pfUI - Turtle WoW Edition
|
||||
|
||||
[](https://github.com/me0wg4ming/pfUI)
|
||||
[](https://github.com/me0wg4ming/pfUI)
|
||||
[](https://turtlecraft.gg/)
|
||||
[](https://github.com/balakethelock/SuperWoW)
|
||||
[](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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user