From 77147242f472dfa6f155f843a5c8b1fbf54fac4a Mon Sep 17 00:00:00 2001 From: Meow <30401521+me0wg4ming@users.noreply.github.com> Date: Sat, 10 Jan 2026 03:42:42 +0100 Subject: [PATCH] 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. --- README.md | 52 ++++++++++++++++++++++++++++++++++++++---- libs/libdebuff.lua | 4 ++++ modules/energytick.lua | 22 +++++++++++++----- modules/turtle-wow.lua | 13 +++++++++-- pfUI-tbc.toc | 2 +- pfUI.toc | 2 +- 6 files changed, 80 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 7ffb4004..e1027a9b 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/libs/libdebuff.lua b/libs/libdebuff.lua index 27924622..2f1da32f 100644 --- a/libs/libdebuff.lua +++ b/libs/libdebuff.lua @@ -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) diff --git a/modules/energytick.lua b/modules/energytick.lua index 8e966afc..d3c8e24d 100644 --- a/modules/energytick.lua +++ b/modules/energytick.lua @@ -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) \ No newline at end of file diff --git a/modules/turtle-wow.lua b/modules/turtle-wow.lua index cb63adae..3687c71e 100644 --- a/modules/turtle-wow.lua +++ b/modules/turtle-wow.lua @@ -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 diff --git a/pfUI-tbc.toc b/pfUI-tbc.toc index 8c4eafba..ce8b83d8 100644 --- a/pfUI-tbc.toc +++ b/pfUI-tbc.toc @@ -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 diff --git a/pfUI.toc b/pfUI.toc index a208d0f3..1f8a5d67 100644 --- a/pfUI.toc +++ b/pfUI.toc @@ -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