mirror of
https://github.com/QbiXibQ/FBHealBox.git
synced 2026-10-10 16:09:59 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6c4f1d5b8f | ||
|
|
529a7dcc14 | ||
|
|
254071d1f5 | ||
|
|
23d3e45d0f |
@@ -1,5 +1,27 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 1.4.4.2 (2026-09-06)
|
||||||
|
|
||||||
|
Buff duration display update & bugfix. Replaces the 4-quadrant clock division for buff icons with a 32-step vertical duration wipe, offering much finer timer resolution, and fixes an <eof> syntax error when loading.
|
||||||
|
|
||||||
|
### English
|
||||||
|
|
||||||
|
**New & Changed**
|
||||||
|
|
||||||
|
- **32-step buff icon duration display.** The buff icons left of the health bar previously divided the remaining duration into 4 coarse quadrants (quarters). They now transition in 32 fine vertical steps (`FBBUFFICON_STEPS = 32`) from top to bottom. As a buff expires, the top portion is progressively desaturated and darkened in 32 increments. For a 30-minute buff like *Power Word: Fortitude* or *Divine Spirit*, the visual display now updates approximately every 56 seconds rather than once every 7.5 minutes.
|
||||||
|
- **Optimised texture usage.** Replaced the 4 quadrant textures and 4 wash textures per buff icon with a single dynamically cropped desaturated overlay (`ic.qTex`) and dark wash (`ic.wTex`), reducing texture objects by 75 % per buff icon while increasing visual granularity eightfold.
|
||||||
|
- **Shortened addon notes.** Better display in WoW-Launcher addon managers.
|
||||||
|
|
||||||
|
|
||||||
|
### Deutsch
|
||||||
|
|
||||||
|
**Neu & Geaendert**
|
||||||
|
|
||||||
|
- **32-Stufen-Ablaufanzeige fuer Buff-Icons.** Die Buff-Symbole links neben dem Lebensbalken teilten die Restlaufzeit bisher in 4 grobe Bloecke (Quadranten) auf. Dies wurde auf 32 feine Ablaufstufen (`FBBUFFICON_STEPS = 32`) von oben nach unten umgestellt. Bei ablaufender Restzeit wird das Icon in 32 Teilschritten von oben nach unten schrittweise entsaettigt (schwarz-weiss) und abgedunkelt. Bei einem 30-Minuten-Buff (z. B. *Machtwort: Seelenstaerke*) aktualisiert sich die visuelle Anzeige nun ca. alle 56 Sekunden statt nur alle 7,5 Minuten.
|
||||||
|
- **Ressourcenschonende Textur-Struktur.** Statt 4 separaten Quadranten-Texturen und 4 Abdunklungs-Overlays nutzt jedes Icon nun nur noch je eine dynamisch skalierte und beschnittene Overlay-Textur (`ic.qTex` und `ic.wTex`). Das spart 75 % der Texturobjekte pro Icon ein und erhoeht gleichzeitig die Anzeigegenauigkeit um das Achtfache.
|
||||||
|
- **Addon Beschreibung eingekuerzt** Fuer bessere Übersicht in WoW-Launchern.
|
||||||
|
|
||||||
|
|
||||||
## 1.4.4.1 (2026-09-06)
|
## 1.4.4.1 (2026-09-06)
|
||||||
|
|
||||||
Buff tracking & class spells update. Fixes buff clock icons (Divine Spirit, etc.) not appearing next to the health bar, adds group buff alternate matching, and completes the spell selection lists across all healer classes with buffs, utility and rez spells.
|
Buff tracking & class spells update. Fixes buff clock icons (Divine Spirit, etc.) not appearing next to the health bar, adds group buff alternate matching, and completes the spell selection lists across all healer classes with buffs, utility and rez spells.
|
||||||
|
|||||||
+49
-41
@@ -28,6 +28,7 @@
|
|||||||
-- je Frame nur einmal, Event-Salven zusammengefasst, Ticker per Event
|
-- je Frame nur einmal, Event-Salven zusammengefasst, Ticker per Event
|
||||||
-- gesteuert, Combatlog-Parser nach Eventklasse. Details im CHANGELOG.
|
-- gesteuert, Combatlog-Parser nach Eventklasse. Details im CHANGELOG.
|
||||||
-- * v1.4.4.1: Spells hinzugefügt, Bugfixes
|
-- * v1.4.4.1: Spells hinzugefügt, Bugfixes
|
||||||
|
-- * v1.4.4.2: TOC Addonbeschreibung präzisiert, Umstellung Buff-Restlaufzeit von 4/4 Blocks auf 32 Topdown Anzeige (fadeout Effekt)
|
||||||
--
|
--
|
||||||
-- Ehre wem Ehre gebuehrt: Aufbau, Namensplaketten und Grundidee stammen
|
-- Ehre wem Ehre gebuehrt: Aufbau, Namensplaketten und Grundidee stammen
|
||||||
-- aus dem Original.
|
-- aus dem Original.
|
||||||
@@ -78,7 +79,7 @@ HealBox = {
|
|||||||
-- feuert ADDON_LOADED fuer uns.
|
-- feuert ADDON_LOADED fuer uns.
|
||||||
FBADDON_NAME = "Heal Box Vanilla";
|
FBADDON_NAME = "Heal Box Vanilla";
|
||||||
FBADDON_FOLDER = "FBHealBox";
|
FBADDON_FOLDER = "FBHealBox";
|
||||||
HealBoxVersion = "|cFFFFFF00v1.4.4.1|r";
|
HealBoxVersion = "|cFFFFFF00v1.4.4.2|r";
|
||||||
|
|
||||||
-- ==========================================================================
|
-- ==========================================================================
|
||||||
-- [ Lokalisierung / Localization ]
|
-- [ Lokalisierung / Localization ]
|
||||||
@@ -5426,8 +5427,8 @@ SlashCmdList["FBHEALPREDICT"] = function(msg)
|
|||||||
for k, ic in ipairs(FBHealBox1.buffIcons) do
|
for k, ic in ipairs(FBHealBox1.buffIcons) do
|
||||||
DEFAULT_CHAT_FRAME:AddMessage("|cFF00FFFF[FBP]|r icon "..k..": shown="..tostring(ic:IsShown() and true or false)
|
DEFAULT_CHAT_FRAME:AddMessage("|cFF00FFFF[FBP]|r icon "..k..": shown="..tostring(ic:IsShown() and true or false)
|
||||||
.." name="..tostring(ic.buffName).." left="..tostring(ic.buffLeft and math.floor(ic.buffLeft))
|
.." name="..tostring(ic.buffName).." left="..tostring(ic.buffLeft and math.floor(ic.buffLeft))
|
||||||
.." grey="..tostring(ic.greyCount).." q1shown="..tostring(ic.q[1]:IsShown() and true or false)
|
.." grey="..tostring(ic.greyCount).." q1shown="..tostring(ic.qTex and ic.qTex:IsShown() and true or false)
|
||||||
.." desat="..tostring(ic.q[1].fbDesat));
|
.." desat="..tostring(ic.qTex and ic.qTex.fbDesat));
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local i = 1;
|
local i = 1;
|
||||||
@@ -5597,13 +5598,7 @@ end
|
|||||||
-- (fremder Cast): Icon ohne Uhr. Der Name macht Platz.
|
-- (fremder Cast): Icon ohne Uhr. Der Name macht Platz.
|
||||||
-- ==========================================================================
|
-- ==========================================================================
|
||||||
|
|
||||||
-- Quadranten der Uhr im Uhrzeigersinn ab 12 Uhr: Ecke, Texturausschnitt
|
FBBUFFICON_STEPS = 32;
|
||||||
FBBUFFICON_QUADS = {
|
|
||||||
{ corner = "TOPRIGHT", u1 = 0.50, u2 = 0.93, v1 = 0.07, v2 = 0.50 },
|
|
||||||
{ corner = "BOTTOMRIGHT", u1 = 0.50, u2 = 0.93, v1 = 0.50, v2 = 0.93 },
|
|
||||||
{ corner = "BOTTOMLEFT", u1 = 0.07, u2 = 0.50, v1 = 0.50, v2 = 0.93 },
|
|
||||||
{ corner = "TOPLEFT", u1 = 0.07, u2 = 0.50, v1 = 0.07, v2 = 0.50 },
|
|
||||||
};
|
|
||||||
|
|
||||||
-- Icon Nr. k anlegen, aussen links neben der Plakette, in Zweierstapeln:
|
-- Icon Nr. k anlegen, aussen links neben der Plakette, in Zweierstapeln:
|
||||||
-- Icon 1 oben an der Kante, Icon 2 darunter, Icon 3 oben in der naechsten
|
-- Icon 1 oben an der Kante, Icon 2 darunter, Icon 3 oben in der naechsten
|
||||||
@@ -5631,28 +5626,23 @@ function FBHealBox_GetBuffIcon(frame, k, size, rows)
|
|||||||
-- Reihenfolge, Textur-Layer innerhalb eines Frames nicht in jedem Fall.
|
-- Reihenfolge, Textur-Layer innerhalb eines Frames nicht in jedem Fall.
|
||||||
ic.grey = CreateFrame("Frame", nil, ic);
|
ic.grey = CreateFrame("Frame", nil, ic);
|
||||||
ic.grey:SetAllPoints(ic);
|
ic.grey:SetAllPoints(ic);
|
||||||
if (ic.grey.SetFrameLevel and ic.GetFrameLevel) then ic.grey:SetFrameLevel((ic:GetFrameLevel() or 0) + 1); end
|
if (ic.grey.SetFrameLevel and frame.GetFrameLevel) then ic.grey:SetFrameLevel((ic:GetFrameLevel() or 0) + 1); end
|
||||||
ic.q = {};
|
|
||||||
ic.w = {};
|
-- Schwarz-weißes Icon-Overlay (wächst von oben nach unten)
|
||||||
local half = size / 2;
|
ic.qTex = ic.grey:CreateTexture(nil, "ARTWORK");
|
||||||
for i, qd in ipairs(FBBUFFICON_QUADS) do
|
ic.qTex:SetPoint("TOPLEFT", ic, "TOPLEFT", 0, 0);
|
||||||
-- schwarz-weisser Ausschnitt des Icons ...
|
ic.qTex:SetPoint("TOPRIGHT", ic, "TOPRIGHT", 0, 0);
|
||||||
local t = ic.grey:CreateTexture(nil, "ARTWORK");
|
ic.qTex:SetHeight(0);
|
||||||
t:SetWidth(half);
|
ic.qTex:Hide();
|
||||||
t:SetHeight(half);
|
|
||||||
t:SetPoint(qd.corner, ic, qd.corner, 0, 0);
|
-- Dunkle Schattierung über dem abgelaufenen Bereich
|
||||||
t:SetTexCoord(qd.u1, qd.u2, qd.v1, qd.v2);
|
ic.wTex = ic.grey:CreateTexture(nil, "OVERLAY");
|
||||||
t:Hide();
|
ic.wTex:SetPoint("TOPLEFT", ic, "TOPLEFT", 0, 0);
|
||||||
ic.q[i] = t;
|
ic.wTex:SetPoint("TOPRIGHT", ic, "TOPRIGHT", 0, 0);
|
||||||
-- ... plus dunkle Waesche darueber, damit der Unterschied auf jedem Client sichtbar ist
|
ic.wTex:SetTexture(FBBUFFICON_WASH[1], FBBUFFICON_WASH[2], FBBUFFICON_WASH[3], FBBUFFICON_WASH[4]);
|
||||||
local wsh = ic.grey:CreateTexture(nil, "OVERLAY");
|
ic.wTex:SetHeight(0);
|
||||||
wsh:SetWidth(half);
|
ic.wTex:Hide();
|
||||||
wsh:SetHeight(half);
|
|
||||||
wsh:SetPoint(qd.corner, ic, qd.corner, 0, 0);
|
|
||||||
wsh:SetTexture(FBBUFFICON_WASH[1], FBBUFFICON_WASH[2], FBBUFFICON_WASH[3], FBBUFFICON_WASH[4]);
|
|
||||||
wsh:Hide();
|
|
||||||
ic.w[i] = wsh;
|
|
||||||
end
|
|
||||||
-- Tooltip: Buffname und Restzeit (auch zur Diagnose)
|
-- Tooltip: Buffname und Restzeit (auch zur Diagnose)
|
||||||
ic:EnableMouse(true);
|
ic:EnableMouse(true);
|
||||||
ic:SetScript("OnEnter", function()
|
ic:SetScript("OnEnter", function()
|
||||||
@@ -5686,19 +5676,37 @@ function FBHealBox_GreyTexture(t)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Uhrstand setzen: remaining = Restanteil 0..1, nil = unbekannt (alles farbig)
|
|
||||||
function FBHealBox_SetBuffIconProgress(ic, remaining)
|
function FBHealBox_SetBuffIconProgress(ic, remaining)
|
||||||
local grey = 0;
|
local grey = 0;
|
||||||
if (remaining) then
|
if (remaining) then
|
||||||
if (remaining < 0) then remaining = 0; end
|
if (remaining < 0) then remaining = 0; end
|
||||||
if (remaining > 1) then remaining = 1; end
|
if (remaining > 1) then remaining = 1; end
|
||||||
grey = math.floor((1 - remaining) * 4 + 0.5); -- 0..4 Quadranten grau, ab 12 Uhr im Uhrzeigersinn
|
grey = math.floor((1 - remaining) * FBBUFFICON_STEPS + 0.5);
|
||||||
if (grey > 4) then grey = 4; end
|
if (grey > FBBUFFICON_STEPS) then grey = FBBUFFICON_STEPS; end
|
||||||
end
|
end
|
||||||
|
|
||||||
if (ic.greyCount == grey) then return; end
|
if (ic.greyCount == grey) then return; end
|
||||||
ic.greyCount = grey;
|
ic.greyCount = grey;
|
||||||
for i = 1, 4 do
|
|
||||||
if (i <= grey) then ic.q[i]:Show(); ic.w[i]:Show(); else ic.q[i]:Hide(); ic.w[i]:Hide(); end
|
if (grey == 0) then
|
||||||
|
if (ic.qTex) then ic.qTex:Hide(); end
|
||||||
|
if (ic.wTex) then ic.wTex:Hide(); end
|
||||||
|
else
|
||||||
|
local size = ic:GetHeight() or FBBUFFICON_SIZE;
|
||||||
|
local frac = grey / FBBUFFICON_STEPS;
|
||||||
|
local h = size * frac;
|
||||||
|
|
||||||
|
if (ic.qTex) then
|
||||||
|
ic.qTex:SetHeight(h);
|
||||||
|
-- Standard-Icon-Beschnitt (0.07 bis 0.93) anteilig anpassen:
|
||||||
|
local vBottom = 0.07 + (0.93 - 0.07) * frac;
|
||||||
|
ic.qTex:SetTexCoord(0.07, 0.93, 0.07, vBottom);
|
||||||
|
ic.qTex:Show();
|
||||||
|
end
|
||||||
|
if (ic.wTex) then
|
||||||
|
ic.wTex:SetHeight(h);
|
||||||
|
ic.wTex:Show();
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -5757,13 +5765,13 @@ function FBHealBox_UpdateBuffIcons(frame, unitName, g, size, rows, maxIcons)
|
|||||||
if (ic.lastTex ~= b.tex) then
|
if (ic.lastTex ~= b.tex) then
|
||||||
ic.lastTex = b.tex;
|
ic.lastTex = b.tex;
|
||||||
ic.tex:SetTexture(b.tex);
|
ic.tex:SetTexture(b.tex);
|
||||||
for i = 1, 4 do
|
if (ic.qTex) then
|
||||||
ic.q[i]:SetTexture(b.tex);
|
ic.qTex:SetTexture(b.tex);
|
||||||
FBHealBox_GreyTexture(ic.q[i]);
|
FBHealBox_GreyTexture(ic.qTex);
|
||||||
end
|
end
|
||||||
ic.greyCount = nil;
|
ic.greyCount = nil;
|
||||||
end
|
end
|
||||||
-- Uhr: Restanteil bekannt -> Quadranten; unbekannt -> alles farbig
|
|
||||||
local remaining = nil;
|
local remaining = nil;
|
||||||
ic.buffName = b.name;
|
ic.buffName = b.name;
|
||||||
ic.buffLeft = nil;
|
ic.buffLeft = nil;
|
||||||
|
|||||||
+4
-4
@@ -1,9 +1,9 @@
|
|||||||
## Interface: 11200
|
## Interface: 11200
|
||||||
## Title: Heal Box Vanilla |cFFFFFF00v1.4.4.1|r
|
## Title: Heal Box Vanilla |cFFFFFF00v1.4.4.2|r
|
||||||
## Notes: Party, pet and self heal display with quick-cast buttons for healers. Ported to client 1.12.1 (optional SuperWoW). Up to 10 buttons per row, mana bar inside the health bar, class colours, buff watch, range fading, adjustable spacing, test mode with ghost players, optional raid mode for 20 and 40 players, mana ticker with five-second rule, smart damage ranking for attack spells. Heal prediction for direct heals, HoT ticks and absorb shields, self-correcting from the combat log. HealComm sync with Puppeteer, pfUI and others. German/English. Original by Dourd, ported to Vanilla and extended 09/2026 by Mquadrat.
|
## Notes: Heal/raid frame addon like Healium, with quick-cast buttons, heal prediction, mana ticker and more.
|
||||||
## Notes-deDE: Party-, Begleiter- und Selbst-Heilanzeige mit Schnellzugriff-Buttons fuer Heiler. Portiert fuer Client 1.12.1 (optional SuperWoW). Bis zu 10 Buttons pro Reihe, Manabalken im Lebensbalken, Klassenfarben, Buff-Wache, Reichweiten-Fading, einstellbare Abstaende, Testmodus mit Geisterspielern, optionaler Raidmodus fuer 20 und 40 Spieler, Mana-Ticker mit Fuenf-Sekunden-Regel, Smart Damage fuer Angriffszauber. Heal-Prediction fuer Direktheilung, HoT-Ticks und Absorb-Schilde, selbstkorrigierend ueber den Combatlog. HealComm-Sync mit Puppeteer, pfUI und Co. Deutsch/Englisch. Original von Dourd, Vanilla-Portierung und Erweiterung 09/2026 von Mquadrat.
|
## Notes-deDE: Heal/Raidframe Addon aehnlich Healium, mit Schnellzugriff Buttons, Heal Prediction und Mana Ticker und mehr.
|
||||||
## Author: Dourd (Argent Dawn EU) | Vanilla-Port & Erweiterung 09/2026: Mquadrat
|
## Author: Dourd (Argent Dawn EU) | Vanilla-Port & Erweiterung 09/2026: Mquadrat
|
||||||
## Version: 1.4.4.1
|
## Version: 1.4.4.2
|
||||||
## SavedVariablesPerCharacter: HealBox
|
## SavedVariablesPerCharacter: HealBox
|
||||||
## OptionalDeps: SuperWoW
|
## OptionalDeps: SuperWoW
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user