File Details
GuildRecruiting v1.4.1
- R
- Feb 26, 2026
- 45.42 KB
- 4
- 1.15.8
- Classic
File Name
GuildRecruiting.zip
Supported Versions
- 1.15.8
# GuildHerald – Changelog
## [1.4.1] – 2026-02-26
### Fix – Minimap-Panel Kanal-Anzeige kompakt
- Hover-Panel zeigt jetzt `Kanäle: 3` statt der vollen Kanal-Namensliste – verhindert Textumbruch und Panel-Überlappung.
---
## [1.4.0] – 2026-02-26
### Fix (kritisch) – Auto-Post funktioniert jetzt wirklich
**Root Cause:** `SendChatMessage("...", "CHANNEL")` ist seit **Classic Patch 1.13.3 (September 2019)** ein hardware-event-geschützter API-Call. Ein Timer-Callback (`C_Timer.NewTicker`) ist **kein Hardware-Event** → die Funktion schlägt lautlos fehl. Das bisherige `pcall` in `GH.SendChat` schluckte den Fehler vollständig, sodass das Addon „Gepostet in 2 Kanälen" meldete obwohl **gar nichts gesendet wurde**.
**Lösung:**
- **Auto-Post-Timer** ruft nicht mehr `SendChatMessage` auf. Stattdessen setzt er `GH.postDue = true` und zeigt eine Chat-Benachrichtigung: *„Gilden-Rekrutierung fällig! Klicke 'Jetzt Posten'."*
- **„Jetzt Posten"-Button** ist ein Hardware-Event (Mausklick → OnClick) → `SendChatMessage` funktioniert hier zuverlässig ✓
- Sobald der Button geklickt wird und das Senden erfolgreich war, wird der Countdown zurückgesetzt und ein neuer Zyklus gestartet.
- **Button-UI:** Zeigt `>> JETZT POSTEN!` in Grün wenn `postDue = true`; Countdown-Label wechselt zu `>> Post fällig!` statt dem Countdown.
- **`GH.SendChat` repariert:**
- Strippt WoW-Farbcodes vor dem Senden (können `SendChatMessage` zum Silent-Fail bringen)
- Gibt `true`/`false` zurück (statt nichts) → `PostRecruitMessage` zählt nur wirklich gesendete Nachrichten
- Zeigt bei `CHANNEL`-Fehlern eine explizite Fehlermeldung statt sie zu verschlucken
- `StopAutoPost()` löscht `postDue = false` beim Deaktivieren.
- Neue Locale-Keys: `POST_DUE_NOTICE`, `POST_DUE_NOTICE_SHORT`, `POST_DUE_BTN`, `SEND_FAILED` (enUS + deDE).
---
## [1.3.0] – 2026-02-26
### Feature – Kanal-Status-Anzeige im Kanäle-Tab
- **Neue Sektion „Kanal-Status"** im Kanäle-Tab (rechte Spalte, unter „Allen beitreten"-Button): Zeigt alle konfigurierten Kanäle mit farbigem Status-Indikator an.
- **Grün + pulsierender Dot** = Beigetreten (inkl. Slot-Nummer, z.B. `→ #2`)
- **Rot** = Kanal nicht gefunden / Beitritt fehlgeschlagen
- **Grau** = Status noch unbekannt (vor erstem Beitrittsversuch)
- Pro Zeile: linker Akzentbalken, Status-Dot, Kanalname, Status-Text — alles in WoW-Farbpalette
- **`GH.channelJoinStatus`**: Neues State-Objekt (`ok` / `fail` / nil) pro Kanal-Key.
- **`GH:UpdateChannelJoinStatus()`**: Neue Funktion — prüft per `GetChannelNumber` welche konfigurierten Kanäle aktiv sind und schreibt das Ergebnis in `channelJoinStatus`.
- **Auto-Refresh**: Status wird automatisch aktualisiert nach `BuildChannelMap` (und damit nach `CHANNEL_UI_UPDATE`, `PLAYER_ENTERING_WORLD`) und 3 Sekunden nach jedem `JoinRecruitChannels`-Aufruf (inkl. manuellem Button-Click).
- Locale-Keys `CHANNEL_STATUS`, `STATUS_JOINED`, `STATUS_FAILED`, `NO_CHANNELS_CFG` zu enUS und deDE hinzugefügt.
---
## [1.2.7] – 2026-02-26
### Bugfix – Kanalname-Locale beim Beitreten (JoinChannel)
- **`GH.JoinChannel` locale-aware**: Bisher wurde immer der englische Kanalname übergeben (`JoinChannelByName("LookingForGroup")`). Auf einem deutschen Client erzeugt das einen leeren benutzerdefinierten Channel statt dem echten System-Kanal beizutreten. Jetzt wird via `GetLocale()` der passende lokalisierte Name verwendet (`"GruppenSuche"` auf deDE, `"Handel"` für Trade usw.) – analog zu `/join GruppenSuche` im Chat-Input.
- **Auto-Join nach `PLAYER_ENTERING_WORLD`**: Auto-Join wurde bisher in `PLAYER_LOGIN` mit 5s Delay ausgelöst. In Classic WoW sind Kanäle erst nach `PLAYER_ENTERING_WORLD` vollständig verfügbar. Der Aufruf wurde in den `PLAYER_ENTERING_WORLD`-Handler verschoben (5s Delay) und der doppelte Eintrag in `OnPlayerLogin` entfernt.
---
## [1.2.6] – 2026-02-25
### Bugfix – Auto-Post funktioniert nicht (Kernursachen behoben)
- **Live-Kanal-Map (`GH.channelMap`)**: Neues primäres Lookup-System. Wird über `CHANNEL_UI_UPDATE`-Event und `GetChannelDisplayInfo()` (Classic 1.14+/Retail) aufgebaut. Jeder eingehende `CHAT_MSG_CHANNEL` aktualisiert die Map zusätzlich. So kennt das Addon immer die echten Slot-Nummern aller Kanäle – unabhängig von Locale oder Zone-Suffix.
- **`CHANNEL_UI_UPDATE` und `PLAYER_ENTERING_WORLD` registriert**: Channel-Map wird beim Login und nach Kanalwechsel automatisch neu aufgebaut. `StartAutoPost` wird auch dann (neu-)gestartet wenn der Timer beim Login noch nicht lief.
- **`CHAT_MSG_CHANNEL` Locale-Fix**: Kanal-Monitoring nutzt jetzt `GH.CHANNEL_VARIANTS` für den Abgleich (DE: "allgemein" statt "general", "handel" statt "trade", "gruppensuche" statt "lookingfor"). Monitoring funktioniert nun auf allen WoW-Clients.
- **`GH.CHANNEL_VARIANTS` public**: Vorher `local` in Compat.lua; jetzt `GH.CHANNEL_VARIANTS` damit Core.lua und jede andere Datei dieselbe Tabelle nutzen kann.
- **`lastPostTime` nur bei erfolgreichem Post**: Bisher wurde der Timestamp auch gesetzt wenn 0 Kanäle gefunden wurden → Countdown stimmte nicht. Jetzt wird er nur in den `if posted > 0` Block geschrieben.
- **Auto-Post Feedback**: Jetzt immer eine Chat-Meldung bei Auto-Post – Erfolg (`"Auto-Post: 1 Kanal(e). Nächster Post in 30 Min."`) oder Fehler (`"Kein Kanal gefunden. /gh channels ausführen."`). User sieht immer ob es klappt.
- **Migration `postGeneral`**: Wenn beim Login ALLE Post-Kanäle deaktiviert sind (alte SavedVars mit `postGeneral=false` + kein Handel-Kanal), wird `postGeneral = true` automatisch gesetzt. Neue User haben sofort einen Fallback.
---
## [1.2.5] – 2026-02-25
### Bugfix – Channel-Spam / „Ungültiger Kanalname tausenfach"
- **Root-Cause**: `autoPostInterval = 0` (User leert das Eingabefeld) → `C_Timer.NewTicker(0, fn)` feuert jeden Spiel-Frame (~60/Sekunde). Jede Iteration ruft `PostRecruitMessage()` auf, WoW lehnt die Chat-Sendungen ab und druckt „Ungültiger Kanalname" als System-Event – das pcall fängt das NICHT ab, da es kein Lua-Fehler ist.
- **Fix 1 – Mindestintervall in `StartAutoPost`**: `math.max(5, rawMin) * 60` – mindestens 5 Minuten (300 s), egal was in der DB steht.
- **Fix 2 – Hard-Rate-Limit in `PostRecruitMessage`**: Wenn der letzte Post weniger als 60 Sekunden zurückliegt, wird `return` aufgerufen (automatischer Post-Pfad, nicht „Jetzt posten"). Letzte Schutzschicht gegen jeden Timer-Bug.
- **Fix 3 – `OnEditFocusLost` im Intervall-Feld**: Wert wird auch beim Tab-away auf mindestens 5 geclippt, nicht nur beim Enter-Drücken.
- **Fix 4 – `GetChannelNumber` Classic-API**: `GetChannelName(integer)` liefert in Classic 1.x nur einen String-Wert zurück (nicht zwei Werte wie in Retail). Der Fuzzy-Scan behandelt jetzt beide Fälle explizit (`type(r1) == "string"` → Classic, `type(r1) == "number"` → Retail/Cata+).
---
## [1.2.4] – 2026-02-25
### Überarbeitung – Minimap-Button (nach GuildDeathLog-Vorbild)
- **Goldrund-Ring** über `Interface\\Minimap\\MiniMap-TrackingBorder` (52×52), exakt wie GDL.
- **Hover-Highlight** via `Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight` mit Blend `ADD` — sanftes Aufleuchten beim Überfahren.
- **Push-Effekt**: Icon verschiebt sich bei `OnMouseDown` um 1px, kehrt bei `OnMouseUp` zurück.
- **`SetClampedToScreen(true)`** — Button bleibt immer auf dem Bildschirm.
- **Position als X/Y-Offset** (statt Winkel/Radius): `db.minimap.relX/relY` wird beim Loslassen gespeichert. Kein Trig, kein Anchor-Loop mehr möglich.
- **Drag-Stop ohne `UpdatePosition()`**: Nach `StopMovingOrSizing()` sitzt der Button bereits korrekt — kein erneutes `SetPoint` nötig (war Ursache des Anchor-Loop-Fehlers aus v1.2.3).
- Config-Default `minimap.pos` → `minimap.relX = 65, relY = 65` angepasst.
---
## [1.2.3] – 2026-02-25
### Bugfix – Minimap-Button Drag
- **Anchor-Loop nach Drag**: `UpdatePosition()` rief `btn:SetPoint("CENTER", Minimap, ...)` auf, ohne vorher `btn:ClearAllPoints()`. Nach `StopMovingOrSizing()` hält der Button noch interne Drag-Anker, was beim erneuten `SetPoint` zu „SetPoint would result in anchor family connection" führte. Behoben durch `ClearAllPoints()` direkt vor `SetPoint`.
---
## [1.2.2] – 2026-02-25
### Bugfix – Sidebar-Label Farbe
- **`SetTextColor` Lua-Ternary-Bug**: `isActive and rgba(C.gold) or rgba(C.tabInactive)` kollabiert in Lua auf einen einzigen Rückgabewert (Lua's `and`/`or` mit Multi-Return-Funktionen gibt nur den ersten Wert weiter). Folge: `SetTextColor(r)` ohne `g` und `b` → Error. Behoben durch `rgba(isActive and C.gold or C.tabInactive)` – die Ternary-Auswahl operiert jetzt auf Tabellen (single value), `rgba()` entpackt danach korrekt.
---
## [1.2.1] – 2026-02-25
### Bugfix – Kanalsuche (Auto-Post)
- **Locale-aware `GetChannelNumber`**: Klassische WoW-Clients auf Deutsch, Französisch, Spanisch usw. verwenden lokalisierte Kanalnamen (`Allgemein`, `Handel`, `GruppenSuche` statt `General`, `Trade`, `LookingForGroup`). Bisher schlug sowohl der Exakt-Abgleich als auch der Fuzzy-Scan für alle nicht-englischen Clients fehl → Addon postete in 0 Kanäle, ohne Fehlerhinweis. Behoben durch `CHANNEL_VARIANTS`-Tabelle, die alle bekannten Übersetzungen enthält.
- **Fuzzy-Scan-Bereich** von 10 auf 20 Slots erweitert (ältere Classic-Versionen mit vielen Kanälen).
- **`JoinRecruitChannels` – `General` entfernt**: `JoinChannelByName("General")` wurde fälschlicherweise aufgerufen. Der Allgemein-Kanal wird vom Spiel automatisch pro Zone beigetreten; ein manueller Beitritt kann einen leeren benutzerdefinierten `General`-Kanal erzeugen, in den dann gepostet wird, statt in den echten Zonenkanal.
- **Auto-Post-Feedback**: Wenn der automatische Post-Timer feuert und keinen Kanal findet, erscheint jetzt eine orange Warnung im Chat (`Auto-Post: Kein Kanal gefunden. Kanaele-Tab pruefen.`).
- **`/gh channels` Debug-Befehl**: Zeigt alle aktiven Kanalslots und welche davon das Addon für Posts verwenden würde (`[OK] Trade → Slot 2` oder `[--] General (nicht gefunden)`).
- **Standard `postGeneral = true`**: Neuer Standardwert aktiviert den Allgemein-Kanal für Posts, damit Classic-Spieler außerhalb von Städten (kein Handelkanal) sofort eine Zielkanal haben.
---
## [1.2.0] – 2026-02-25
### Komplett-Redesign (Major)
- **Neues Layout 880×620** – mehr Atemraum, nichts überlappt mehr.
- **Sidebar-Navigation** statt horizontaler Tabs: vertikale Buttons (148 px breit) mit gold-farbenem Akzentstreifen am linken Rand für den aktiven Tab. Hover-Effekt, kein Gedränge.
- **Immersiver Header** (72 px): Addon-Icon, Morpheus-Titelschrift in Gold, Gildenname in Fraktionsfarbe, Status-Dot + Text unten-links, subtiles Fraktions-Wasserzeichen rechts.
- **Übersichts-Tab** – großer Status-Card mit pulsierende Ambient-Glow, Morpheus-Statustext (AKTIV / INAKTIV), zentrierter Toggle-Button; darunter sauber strukturierte Konfig- und Statistik-Sektionen mit gold-Rule-Trennern.
- **Scanner-Tab** – zwei saubere Spalten (Stichwörter + Klassen-Filter / Blacklist), vertikaler Goldteiler, kein Überlappen.
- **Kanäle-Tab** – zwei Spalten: Überwachung links, Post-Kanäle + Custom-Kanäle rechts; "Alle Kanäle beitreten"-Button.
- **Nachrichten-Tab** – volle Breite, auto-save bleibt.
- **Log-Tab** – unveränderter Inhalt, neues optisches Gewicht.
- **Minimap-Button** – überarbeitetes Hover-Panel mit Aktions-Legende; Status-Dot schlägt korrekt um (fix aus 1.1.1 übernommen).
- **Paletten-Überarbeitung** – tiefes Nachtblau (`#080713`) als Basis, warme Goldtöne (`#FFD714`) als Akzent; alle Farben als table-Konstanten, kein `rgba()`-Multireturn-Problem mehr.
- **Classic-kompatibel** – keine Scale-Animationen in Classic Era, alle Icon-Pfade vanilla-sicher.
---
## [1.1.2] – 2026-02-25
### Bugfix
- **Auto-Post-Timer überlebt `/reload`**: Bisher wurde `postTimerStart` bei jedem Addon-Load auf 0 zurückgesetzt, sodass der Countdown immer von vorne begann. Jetzt wird `db.lastPostTime` (Unix-Timestamp) in den `SavedVariables` gespeichert. Beim nächsten Start wird die bereits abgelaufene Zeit abgezogen und ein einmaliger `NewTicker(remaining, fn, 1)` gestartet, der nach der echten Restzeit feuert – danach läuft das normale Intervall weiter. Falls das Intervall während des Reloads abgelaufen ist, wird sofort gepostet.
---
## [1.1.1] – 2026-02-25
### Bugfix
- **Minimap-Dot bleibt rot nach Toggle** (auch wenn Addon aktiv): `RefreshUI()` hat früh mit `return` abgebrochen wenn das Hauptfenster geschlossen war → `minimapBtn:UpdateStatus()` wird jetzt VOR dem `IsShown()`-Guard aufgerufen, sodass der Dot-Farbwechsel immer sofort sichtbar ist.
- **"Jetzt posten" ohne Rückmeldung**: Nach dem Klicken auf "Jetzt posten" gab es keine sichtbare Bestätigung. Jetzt erscheint eine Chat-Nachricht: entweder "Gepostet in X Kanal(e)" oder "Kein Kanal gefunden – bitte beitreten". Auch leere Nachricht wird jetzt explizit gemeldet.
- **Kanal-Lookup in Classic schlägt fehl** (General etc. heißt zonenspezifisch "General - Elwynn Forest"): `GetChannelNumber` macht jetzt nach exaktem Lookup einen Fuzzy-Scan über Slots 1–10 und gibt den ersten zurück, dessen Name den gesuchten String enthält.
---
## [1.1.0] – 2026-02-25
### UI-Redesign (mittlere Änderung)
- **Hauptfenster vergrößert**: 700×520 → 800×600, Header 85→100 px, mehr Luft überall
- **Scanner-Tab komplett überarbeitet**:
- `MkSection` unterstützt jetzt `xOff`- und `lineRight`-Parameter
- Linke Spalte (Suchbegriffe + Cooldown) und rechte Spalte (Klassen-Filter + Blacklist) haben jetzt korrekte, getrennte Section-Header ohne Überlappung
- Feiner goldener vertikaler Trennstrich zwischen den Spalten
- Klassen-Checkboxen dynamisch 2-spaltig mit `perCol = ceil(#classes/2)`; Abstand 26 px statt 23 px
- Suchbegriff-Liste 200 px hoch (war 140 px)
- Blacklist in die rechte Spalte unter Klassen-Filter verschoben
- **Übersicht-Tab**: Dot y=-38, Status-/Gildentext und Toggle-Button mit mehr Abstand; Trennlinie bei y=-280 (war -232)
- **IconTexture in TOC** auf `INV_Banner_02` geändert (Classic-Era-kompatibel)
---
## [1.0.3] – 2026-02-25
### Bugfix
- Minimap-Button: Icon `Achievement_GuildPerk_WeBrotherInArms_Rank2` existiert nicht in Classic Era → durch `INV_Banner_02` ersetzt (alle Stellen in MainFrame.lua)
- Fenster schloss sich sofort nach Öffnen: WoW-Animationen setzen Alpha nach Abschluss zurück → `showAG:OnFinished` setzt `f:SetAlpha(1)`, `hideAG:OnFinished` setzt `f:SetAlpha(0)` vor `f:Hide()`
---
## [1.0.2] – 2026-02-25
### Bugfix
- `SetFromScale` / `SetToScale` in Classic Era nicht vorhanden → Scale-Animationen werden nur für Retail/Wrath+ erstellt, mit nil-Guard
---
## [1.0.1] – 2026-02-25
### Bugfix
- `bad argument #2 to '?' (SetTextColor)` in `MkCheck`: `active and rgba(C.green) or rgba(C.red)` lieferte nur den ersten Rückgabewert → Farbtabelle selektieren, dann explizit entpacken
- `bad argument #2 to '?' (SetVertexColor)` in `BuildOverviewPanel:Refresh`: gleiches Problem behoben
- `bad argument #2 to '?' (SetBackdropBorderColor)` in `CreateUI`: `ApplyBackdrop` nimmt jetzt Farb-**Tabellen** `{r,g,b,a}` statt entpackte Werte