Guild Herold

GuildHerold automates guild recruitment. It scans for unguilded players, sends smart whispers, tracks invites and responses, and provides a live dashboard with stats and notes. Includes filters, blacklist/whitelist, cooldowns, and anti-spam protection.

File Details

GuildRecruiting.zip

  • R
  • Feb 25, 2026
  • 36.32 KB
  • 5
  • 1.15.8
  • Classic

File Name

GuildRecruiting.zip

Supported Versions

  • 1.15.8
# GuildHerald – Changelog

## [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

---

## [1.0.0] – 2026-02-25
### Erstveröffentlichung
- Gilden-Rekrutierungsaddon für alle WoW-Versionen (Classic Era 1.15 bis Retail 11.0)
- Immersives dunkles UI mit Goldrand (Narcissus/DialogueUI-Stil)
- Scanner: Chat-Überwachung auf konfiguierbare Suchbegriffe, Auto-Einladung mit Flüster-Nachricht
- Klassen-/Rassen-Filter, automatischer Kanal-Beitritt
- Auto-Post: Gildenwerbung alle 30–60 Min in passende Kanäle
- Protokoll-Tab mit Einladungshistorie
- Minimap-Button mit Hover-Panel (Statuspunkt, Gildenname, Einladungsstatistik)
- Lokalisierung: deDE, enUS