# GuildDeathLog v6.2.0 – Bugfix Release

## Bug Fixes

### 1. Debug-Button Position (UI.lua)
- **Problem:** Debug-Button erschien am falschen Platz (Y=0 statt Reihe 4)
- **Ursache:** `btnY4` wurde referenziert bevor es definiert war → nil → Default Y=0
- **Fix:** Button-Erstellung nach `btnY4 = 17` Definition verschoben

### 2. Statistics: "Unknown: 6" bei Klassen (Statistics.lua)
- **Problem:** Klassen-Breakdown zeigte "Unknown: 6" ohne Icon
- **Ursache:** `CLASS_NAMES_BY_ID` hatte keinen Eintrag für `classId = 0`
- **Fix:** `[0] = "Unbekannt/Unknown"` zum Mapping hinzugefügt, UI zeigt Fragezeichen-Icon

### 3. Statistics: "Keine Daten" bei Killern (Deathlog.lua, Sync.lua)
- **Problem:** Monster/Killer-Sektion zeigte "Keine Daten / No data"
- **Ursache:** Deathlog-Import übernahm `source_id`/`source_name` nicht
- **Fix:** Killer-Daten (`killerName`, `killerId`) werden jetzt aus Deathlog-Einträgen importiert

### 4. Titel nicht sichtbar (Milestones.lua)
- **Problem:** "Kein Titel ausgewählt" trotz freigeschalteter Meilensteine
- **Ursache:** Key-Format-Wechsel von Name-Realm auf GUID. Alte Daten unter altem Key, neuer Code sucht unter GUID
- **Fix:** Automatische Datenmigration beim Login (Milestones, KillStats, Titles)

### 5. Milestone-Reset bei Update (Milestones.lua)
- **Problem:** Meilenstein-Fortschritt wurde fälschlich auf 0 zurückgesetzt
- **Ursache:** HC-RESET Detection feuerte falsch wenn `UnitLevel("player")` = 0 (Ladescreen) oder bei Key-Format-Mismatch
- **Fix:**
  - UnitLevel=0 Schutz: Check wird auf 8 Sekunden verzögert
  - Sicherheitsmarge von 5 auf 10 Level erhöht
  - HC-Reset in eigene Funktion `CheckHCReset()` ausgelagert
  - Datenmigration verhindert Key-Mismatch

### 6. Fehlende Milestone-Icons (Milestones.lua, Titles.lua)
- **Problem:** Einige Milestones/Titel zeigten keine Icons
- **Ursache:** Nicht-Classic Icons verwendet (WotLK/Cata)
- **Ersetzungen:**
  - `Achievement_GuildPerk_EverybodysFriend` → `INV_Crown_01`
  - `Achievement_Profession_Chefhat` → `Trade_Engineering`
  - `Spell_Fire_Ragnaros_Lavabolt` → `Spell_Fire_Lavaspawn`
  - `Spell_Holy_BorrowedTime` → `Spell_Holy_SealOfWrath`
  - `Spell_Shadow_DemonicTactics` → `Spell_Shadow_SummonFelGuard`
  - `INV_Misc_PocketWatch_02` → `INV_Misc_PocketWatch_01`
  - `INV_Misc_PocketWatch_03` → `Spell_Holy_Resurrection`

## Discord Bot v3.0 — Multi-Tier + Multi-Addon

### Neues Code-Format (v4)
- **Format:** `GDL-G-202602-ABCD1234-123456` (Prefix-Tier-Monat-Token-Checksum)
- **Tier-Codes:** B = Bronze, S = Silber, G = Gold
- **Backward-kompatibel:** Altes Format `GDL-YYYYMM-TOKEN-CC` wird weiterhin erkannt (als Bronze)

### config.py — Komplett neu
- **TIERS dict:** Beliebig viele Tiers mit role_id, Code-Buchstabe, Prioritaet, Features, Addon-Liste
- **ADDONS dict:** Beliebig viele Addons mit eigenem Secret und Prefix
- **Helper-Funktionen:** get_highest_tier(), get_tier_by_code(), get_all_supporter_role_ids()
- **Sofort erweiterbar:** Neue Rolle? Eintrag in TIERS, role_id eintragen, fertig

### code_gen.py v4
- Tier-Code fliesst in Hash ein (verschiedene Tiers = verschiedene Codes)
- generate_all_codes_for_tier() fuer Multi-Addon-Versand
- verify_code() erkennt automatisch v3 (Legacy) und v4 (Multi-Tier)

### bot.py v3
- Erkennt automatisch hoechsten Tier bei Usern mit mehreren Rollen
- /mystatus zeigt Tier-spezifischen Embed mit Farbe und Emoji
- /gencode hat neuen tier-Parameter (B/S/G)
- /supporter listet gruppiert nach Tier
- /tiers neuer Command: zeigt alle konfigurierten Tiers
- on_member_update erkennt Tier-Upgrades und sendet neuen Code
- Startup-Log zeigt Supporter pro Tier aufgeschluesselt

### Addon-seitig (GuildDeathLog.lua)
- ValidateSupporterCode() parsed neues UND altes Format
- Speichert supporterTier und supporterPriority in DB
- Neue API: GetSupporterTier(), GetSupporterPriority(), HasSupporterTier("S")
- RequireSupporter("G") kann jetzt Mindest-Tier verlangen
- Module koennen Features per Tier gaten: if GDL:HasSupporterTier("S") then ...

## Discord Bot Fixes (bot.py)

- **`is_admin` doppelt definiert:** Zusammengeführt in eine Funktion (akzeptiert Interaction und Member)
- **`/mystatus` Crash:** `member` war undefiniert → durch `interaction.user` ersetzt
- **`/gencode` Crash:** `generate_code()` wurde ohne `user_id` aufgerufen → neuer Pflichtparameter `user: discord.Member`

## Technische Details
- TOC: Interface 11508, Version 6.2.0
- Alle Icons gegen Classic 1.15.8 Icon-Datenbank verifiziert
- Datenmigration: Einmalig, Name-Key → GUID-Key, kein Datenverlust
