mirror of
https://github.com/QbiXibQ/FBHealBox.git
synced 2026-10-09 07:30:00 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f0704bbd5c | ||
|
|
4d961b4c4a | ||
|
|
46bfcd966b | ||
|
|
28564b230f | ||
|
|
2b57864a47 | ||
|
|
728a3ab5c6 |
+26
-3
@@ -1,6 +1,29 @@
|
||||
# Changelog
|
||||
|
||||
## 1.4.5 (2026-09-09)
|
||||
## 1.4.5.1 (2026-09-11)
|
||||
|
||||
Two display fixes: the mana ticker spark moves smoothly again, and the global cooldown no longer greys out every button.
|
||||
|
||||
### English
|
||||
|
||||
**Fixed**
|
||||
|
||||
- **The mana ticker spark moves smoothly again.** The spark was only redrawn once it had travelled half a pixel. That sounds frugal, but it crosses the bar in five seconds, roughly 20 pixels per second, so at 60 frames it advanced on every second frame at best and, depending on rounding, sometimes after one frame and sometimes after two. That uneven step was the stutter, and the fixed 0.03 second redraw step introduced in 1.4.5 made it worse. The threshold is now effectively gone (0.05 px) and the spark is drawn every frame again, which doubles its motion from 30 to 60 steps per second with an even gap.
|
||||
- **Drawing every frame still costs nothing.** Each spark remembers the width and height of its bar and re-reads them four times a second (`FBTICK_GEOM_STEP`) instead of asking the frame on every pass, and the gate check sits in front of it all: with a full mana bar there is no pass at all.
|
||||
- **The global cooldown no longer darkens every button.** After casting anything, the client reports every spell as unusable for the length of the global cooldown. Taken literally, that turned all icons dark grey for a second and a half after every cast, as if nothing were available at all. A running cooldown no longer than the global one (`FBCD_MIN_DURATION`) is no longer treated as a reason to darken a button. Blue for missing mana, red for out of range and grey for a spell that really cannot be cast, for instance in the wrong shapeshift form, all work as before. This affects the plates and the raid cells alike, both go through `FBHealBox_ButtonUsable`.
|
||||
- **The global cooldown does run as a sweep now.** Not showing it at all was the other half of the inconsistency: an instant like Renew left every button untouched while Power Word: Shield, which has a real cooldown in 1.12, showed one. The sweep is the calm way to show a short wait, so the display threshold moved into its own constant `FBCD_SHOW_MIN` (0, show everything) and is no longer tied to the darkening threshold `FBCD_MIN_DURATION`. Setting it to 2 restores the old quiet behaviour. The sweep starts in the very next frame, because the button pass is not throttled.
|
||||
|
||||
### Deutsch
|
||||
|
||||
**Behoben**
|
||||
|
||||
- **Der Funke im Manabalken laeuft wieder rund.** Neu gezeichnet wurde er erst, wenn er einen halben Pixel weitergewandert war. Das klingt sparsam, er braucht fuer den Balken aber fuenf Sekunden, also rund 20 Pixel je Sekunde: Bei 60 Bildern kam er damit bestenfalls in jedem zweiten Frame voran und je nach Rundung mal nach einem, mal nach zwei Frames. Genau dieser ungleiche Schritt war das Ruckeln, und der feste Zeichentakt von 0,03 Sekunden aus 1.4.5 hat es verstaerkt. Die Schwelle ist jetzt praktisch weg (0,05 px) und gezeichnet wird wieder in jedem Frame, das verdoppelt die Bewegung von 30 auf 60 gleichmaessige Schritte je Sekunde.
|
||||
- **Das Zeichnen je Frame kostet trotzdem nichts.** Jeder Funke merkt sich Breite und Hoehe seines Balkens und liest sie viermal je Sekunde nach (`FBTICK_GEOM_STEP`), statt sie bei jedem Durchlauf zu erfragen, und der Torwaechter sitzt weiterhin davor: Bei vollem Manabalken laeuft gar kein Durchlauf.
|
||||
- **Der globale Cooldown dunkelt nicht mehr alle Buttons ab.** Nach jedem gewirkten Zauber meldet der Client fuer die Dauer des globalen Cooldowns saemtliche Zauber als nicht nutzbar. Woertlich genommen wurden dadurch nach jedem Zauber anderthalb Sekunden lang alle Symbole dunkelgrau, als waere gar nichts mehr verfuegbar. Eine laufende Abklingzeit, die nicht laenger ist als der globale Cooldown (`FBCD_MIN_DURATION`), gilt jetzt nicht mehr als Grund zum Abdunkeln. Blau fuer fehlendes Mana, Rot fuer ausser Reichweite und Grau fuer einen Zauber, der wirklich nicht geht, etwa in der falschen Gestalt, arbeiten unveraendert weiter. Das gilt fuer Plaketten und Raidzellen gleichermassen, beide laufen ueber `FBHealBox_ButtonUsable`.
|
||||
- **Dafuer laeuft der globale Cooldown jetzt als Uhr mit.** Ihn gar nicht zu zeigen war die andere Haelfte der Ungereimtheit: Ein Instant wie Erneuerung liess alle Buttons unberuehrt, waehrend Machtwort: Schild, das in 1.12 eine echte Abklingzeit hat, eine Uhr zeigte. Die Uhr ist die ruhige Art, eine kurze Wartezeit anzuzeigen, deshalb sitzt die Anzeigeschwelle jetzt in einer eigenen Konstante `FBCD_SHOW_MIN` (0, also alles zeigen) und haengt nicht mehr an der Abdunkel-Schwelle `FBCD_MIN_DURATION`. Wer sie auf 2 setzt, hat das alte ruhige Verhalten zurueck. Die Uhr startet im naechsten Frame, weil der Button-Durchgang nicht gedrosselt ist.
|
||||
|
||||
|
||||
## 1.4.5 (2026-09-08)
|
||||
|
||||
Three additions around the frames and the prediction: Blizzard's party frames can go away, the resource bar is no longer reserved for mana, and gear healing is counted where an API can supply it. Plus a performance pass with no change in behaviour.
|
||||
|
||||
@@ -25,7 +48,7 @@ Three additions around the frames and the prediction: Blizzard's party frames ca
|
||||
- **Cheap pre-test before the combat log patterns.** Up to four anchored patterns ran on every message from twenty registered events. A plain substring test now filters first, with the words cut out of the client's own message templates so it works in every language. The tick test deliberately comes from the self template, because "You gain" and "%s gains" differ in the verb but share what follows.
|
||||
- **Equipment bonus read once instead of per candidate.** With heal chains a single Smart Healing click asked the API for the bonus up to fifteen times. The value is now remembered and dropped again on `UNIT_INVENTORY_CHANGED` or a spellbook rebuild.
|
||||
- **Cast time comes free with the spell scan.** `FBHealBox_SpellCastSeconds` used to build its own tooltip on a cache miss, which could mean a dozen tooltip builds in the middle of combat on the first click. `FBPredict_TooltipText` now picks the cast time off the right-hand side while the tooltip is standing anyway and fills the cache; the standalone scan remains only as a fallback. The cast time is deliberately kept out of the parsed text, because a number like 2.5 would confuse the shield duration and heal amount patterns.
|
||||
- **Smaller things.** The range spell of the first assigned button is remembered instead of being searched over ten slots on every range check (invalidated on rebinding and on a spellbook rebuild). The ticker redraws on a fixed 0.03 second step instead of every frame. Blizzard's party frames are re-evaluated in the same collection point as the name updates instead of on every event of a burst. Two `or {}` fallbacks in loops no longer allocate a throwaway table.
|
||||
- **Smaller things.** The range spell of the first assigned button is remembered instead of being searched over ten slots on every range check (invalidated on rebinding and on a spellbook rebuild). The ticker redraws on a fixed 0.03 second step instead of every frame (taken back in 1.4.5.1, it made the spark stutter). Blizzard's party frames are re-evaluated in the same collection point as the name updates instead of on every event of a burst. Two `or {}` fallbacks in loops no longer allocate a throwaway table.
|
||||
|
||||
### Deutsch
|
||||
|
||||
@@ -48,7 +71,7 @@ Three additions around the frames and the prediction: Blizzard's party frames ca
|
||||
- **Billiger Vortest vor den Combatlog-Mustern.** Bei jeder Meldung aus zwanzig registrierten Ereignissen liefen bis zu vier verankerte Muster. Ein einfacher Textvergleich filtert jetzt vorweg, mit Wortstuecken, die aus den Meldungsvorlagen des Clients geschnitten werden und damit in jeder Sprache passen. Der Tick-Vortest kommt bewusst aus der Selbst-Vorlage, weil sich "You gain" und "%s gains" im Verb unterscheiden, im Rest aber gleich sind.
|
||||
- **Ausruestungsbonus einmal statt je Kandidat.** Mit Heilketten fragte ein einziger Smart-Healing-Klick die API bis zu fuenfzehnmal nach dem Bonus. Der Wert wird jetzt gemerkt und bei `UNIT_INVENTORY_CHANGED` oder einem Neuaufbau des Zauberbuchs wieder verworfen.
|
||||
- **Zauberzeit faellt beim Auslesen der Zauber mit ab.** `FBHealBox_SpellCastSeconds` baute bei einem Fehlgriff einen eigenen Tooltip, was beim ersten Klick mitten im Kampf ein Dutzend Tooltip-Aufbauten bedeuten konnte. `FBPredict_TooltipText` liest die Zauberzeit jetzt nebenbei von der rechten Seite ab, solange der Tooltip ohnehin steht, und fuellt den Zwischenspeicher; der eigene Scan bleibt nur als Rueckfall. Der Wert kommt bewusst nicht in den ausgewerteten Text, weil eine Zahl wie 2.5 die Muster fuer Schilddauer und Heilbetrag durcheinanderbraechte.
|
||||
- **Kleinigkeiten.** Der Reichweiten-Zauber des ersten belegten Buttons wird gemerkt, statt bei jeder Pruefung ueber zehn Plaetze zu suchen (verworfen beim Umbelegen und beim Neuaufbau des Zauberbuchs). Der Ticker zeichnet in einem festen Takt von 0,03 Sekunden statt in jedem Frame. Blizzards Gruppenfenster werden im selben Sammelpunkt wie die Namen neu bewertet statt bei jedem Ereignis einer Salve. Zwei `or {}`-Rueckfaelle in Schleifen legen keine Wegwerf-Tabelle mehr an.
|
||||
- **Kleinigkeiten.** Der Reichweiten-Zauber des ersten belegten Buttons wird gemerkt, statt bei jeder Pruefung ueber zehn Plaetze zu suchen (verworfen beim Umbelegen und beim Neuaufbau des Zauberbuchs). Der Ticker zeichnet in einem festen Takt von 0,03 Sekunden statt in jedem Frame (in 1.4.5.1 zurueckgenommen, der Funke ruckelte dadurch). Blizzards Gruppenfenster werden im selben Sammelpunkt wie die Namen neu bewertet statt bei jedem Ereignis einer Salve. Zwei `or {}`-Rueckfaelle in Schleifen legen keine Wegwerf-Tabelle mehr an.
|
||||
|
||||
|
||||
## 1.4.4.3 (2026-09-08)
|
||||
|
||||
+35
-8
@@ -37,6 +37,8 @@
|
||||
-- * v1.4.5: Blizzards Gruppenfenster ausblendbar (schliesst sich mit dem
|
||||
-- Anheftmodus gegenseitig aus), Wut, Energie und Fokus im Balken,
|
||||
-- +Heilung der Ausruestung ueber ClassicAPI in der Vorhersage.
|
||||
-- * v1.4.5.1: Ruckeln des Manafunkens behoben (Bewegungsschwelle und
|
||||
-- Zeichentakt), globaler Cooldown dunkelt nicht mehr alle Buttons ab.
|
||||
--
|
||||
-- Ehre wem Ehre gebuehrt: Aufbau, Namensplaketten und Grundidee stammen
|
||||
-- aus dem Original.
|
||||
@@ -151,7 +153,7 @@ HealBox = {
|
||||
-- feuert ADDON_LOADED fuer uns.
|
||||
FBADDON_NAME = "Heal Box Vanilla";
|
||||
FBADDON_FOLDER = "FBHealBox";
|
||||
HealBoxVersion = "|cFFFFFF00v1.4.5|r";
|
||||
HealBoxVersion = "|cFFFFFF00v1.4.5.1|r";
|
||||
|
||||
-- ==========================================================================
|
||||
-- [ Lokalisierung / Localization ]
|
||||
@@ -205,7 +207,7 @@ FBLocale["enUS"] = {
|
||||
.. "• Decisions logged with /fbp debug",
|
||||
SMART_MARGIN = "Safety margin: |cFFFFFFFF%s %%",
|
||||
COOLDOWNS = "Cooldowns on buttons",
|
||||
COOLDOWNS_TIP = "Shows the cooldown sweep on every button (Nature's Swiftness, Inner Focus, Lay on Hands, shield cooldown). The global cooldown is not shown.",
|
||||
COOLDOWNS_TIP = "Shows the cooldown sweep on every button (Nature's Swiftness, Inner Focus, Lay on Hands, shield cooldown). The global cooldown runs as a sweep too, so after every cast you see the short wait run out instead of the icons going dark and bright again. Set FBCD_SHOW_MIN to 2 in the code to leave the global cooldown out.",
|
||||
AGGRO = "Mark who is attacked",
|
||||
AGGRO_TIP = "Red border on the plate or cell of the member your hostile target is currently targeting. Checked five times a second.",
|
||||
BUFFICONS = "Buff icons left of the bar",
|
||||
@@ -353,7 +355,7 @@ FBLocale["deDE"] = {
|
||||
.. "• Entscheidungen im Chat via /fbp debug",
|
||||
SMART_MARGIN = "Sicherheitsaufschlag: |cFFFFFFFF%s %%",
|
||||
COOLDOWNS = "Cooldowns auf den Buttons",
|
||||
COOLDOWNS_TIP = "Zeigt die Cooldown-Uhr auf jedem Button (Naturschnelligkeit, Innerer Fokus, Handauflegung, Schild-Cooldown). Der globale Cooldown wird nicht angezeigt.",
|
||||
COOLDOWNS_TIP = "Zeigt die Cooldown-Uhr auf jedem Button (Naturschnelligkeit, Innerer Fokus, Handauflegung, Schild-Cooldown). Auch der globale Cooldown laeuft als Uhr mit, nach jedem Zauber siehst du also die kurze Wartezeit ablaufen, statt dass die Symbole dunkel und wieder hell werden. Wer ihn nicht sehen will, setzt FBCD_SHOW_MIN im Code auf 2.",
|
||||
AGGRO = "Angegriffenen markieren",
|
||||
AGGRO_TIP = "Roter Rahmen auf der Plakette oder Zelle des Mitglieds, das dein feindliches Ziel gerade im Ziel hat. Fuenfmal je Sekunde geprueft.",
|
||||
BUFFICONS = "Buff-Icons links am Balken",
|
||||
@@ -526,7 +528,7 @@ FBLocale["esES"] = {
|
||||
.. "• Registro de decisiones con /fbp debug",
|
||||
SMART_MARGIN = "Margen de seguridad: |cFFFFFFFF%s %%",
|
||||
COOLDOWNS = "Reutilización en botones",
|
||||
COOLDOWNS_TIP = "Muestra el barrido de reutilización en cada botón (Rapidez de la naturaleza, Enfoque interno, Imposición de manos, reutilización del escudo). La reutilización global no se muestra.",
|
||||
COOLDOWNS_TIP = "Muestra el barrido de reutilización en cada botón (Rapidez de la naturaleza, Enfoque interno, Imposición de manos, reutilización del escudo). La reutilización global también se muestra como barrido, así ves correr la breve espera tras cada lanzamiento en lugar de que los iconos se oscurezcan y se aclaren. Para omitirla, pon FBCD_SHOW_MIN en 2 en el código.",
|
||||
AGGRO = "Marcar al atacado",
|
||||
AGGRO_TIP = "Borde rojo en la placa o celda del miembro al que tu objetivo hostil está apuntando. Se comprueba cinco veces por segundo.",
|
||||
BUFFICONS = "Iconos de beneficios (izq.)",
|
||||
@@ -665,7 +667,7 @@ FBLocale["frFR"] = {
|
||||
.. "• Décisions visibles via /fbp debug",
|
||||
SMART_MARGIN = "Marge de sécurité : |cFFFFFFFF%s %%",
|
||||
COOLDOWNS = "Recharges sur les boutons",
|
||||
COOLDOWNS_TIP = "Affiche le balayage du temps de recharge sur chaque bouton (Rapidité de la nature, Focalisation intérieure, Imposition des mains, recharge du bouclier). Le temps de recharge global n'est pas affiché.",
|
||||
COOLDOWNS_TIP = "Affiche le balayage du temps de recharge sur chaque bouton (Rapidité de la nature, Focalisation intérieure, Imposition des mains, recharge du bouclier). Le temps de recharge global est affiché lui aussi : après chaque incantation vous voyez la courte attente s'écouler au lieu de voir les icônes s'assombrir puis redevenir claires. Pour l'exclure, mettez FBCD_SHOW_MIN à 2 dans le code.",
|
||||
AGGRO = "Marquer la cible attaquée",
|
||||
AGGRO_TIP = "Bordure rouge sur la plaque ou la cellule du membre que votre cible hostile vise actuellement. Vérifié cinq fois par seconde.",
|
||||
BUFFICONS = "Icônes de buffs (gauche)",
|
||||
@@ -804,7 +806,7 @@ FBLocale["itIT"] = {
|
||||
.. "• Decisioni registrate con /fbp debug",
|
||||
SMART_MARGIN = "Margine di sicurezza: |cFFFFFFFF%s %%",
|
||||
COOLDOWNS = "Recuperi sui pulsanti",
|
||||
COOLDOWNS_TIP = "Mostra l'animazione del tempo di recupero su ogni pulsante (Rapidità della Natura, Concentrazione Interiore, Imposizione delle Mani, recupero dello scudo). Il tempo di recupero globale non viene mostrato.",
|
||||
COOLDOWNS_TIP = "Mostra l'animazione del tempo di recupero su ogni pulsante (Rapidità della Natura, Concentrazione Interiore, Imposizione delle Mani, recupero dello scudo). Anche il tempo di recupero globale scorre come animazione: dopo ogni lancio vedi scorrere la breve attesa invece di icone che si scuriscono e si riaccendono. Per escluderlo, imposta FBCD_SHOW_MIN a 2 nel codice.",
|
||||
AGGRO = "Segnala chi è attaccato",
|
||||
AGGRO_TIP = "Bordo rosso sulla targhetta o sulla cella del membro che il tuo bersaglio ostile sta puntando. Controllato cinque volte al secondo.",
|
||||
BUFFICONS = "Icone benefici (sinistra)",
|
||||
@@ -995,8 +997,21 @@ FBBUFF_NORMAL_COLOR = { 1.0, 1.0, 1.0, 1 };
|
||||
-- Rahmenfarbe fuer den Angegriffenen (schlaegt die Buff-Wache)
|
||||
FBAGGRO_COLOR = { 1.0, 0.15, 0.15, 1 };
|
||||
|
||||
-- Cooldown-Uhr: kuerzere Cooldowns (globaler Cooldown) werden nicht gezeigt
|
||||
-- Zwei Schwellen, die frueher eine waren, weil sie verschiedene Fragen
|
||||
-- beantworten:
|
||||
--
|
||||
-- FBCD_MIN_DURATION ist die Laenge des globalen Cooldowns. Eine Abklingzeit,
|
||||
-- die nicht laenger ist, gilt nicht als Grund, einen Button abzudunkeln:
|
||||
-- waehrend des globalen Cooldowns meldet der Client jeden Zauber als nicht
|
||||
-- nutzbar, und alle Symbole grau zu faerben sieht aus, als ginge gar nichts.
|
||||
--
|
||||
-- FBCD_SHOW_MIN entscheidet, ab welcher Laenge die Uhr laeuft. 0 heisst:
|
||||
-- jede laufende Abklingzeit wird gezeigt, auch der globale Cooldown. Die Uhr
|
||||
-- ist die ruhige Anzeige dafuer, sie laeuft weich ab, statt das Symbol
|
||||
-- schlagartig dunkel und wieder hell zu machen. Wer den globalen Cooldown
|
||||
-- nicht sehen will, setzt den Wert auf 2.0.
|
||||
FBCD_MIN_DURATION = 2.0;
|
||||
FBCD_SHOW_MIN = 0;
|
||||
|
||||
-- Buff-Icons mit Uhr: 8 px, aussen links neben der Plakette (und Zelle),
|
||||
-- vertikal mittig, von rechts nach links aufgereiht. Die Uhr: vier
|
||||
@@ -4701,6 +4716,18 @@ function FBHealBox_ButtonUsable(id)
|
||||
if (e and e.pass == FBBtnPass) then return e.st; end
|
||||
if (not e) then e = {}; FBBtnUsableCache[id] = e; end
|
||||
local isUsable, noMana = FBHealBox_SpellUsable(id);
|
||||
-- Waehrend des globalen Cooldowns meldet der Client jeden Zauber als
|
||||
-- nicht nutzbar. Ungefiltert wuerden nach jedem gewirkten Zauber
|
||||
-- saemtliche Buttons anderthalb Sekunden lang dunkel, was aussieht, als
|
||||
-- waere gar nichts mehr verfuegbar. Laeuft eine Abklingzeit, die nicht
|
||||
-- laenger als der globale Cooldown ist, zaehlt sie deshalb nicht als
|
||||
-- Grund. Echte Abklingzeiten bleiben unberuehrt, die zeigt die Uhr.
|
||||
if (not isUsable) and (not noMana) then
|
||||
local cd = FBHealBox_ButtonCooldown(id);
|
||||
if (cd[1] > 0) and (cd[2] > 0) and (cd[2] <= FBCD_MIN_DURATION) then
|
||||
isUsable = 1;
|
||||
end
|
||||
end
|
||||
if (isUsable) then e.st = "ok"; elseif (noMana) then e.st = "mana"; else e.st = "no"; end
|
||||
e.pass = FBBtnPass;
|
||||
return e.st;
|
||||
@@ -4724,7 +4751,7 @@ function FBHealBox_UpdateButtonState(b, event)
|
||||
local cd = nil;
|
||||
if (HealBox.Cooldowns == 1) then
|
||||
cd = FBHealBox_ButtonCooldown(b.id);
|
||||
if (cd[2] > FBCD_MIN_DURATION) then key = cd[1].."|"..cd[2]; end
|
||||
if (cd[1] > 0) and (cd[2] > FBCD_SHOW_MIN) then key = cd[1].."|"..cd[2]; end
|
||||
end
|
||||
if (b.cdKey ~= key) then
|
||||
b.cdKey = key;
|
||||
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
## Interface: 11200
|
||||
## Title: Heal Box Vanilla |cFFFFFF00v1.4.5|r
|
||||
## Title: Heal Box Vanilla |cFFFFFF00v1.4.5.1|r
|
||||
## Notes: Heal/raid frame addon like Healium, with quick-cast buttons, heal prediction, mana ticker and more.
|
||||
## 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
|
||||
## Version: 1.4.5
|
||||
## Version: 1.4.5.1
|
||||
## SavedVariablesPerCharacter: HealBox
|
||||
## OptionalDeps: SuperWoW
|
||||
|
||||
|
||||
+28
-15
@@ -351,7 +351,8 @@ end
|
||||
|
||||
function FBTicker_Draw()
|
||||
if (not FBTicker.gate) then return; end
|
||||
local frac, mode = FBTicker_Progress(GetTime());
|
||||
local now = GetTime();
|
||||
local frac, mode = FBTicker_Progress(now);
|
||||
if (not frac) then
|
||||
FBTicker_HideAll();
|
||||
return;
|
||||
@@ -364,8 +365,17 @@ function FBTicker_Draw()
|
||||
local bar, s = e.bar, e.spark;
|
||||
if (s and bar) then
|
||||
if (bar:IsShown()) then
|
||||
local bw = bar:GetWidth() or 0;
|
||||
local bh = bar:GetHeight() or 0;
|
||||
-- Breite und Hoehe aendern sich nur beim Umbauen der Anzeige.
|
||||
-- Sie werden deshalb viermal je Sekunde nachgelesen und
|
||||
-- dazwischen gemerkt; so kostet das Zeichnen je Frame fast
|
||||
-- nichts mehr und darf wieder in jedem Frame laufen.
|
||||
if (not e.geomT) or ((now - e.geomT) >= FBTICK_GEOM_STEP) then
|
||||
e.geomT = now;
|
||||
e.bw = bar:GetWidth() or 0;
|
||||
e.bh = bar:GetHeight() or 0;
|
||||
end
|
||||
local bw = e.bw or 0;
|
||||
local bh = e.bh or 0;
|
||||
if (bw > w and bh > 0) then
|
||||
if (e.w ~= w or e.h ~= bh) then
|
||||
e.w = w; e.h = bh;
|
||||
@@ -376,10 +386,16 @@ function FBTicker_Draw()
|
||||
e.mode = mode;
|
||||
s:SetTexture(col[1], col[2], col[3], col[4]);
|
||||
end
|
||||
-- Anker nur setzen, wenn der Funke mindestens einen halben
|
||||
-- Pixel weitergewandert ist
|
||||
-- Anker setzen, sobald sich die Position ueberhaupt
|
||||
-- geaendert hat. Eine Schwelle von einem halben Pixel
|
||||
-- klingt sparsam, der Funke wandert aber nur rund 20 px
|
||||
-- je Sekunde: bei 60 Bildern kam er damit nur in jedem
|
||||
-- zweiten Frame voran, und je nach Rundung mal nach einem,
|
||||
-- mal nach zwei Frames. Genau das sah ruckelig aus. Die
|
||||
-- Feinrundung auf ganze Bildpunkte macht ohnehin die
|
||||
-- Oberflaeche selbst.
|
||||
local x = frac * (bw - w);
|
||||
if (not e.x) or (math.abs(x - e.x) >= 0.5) then
|
||||
if (not e.x) or (math.abs(x - e.x) >= 0.05) then
|
||||
e.x = x;
|
||||
s:ClearAllPoints();
|
||||
s:SetPoint("LEFT", bar, "LEFT", x, 0);
|
||||
@@ -422,19 +438,16 @@ FBTickerFrame:SetScript("OnEvent", function()
|
||||
end
|
||||
FBTicker_UpdateGate();
|
||||
end);
|
||||
-- Der Funke wandert in fuenf Sekunden ueber den Balken, ein Neuzeichnen in
|
||||
-- jedem Frame bringt dabei kein sichtbar weicheres Bild. Ein fester Takt von
|
||||
-- 0,03 Sekunden (rund 33 Bilder je Sekunde) spart auf schnellen Rechnern die
|
||||
-- Haelfte der Durchlaeufe samt der Breiten- und Hoehenabfragen je Balken.
|
||||
FBTickerDrawAccum = 0;
|
||||
FBTICK_DRAW_STEP = 0.03;
|
||||
-- Gezeichnet wird in jedem Frame. Ein fester Takt spart zwar Durchlaeufe,
|
||||
-- macht die Bewegung aber sichtbar stufig: der Funke braucht fuer den Balken
|
||||
-- fuenf Sekunden, jede ausgelassene Position sieht man sofort. Teuer ist das
|
||||
-- Zeichnen nicht mehr, weil die Balkenmasse gemerkt werden und der Ausstieg
|
||||
-- ueber das Gate davor sitzt (voller Manabalken = gar kein Durchlauf).
|
||||
FBTICK_GEOM_STEP = 0.25; -- Sek.: so oft werden Breite und Hoehe nachgelesen
|
||||
|
||||
FBTickerFrame:SetScript("OnUpdate", function()
|
||||
if (FBAddonSuppressed) then return; end
|
||||
if (not FBTicker.gate) then return; end
|
||||
FBTickerDrawAccum = FBTickerDrawAccum + (arg1 or 0);
|
||||
if (FBTickerDrawAccum < FBTICK_DRAW_STEP) then return; end
|
||||
FBTickerDrawAccum = 0;
|
||||
FBTicker_Draw();
|
||||
end);
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Heal Box Vanilla
|
||||
|
||||
ADDON DOCUMENTATION · VERSION 1.4.5 · World of Warcraft CLIENT 1.12.1
|
||||
ADDON DOCUMENTATION · VERSION 1.4.5.1 · World of Warcraft CLIENT 1.12.1
|
||||
|
||||
Party, pet and self heal display with quick-cast buttons for healers. One name plate with a health bar per group slot, plus one for every pet in the group directly below its owner, and next to it up to ten freely assignable spell buttons. A thin mana bar sits inside the health bar for everyone who actually uses mana. On top of that a complete heal prediction (direct heals, remaining HoT ticks and absorb shields) that corrects itself from the combat log and shares its numbers with other healers in the HealComm format. The interface is available in **English and German**, switchable in the options window.
|
||||
|
||||
@@ -10,7 +10,7 @@ Party, pet and self heal display with quick-cast buttons for healers. One name p
|
||||
|
||||
<img width="956" height="847" alt="Screenshot 2026-09-05 210241" src="https://github.com/user-attachments/assets/d7508232-eb56-47ef-8f7e-c39ab0c2b434" />
|
||||
|
||||
<img width="842" height="1103" alt="Screenshot 2026-09-09 080054" src="https://github.com/user-attachments/assets/61ef0883-fee6-4cab-98bb-240bb1a03e71" />
|
||||
<img width="841" height="1102" alt="grafik" src="https://github.com/user-attachments/assets/6fd08ca5-4a05-4219-a62e-d50d595e53fa" />
|
||||
|
||||
\---
|
||||
|
||||
@@ -129,7 +129,9 @@ Everything in the chain is a candidate, and the one with the smallest expected h
|
||||
|
||||
The *Smartcross* switch on the *Buttons* tab turns chain switching off and on, `/fbp smartcross` does the same from chat. With it off, Smart Healing stays on the assigned spell and only lowers its rank, the way it worked before 1.4.4.3. The chains live in `FBHealChains` near the Smart Healing code and can be edited freely; spells you do not want swapped simply come out of the list. Downsides: the estimate ignores crits, and with burst damage or when you want to overheal on purpose (a tank before a big hit) the lower rank can fall short. Leave it off whenever overhealing is what you want. `/fbp debug` prints every decision, `/fbp` shows the state.
|
||||
|
||||
**Cooldowns.** Every button shows the usual cooldown sweep for its spell. The global cooldown is not shown (`FBCD_MIN_DURATION`). Option *Cooldowns on buttons*.
|
||||
**Cooldowns.** Every button shows the usual cooldown sweep for its spell, the global cooldown included: after every cast you watch the short wait run out on all buttons, the way the action bars do it.
|
||||
|
||||
What the global cooldown must never do is darken the icons. While it runs, the client reports every spell as unusable, so taken literally all buttons would go grey for a second and a half and then snap back to bright after every single cast. That is why the two are handled by separate thresholds: `FBCD_SHOW_MIN` (0) decides from which length the sweep runs, `FBCD_MIN_DURATION` (2) the length up to which a cooldown is not treated as a reason to darken a button. Setting `FBCD_SHOW_MIN` to 2 leaves the global cooldown out of the display again. Option *Cooldowns on buttons*.
|
||||
|
||||
**HoT and shield timers.** The button of a spell shows, for its unit, the remaining seconds of your own HoT (green) or shield (blue) of that spell. When Power Word: Shield is used up, the same button shows Weakened Soul in red until the target can be shielded again. The left-click spell is checked first, then the right-click spell. Only your own effects are tracked. Option *HoT and shield timers*.
|
||||
|
||||
@@ -515,7 +517,8 @@ Every knob is a global at the top of its own section and can be changed without
|
||||
|`FBRANGE_ALPHA` · `FBRANGE_INTERVAL`|0.5 · 0.5|Faded opacity and check interval of the range fading|
|
||||
|`FBBUFF_MISSING_COLOR`|`{1, 0.5, 0, 1}`|Border colour when the watched buff is missing|
|
||||
|`FBAGGRO_COLOR`|`{1, 0.15, 0.15, 1}`|Border colour for the attacked member|
|
||||
|`FBCD_MIN_DURATION`|2|Cooldowns shorter than this (the global cooldown) are not shown|
|
||||
|`FBCD_MIN_DURATION`|2|Length of the global cooldown: a cooldown up to this length does not darken a button|
|
||||
|`FBCD_SHOW_MIN`|0|From which length the cooldown sweep runs. 0 shows every cooldown including the global one, 2 leaves it out|
|
||||
|`FBTIMER_COLOR_HOT` · `_SHIELD` · `_WS`|green · blue · red|Timer colours on the buttons|
|
||||
|`FBBUFFICON_SIZE` · `FBBUFFICON_GAP` · `FBBUFFICON_MAX` · `FBBUFFICON_XOFF`|8 · 1 · 6 · -2|Buff icons left of the plate|
|
||||
|`FBBUFFICON_STEPS` · `FBBUFFICON_GREY`|32 · 0.30|Duration progress steps (32) and grey tint when client cannot desaturate|
|
||||
@@ -532,7 +535,7 @@ Every knob is a global at the top of its own section and can be changed without
|
||||
|`FBPREDICT_TICK_DEFAULT`|3|Default tick interval for HoTs|
|
||||
|`FBPREDICT_THROTTLE`|0.2|Update rate of the prediction|
|
||||
|`FBRAID_TICK` · `FBRAID_TICK_SLICES`|0.5 · 4|Full sweep for raid range and line of sight, and how many ticks it is spread over|
|
||||
|`FBTICK_DRAW_STEP`|0.03|Redraw step of the mana ticker spark|
|
||||
|`FBTICK_GEOM_STEP`|0.25|How often the ticker re-reads the bar size (the spark itself is drawn every frame)|
|
||||
|`FBPREDICT_CONFIRM_TIME`|3.0|Time to wait for the aura confirmation|
|
||||
|`FBPREDICT_TARGET_TIME`|2.0|Lifetime of the remembered cast target|
|
||||
|`FBPredictTickInterval`|`{Lifebloom = 1}`|Deviating tick intervals|
|
||||
@@ -734,6 +737,7 @@ Entries that do not exist do no harm: if the spellbook scan does not find them,
|
||||
* heal prediction for direct heals, remaining HoT ticks and absorb shields, self-correcting from the combat log
|
||||
* HealComm sync with Puppeteer, pfUI, Luna and others, without any Ace libraries
|
||||
* English, German, Spanish, French and Italian localization, switchable in game
|
||||
* 1.4.5.1: mana ticker spark no longer stutters (movement threshold and redraw step), and the global cooldown no longer darkens every button; see CHANGELOG
|
||||
* 1.4.5: Blizzard's party frames can be hidden (mutually exclusive with the attach mode), rage, energy and focus in the resource bar, and the equipment healing bonus via ClassicAPI in the prediction, plus a performance pass without functional change (player buffs read once per frame, staggered raid range and line-of-sight sweeps, fewer protected calls, no throwaway strings in the raid health text); see CHANGELOG
|
||||
* 1.4.4.3: class gate for warriors, rogues and hunters (display stays off, chat hint, `/fbp forceload` to override) and Smart Healing no longer downranks heal over time spells of any class. Smart Healing downranks across spells inside a heal chain (Greater Heal to Lesser Heal, Holy Light to Flash of Light), `/fbp smartcross` turns it off; see CHANGELOG
|
||||
* 1.4.4.2: 32-step buff icon duration display (replacing the 4-quadrant clock with a 32-stage vertical wipe) and syntax/diagnostic bugfixes; see CHANGELOG
|
||||
@@ -745,14 +749,14 @@ Entries that do not exist do no harm: if the spellbook scan does not find them,
|
||||
|
||||
---
|
||||
|
||||
Heal Box Vanilla v1.4.5 · original by Dourd, UI Overhauled · ported to Vanilla and extended 09/2026 by Mquadrat
|
||||
Heal Box Vanilla v1.4.5.1 · original by Dourd, UI Overhauled · ported to Vanilla and extended 09/2026 by Mquadrat
|
||||
|
||||
_______________________________________________________________________
|
||||
GERMAN
|
||||
|
||||
# Heal Box Vanilla
|
||||
|
||||
ADDON DOKUMENTATION · VERSION 1.4.5 · World of Warcraft CLIENT 1.12.1
|
||||
ADDON DOKUMENTATION · VERSION 1.4.5.1 · World of Warcraft CLIENT 1.12.1
|
||||
|
||||
Party-, Begleiter- und Selbst-Heilanzeige mit Schnellzugriff-Buttons für Heiler. Für jeden Gruppenplatz eine Namensplakette mit Lebensbalken, dazu eine für jeden Begleiter in der Gruppe direkt unter seinem Besitzer, daneben bis zu zehn frei belegbare Zauber-Buttons. Ein schmaler Manabalken liegt im Lebensbalken, bei allen, die tatsächlich Mana nutzen. Dazu eine vollständige Heilvorhersage (Direktheilung, HoT-Restticks und Absorb-Schilde), die sich über den Combatlog selbst korrigiert und ihre Werte im HealComm-Format mit anderen Heilern teilt. Die Oberfläche gibt es auf **Deutsch und Englisch**, umschaltbar im Optionsfenster.
|
||||
|
||||
@@ -873,7 +877,9 @@ Alles in der Kette ist Kandidat, gewonnen hat der mit der kleinsten erwarteten H
|
||||
|
||||
Der Schalter *Smartcross* im Reiter *Buttons* schaltet den Kettenwechsel aus und wieder ein, `/fbp smartcross` tut dasselbe aus dem Chat. Aus bleibt Smart Healing beim belegten Zauber und senkt nur dessen Rang, so wie es vor 1.4.4.3 war. Die Ketten stehen in `FBHealChains` direkt beim Smart-Healing-Code und lassen sich frei bearbeiten; Zauber, die nicht getauscht werden sollen, fliegen einfach aus der Liste. Nachteile: Die Schätzung kennt keine Crits, und bei Schadensspitzen oder gewolltem Überheilen (Tank vor einem großen Treffer) kann der kleinere Rang zu wenig sein. Aus lassen, wann immer Overheal gewollt ist. `/fbp debug` zeigt jede Entscheidung, `/fbp` den Zustand.
|
||||
|
||||
**Cooldowns.** Jeder Button zeigt die gewohnte Cooldown-Uhr seines Zaubers. Der globale Cooldown wird nicht gezeigt (`FBCD_MIN_DURATION`). Option *Cooldowns auf den Buttons*.
|
||||
**Cooldowns.** Jeder Button zeigt die gewohnte Cooldown-Uhr seines Zaubers, den globalen Cooldown eingeschlossen: Nach jedem Zauber läuft die kurze Wartezeit auf allen Buttons ab, so wie es die Aktionsleisten machen.
|
||||
|
||||
Was der globale Cooldown auf keinen Fall tun darf, ist die Symbole abdunkeln. Solange er läuft, meldet der Client jeden Zauber als nicht nutzbar, wörtlich genommen würden also nach jedem einzelnen Zauber alle Buttons anderthalb Sekunden grau und dann schlagartig wieder hell. Deshalb sind es zwei getrennte Schwellen: `FBCD_SHOW_MIN` (0) entscheidet, ab welcher Länge die Uhr läuft, `FBCD_MIN_DURATION` (2) die Länge, bis zu der eine Abklingzeit nicht als Grund zum Abdunkeln gilt. Wer `FBCD_SHOW_MIN` auf 2 setzt, hat den globalen Cooldown wieder aus der Anzeige. Option *Cooldowns auf den Buttons*.
|
||||
|
||||
**HoT- und Schild-Timer.** Der Button eines Zaubers zeigt für seine Einheit die Restsekunden deines eigenen HoTs (grün) oder Schilds (blau) dieses Zaubers. Ist Machtwort: Schild verbraucht, zeigt derselbe Button rot die Geschwächte Seele, bis das Ziel wieder schildbar ist. Geprüft wird zuerst der Linksklick-Zauber, dann der Rechtsklick-Zauber. Nur eigene Effekte werden verfolgt. Option *HoT- und Schild-Timer*.
|
||||
|
||||
@@ -1255,7 +1261,8 @@ Alle Stellschrauben stehen als Globals oben in ihrem jeweiligen Abschnitt und la
|
||||
|`FBRANGE_ALPHA` · `FBRANGE_INTERVAL`|0.5 · 0.5|Deckkraft und Prüfintervall des Reichweiten-Fadings|
|
||||
|`FBBUFF_MISSING_COLOR`|`{1, 0.5, 0, 1}`|Rahmenfarbe bei fehlendem Wache-Buff|
|
||||
|`FBAGGRO_COLOR`|`{1, 0.15, 0.15, 1}`|Rahmenfarbe für den Angegriffenen|
|
||||
|`FBCD_MIN_DURATION`|2|Kürzere Cooldowns (globaler Cooldown) werden nicht gezeigt|
|
||||
|`FBCD_MIN_DURATION`|2|Länge des globalen Cooldowns: Eine Abklingzeit bis zu dieser Länge dunkelt keinen Button ab|
|
||||
|`FBCD_SHOW_MIN`|0|Ab welcher Länge die Cooldown-Uhr läuft. 0 zeigt jede Abklingzeit samt globalem Cooldown, 2 lässt ihn weg|
|
||||
|`FBTIMER_COLOR_HOT` · `_SHIELD` · `_WS`|grün · blau · rot|Timerfarben auf den Buttons|
|
||||
|`FBBUFFICON_SIZE` · `FBBUFFICON_GAP` · `FBBUFFICON_MAX` · `FBBUFFICON_XOFF`|8 · 1 · 6 · -2|Buff-Icons links neben der Plakette|
|
||||
|`FBBUFFICON_STEPS` · `FBBUFFICON_GREY`|32 · 0.30|Anzahl Ablaufstufen (32) und Grauton, falls Client nicht entsättigen kann|
|
||||
@@ -1272,7 +1279,7 @@ Alle Stellschrauben stehen als Globals oben in ihrem jeweiligen Abschnitt und la
|
||||
|`FBPREDICT_TICK_DEFAULT`|3|Standard-Tickintervall für HoTs|
|
||||
|`FBPREDICT_THROTTLE`|0.2|Update-Rate der Vorhersage|
|
||||
|`FBRAID_TICK` · `FBRAID_TICK_SLICES`|0.5 · 4|Voller Durchlauf für Reichweite und Sichtlinie im Raid, und auf wie viele Ticks er verteilt wird|
|
||||
|`FBTICK_DRAW_STEP`|0.03|Zeichentakt des Ticker-Funkens|
|
||||
|`FBTICK_GEOM_STEP`|0.25|Wie oft der Ticker die Balkenmaße nachliest (der Funke selbst wird in jedem Frame gezeichnet)|
|
||||
|`FBPREDICT_CONFIRM_TIME`|3.0|Wartezeit auf die Aura-Bestätigung|
|
||||
|`FBPREDICT_TARGET_TIME`|2.0|Gültigkeit des gemerkten Cast-Ziels|
|
||||
|`FBPredictTickInterval`|`{Lifebloom = 1}`|Abweichende Tickintervalle|
|
||||
@@ -1462,6 +1469,7 @@ Nicht vorhandene Einträge stören nicht: Findet der Zauberbuch-Scan sie nicht,
|
||||
* Heilvorhersage für Direktheilung, HoT-Restticks und Absorb-Schilde, selbstkorrigierend über den Combatlog
|
||||
* HealComm-Sync mit Puppeteer, pfUI, Luna und Co., ohne Ace-Bibliotheken
|
||||
* Lokalisierung Deutsch, Englisch, Spanisch, Französisch und Italienisch, im laufenden Spiel umschaltbar
|
||||
* 1.4.5.1: Ruckeln des Manafunkens behoben (Bewegungsschwelle und Zeichentakt) und der globale Cooldown dunkelt nicht mehr alle Buttons ab; siehe CHANGELOG
|
||||
* 1.4.5: Blizzards Gruppenfenster ausblendbar (schließt sich mit dem Anheftmodus gegenseitig aus), Wut, Energie und Fokus im Ressourcenbalken, Heilbonus der Ausrüstung über ClassicAPI in der Vorhersage, dazu ein Leistungsdurchgang ohne Funktionsänderung (Spielerbuffs einmal je Frame, gestaffelte Reichweiten- und Sichtlinienprüfung im Raid, weniger geschützte Aufrufe, keine Wegwerf-Strings im Raid-HP-Text); siehe CHANGELOG
|
||||
* 1.4.4.3: Klassensperre für Krieger, Schurke und Jäger (Anzeige bleibt aus, Hinweis im Chat, Freischaltung mit `/fbp forceload`) und Smart Healing rangt HoTs aller Klassen nicht mehr ab. Smart Healing rangt innerhalb einer Heilkette auch über Zaubergrenzen ab (Große Heilung zu Geringem Heilen, Heiliges Licht zu Blitz des Lichts), `/fbp smartcross` schaltet es aus; siehe CHANGELOG
|
||||
* 1.4.4.2: 32-Stufen-Ablaufanzeige für Buff-Icons (ersetzt die 4-Quadranten-Uhr durch 32 vertikale Stufen) sowie Syntax- und Diagnose-Korrekturen; siehe CHANGELOG
|
||||
@@ -1473,7 +1481,7 @@ Nicht vorhandene Einträge stören nicht: Findet der Zauberbuch-Scan sie nicht,
|
||||
|
||||
---
|
||||
|
||||
Heal Box Vanilla v1.4.5 · Original von Dourd, UI Overhauled · Vanilla-Portierung und Erweiterung 09/2026 von Mquadrat
|
||||
Heal Box Vanilla v1.4.5.1 · Original von Dourd, UI Overhauled · Vanilla-Portierung und Erweiterung 09/2026 von Mquadrat
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user