mirror of
https://github.com/QbiXibQ/FBHealBox.git
synced 2026-10-08 07:00:01 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f527200b77 | ||
|
|
be2844dc87 | ||
|
|
4a40166251 | ||
|
|
f3de187efc | ||
|
|
8a8c730f9b | ||
|
|
52a0e84a33 | ||
|
|
e99d32ba1e | ||
|
|
61b66b5145 | ||
|
|
0051f43861 | ||
|
|
a408984895 | ||
|
|
1689e5cc0c | ||
|
|
6d1915e807 | ||
|
|
47181f0f17 | ||
|
|
3a7ac1c851 |
+104
-1
@@ -1,6 +1,109 @@
|
||||
# Changelog
|
||||
|
||||
## 1.4.4.2 (2026-09-06)
|
||||
## 1.4.5 (2026-09-09)
|
||||
|
||||
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.
|
||||
|
||||
### English
|
||||
|
||||
**New & Changed**
|
||||
|
||||
- **Hide Blizzard party frames.** New switch on the *General* tab that hides `PartyMemberFrame1` to `4` while you are grouped, leaving only the Heal Box plates. Off by default. Blizzard shows those frames again on every roster change, so the addon hooks their `OnShow` once instead of hiding them a single time; a frame that reappears is hidden again in the same moment.
|
||||
- **Mutually exclusive with the attach mode.** *Default party frames* docks the plates onto exactly those frames, so the two options can never both be on. Whichever one is ticked disables and greys out the other (`FBHealBox_UpdatePartyExclusion`), and `FBHealBox_HideBlizzPartyActive()` re-checks the same rule in code for saved settings that were edited by hand. Switching the option off brings the frames back immediately, and so does the class gate: an addon that stays asleep for warriors, rogues and hunters returns the frames as well.
|
||||
- **Rage, energy and focus in the resource bar.** The thin strip under the health bar used to be reserved for mana and stayed empty for everyone else. New switch *Show rage, energy, focus* on the *General* tab gives every unit its own resource in its usual colour, from the new table `FBPOWER_COLORS`: mana blue, rage red, focus orange, energy yellow. `FBUnitMana()` now returns the power type as a fourth value, and both the plates and the raid cells colour their bar from it. Off by default, and it still needs the mana bar to be on.
|
||||
- **Equipment healing bonus in the prediction.** Vanilla spell tooltips show the naked base value; the bonus from your gear is missing. Learned values from the combat log carry it automatically, so the gap only affected ranks you had never cast. `FBHealBox_ProbeHealBonus()` now looks for `GetSpellBonusHealing`, `GetSpellBonusHeal` and `GetHealingBonus`, first as globals and then inside a `ClassicAPI` table, and `FBPredict_ExpectedDirect()` adds the share that belongs to the spell.
|
||||
- **Weighted the vanilla way.** The bonus counts as cast time divided by 3.5, capped at 3.5 seconds, with instants counting as 1.5 and an unreadable cast time as 2.5. Cast time is read once per spellbook slot from the tooltip (`FBHealBox_SpellCastSeconds`, right-hand side of line 2), so a 3 second Greater Heal takes 600 of a +700 bonus and a 1.5 second Flash Heal takes 300. Without a suitable API the bonus stays 0 and nothing about the old behaviour changes.
|
||||
- **New command `/fbp healbonus`.** Turns the equipment bonus off and on, saved per character in `HealBox.HealBonus` (on by default). `/fbp` reports the value found and whether it is being applied; the command says so when no API supplies a bonus at all.
|
||||
|
||||
**Performance (no change in behaviour)**
|
||||
|
||||
- **Own buff timers read once per frame.** `FBPredict_PlayerBuffTimeLeft` used to walk the whole player buff list once per watched buff, calling `strupper` on every texture along the way: with six watches and thirty buffs that was around 200 API calls and 200 throwaway strings a second. The list is now read once per frame into a texture-to-seconds map (`FBPredict_ScanPlayerBuffTimes`), the way `FBHealBox_UnitBuffs` already worked, and every watch is served from it. Texture paths are upper-cased once and remembered (`FBHealBox_UpperTex`), which also removes the same allocation from the unit buff scan.
|
||||
- **Range and line of sight in raid mode are spread over several ticks.** `FBRaid_Tick` used to check up to 40 cells in one frame every half second. It now walks a quarter of the groups per tick at a quarter of the interval (`FBRAID_TICK_SLICES`), so a full sweep still takes the same half second while the peak load per frame drops to a quarter.
|
||||
- **`pcall` per sweep instead of per unit.** Range, distance and line of sight went through a protected call for every single unit, up to 160 a second in a full raid. The first successful call now marks the form as safe and the individual calls go straight through, while the sweep as a whole stays protected: one `pcall` per pass in `FBHealBox_CheckRangeAll`, `FBHealBox_CheckLOSAll` and `FBRaid_Tick`. A client that throws on the very first call keeps the old per-call protection and its fallback path.
|
||||
- **Self-healing if an API throws late.** Should a sweep throw after the form had already proven itself, `FBHealBox_ApiFailed()` puts all three queries back to the protected single call, where the error is caught and the fallback takes over as before. The frame is never torn open, and at worst one pass is skipped.
|
||||
- **Raid health text no longer builds strings it throws away.** The percentage and deficit texts were formatted before the change check, so every `UNIT_HEALTH` in a 40 man raid produced a string that was usually discarded immediately. The cell now compares the number and only formats on a real change, the way the plates always did.
|
||||
- **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.
|
||||
|
||||
### Deutsch
|
||||
|
||||
**Neu & Geaendert**
|
||||
|
||||
- **Blizzards Gruppenfenster ausblenden.** Neuer Schalter im Reiter *Allgemein*, der `PartyMemberFrame1` bis `4` versteckt, solange du in einer Gruppe bist, sodass nur die Plaketten der Heal Box uebrig bleiben. Standardmaessig aus. Blizzard zeigt diese Frames bei jeder Gruppenaenderung neu an, deshalb haengt sich das Addon einmalig in deren `OnShow` statt sie nur einmal zu verstecken; ein Frame, der wieder auftaucht, verschwindet im selben Moment erneut.
|
||||
- **Schliesst sich mit dem Anheftmodus aus.** *Standard-Gruppenfenster* haengt die Plaketten genau an diese Frames, beide Optionen koennen also nie zusammen an sein. Was angehakt ist, sperrt und graut das andere aus (`FBHealBox_UpdatePartyExclusion`), und `FBHealBox_HideBlizzPartyActive()` prueft dieselbe Regel im Code noch einmal nach, fuer von Hand bearbeitete gespeicherte Werte. Ausschalten holt die Frames sofort zurueck, ebenso die Klassensperre: Ein Addon, das fuer Krieger, Schurken und Jaeger schlaeft, gibt die Frames mit zurueck.
|
||||
- **Wut, Energie und Fokus im Ressourcenbalken.** Der schmale Streifen unter dem Lebensbalken war dem Mana vorbehalten und blieb bei allen anderen leer. Der neue Schalter *Wut, Energie, Fokus zeigen* im Reiter *Allgemein* gibt jeder Einheit ihre eigene Ressource in der gewohnten Farbe, aus der neuen Tabelle `FBPOWER_COLORS`: Mana blau, Wut rot, Fokus orange, Energie gelb. `FBUnitMana()` liefert die Energieart jetzt als vierten Rueckgabewert, Plaketten und Raidzellen faerben ihren Balken danach. Standardmaessig aus, und der Manabalken muss weiterhin an sein.
|
||||
- **Heilbonus der Ausruestung in der Vorhersage.** Vanilla-Tooltips zeigen den nackten Grundwert, der Bonus der Ausruestung fehlt darin. Gelernte Werte aus dem Combatlog tragen ihn von selbst, die Luecke betraf also nur Raenge, die nie gewirkt wurden. `FBHealBox_ProbeHealBonus()` sucht jetzt nach `GetSpellBonusHealing`, `GetSpellBonusHeal` und `GetHealingBonus`, erst als globale Funktion, dann in einer `ClassicAPI`-Tabelle, und `FBPredict_ExpectedDirect()` schlaegt den Anteil auf, der auf den Zauber entfaellt.
|
||||
- **Gewichtet wie in Vanilla ueblich.** Der Bonus zaehlt mit Zauberzeit geteilt durch 3,5, gedeckelt bei 3,5 Sekunden, Instants rechnen mit 1,5 und eine unlesbare Zauberzeit mit 2,5. Die Zauberzeit wird einmal je Zauberbuchplatz aus dem Tooltip gelesen (`FBHealBox_SpellCastSeconds`, rechte Seite der zweiten Zeile). Eine Grosse Heilung mit 3 Sekunden nimmt von +700 Heilung also 600 mit, eine Blitzheilung mit 1,5 Sekunden 300. Ohne passende API bleibt der Bonus 0 und am bisherigen Verhalten aendert sich nichts.
|
||||
- **Neuer Befehl `/fbp healbonus`.** Schaltet den Ausruestungsbonus aus und wieder ein, gespeichert je Charakter in `HealBox.HealBonus` (Standard an). `/fbp` nennt den gefundenen Wert und ob er angewandt wird; der Befehl sagt es, wenn ueberhaupt keine API einen Bonus liefert.
|
||||
|
||||
**Leistung (ohne Funktionsaenderung)**
|
||||
|
||||
- **Eigene Bufflaufzeiten einmal je Frame.** `FBPredict_PlayerBuffTimeLeft` lief bisher je ueberwachtem Buff einmal durch die gesamte Buffliste und rief dabei fuer jede Textur `strupper` auf: bei sechs Wachen und dreissig Buffs rund 200 API-Aufrufe und 200 Wegwerf-Strings je Sekunde. Die Liste wird jetzt einmal je Frame in eine Tabelle Textur nach Sekunden gelesen (`FBPredict_ScanPlayerBuffTimes`), genau wie es `FBHealBox_UnitBuffs` schon vormacht, und alle Wachen bedienen sich daraus. Texturpfade werden einmal gross geschrieben und gemerkt (`FBHealBox_UpperTex`), was dieselbe Zuteilung auch aus dem Buffscan der Einheiten nimmt.
|
||||
- **Reichweite und Sichtlinie im Raid auf mehrere Ticks verteilt.** `FBRaid_Tick` pruefte alle halbe Sekunde bis zu 40 Zellen in einem einzigen Frame. Jetzt kommt je Tick ein Viertel der Gruppen dran, dafuer viermal so oft (`FBRAID_TICK_SLICES`): Der volle Durchlauf dauert weiterhin eine halbe Sekunde, die Spitzenlast je Frame sinkt auf ein Viertel.
|
||||
- **`pcall` je Durchlauf statt je Einheit.** Reichweite, Abstand und Sichtlinie liefen fuer jede einzelne Einheit durch einen geschuetzten Aufruf, im Vierzigerraid bis zu 160 je Sekunde. Der erste erfolgreiche Aufruf erklaert die Form jetzt fuer sicher und die Einzelaufrufe gehen direkt hinein, der Durchlauf als Ganzes bleibt aber geschuetzt: ein `pcall` je Durchgang in `FBHealBox_CheckRangeAll`, `FBHealBox_CheckLOSAll` und `FBRaid_Tick`. Ein Client, der schon beim ersten Aufruf wirft, behaelt den geschuetzten Einzelaufruf samt Rueckfallweg.
|
||||
- **Selbstheilung, wenn eine API doch spaet wirft.** Wirft ein Durchlauf, obwohl die Form sich vorher bewaehrt hatte, stellt `FBHealBox_ApiFailed()` alle drei Abfragen auf den geschuetzten Einzelaufruf zurueck, wo der Fehler abgefangen wird und der Rueckfall wie frueher greift. Der Frame wird nie aufgerissen, schlimmstenfalls faellt ein Durchgang aus.
|
||||
- **Kein HP-Text im Raid, der gleich wieder weggeworfen wird.** Prozent- und Deficit-Text wurden vor dem Vergleich gebaut, jedes `UNIT_HEALTH` im Vierzigerraid erzeugte also einen String, der meist sofort verfiel. Die Zelle vergleicht jetzt die Zahl und formatiert nur bei echter Aenderung, so wie es die Plaketten immer schon tun.
|
||||
- **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.
|
||||
|
||||
|
||||
## 1.4.4.3 (2026-09-08)
|
||||
|
||||
Class gate, heal chains and a Smart Healing fix. The addon no longer loads its display for warriors, rogues and hunters, Smart Healing keeps its hands off heal over time spells, and downranking may now switch spell inside a heal chain.
|
||||
|
||||
### English
|
||||
|
||||
**New & Changed**
|
||||
|
||||
- **Smartcross option in UI.** Added a *Smartcross* checkbox under Smart Healing in the *Buttons* tab. It is automatically enabled/disabled and grayed out based on the Smart Healing master switch (also toggleable via `/fbp smartcross`).
|
||||
- **Streamlined Smart Healing tooltip.** Overhauled the options tooltip for Smart Healing across all languages. Replaced the screen-filling block of text with a compact, readable bullet-point summary of key rules.
|
||||
- **Priest heal chain cleaned.** Completely removed *Flash Heal* from the Priest heal chain (`Lesser Heal · Heal · Greater Heal`). Flash Heal is preserved as a dedicated fast emergency heal and is never swapped into from Greater Heal or Heal.
|
||||
- **Downranking across spells.** Until now Smart Healing only ever lowered the rank of the spell on the button, so Greater Heal (rank 4) could become Greater Heal (rank 1) but never Lesser Heal (rank 3), even though that would have covered the deficit for a fraction of the mana. Every single-target direct heal of a class now forms a *heal chain*, and the whole chain is searched: Priest `Lesser Heal · Heal · Greater Heal`, Paladin `Flash of Light · Holy Light`, Shaman `Lesser Healing Wave · Healing Wave`, Druid `Healing Touch`. The candidate with the smallest expected heal that still covers the need wins.
|
||||
- **The button never gets stronger.** Nothing that heals more than the rank you assigned is ever chosen, and a tie keeps the assigned spell. Note that the cast time can change: for a small deficit a Greater Heal click may come out as Lesser Heal, and Holy Light as Flash of Light.
|
||||
- **What stays out of the chains.** Group heals (Prayer of Healing, Chain Heal), fast emergency heals (Flash Heal), HoTs (Renew, Rejuvenation, Regrowth), shields and cooldown spells (Holy Shock, Lay on Hands) are never swapped. The chains sit in `FBHealChains` and can be edited freely; German spell names are included, with special characters stored as byte sequences for both Latin-1 and UTF-8 clients.
|
||||
- **New command `/fbp smartcross`.** Turns chain switching off and on, saved per character in `HealBox.SmartCross` (on by default). With it off, Smart Healing stays on the assigned spell and only lowers its rank. `/fbp` shows the state next to the Smart Healing line, and the command says so when Smart Healing itself is still off.
|
||||
- **Class gate for warriors, rogues and hunters.** The addon is built for healing and buffing, and those three classes get nothing out of it: no heals, no heal prediction, and a mana ticker with either no mana to watch (rage, energy) or nobody to heal (hunter). Logging in on one of them now leaves the whole display switched off: no plates, no raid grid, no minimap button, no options window. All event handlers and `OnUpdate` loops of the core and of the raid, ticker and Smart Damage modules return immediately (`FBAddonSuppressed`), so the addon costs nothing while it sleeps. Two lines in the chat explain what happened and how to change it.
|
||||
- **New command `/fbp forceload`.** Shows the addon on a blocked class anyway. It starts immediately, without `/reload`, and the setting is kept per character in `HealBox.ForceLoad`. The same command switches it back off. On every other class the command reports that it is not needed. While the addon sleeps, every other `/fbp` command answers with the same hint instead of reporting on a display that was never built.
|
||||
- **Class detection.** Uses the client's English class token (`WARRIOR`, `ROGUE`, `HUNTER`) with a fallback to the displayed class name in five languages, plus a last resort over the power type (rage and energy are never mana classes).
|
||||
- **New hook `Suppress`.** Modules hide their own frames when the core goes to sleep; the raid module hides the grid, the ticker hides its sparks.
|
||||
- **Startup message moved.** The greeting and the modules' `Loaded` hooks now run on `ADDON_LOADED` / `VARIABLES_LOADED` instead of `FBHealBox_OnLoad`, so the saved language is applied and nothing is announced for a class that stays asleep.
|
||||
- **Rank rules generalised.** The upper limit is no longer "never above the assigned rank" but "never more expected healing than the assigned rank", which is the same thing inside one spell and the right rule across spells. A rank whose tooltip cannot be read is now skipped instead of ending the search.
|
||||
|
||||
**Fixed**
|
||||
|
||||
- **Smart Healing no longer downranks heal over time spells.** Renew, Rejuvenation, Regrowth, Tranquility, Lifebloom, Wild Growth, Riptide and Earth Shield now always go out at the assigned rank, for every class. A HoT spreads its healing over many seconds, so the health missing at the moment of the click says nothing about which rank fits, and a downranked HoT keeps ticking too weakly for its whole duration. Mixed spells such as Regrowth count as HoTs as well.
|
||||
- **HoT detection** The new `FBHealBox_IsHoT()` checks the name list `FBHoTSpells` (English and German names, umlauts stored as byte sequences for both Latin-1 and UTF-8 clients), the tooltip evaluation (`info.hot`), the spell watch (`hasHoT`) and the HoTs currently running from the combat log. The exception therefore also applies to spells that are not in the list, for instance on custom servers. In addition the per-rank check now rejects any rank with a HoT portion.
|
||||
|
||||
---
|
||||
|
||||
### Deutsch
|
||||
|
||||
**Neu & Geaendert**
|
||||
|
||||
- **Smartcross im Optionsfenster.** Checkbox unter Smart Healing im Reiter *Buttons* hinzugefügt. Sie steuert das zauberübergreifende Abrangen in Heilketten und wird dynamisch gesperrt und ausgegraut, wenn Smart Healing deaktiviert ist (weiterhin auch per `/fbp smartcross` schaltbar).
|
||||
- **Gestraffter Smart-Healing-Tooltip.** Der bisherige riesige Fließtextblock im Optionsfenster wurde in allen Sprachen durch eine übersichtliche, stichpunktartige Zusammenfassung der Kernregeln ersetzt. Der Tooltip sprengt damit nicht mehr den Bildschirm.
|
||||
- **Priester-Heilkette bereinigt.** *Blitzheilung* (*Flash Heal*) vollständig aus der Priesterkette entfernt (`Geringes Heilen · Heilen · Große Heilung`). Blitzheilung bleibt ein reiner schneller Notfallzauber und wird von Großer Heilung / Heilen nie ungewollt ausgewählt.
|
||||
- **Abrangen ueber Zaubergrenzen.** Bisher senkte Smart Healing nur den Rang des Zaubers auf dem Button: Aus Große Heilung (Rang 4) konnte Große Heilung (Rang 1) werden, nie aber Geringes Heilen (Rang 3), obwohl das den Fehlbetrag für einen Bruchteil des Manas gedeckt hätte. Alle Einzelziel-Direktheilungen einer Klasse bilden nun eine *Heilkette*, und die ganze Kette wird durchsucht: Priester `Geringes Heilen · Heilen · Große Heilung`, Paladin `Blitz des Lichts · Heiliges Licht`, Schamane `Geringe Welle der Heilung · Welle der Heilung`, Druide `Heilende Berührung`. Gewonnen hat der Kandidat mit der kleinsten erwarteten Heilung, die den Bedarf noch deckt.
|
||||
- **Der Button wird nie staerker.** Nie gewählt wird etwas, das mehr heilt als der belegte Rang; bei Gleichstand bleibt es beim belegten Zauber. Die Zauberzeit kann sich dabei ändern: Bei kleinem Fehlbetrag wird aus einem Klick auf Große Heilung ein Geringes Heilen, aus Heiligem Licht ein Blitz des Lichts.
|
||||
- **Was draussen bleibt.** Gruppenheilungen (Gebet der Heilung, Kettenheilung), schnelle Notfallzauber (Blitzheilung), HoTs (Erneuerung, Verjüngung, Nachwachsen), Schilde und Zauber mit Abklingzeit (Heiliger Schock, Handauflegung) werden nie getauscht. Die Ketten stehen in `FBHealChains` und lassen sich frei bearbeiten; die deutschen Zaubernamen sind enthalten, Sonderzeichen als Bytefolge für Latin-1- und UTF-8-Clients.
|
||||
- **Neuer Befehl `/fbp smartcross`.** Schaltet den Kettenwechsel aus und wieder ein, gespeichert je Charakter in `HealBox.SmartCross` (Standard an). Aus bleibt Smart Healing beim belegten Zauber und senkt nur dessen Rang. `/fbp` zeigt den Zustand neben der Smart-Healing-Zeile, und der Befehl weist darauf hin, wenn Smart Healing selbst noch aus ist.
|
||||
- **Klassensperre fuer Krieger, Schurke und Jaeger.** Das Addon ist fürs Heilen und Buffen gebaut, diese drei Klassen haben nichts davon: keine Heilzauber, keine Heilvorhersage, und ein Mana-Ticker, der entweder kein Mana zu beobachten hat (Wut, Energie) oder niemanden zu heilen (Jäger). Wer sich damit einloggt, bekommt die Anzeige nun gar nicht mehr zu sehen: keine Plaketten, kein Raid-Raster, kein Minimap-Button, kein Optionsfenster. Sämtliche Event-Handler und `OnUpdate`-Schleifen des Kerns und der Module Raid, Ticker und Smart Damage steigen sofort aus (`FBAddonSuppressed`), das Addon kostet im Ruhezustand also nichts. Zwei Zeilen im Chat erklären, was passiert ist und wie man es ändert.
|
||||
- **Neuer Befehl `/fbp forceload`.** Zeigt das Addon bei einer gesperrten Klasse trotzdem an. Es startet sofort, ohne `/reload`, und die Einstellung bleibt je Charakter in `HealBox.ForceLoad` gespeichert. Derselbe Befehl schaltet wieder aus. Bei jeder anderen Klasse meldet der Befehl, dass er nicht nötig ist. Solange das Addon ruht, antworten alle übrigen `/fbp`-Befehle mit demselben Hinweis, statt über eine Anzeige zu berichten, die nie aufgebaut wurde.
|
||||
- **Klassenerkennung.** Über das englische Klassen-Token des Clients (`WARRIOR`, `ROGUE`, `HUNTER`), mit Rückfall auf den angezeigten Klassennamen in fünf Sprachen und als letzter Notnagel über den Energietyp (Wut und Energie sind nie Manaklassen).
|
||||
- **Neuer Hook `Suppress`.** Module blenden ihre eigenen Rahmen aus, wenn der Kern schlafen geht: Das Raidmodul versteckt das Raster, der Ticker seine Funken.
|
||||
- **Startmeldung verschoben.** Begrüßung und die `Loaded`-Hooks der Module laufen jetzt bei `ADDON_LOADED` / `VARIABLES_LOADED` statt in `FBHealBox_OnLoad`. So gilt die gespeicherte Sprache, und bei einer schlafenden Klasse meldet sich niemand.
|
||||
- **Rangregel verallgemeinert.** Die Obergrenze heißt nicht mehr "nie über dem belegten Rang", sondern "nie mehr erwartete Heilung als der belegte Rang". Innerhalb eines Zaubers ist das dasselbe, über Zaubergrenzen hinweg ist es die richtige Regel. Ein Rang, dessen Tooltip sich nicht lesen lässt, wird jetzt übersprungen, statt die Suche zu beenden.
|
||||
|
||||
**Behoben**
|
||||
|
||||
- **Smart Healing rangt keine HoTs mehr ab.** Erneuerung, Verjüngung, Nachwachsen, Gelassenheit, Lebensblüte, Wildwuchs, Springflut und Erdschild gehen nun immer im belegten Rang raus, bei jeder Klasse. Ein HoT verteilt seine Heilung über viele Sekunden, das im Moment des Klicks fehlende Leben sagt also nichts darüber aus, welcher Rang passt, und ein abgerangter HoT tickt die volle Laufzeit zu schwach. Gemischte Zauber wie Nachwachsen zählen ebenfalls als HoT.
|
||||
- **HoT Erkennung** Die neue Funktion `FBHealBox_IsHoT()` prüft die Namensliste `FBHoTSpells` (englische und deutsche Namen, Umlaute als Bytefolge für Latin-1- und UTF-8-Clients), die Tooltip-Auswertung (`info.hot`), die Zauberwache (`hasHoT`) und die gerade aus dem Combatlog laufenden HoTs. Die Ausnahme greift damit auch bei Zaubern, die nicht in der Liste stehen, etwa auf abweichenden Servern. Zusätzlich weist die Rangprüfung jeden Rang mit HoT-Anteil ab.
|
||||
|
||||
## 1.4.4.2 (2026-09-07)
|
||||
|
||||
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.
|
||||
|
||||
|
||||
+1016
-110
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -1,9 +1,9 @@
|
||||
## Interface: 11200
|
||||
## Title: Heal Box Vanilla |cFFFFFF00v1.4.4.2|r
|
||||
## Title: Heal Box Vanilla |cFFFFFF00v1.4.5|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.4.2
|
||||
## Version: 1.4.5
|
||||
## SavedVariablesPerCharacter: HealBox
|
||||
## OptionalDeps: SuperWoW
|
||||
|
||||
|
||||
@@ -425,6 +425,9 @@ end
|
||||
|
||||
-- Vor-Hook auf UseAction. true, wenn das Modul selbst gecastet hat.
|
||||
function FBDmg_TryDownrank(slot, checkCursor, onSelf)
|
||||
-- Klassensperre des Kerns (Krieger/Schurke/Jaeger ohne /fbp forceload):
|
||||
-- die Aktionsleiste bleibt unberuehrt
|
||||
if (FBAddonSuppressed) then return false; end
|
||||
if (FBDmg_Cfg().Enabled ~= 1) or onSelf then return false; end
|
||||
if ((CursorHasSpell and CursorHasSpell()) or (CursorHasItem and CursorHasItem())) then return false; end
|
||||
local name, rank = FBDmg_SlotSpell(slot);
|
||||
@@ -464,6 +467,7 @@ for _, ev in ipairs({
|
||||
}) do FBDmgFrame:RegisterEvent(ev); end
|
||||
|
||||
FBDmgFrame:SetScript("OnEvent", function()
|
||||
if (FBAddonSuppressed) then return; end
|
||||
if (event == "PLAYER_ENTERING_WORLD" or event == "SPELLS_CHANGED") then
|
||||
FBDmg_ScanSpells();
|
||||
FBDmg_UpdateSpellText();
|
||||
|
||||
+56
-10
@@ -28,7 +28,8 @@ FBRAID_MAX = 40;
|
||||
FBRAID_GROUPS = 8;
|
||||
FBRAID_PER_GROUP = 5;
|
||||
FBRAID_MAX_BUTTONS = 4;
|
||||
FBRAID_TICK = 0.5; -- Sek.: Reichweite und Sichtlinie
|
||||
FBRAID_TICK = 0.5; -- Sek.: voller Durchlauf Reichweite und Sichtlinie
|
||||
FBRAID_TICK_SLICES = 4; -- in so viele Haeppchen zerlegt (je 2 Gruppen)
|
||||
FBRAID_MANA_H = 3; -- px Manastreifen in der Zelle
|
||||
FBRAID_LOS_SIZE = 10; -- px Sichtlinien-Auge in der Zelle
|
||||
FBRAID_HEADER_H = 12; -- px Gruppenkopf
|
||||
@@ -437,8 +438,14 @@ end
|
||||
function FBRaid_Mana(cell)
|
||||
local g = cell.ghost;
|
||||
if (g) then
|
||||
if (not g.hasMana) then return 0, 0, false; end
|
||||
return math.floor(g.mpMax * g.mp), g.mpMax, true;
|
||||
if (not g.hasMana) then
|
||||
-- Wut, Energie und Fokus nur, wenn der Kern sie zeigen soll
|
||||
if (HealBox.PowerBar == 1) and (g.power) and (g.mpMax) then
|
||||
return math.floor(g.mpMax * (g.mp or 0)), g.mpMax, true, g.power;
|
||||
end
|
||||
return 0, 0, false, nil;
|
||||
end
|
||||
return math.floor(g.mpMax * g.mp), g.mpMax, true, 0;
|
||||
end
|
||||
return FBUnitMana(cell.unit);
|
||||
end
|
||||
@@ -738,7 +745,7 @@ function FBRaid_UpdateRoster()
|
||||
if (FBRaidCells[g] and FBRaidCells[g][pos]) then
|
||||
local c = FBRaidCells[g][pos];
|
||||
c.unit = nil; c.name = nil; c.ghost = nil; c.index = nil;
|
||||
c.dispelKnown = nil; c.lastText = nil; c.lastMax = nil; c.colorKey = nil; c.manaShown = nil; c.lastMpMax = nil;
|
||||
c.dispelKnown = nil; c.lastText = nil; c.lastPct = nil; c.lastDef = nil; c.lastMax = nil; c.colorKey = nil; c.manaShown = nil; c.lastMpMax = nil; c.powerType = nil;
|
||||
c.vHp = nil; c.vShield = nil; c.vInc = nil; c.vMp = nil;
|
||||
c:Hide();
|
||||
end
|
||||
@@ -940,6 +947,7 @@ function FBRaid_UpdateCell(c, auraChanged)
|
||||
if (state == "ghost") then key = "STATE_GHOST"; end
|
||||
if (state == "offline") then key = "STATE_OFFLINE"; end
|
||||
FBRaid_SetText(c, FBT(key));
|
||||
c.lastPct = nil; c.lastDef = nil; -- Zahlenspeicher gilt nicht mehr
|
||||
FBRaid_SetMax(c, hpMax);
|
||||
FBRaid_SetValues(c, 0, 0, 0);
|
||||
FBRaid_SetColor(c, "state", 0.5, 0.5, 0.5, 1);
|
||||
@@ -956,19 +964,29 @@ function FBRaid_UpdateCell(c, auraChanged)
|
||||
if (incTop > hpMax) then incTop = hpMax; end
|
||||
FBRaid_SetValues(c, hp, shieldTop, incTop);
|
||||
|
||||
-- HP-Text
|
||||
-- HP-Text. Verglichen wird die Zahl, nicht der fertige Text: sonst baut
|
||||
-- jedes UNIT_HEALTH einen String, der meist sofort wieder verworfen wird.
|
||||
if (cfg.HPText == "percent") then
|
||||
FBRaid_SetText(c, math.floor(hp / hpMax * 100).."%");
|
||||
local pct = math.floor(hp / hpMax * 100);
|
||||
if (c.lastPct ~= pct) then
|
||||
c.lastPct = pct; c.lastDef = nil;
|
||||
FBRaid_SetText(c, pct.."%");
|
||||
end
|
||||
elseif (cfg.HPText == "deficit") then
|
||||
local def = hpMax - hp;
|
||||
if (def > 0) then FBRaid_SetText(c, "-"..def); else FBRaid_SetText(c, ""); end
|
||||
if (c.lastDef ~= def) then
|
||||
c.lastDef = def; c.lastPct = nil;
|
||||
if (def > 0) then FBRaid_SetText(c, "-"..def); else FBRaid_SetText(c, ""); end
|
||||
end
|
||||
else
|
||||
c.lastPct = nil; c.lastDef = nil;
|
||||
FBRaid_SetText(c, false);
|
||||
end
|
||||
|
||||
-- Mana
|
||||
local mp, mpMax, hasMana = FBRaid_Mana(c);
|
||||
local mp, mpMax, hasMana, ptype = FBRaid_Mana(c);
|
||||
if (cfg.ManaBar == 1 and hasMana and mpMax > 0) then
|
||||
FBHealBox_SetPowerColor(c.ManaBar, c, ptype);
|
||||
if (c.lastMpMax ~= mpMax) then c.lastMpMax = mpMax; c.ManaBar:SetMinMaxValues(0, mpMax); end
|
||||
if (c.vMp ~= mp) then c.vMp = mp; c.ManaBar:SetValue(mp); end
|
||||
if (c.manaShown ~= true) then c.manaShown = true; c.ManaBar:Show(); end
|
||||
@@ -1199,10 +1217,30 @@ function FBRaid_SyncButtons()
|
||||
end
|
||||
|
||||
-- Reichweite, Sichtlinie und Geister-Atmung im Takt
|
||||
-- Reichweite und Sichtlinie kosten je Zelle einen Aufruf ins Spiel hinein.
|
||||
-- Bei acht Gruppen waeren das in einem Rutsch bis zu 80 Abfragen in einem
|
||||
-- einzigen Frame. Deshalb wandert der Durchlauf in Haeppchen: je Tick nur
|
||||
-- ein Teil der Gruppen, nach FBRAID_TICK_SLICES Ticks sind alle einmal dran.
|
||||
-- Die Taktdauer ist entsprechend kuerzer, der volle Durchlauf dauert also
|
||||
-- weiterhin FBRAID_TICK Sekunden. force = true macht alles auf einmal.
|
||||
FBRaidTickSlice = 0;
|
||||
|
||||
-- Der Durchlauf laeuft geschuetzt, aber nur einmal je Tick statt einmal je
|
||||
-- Zelle: im Vierzigerraid ein pcall alle 0,125 Sekunden statt achtzig je
|
||||
-- Sekunde. Wirft eine Abfrage doch, gehen die Direktaufrufe zurueck in den
|
||||
-- geschuetzten Einzelaufruf und der Rueckfallweg greift wieder.
|
||||
function FBRaid_Tick(force)
|
||||
if (not FBRaid_IsActive()) then return; end
|
||||
local slice = FBRaidTickSlice;
|
||||
FBRaidTickSlice = math.mod(FBRaidTickSlice + 1, FBRAID_TICK_SLICES);
|
||||
if (not pcall(FBRaid_TickSweep, slice, force)) then
|
||||
if (FBHealBox_ApiFailed) then FBHealBox_ApiFailed(); end
|
||||
end
|
||||
end
|
||||
|
||||
function FBRaid_TickSweep(slice, force)
|
||||
for g = 1, FBRAID_GROUPS do
|
||||
if (FBRaidCells[g]) then
|
||||
if (FBRaidCells[g]) and (force or (math.mod(g - 1, FBRAID_TICK_SLICES) == slice)) then
|
||||
for pos = 1, FBRAID_PER_GROUP do
|
||||
local c = FBRaidCells[g][pos];
|
||||
if (c and c.unit and c:IsShown()) then
|
||||
@@ -1242,6 +1280,7 @@ FBRaidEventFrame:RegisterEvent("UNIT_AURA");
|
||||
FBRaidRosterDirty = false;
|
||||
|
||||
FBRaidEventFrame:SetScript("OnEvent", function()
|
||||
if (FBAddonSuppressed) then return; end
|
||||
if (event == "RAID_ROSTER_UPDATE" or event == "PARTY_MEMBERS_CHANGED" or event == "PLAYER_ENTERING_WORLD") then
|
||||
-- Salven (mehrere Roster-Events je Frame beim Zonen) auf einen
|
||||
-- Durchlauf im naechsten Frame zusammenfassen
|
||||
@@ -1256,13 +1295,14 @@ FBRaidEventFrame:SetScript("OnEvent", function()
|
||||
end);
|
||||
|
||||
FBRaidEventFrame:SetScript("OnUpdate", function()
|
||||
if (FBAddonSuppressed) then return; end
|
||||
if (FBRaidRosterDirty) then
|
||||
FBRaidRosterDirty = false;
|
||||
FBRaid_UpdateRoster();
|
||||
FBRaid_RefreshBuffBorders();
|
||||
end
|
||||
FBRaidTickAccum = FBRaidTickAccum + (arg1 or 0);
|
||||
if (FBRaidTickAccum < FBRAID_TICK) then return; end
|
||||
if (FBRaidTickAccum < (FBRAID_TICK / FBRAID_TICK_SLICES)) then return; end
|
||||
FBRaidTickAccum = 0;
|
||||
FBRaid_Tick(false);
|
||||
end);
|
||||
@@ -1273,6 +1313,7 @@ FBRaidGhostAccum = 0;
|
||||
FBRaidEventFrame.ghostTicker = CreateFrame("Frame", nil, UIParent);
|
||||
FBRaidEventFrame.ghostTicker:Hide(); -- laeuft nur im Raid-Test (siehe FBRaid_SetTest)
|
||||
FBRaidEventFrame.ghostTicker:SetScript("OnUpdate", function()
|
||||
if (FBAddonSuppressed) then return; end
|
||||
FBRaidGhostAccum = FBRaidGhostAccum + (arg1 or 0);
|
||||
if (FBRaidGhostAccum < 0.2) then return; end
|
||||
FBRaidGhostAccum = 0;
|
||||
@@ -1520,6 +1561,11 @@ FBHealBox_RegisterHook("Loaded", function()
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cFFFFFF00"..FBADDON_NAME..":|r "..FBT("RAID_LOADED"));
|
||||
return true;
|
||||
end);
|
||||
-- Klassensperre des Kerns: Raidfenster mit stilllegen
|
||||
FBHealBox_RegisterHook("Suppress", function()
|
||||
if (FBRaidFrame) then FBRaidFrame:Hide(); end
|
||||
return true;
|
||||
end);
|
||||
FBHealBox_RegisterHook("Defaults", function() return FBRaid_ApplyDefaults(); end);
|
||||
FBHealBox_RegisterHook("SyncOptions", function() return FBRaid_SyncOptions(); end);
|
||||
FBHealBox_RegisterHook("ApplyLocale", function() return FBRaid_ApplyLocale(); end);
|
||||
|
||||
@@ -405,6 +405,7 @@ FBTickerFrame:RegisterEvent("UNIT_MAXMANA");
|
||||
FBTickerFrame:RegisterEvent("UNIT_DISPLAYPOWER");
|
||||
FBTickerFrame:RegisterEvent("PLAYER_ENTERING_WORLD");
|
||||
FBTickerFrame:SetScript("OnEvent", function()
|
||||
if (FBAddonSuppressed) then return; end
|
||||
if (event == "PLAYER_ENTERING_WORLD") then
|
||||
FBTicker_Reset();
|
||||
FBTicker_CollectBars();
|
||||
@@ -421,7 +422,19 @@ 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;
|
||||
|
||||
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);
|
||||
|
||||
@@ -525,6 +538,13 @@ FBHealBox_RegisterHook("Loaded", function()
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cFFFFFF00"..FBADDON_NAME..":|r "..FBT("TICK_LOADED"));
|
||||
return true;
|
||||
end);
|
||||
-- Klassensperre des Kerns: Funken ausknipsen
|
||||
FBHealBox_RegisterHook("Suppress", function()
|
||||
for _, e in ipairs(FBTicker.sparks) do
|
||||
if (e.spark) then e.spark:Hide(); end
|
||||
end
|
||||
return true;
|
||||
end);
|
||||
FBHealBox_RegisterHook("Defaults", function() return FBTicker_ApplyDefaults(); end);
|
||||
FBHealBox_RegisterHook("SyncOptions", function() return FBTicker_SyncOptions(); end);
|
||||
FBHealBox_RegisterHook("ApplyLocale", function() return FBTicker_ApplyLocale(); end);
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
# Heal Box Vanilla
|
||||
|
||||
ADDON DOCUMENTATION · VERSION 1.4.4.2 · World of Warcraft CLIENT 1.12.1
|
||||
ADDON DOCUMENTATION · VERSION 1.4.5 · 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.
|
||||
|
||||
**The short version:** click the minimap button (or type `/fbp config`) → options window → pick a spell for each button → done. Everything else happens on its own. `/fbp` tells you at any time what the prediction currently believes. **New in 1.4.1:** tick *Test mode* to fill the display with ghost players and arrange everything without a group.
|
||||
|
||||
<img width="769" height="475" alt="grafik" src="https://github.com/user-attachments/assets/de8d0f4b-7862-4d9a-8956-76da46dd1e71" />
|
||||
<img width="784" height="483" alt="Screenshot 2026-09-09 080144" src="https://github.com/user-attachments/assets/e2bcef5e-b193-4ef9-88fc-1f828167fcfb" />
|
||||
|
||||
<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="839" height="1102" alt="grafik" src="https://github.com/user-attachments/assets/eda01796-04eb-4c8d-aec1-04bba0bf8821" />
|
||||
|
||||
|
||||
<img width="842" height="1103" alt="Screenshot 2026-09-09 080054" src="https://github.com/user-attachments/assets/61ef0883-fee6-4cab-98bb-240bb1a03e71" />
|
||||
|
||||
\---
|
||||
|
||||
@@ -40,6 +38,18 @@ The folder name must match the name of the `.toc` file, otherwise the addon neve
|
||||
|
||||
---
|
||||
|
||||
## Which classes it loads for
|
||||
|
||||
The addon is built for healing and buffing. **Warriors, rogues and hunters** get nothing out of it: no heals, no heal prediction, and a mana ticker that either has no mana to watch (rage, energy) or nobody to heal (hunter). Logging in on one of those three classes therefore leaves everything switched off. No plates, no raid grid, no minimap button, no options window, and no event handling either, so the addon costs nothing while it sleeps. Instead two lines appear in the chat: what happened and how to change it.
|
||||
|
||||
**Show it anyway:** type `/fbp forceload`. The display starts immediately, no `/reload` needed, and the setting is remembered for that character (`HealBox.ForceLoad`). The same command switches it back off. On every other class `/fbp forceload` just says it is not needed.
|
||||
|
||||
While the addon sleeps, all other `/fbp` commands answer with the same hint, because nothing has been built that they could report on.
|
||||
|
||||
Detection uses the client's English class token (`WARRIOR`, `ROGUE`, `HUNTER`) and falls back to the displayed class name in five languages, so it also works on localized clients.
|
||||
|
||||
---
|
||||
|
||||
## The display
|
||||
|
||||
Ten name plates in two families. `FBHealBox1` is always the player, `FBHealBox2` through `FBHealBox5` are `party1` through `party4`. `FBHealBoxPet1` through `FBHealBoxPet5` are the matching pets (`pet`, `partypet1` through `partypet4`). Each shows name, health percentage and a layered bar. **To move them:** hold **Shift** and drag any plate with the left mouse button, the others are anchored to it and follow. The position is saved per character and survives a reload; changing the scale does not move the plate.
|
||||
@@ -79,6 +89,8 @@ Everything is clipped at the end of the bar: a shield exceeding maximum HP stays
|
||||
|
||||
The mana bar is `FBMANA_BAR_HEIGHT` (5) pixels high and lies on the bottom edge of the health bar. Where mana is missing a darker translucent strip shows through (`FBMANA_BG_ALPHA`, 0.35, set to 0 for none). It only appears when the unit's **power type is mana** (`UnitPowerType() == 0`): warriors, rogues, hunter pets and druids in cat or bear form get no strip, and the health bar is visible at full height. The bar follows `UNIT_MANA`, `UNIT_MAXMANA` and `UNIT_DISPLAYPOWER`. The *Mana bar* option switches it off entirely.
|
||||
|
||||
With *Show rage, energy, focus* ticked the strip is no longer reserved for mana: every unit gets its own resource in its usual colour, taken from `FBPOWER_COLORS` (mana blue, rage red, focus orange, energy yellow). Druids switching form change colour with `UNIT_DISPLAYPOWER` like any other power change. Off by default, because for a healer an empty strip on a warrior is information too: there is nothing there you could refill.
|
||||
|
||||
### Dispel colouring
|
||||
|
||||
If someone carries a debuff **your** class can remove, their health bar takes the debuff colour instead of the HP colour:
|
||||
@@ -102,7 +114,20 @@ Up to ten buttons sit next to each plate, each showing its spell's icon. A **lef
|
||||
|
||||
**Right-click spell (optional).** Each button can carry a second spell for **right click** (Flash Heal left, Greater Heal right, say), which doubles the density without adding buttons. This is off by default and is enabled only through the switch on the *Buttons* tab. When on, a second column appears in the assignment and a small icon in the bottom-right corner of every button shows its right-click spell; the tooltip lists it as well. Switching it off keeps the assignments, it just stops the buttons from reacting to right click.
|
||||
|
||||
**Smart Healing (off by default).** With *Smart Healing* on, a click casts the lowest rank of the assigned spell whose expected heal covers the target's missing health, minus healing already on the way, plus the *Safety margin* (default 20 %). Expected heals come from the learned values of the prediction where available, otherwise from the tooltip average. It never goes above the rank you assigned, applies to direct heals only (HoTs, shields and buffs such as Fortitude are always cast as assigned; a spell qualifies only if its tooltip describes a heal), and below 30 % health it always casts the assigned rank. 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.
|
||||
**Smart Healing (off by default).** With *Smart Healing* on, a click casts the lowest rank of the assigned spell whose expected heal covers the target's missing health, minus healing already on the way, plus the *Safety margin* (default 20 %). Expected heals come from the learned values of the prediction where available, otherwise from the tooltip average. It never goes above the rank you assigned, applies to direct heals only, and below 30 % health it always casts the assigned rank. **Heal over time spells are never downranked**, whatever the class: Renew, Rejuvenation, Regrowth, Tranquility, Lifebloom, Wild Growth, Riptide and Earth Shield always go out at the rank you assigned. A HoT spreads its healing over many seconds, so the health missing at the moment of the click says nothing about which rank fits, and a downranked HoT keeps ticking too weakly for its whole duration. Mixed spells such as Regrowth count as HoTs as well. Shields and buffs such as Fortitude are likewise cast as assigned, and a spell only qualifies at all if its tooltip describes a heal.
|
||||
|
||||
**Heal chains (new in 1.4.4.3).** Downranking is not limited to the assigned spell. Within a *heal chain* the spell itself may change, so a click on Greater Heal can go out as Lesser Heal rank 3 when that covers the deficit. The chains hold the single-target direct heals of one class:
|
||||
|
||||
|Class|Chain|
|
||||
|-|-|
|
||||
|Priest|Lesser Heal · Heal · Greater Heal|
|
||||
|Paladin|Flash of Light · Holy Light|
|
||||
|Shaman|Lesser Healing Wave · Healing Wave|
|
||||
|Druid|Healing Touch (Regrowth is a HoT and stays out)|
|
||||
|
||||
Everything in the chain is a candidate, and the one with the smallest expected heal that still covers the need wins. Nothing that heals more than the rank you assigned is ever picked, so the button never gets stronger, only cheaper. Note that this can change the cast time: for a small deficit a Greater Heal click may become Lesser Heal, and a Holy Light click may become Flash of Light. Group heals (Prayer of Healing, Chain Heal), HoTs, shields and cooldown spells (Holy Shock, Lay on Hands) are never part of a chain.
|
||||
|
||||
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*.
|
||||
|
||||
@@ -220,7 +245,7 @@ The target's remaining health comes from the first source that answers:
|
||||
|Target health source|Live line: which of the four sources answers for your current target|
|
||||
|Spells|The attack spells found in your spellbook with their rank count|
|
||||
|
||||
Spells per class: Priest Smite, Holy Fire, Mind Blast; Druid Wrath, Starfire, Moonfire; Shaman Lightning Bolt, Chain Lightning, Earth/Flame/Frost Shock; Paladin Holy Shock, Hammer of Wrath, Exorcism, Holy Wrath; Mage Fireball, Frostbolt, Fire Blast, Scorch, Pyroblast; Warlock Shadow Bolt, Searing Pain, Immolate, Soul Fire, Conflagrate; Hunter Arcane Shot, Aimed Shot (list `FBDamageSpells`). `/fbp damage` toggles, `/fbp debug` logs every decision with the health source used.
|
||||
Spells per class: Priest Smite, Holy Fire, Mind Blast; Druid Wrath, Starfire, Moonfire; Shaman Lightning Bolt, Chain Lightning, Earth/Flame/Frost Shock; Paladin Holy Shock, Hammer of Wrath, Exorcism, Holy Wrath; Mage Fireball, Frostbolt, Fire Blast, Scorch, Pyroblast; Warlock Shadow Bolt, Searing Pain, Immolate, Soul Fire, Conflagrate; Hunter Arcane Shot, Aimed Shot (list `FBDamageSpells`). `/fbp damage` toggles, `/fbp debug` logs every decision with the health source used. Note for hunters: the addon does not load for that class, so Smart Damage only runs after `/fbp forceload`, see [Which classes it loads for](#which-classes-it-loads-for).
|
||||
|
||||
---
|
||||
|
||||
@@ -246,6 +271,8 @@ The window has two tabs.
|
||||
|
||||
**Smart Healing / Safety margin**: see [The buttons](#the-buttons). Off by default; margin 0 to 50 %, default 20.
|
||||
|
||||
**Smartcross**: enables downranking across spells within a heal chain. Grayed out and disabled when Smart Healing is off; on by default.
|
||||
|
||||
### Tab *General*
|
||||
|
||||
**Frame scale**: scales the plates from 0.6 to 1.5. Has no effect in party-frame mode.
|
||||
@@ -258,6 +285,10 @@ The window has two tabs.
|
||||
|
||||
**Mana bar**: shows or hides the mana strip inside the health bar. On by default.
|
||||
|
||||
**Hide Blizzard party frames**: hides `PartyMemberFrame1` to `4` while you are in a group, so only the Heal Box plates remain. Off by default. This and *Default party frames* can never both be on, because the attach mode docks the plates onto exactly those frames; whichever one is ticked greys the other out. Switching it off brings the frames back immediately, and a class the addon does not load for gets them back too.
|
||||
|
||||
**Show rage, energy, focus**: the mana strip normally stays empty for anyone without mana. With this on, warriors, rogues and pets show their own resource in the usual colour (rage red, energy yellow, focus orange, table `FBPOWER_COLORS`). Needs the mana bar to be on. Off by default.
|
||||
|
||||
**Show pets**: shows or hides all pet plates. On by default.
|
||||
|
||||
**Debuff icon**: shows or hides the debuff icon with stack count next to the name. On by default.
|
||||
@@ -342,6 +373,12 @@ HoTs cast from the action bar are recognised as well, then with the highest know
|
||||
|
||||
The tick interval cannot be read from the tooltip in Vanilla and therefore lives in `FBPredictTickInterval` (3 seconds by default, Lifebloom 1).
|
||||
|
||||
### Equipment bonus
|
||||
|
||||
Vanilla spell tooltips show the naked base value, the healing bonus from your gear is not in there. Learned values from the combat log carry it automatically, so the gap only exists for ranks you have never cast. If an API supplies the bonus, the addon closes that gap: the value is weighted the vanilla way, cast time divided by 3.5 and capped at 3.5 seconds, instants counting as 1.5. A 3 second Greater Heal with +700 healing therefore starts out 600 higher than its tooltip, a 1.5 second Flash Heal 300.
|
||||
|
||||
`GetSpellBonusHealing` is what the addon looks for, plus `GetSpellBonusHeal` and `GetHealingBonus`, first as a global and then inside a `ClassicAPI` table. **ClassicAPI** provides it; without any such API the bonus stays 0 and nothing changes. `/fbp` reports the value found and whether it is being applied, `/fbp healbonus` turns it off. The first learned value for a rank always wins over the estimate.
|
||||
|
||||
### Absorb shields
|
||||
|
||||
Maximum absorb from the spellbook tooltip, consumption from the combat log (`(123 absorbed)`). For `\*_VS_SELF_*` events the victim is the player, otherwise the message is searched for one of the currently shielded names.
|
||||
@@ -401,6 +438,9 @@ On receive, your own messages are filtered by sender name, and since HealComm st
|
||||
|`/fbp test`|Toggles test mode (same as the checkbox)|
|
||||
|`/fbp config`|Opens or closes the options window (same as the minimap button)|
|
||||
|`/fbp buffs`|Lists the tracked buff spells, their presence and remaining time on you, and your raw buff textures|
|
||||
|`/fbp forceload`|Warrior, rogue and hunter only: shows the addon anyway, or hides it again. Saved per character|
|
||||
|`/fbp smartcross`|Smart Healing: downranking across spells within a heal chain on/off (on by default)|
|
||||
|`/fbp healbonus`|Counts the equipment healing bonus into the prediction, on/off. Only works when an API supplies the bonus|
|
||||
|`/fbp raid`|Toggles raid mode|
|
||||
|`/fbp raidtest 20` · `40` · `off`|Raid test with 20 or 40 ghosts, or off|
|
||||
|`/fbp ticker`|Toggles the mana ticker|
|
||||
@@ -421,6 +461,7 @@ Everything lives in the `HealBox` table, saved **per character**:
|
||||
|`Scale`|Scale of the plates|
|
||||
|`AttachMode`|0 = own plates, 1 = default party frames|
|
||||
|`Active`|Display on/off (shift + left click on the minimap)|
|
||||
|`ForceLoad`|1 = show for warrior, rogue and hunter as well, 0 = off (default). Set with `/fbp forceload`|
|
||||
|`HealComm`|1 = sync on, 0 = off|
|
||||
|`Locale`|`deDE`, `enUS`, `esES`, `frFR` or `itIT`|
|
||||
|`ButtonSpacing`|Gap between the buttons in px (0 to 20)|
|
||||
@@ -433,6 +474,10 @@ Everything lives in the `HealBox` table, saved **per character**:
|
||||
|`LOSIcon`|1 = line-of-sight badge on, 0 = off|
|
||||
|`PlateLeft` · `PlateRight`|Click action on a plate: `target`, `menu`, `move` or `none`|
|
||||
|`SmartRank` · `SmartMargin`|Smart Healing on/off (default off) and safety margin in percent|
|
||||
|`SmartCross`|1 = downranking may switch spell within a heal chain (default), 0 = stay on the assigned spell. Set in the options or with `/fbp smartcross`|
|
||||
|`PowerBar`|1 = the bar also shows rage, energy and focus, 0 = mana only (default)|
|
||||
|`HideBlizzParty`|1 = Blizzard's party frames stay hidden, 0 = untouched (default). Never active together with `AttachMode`|
|
||||
|`HealBonus`|1 = equipment healing bonus counts towards unlearned ranks (default), 0 = plain tooltip values. `/fbp healbonus`|
|
||||
|`Cooldowns` · `AggroMark` · `SpellTimers` · `BuffIcons`|Cooldown sweep, red border for the attacked member, HoT/shield timers, buff icons left of the bar|
|
||||
|`ClassColors`|1 = names in class colour, 0 = white|
|
||||
|`RangeFade`|1 = fade plates out of range, 0 = off|
|
||||
@@ -486,10 +531,16 @@ Every knob is a global at the top of its own section and can be changed without
|
||||
|`FBMENU_GRACE_TIME`|3.0|Menu auto-close (999 = off)|
|
||||
|`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|
|
||||
|`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|
|
||||
|`FBCommGroupHeal`|`{Prayer of Healing}`|What is broadcast as `GrpHeal`|
|
||||
|`FBPOWER_COLORS`|blue · red · orange · yellow|Bar colour per resource (mana, rage, focus, energy)|
|
||||
|`FBHealChains`|(table)|Which spells count as the same heal, only smaller. Smart Healing may switch spell inside a chain|
|
||||
|`FBHoTSpells`|(table)|Heal over time spells that Smart Healing never downranks|
|
||||
|`FBBlockedClasses`|`WARRIOR`, `ROGUE`, `HUNTER`|Classes the addon does not load for without `/fbp forceload`|
|
||||
|`FBLocale`|`enUS`, `deDE`, `esES`, `frFR`, `itIT`|Every visible string, per language|
|
||||
|
||||
---
|
||||
@@ -500,8 +551,11 @@ Every knob is a global at the top of its own section and can be changed without
|
||||
|
||||
|Function|Purpose|
|
||||
|-|-|
|
||||
|`FBHealBox_OnLoad()`|Event registration, startup message|
|
||||
|`FBHealBox_OnEvent(event, arg1)`|Central event dispatch|
|
||||
|`FBHealBox_OnLoad()`|Event registration|
|
||||
|`FBHealBox_OnEvent(event, arg1)`|Central event dispatch; also decides the class gate on `ADDON_LOADED` / `VARIABLES_LOADED`|
|
||||
|`FBHealBox_ClassIsBlocked()` · `FBHealBox_ClassAllowed()`|Is this a warrior, rogue or hunter, and may the display run anyway (`ForceLoad`)?|
|
||||
|`FBHealBox_ApplyClassGate()` · `FBHealBox_Suppressed()`|Applies the class gate and reports the sleeping state to the modules|
|
||||
|`FBHealBox_HideAll()` · `FBHealBox_StartUp()` · `FBHealBox_Announce()`|Puts everything to sleep, wakes everything up, prints the startup message once|
|
||||
|`FBHealBoxSetup()`|Creates the ten plates (five players, five pets)|
|
||||
|`FBHealBoxCreateFrame(…)`|Builds one plate including its four bars|
|
||||
|`FBHealBox_SetBarStrata(f, strata)`|Stacks mana / health / shield / prediction|
|
||||
@@ -513,6 +567,16 @@ Every knob is a global at the top of its own section and can be changed without
|
||||
|`FBHealBox_CastOn(button, castString)`|Casts a button's spell (left or right) on its target|
|
||||
|`FBHealBox_DropSpell(btnIndex, side)` · `FBHealBox_CursorSpell()`|Drag and drop from the spellbook|
|
||||
|`FBHealBox_SmartRank(castString, unit)`|Picks the rank to cast|
|
||||
|`FBHealBox_IsHoT(base, ranks)`|Heal over time? List of names plus tooltip, spell watch and running HoTs. Smart Healing skips these|
|
||||
|`FBHealBox_HealFamily(base)` · `FBHealBox_DirectAmount(spell, sd)`|The heal chain a spell belongs to; the expected heal of one rank, or nil if the spell is not eligible|
|
||||
|`FBPredict_ExpectedDirect(spell, rank, info, id)`|Expected direct heal: learned value, otherwise tooltip plus the share of the equipment bonus|
|
||||
|`FBHealBox_ProbeHealBonus()` · `FBHealBox_HealingBonus()` · `FBHealBox_HealBonusFor(id)`|Finds an API for the healing bonus, reads it, and weights it by cast time|
|
||||
|`FBHealBox_SpellCastSeconds(id)`|Cast time from the tooltip (0 = instant), cached per spellbook slot|
|
||||
|`FBHealBox_ApplyBlizzParty()` · `FBHealBox_HideBlizzPartyActive()`|Hides or restores Blizzard's party frames, including the lock against the attach mode|
|
||||
|`FBHealBox_SetPowerColor(bar, cache, ptype)`|Colours a resource bar for mana, rage, focus or energy|
|
||||
|`FBPredict_ScanPlayerBuffTimes()`|Reads all of your own buff timers once per frame into a texture-to-seconds map|
|
||||
|`FBHealBox_ApiFailed()`|Puts range, distance and line of sight back to the protected single call after a sweep threw|
|
||||
|`FBHealBox_UpperTex(tex)`|Upper-cased texture path, remembered, so `strupper` does not allocate per call|
|
||||
|`FBHealBox_CheckAggroAll()` · `FBHealBox_ApplyBorder(f)`|Red border for the attacked member; border precedence|
|
||||
|`FBHealBox_UpdateSpellTimers()` · `FBHealBox_SpellTimerFor(...)`|HoT/shield timers on buttons|
|
||||
|`FBHealBox_UpdateButtonCooldown(b)` · `FBHealBox_UpdateAllCooldowns()`|Cooldown sweep|
|
||||
@@ -623,6 +687,10 @@ The four functions that feed the bars. All of them expect a **player name**, not
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Nothing shows up at all after login.** Check the chat for the orange line naming your class: on a warrior, rogue or hunter the addon stays asleep on purpose. `/fbp forceload` shows it anyway, see [Which classes it loads for](#which-classes-it-loads-for).
|
||||
|
||||
**Smart Healing does not downrank a spell.** Heal over time spells are excluded on purpose, and so are shields, buffs and any spell whose tooltip does not describe a heal. If it downranks but never leaves the assigned spell, the spell is not in any heal chain, or `/fbp smartcross` is off. Below 30 % health the assigned rank is always used. `/fbp debug` prints the reason for every decision.
|
||||
|
||||
**A spell does not appear in the menu.** It is not in your class's spell list (`Spell.Name` near the top of the file), or not learned yet. The list can be extended freely.
|
||||
|
||||
**Learned absorb values are capped.** A remembered absorb larger than 1.5 times the tooltip value is treated as a counting error and dropped on load (`FBPredict_SanitizeMemory`); values from versions before 1.4.2 that were doubled by the old double load clean themselves up this way.
|
||||
@@ -666,6 +734,8 @@ 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: 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
|
||||
* 1.4.4.1: buff tracking & tooltip scanning fix (Divine Spirit clock icon), expanded class spell lists with blessings, buffs, utility and rez spells, group buff alternate tracking; see CHANGELOG
|
||||
* 1.4.4: performance pass without functional change (central button states, display caches, shared aura scans, coalesced event bursts); see CHANGELOG
|
||||
@@ -675,14 +745,14 @@ Entries that do not exist do no harm: if the spellbook scan does not find them,
|
||||
|
||||
---
|
||||
|
||||
Heal Box Vanilla v1.4.4.2 · original by Dourd, UI Overhauled · ported to Vanilla and extended 09/2026 by Mquadrat
|
||||
Heal Box Vanilla v1.4.5 · original by Dourd, UI Overhauled · ported to Vanilla and extended 09/2026 by Mquadrat
|
||||
|
||||
_______________________________________________________________________
|
||||
GERMAN
|
||||
|
||||
# Heal Box Vanilla
|
||||
|
||||
ADDON-DOKUMENTATION · VERSION 1.4.4.2 · CLIENT 1.12.1
|
||||
ADDON DOKUMENTATION · VERSION 1.4.5 · 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.
|
||||
|
||||
@@ -712,6 +782,18 @@ Der Ordnername muss zum Dateinamen der `.toc` passen, sonst startet das Addon ni
|
||||
|
||||
---
|
||||
|
||||
## Für welche Klassen es lädt
|
||||
|
||||
Das Addon ist fürs Heilen und Buffen gebaut. **Krieger, Schurken und Jäger** haben nichts davon: keine Heilzauber, keine Heilvorhersage, und ein Mana-Ticker, der entweder kein Mana zu beobachten hat (Wut, Energie) oder niemanden zu heilen (Jäger). Wer sich mit einer dieser drei Klassen einloggt, bekommt deshalb gar nichts zu sehen. Keine Plaketten, kein Raid-Raster, kein Minimap-Button, kein Optionsfenster, und auch keine Event-Verarbeitung, das Addon kostet im Ruhezustand also nichts. Stattdessen stehen zwei Zeilen im Chat: was passiert ist und wie man es ändert.
|
||||
|
||||
**Trotzdem anzeigen:** `/fbp forceload` eintippen. Die Anzeige startet sofort, ohne `/reload`, und die Einstellung bleibt für diesen Charakter gespeichert (`HealBox.ForceLoad`). Derselbe Befehl schaltet sie wieder aus. Bei jeder anderen Klasse antwortet `/fbp forceload` nur, dass es nicht nötig ist.
|
||||
|
||||
Solange das Addon ruht, antworten alle anderen `/fbp`-Befehle mit demselben Hinweis, denn es ist nichts aufgebaut, worüber sie berichten könnten.
|
||||
|
||||
Erkannt wird über das englische Klassen-Token des Clients (`WARRIOR`, `ROGUE`, `HUNTER`), mit Rückfall auf den angezeigten Klassennamen in fünf Sprachen, damit die Sperre auch auf lokalisierten Clients greift.
|
||||
|
||||
---
|
||||
|
||||
## Die Anzeige
|
||||
|
||||
Zehn Namensplaketten in zwei Familien. `FBHealBox1` ist immer der Spieler selbst, `FBHealBox2` bis `FBHealBox5` sind `party1` bis `party4`. `FBHealBoxPet1` bis `FBHealBoxPet5` sind die zugehörigen Begleiter (`pet`, `partypet1` bis `partypet4`). Jede zeigt Name, Lebensprozent und einen mehrschichtigen Balken. **Verschieben:** mit gehaltener **Shift**-Taste eine beliebige Plakette mit der linken Maustaste ziehen, die anderen hängen daran und folgen. Die Position wird pro Charakter gespeichert und übersteht den Reload; ein Wechsel der Skalierung verschiebt die Platte nicht.
|
||||
@@ -751,6 +833,8 @@ Alles wird am Balkenende abgeschnitten: Ein Schild über der Maximal-HP bleibt u
|
||||
|
||||
Der Manabalken ist `FBMANA_BAR_HEIGHT` (5) Pixel hoch und liegt auf der Unterkante des Lebensbalkens. Wo Mana fehlt, scheint ein dunkler, halbtransparenter Streifen durch (`FBMANA_BG_ALPHA`, 0.35, auf 0 setzen, wenn unerwünscht). Er erscheint nur, wenn der **Powertyp der Einheit Mana** ist (`UnitPowerType() == 0`): Krieger, Schurken, Jägerbegleiter und Druiden in Katzen- oder Bärengestalt bekommen keinen Streifen, der Lebensbalken ist dann auf voller Höhe zu sehen. Der Balken folgt `UNIT_MANA`, `UNIT_MAXMANA` und `UNIT_DISPLAYPOWER`. Die Option *Manabalken* schaltet ihn ganz ab.
|
||||
|
||||
Mit *Wut, Energie, Fokus zeigen* ist der Streifen nicht mehr dem Mana vorbehalten: Jede Einheit bekommt ihre eigene Ressource in der gewohnten Farbe aus `FBPOWER_COLORS` (Mana blau, Wut rot, Fokus orange, Energie gelb). Druiden, die die Gestalt wechseln, wechseln über `UNIT_DISPLAYPOWER` die Farbe mit, wie bei jeder anderen Änderung des Powertyps. Standardmäßig aus, denn für einen Heiler ist ein leerer Streifen beim Krieger auch eine Information: Da ist nichts, was du auffüllen könntest.
|
||||
|
||||
### Dispel-Färbung
|
||||
|
||||
Hat jemand einen Debuff, den **deine** Klasse entfernen kann, färbt sich sein Lebensbalken in der Debuff-Farbe statt nach HP-Stand:
|
||||
@@ -774,7 +858,20 @@ Rechts neben jeder Plakette liegen bis zu zehn Buttons, jeder mit dem Icon seine
|
||||
|
||||
**Rechtsklick-Zauber (optional).** Jeder Button kann einen zweiten Zauber für **Rechtsklick** tragen (etwa Blitzheilung links, Große Heilung rechts), was die Anzeige verdichtet, ohne Buttons hinzuzufügen. Das ist standardmäßig aus und wird ausschließlich über den Schalter im Reiter *Buttons* eingeschaltet. Eingeschaltet erscheint eine zweite Spalte in der Belegung, und ein kleines Icon unten rechts auf jedem Button zeigt seinen Rechtsklick-Zauber; der Tooltip nennt ihn ebenfalls. Ausschalten behält die Belegung, die Buttons reagieren nur nicht mehr auf Rechtsklick.
|
||||
|
||||
**Smart Healing (standardmäßig aus).** Mit *Smart Healing* wirkt ein Klick den niedrigsten Rang des belegten Zaubers, dessen erwartete Heilung das fehlende Leben des Ziels abzüglich schon eingehender Heilung plus *Sicherheitsaufschlag* (Standard 20 %) deckt. Die erwartete Heilung stammt aus den gelernten Werten der Vorhersage, wo vorhanden, sonst aus dem Tooltip-Mittelwert. Nie über dem belegten Rang, nur für Direktheilungen (HoTs, Schilde und Buffs wie Seelenstärke gehen immer wie belegt raus; ein Zauber kommt nur in Frage, wenn sein Tooltip eine Heilung beschreibt), und unter 30 % Leben immer der belegte Rang. 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.
|
||||
**Smart Healing (standardmäßig aus).** Mit *Smart Healing* wirkt ein Klick den niedrigsten Rang des belegten Zaubers, dessen erwartete Heilung das fehlende Leben des Ziels abzüglich schon eingehender Heilung plus *Sicherheitsaufschlag* (Standard 20 %) deckt. Die erwartete Heilung stammt aus den gelernten Werten der Vorhersage, wo vorhanden, sonst aus dem Tooltip-Mittelwert. Nie über dem belegten Rang, nur für Direktheilungen, und unter 30 % Leben immer der belegte Rang. **Zauber mit Heilung über Zeit werden nie abgerangt**, egal welcher Klasse: Erneuerung, Verjüngung, Nachwachsen, Gelassenheit, Lebensblüte, Wildwuchs, Springflut und Erdschild gehen immer im belegten Rang raus. Ein HoT verteilt seine Heilung über viele Sekunden, das im Moment des Klicks fehlende Leben sagt also nichts darüber aus, welcher Rang passt, und ein abgerangter HoT tickt die volle Laufzeit zu schwach. Gemischte Zauber wie Nachwachsen zählen ebenfalls als HoT. Schilde und Buffs wie Seelenstärke gehen genauso wie belegt raus, und ein Zauber kommt überhaupt nur in Frage, wenn sein Tooltip eine Heilung beschreibt.
|
||||
|
||||
**Heilketten (neu in 1.4.4.3).** Abgerangt wird nicht nur innerhalb des belegten Zaubers. Innerhalb einer *Heilkette* darf auch der Zauber selbst wechseln, ein Klick auf Große Heilung kann also als Geringes Heilen Rang 3 rausgehen, wenn das den Fehlbetrag deckt. Die Ketten enthalten die Einzelziel-Direktheilungen einer Klasse:
|
||||
|
||||
|Klasse|Kette|
|
||||
|-|-|
|
||||
|Priester|Geringes Heilen · Heilen · Große Heilung|
|
||||
|Paladin|Blitz des Lichts · Heiliges Licht|
|
||||
|Schamane|Geringe Welle der Heilung · Welle der Heilung|
|
||||
|Druide|Heilende Berührung (Nachwachsen ist ein HoT und bleibt draußen)|
|
||||
|
||||
Alles in der Kette ist Kandidat, gewonnen hat der mit der kleinsten erwarteten Heilung, die den Bedarf noch deckt. Nie gewählt wird etwas, das mehr heilt als der belegte Rang, der Button wird also nie stärker, nur billiger. Das kann die Zauberzeit ändern: Bei kleinem Fehlbetrag wird aus einem Klick auf Große Heilung ein Geringes Heilen, aus Heiligem Licht ein Blitz des Lichts. Gruppenheilungen (Gebet der Heilung, Kettenheilung), HoTs, Schilde und Zauber mit Abklingzeit (Heiliger Schock, Handauflegung) sind nie Teil einer Kette.
|
||||
|
||||
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*.
|
||||
|
||||
@@ -892,7 +989,7 @@ Das Restleben des Ziels liefert die erste Quelle, die antwortet:
|
||||
|Lebensquelle des Ziels|Livezeile: welche der vier Quellen für dein aktuelles Ziel antwortet|
|
||||
|Zauber|Die im Zauberbuch gefundenen Angriffszauber mit Rangzahl|
|
||||
|
||||
Zauber je Klasse: Priester Göttliche Pein, Heiliges Feuer, Gedankenschlag; Druide Zorn, Sternenfeuer, Mondfeuer; Schamane Blitzschlag, Kettenblitzschlag, Erd-/Flammen-/Frostschock; Paladin Heiliger Schock, Hammer des Zorns, Exorzismus, Heiliger Zorn; Magier Feuerball, Frostblitz, Feuerschlag, Versengen, Pyroschlag; Hexenmeister Schattenblitz, Sengender Schmerz, Feuerbrand, Seelenfeuer, Feuersbrunst; Jäger Arkaner Schuss, Gezielter Schuss (Liste `FBDamageSpells`). `/fbp damage` schaltet um, `/fbp debug` protokolliert jede Entscheidung mit der genutzten Lebensquelle.
|
||||
Zauber je Klasse: Priester Göttliche Pein, Heiliges Feuer, Gedankenschlag; Druide Zorn, Sternenfeuer, Mondfeuer; Schamane Blitzschlag, Kettenblitzschlag, Erd-/Flammen-/Frostschock; Paladin Heiliger Schock, Hammer des Zorns, Exorzismus, Heiliger Zorn; Magier Feuerball, Frostblitz, Feuerschlag, Versengen, Pyroschlag; Hexenmeister Schattenblitz, Sengender Schmerz, Feuerbrand, Seelenfeuer, Feuersbrunst; Jäger Arkaner Schuss, Gezielter Schuss (Liste `FBDamageSpells`). `/fbp damage` schaltet um, `/fbp debug` protokolliert jede Entscheidung mit der genutzten Lebensquelle. Hinweis für Jäger: Für diese Klasse lädt das Addon nicht, Smart Damage läuft also erst nach `/fbp forceload`, siehe [Für welche Klassen es lädt](#für-welche-klassen-es-lädt).
|
||||
|
||||
---
|
||||
|
||||
@@ -918,6 +1015,8 @@ Das Fenster hat zwei Reiter.
|
||||
|
||||
**Smart Healing / Sicherheitsaufschlag**: siehe [Die Buttons](#die-buttons). Standardmäßig aus; Aufschlag 0 bis 50 %, Standard 20.
|
||||
|
||||
**Smartcross**: erlaubt Smart Healing das Wechseln des Zaubers innerhalb einer Heilkette. Ausgegraut und gesperrt, wenn Smart Healing deaktiviert ist; standardmäßig an.
|
||||
|
||||
### Reiter *Allgemein*
|
||||
|
||||
**Skalierung**: Skalierung der Plaketten von 0.6 bis 1.5. Wirkt nicht im Party-Frame-Modus.
|
||||
@@ -930,6 +1029,10 @@ Das Fenster hat zwei Reiter.
|
||||
|
||||
**Manabalken**: Manastreifen im Lebensbalken an/aus. Standardmäßig an.
|
||||
|
||||
**Blizzard-Gruppenfenster aus**: versteckt `PartyMemberFrame1` bis `4`, solange du in einer Gruppe bist, sodass nur die Plaketten der Heal Box übrig bleiben. Standardmäßig aus. Diese Option und *Standard-Gruppenfenster* können nie beide an sein, weil der Anheftmodus die Plaketten genau an diese Frames hängt; was angehakt ist, graut das andere aus. Ausschalten holt die Frames sofort zurück, und eine Klasse, für die das Addon nicht lädt, bekommt sie ebenfalls zurück.
|
||||
|
||||
**Wut, Energie, Fokus zeigen**: der Manastreifen bleibt normalerweise leer bei allen ohne Mana. Eingeschaltet zeigen Krieger, Schurken und Begleiter ihre eigene Ressource in der gewohnten Farbe (Wut rot, Energie gelb, Fokus orange, Tabelle `FBPOWER_COLORS`). Setzt den Manabalken voraus. Standardmäßig aus.
|
||||
|
||||
**Begleiter anzeigen**: alle Pet-Plaketten an/aus. Standardmäßig an.
|
||||
|
||||
**Debuff-Icon**: Debuff-Icon mit Stackzahl neben dem Namen an/aus. Standardmäßig an.
|
||||
@@ -1012,6 +1115,12 @@ HoTs von der Aktionsleiste werden ebenfalls erkannt, dann mit dem höchsten beka
|
||||
|
||||
Das Tickintervall ist in Vanilla nicht aus dem Tooltip lesbar und steht deshalb in `FBPredictTickInterval` (Standard 3 Sekunden, Lifebloom 1).
|
||||
|
||||
### Ausrüstungsbonus
|
||||
|
||||
Vanilla-Tooltips zeigen den nackten Grundwert, der Heilbonus deiner Ausrüstung steht nicht darin. Gelernte Werte aus dem Combatlog tragen ihn von selbst, die Lücke gibt es also nur bei Rängen, die du nie gewirkt hast. Liefert eine API den Bonus, schließt das Addon diese Lücke: Der Wert wird wie in Vanilla üblich mit Zauberzeit geteilt durch 3,5 gewichtet und bei 3,5 Sekunden gedeckelt, Instants zählen als 1,5. Eine Große Heilung mit 3 Sekunden Zauberzeit startet bei +700 Heilung also 600 über ihrem Tooltip, eine Blitzheilung mit 1,5 Sekunden 300.
|
||||
|
||||
Gesucht wird `GetSpellBonusHealing`, dazu `GetSpellBonusHeal` und `GetHealingBonus`, erst als globale Funktion, dann in einer `ClassicAPI`-Tabelle. **ClassicAPI** bringt das mit; ohne eine solche API bleibt der Bonus 0 und es ändert sich nichts. `/fbp` nennt den gefundenen Wert und ob er angewandt wird, `/fbp healbonus` schaltet ihn ab. Der erste gelernte Wert eines Rangs schlägt die Schätzung immer.
|
||||
|
||||
### Absorb-Schilde
|
||||
|
||||
Maximaler Absorb aus dem Zauberbuch-Tooltip, Verbrauch aus dem Combatlog (`(123 absorbed)`). Bei `\*_VS_SELF_*`-Events ist das Opfer der Spieler, sonst wird unter den aktuell beschildeten Namen gesucht.
|
||||
@@ -1071,6 +1180,9 @@ Beim Empfang werden eigene Nachrichten über den Absendernamen gefiltert, und da
|
||||
|`/fbp test`|Testmodus an/aus (wie der Haken in den Optionen)|
|
||||
|`/fbp config`|Optionsfenster auf/zu (wie der Minimap-Button)|
|
||||
|`/fbp buffs`|Listet die verfolgten Buff-Zauber, ihre Präsenz und Restzeit auf dir sowie deine rohen Buff-Texturen|
|
||||
|`/fbp forceload`|Nur für Krieger, Schurke und Jäger: zeigt das Addon trotzdem an oder blendet es wieder aus. Pro Charakter gespeichert|
|
||||
|`/fbp smartcross`|Smart Healing: Abrangen über Zaubergrenzen innerhalb einer Heilkette an/aus (Standard an)|
|
||||
|`/fbp healbonus`|Rechnet den Heilbonus der Ausrüstung in die Vorhersage, an/aus. Wirkt nur, wenn eine API den Bonus liefert|
|
||||
|`/fbp raid`|Raidmodus an/aus|
|
||||
|`/fbp raidtest 20` · `40` · `off`|Raid-Test mit 20 oder 40 Geistern, oder aus|
|
||||
|`/fbp ticker`|Mana-Ticker an/aus|
|
||||
@@ -1091,6 +1203,7 @@ Alles liegt in der Tabelle `HealBox`, gespeichert **pro Charakter**:
|
||||
|`Scale`|Skalierung der Plaketten|
|
||||
|`AttachMode`|0 = eigene Plaketten, 1 = Standard-Gruppenfenster|
|
||||
|`Active`|Anzeige ein/aus (Shift + Linksklick auf die Minimap)|
|
||||
|`ForceLoad`|1 = Anzeige auch für Krieger, Schurke und Jäger, 0 = aus (Standard). Wird mit `/fbp forceload` gesetzt|
|
||||
|`HealComm`|1 = Sync an, 0 = aus|
|
||||
|`Locale`|`deDE`, `enUS`, `esES`, `frFR` oder `itIT`|
|
||||
|`ButtonSpacing`|Abstand der Buttons in px (0 bis 20)|
|
||||
@@ -1103,6 +1216,10 @@ Alles liegt in der Tabelle `HealBox`, gespeichert **pro Charakter**:
|
||||
|`LOSIcon`|1 = Sichtlinien-Abzeichen an, 0 = aus|
|
||||
|`PlateLeft` · `PlateRight`|Klickaktion auf einer Plakette: `target`, `menu`, `move` oder `none`|
|
||||
|`SmartRank` · `SmartMargin`|Smart Healing an/aus (Standard aus) und Sicherheitsaufschlag in Prozent|
|
||||
|`SmartCross`|1 = Abrangen darf den Zauber innerhalb einer Heilkette wechseln (Standard), 0 = beim belegten Zauber bleiben. In den Optionen oder mit `/fbp smartcross` schaltbar|
|
||||
|`PowerBar`|1 = der Balken zeigt auch Wut, Energie und Fokus, 0 = nur Mana (Standard)|
|
||||
|`HideBlizzParty`|1 = Blizzards Gruppenfenster bleiben versteckt, 0 = unangetastet (Standard). Nie zusammen mit `AttachMode` aktiv|
|
||||
|`HealBonus`|1 = Heilbonus der Ausrüstung zählt bei ungelernten Rängen (Standard), 0 = nackte Tooltipwerte. `/fbp healbonus`|
|
||||
|`Cooldowns` · `AggroMark` · `SpellTimers` · `BuffIcons`|Cooldown-Uhr, roter Rahmen für den Angegriffenen, HoT/Schild-Timer, Buff-Icons links am Balken|
|
||||
|`ClassColors`|1 = Namen in Klassenfarbe, 0 = weiß|
|
||||
|`RangeFade`|1 = Plaketten außer Reichweite abblenden, 0 = aus|
|
||||
@@ -1154,10 +1271,16 @@ Alle Stellschrauben stehen als Globals oben in ihrem jeweiligen Abschnitt und la
|
||||
|`FBMENU_GRACE_TIME`|3.0|Auto-Close des Menüs (999 = aus)|
|
||||
|`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|
|
||||
|`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|
|
||||
|`FBCommGroupHeal`|`{Prayer of Healing}`|Was als `GrpHeal` gefunkt wird|
|
||||
|`FBPOWER_COLORS`|blau · rot · orange · gelb|Balkenfarbe je Ressource (Mana, Wut, Fokus, Energie)|
|
||||
|`FBHealChains`|(Tabelle)|Welche Zauber als derselbe Heilzauber in klein gelten. Innerhalb einer Kette darf Smart Healing den Zauber wechseln|
|
||||
|`FBHoTSpells`|(Tabelle)|Zauber mit Heilung über Zeit, die Smart Healing nie abrangt|
|
||||
|`FBBlockedClasses`|`WARRIOR`, `ROGUE`, `HUNTER`|Klassen, für die das Addon ohne `/fbp forceload` nicht lädt|
|
||||
|
||||
---
|
||||
|
||||
@@ -1167,8 +1290,11 @@ Alle Stellschrauben stehen als Globals oben in ihrem jeweiligen Abschnitt und la
|
||||
|
||||
|Funktion|Zweck|
|
||||
|-|-|
|
||||
|`FBHealBox_OnLoad()`|Event-Registrierung, Startmeldung|
|
||||
|`FBHealBox_OnEvent(event, arg1)`|Zentrale Ereignisverteilung|
|
||||
|`FBHealBox_OnLoad()`|Event-Registrierung|
|
||||
|`FBHealBox_OnEvent(event, arg1)`|Zentrale Ereignisverteilung; entscheidet bei `ADDON_LOADED` / `VARIABLES_LOADED` auch über die Klassensperre|
|
||||
|`FBHealBox_ClassIsBlocked()` · `FBHealBox_ClassAllowed()`|Krieger, Schurke oder Jäger? Und darf die Anzeige trotzdem laufen (`ForceLoad`)?|
|
||||
|`FBHealBox_ApplyClassGate()` · `FBHealBox_Suppressed()`|Wendet die Klassensperre an und meldet den Ruhezustand an die Module|
|
||||
|`FBHealBox_HideAll()` · `FBHealBox_StartUp()` · `FBHealBox_Announce()`|Legt alles schlafen, weckt alles auf, gibt die Startmeldung genau einmal aus|
|
||||
|`FBHealBoxSetup()`|Legt die zehn Plaketten an (fünf Spieler, fünf Begleiter)|
|
||||
|`FBHealBoxCreateFrame(…)`|Baut eine Plakette samt der vier Balken|
|
||||
|`FBHealBox_SetBarStrata(f, strata)`|Stapelt Mana / Leben / Schild / Vorhersage|
|
||||
@@ -1180,6 +1306,16 @@ Alle Stellschrauben stehen als Globals oben in ihrem jeweiligen Abschnitt und la
|
||||
|`FBHealBox_CastOn(button, castString)`|Wirkt den Zauber eines Buttons (links oder rechts) auf sein Ziel|
|
||||
|`FBHealBox_DropSpell(btnIndex, side)` · `FBHealBox_CursorSpell()`|Drag & Drop aus dem Zauberbuch|
|
||||
|`FBHealBox_SmartRank(castString, unit)`|Wählt den zu wirkenden Rang|
|
||||
|`FBHealBox_IsHoT(base, ranks)`|Heilung über Zeit? Namensliste plus Tooltip, Zauberwache und laufende HoTs. Smart Healing lässt diese aus|
|
||||
|`FBHealBox_HealFamily(base)` · `FBHealBox_DirectAmount(spell, sd)`|Die Heilkette eines Zaubers; die erwartete Heilung eines Rangs, oder nil, wenn der Zauber nicht in Frage kommt|
|
||||
|`FBPredict_ExpectedDirect(spell, rank, info, id)`|Erwartete Sofortheilung: gelernter Wert, sonst Tooltip plus Anteil am Ausrüstungsbonus|
|
||||
|`FBHealBox_ProbeHealBonus()` · `FBHealBox_HealingBonus()` · `FBHealBox_HealBonusFor(id)`|Sucht eine API für den Heilbonus, liest sie aus und gewichtet nach Zauberzeit|
|
||||
|`FBHealBox_SpellCastSeconds(id)`|Zauberzeit aus dem Tooltip (0 = Instant), je Zauberbuchplatz gemerkt|
|
||||
|`FBHealBox_ApplyBlizzParty()` · `FBHealBox_HideBlizzPartyActive()`|Versteckt Blizzards Gruppenfenster oder gibt sie zurück, samt Sperre gegen den Anheftmodus|
|
||||
|`FBHealBox_SetPowerColor(bar, cache, ptype)`|Färbt einen Ressourcenbalken für Mana, Wut, Fokus oder Energie|
|
||||
|`FBPredict_ScanPlayerBuffTimes()`|Liest alle eigenen Bufflaufzeiten einmal je Frame in eine Tabelle Textur nach Sekunden|
|
||||
|`FBHealBox_ApiFailed()`|Stellt Reichweite, Abstand und Sichtlinie auf den geschützten Einzelaufruf zurück, wenn ein Durchlauf geworfen hat|
|
||||
|`FBHealBox_UpperTex(tex)`|Groß geschriebener Texturpfad, gemerkt, damit `strupper` nicht je Aufruf zuteilt|
|
||||
|`FBHealBox_CheckAggroAll()` · `FBHealBox_ApplyBorder(f)`|Roter Rahmen für den Angegriffenen; Rahmen-Vorrang|
|
||||
|`FBHealBox_UpdateSpellTimers()` · `FBHealBox_SpellTimerFor(...)`|HoT/Schild-Timer auf Buttons|
|
||||
|`FBHealBox_UpdateButtonCooldown(b)` · `FBHealBox_UpdateAllCooldowns()`|Cooldown-Uhr|
|
||||
@@ -1279,6 +1415,10 @@ Die vier Funktionen, die die Balken speisen. Alle erwarten einen **Spielernamen*
|
||||
|
||||
## Fehlersuche
|
||||
|
||||
**Nach dem Einloggen ist gar nichts zu sehen.** Im Chat steht eine orange Zeile mit deiner Klasse: Bei Krieger, Schurke und Jäger schläft das Addon mit Absicht. `/fbp forceload` zeigt es trotzdem an, siehe [Für welche Klassen es lädt](#für-welche-klassen-es-lädt).
|
||||
|
||||
**Smart Healing rangt einen Zauber nicht ab.** Zauber mit Heilung über Zeit sind bewusst ausgenommen, ebenso Schilde, Buffs und alles, dessen Tooltip keine Heilung beschreibt. Rangt es zwar ab, wechselt aber nie den Zauber, steht der Zauber in keiner Heilkette oder `/fbp smartcross` ist aus. Unter 30 % Leben geht immer der belegte Rang raus. `/fbp debug` schreibt zu jeder Entscheidung den Grund in den Chat.
|
||||
|
||||
**Ein Zauber taucht im Menü nicht auf.** Er steht nicht in der Zauberliste deiner Klasse (`Spell.Name` am Dateianfang) oder ist noch nicht gelernt. Die Liste lässt sich frei erweitern.
|
||||
|
||||
**Gelernte Absorb-Werte sind gedeckelt.** Ein gemerkter Absorb über dem 1,5-fachen des Tooltipwerts gilt als Zählfehler und wird beim Laden verworfen (`FBPredict_SanitizeMemory`); die durch die alte Doppelladung verdoppelten Werte aus Versionen vor 1.4.2 räumen sich so von selbst auf.
|
||||
@@ -1322,6 +1462,8 @@ 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: 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
|
||||
* 1.4.4.1: Buff-Erkennung & Tooltip-Scan behoben (Göttlicher Willen Uhr-Icon), vollständige Klassen-Zauberlisten mit Segen, Buffs, Hilfszaubern und Wiederbelebung, Gruppen-Buff-Erkennung; siehe CHANGELOG
|
||||
* 1.4.4: Leistungsdurchgang ohne Funktionsänderung (zentrale Button-Zustände, Anzeige-Zwischenspeicher, gemeinsame Aura-Scans, zusammengefasste Event-Salven); siehe CHANGELOG
|
||||
@@ -1331,7 +1473,7 @@ Nicht vorhandene Einträge stören nicht: Findet der Zauberbuch-Scan sie nicht,
|
||||
|
||||
---
|
||||
|
||||
Heal Box Vanilla v1.4.4.2 · Original von Dourd, UI Overhauled · Vanilla-Portierung und Erweiterung 09/2026 von Mquadrat
|
||||
Heal Box Vanilla v1.4.5 · Original von Dourd, UI Overhauled · Vanilla-Portierung und Erweiterung 09/2026 von Mquadrat
|
||||
|
||||
---
|
||||
|
||||
@@ -1342,4 +1484,3 @@ Heal Box Vanilla v1.4.4.2 · Original von Dourd, UI Overhauled · Vanilla-Portie
|
||||
**Deutsch:** World of Warcraft Vanilla 1.12.1 Heiler-Addon, Classic WoW Heil-Addon, Heilfenster mit Klick-Buttons, Healium-Alternative für Vanilla, HealComm-kompatibel, Heilvorhersage und eingehende Heilung, Absorb-Schild-Anzeige, HoT-Timer, Machtwort: Schild und Geschwächte Seele, Buff-Timer als Uhr-Icons, Seelenstärke nachbuffen, Dispel-Anzeige, Gruppen- und Begleiterfenster, kompakte Raidframes für 20er und 40er Schlachtzüge, Raid-Raster für Heiler, Mana-Ticker und Fünf-Sekunden-Regel, Regenerations-Tick-Balken, automatisches Abrangen, Smart Healing, Smart Damage, Angriffsziel-Markierung, Sichtlinien-Anzeige, Reichweiten-Fading, Klassenfarben, SuperWoW, UnitXP, MobHealth3 und MobInfo-2, läuft auf Turtle WoW und anderen 1.12-Privatservern, Priester Druide Paladin Schamane Heiler-UI, Lua 5.0 Addon, Deutsch Englisch Spanisch Französisch Italienisch.
|
||||
|
||||
#WoWVanilla #Vanilla112 #WoW1121 #ClassicWoW #TurtleWoW #WoWAddon #VanillaAddon #HealerAddon #HealingAddon #Healium #HealComm #HealPrediction #RaidFrames #PartyFrames #UnitFrames #ClickCasting #ManaTicker #FiveSecondRule #Downranking #SmartHealing #SmartDamage #BuffTimer #HoTTracker #DispelTracker #Priest #Druid #Paladin #Shaman #SuperWoW #UnitXP #MobHealth #Lua50 #HealBoxVanilla
|
||||
|
||||
|
||||
Reference in New Issue
Block a user