# DNL-Integration: Vollständige Anleitung
## GuildDeathLog → DeathNotificationLib (Option A)
**Version-Bump: 9.2.x → 9.3.0 (mittleres Update)**

---

## 1. Dateien beschaffen

### ChatThrottleLib (DNL-Dependency)
- Download: https://www.curseforge.com/wow/addons/chatthrottlelib
- Oder direkt aus dem Deathlog-Paket: `Deathlog/Libs/ChatThrottleLib.lua`
- Ablegen unter: `GuildDeathLog/Libs/ChatThrottleLib.lua`

### DeathNotificationLib
- Download (standalone): https://www.curseforge.com/wow/addons/deathnotificationlib
- Oder aus Deathlog-Paket: `Deathlog/Libs/DeathNotificationLib/` (ganzen Ordner)
- Ablegen unter: `GuildDeathLog/Libs/DeathNotificationLib/`
  ```
  GuildDeathLog/
  └── Libs/
      ├── AnimationHelper.lua          ← schon da
      ├── ChatThrottleLib.lua          ← NEU
      └── DeathNotificationLib/
          ├── DeathNotificationLib.xml  ← NEU (Haupt-Include!)
          ├── DeathNotificationLib.lua  ← NEU (deprecated single-file, trotzdem mitnehmen)
          └── ... (alle weiteren Dateien aus dem DNL-Ordner)
  ```

### DNLBridge.lua (dieses Paket)
- Ablegen unter: `GuildDeathLog/Modules/DNLBridge.lua`

---

## 2. GuildDeathLog.toc — vollständige neue Version

```
## Interface-Classic: 11508
## Interface-BCC: 20505
## Title: Das Buch der Gefallenen
## Title-enUS: The Book of the Fallen
## Notes: Verfolgt Tode von Gildenmitgliedern – Classic & TBC
## Notes-enUS: Tracks guild member deaths – Classic & TBC
## Author: PsYke86
## Version: 9.3.0
## SavedVariables: GuildDeathLogDB
## OptionalDeps: Deathlog, DeathNotificationLib

# ── Libs (REIHENFOLGE KRITISCH: CTL vor DNL!) ────────────────
Libs/ChatThrottleLib.lua
Libs/DeathNotificationLib/DeathNotificationLib.xml
Libs/AnimationHelper.lua

# ── Core ─────────────────────────────────────────────────────
Compat.lua
Config.lua
GuildDeathLog.lua

# ── Slash Commands ────────────────────────────────────────────
SlashCommands.lua

# ── Module ───────────────────────────────────────────────────
Modules/Locale.lua
Modules/ExpansionData.lua
Modules/Guild.lua
Modules/DNLBridge.lua          ← NEU (MUSS vor Sync!)
Modules/Sync.lua               ← bleibt, aber gestrippt
Modules/LastWords.lua
Modules/KillerTracker.lua
Modules/Condolences.lua
Modules/Milestones.lua
Modules/KillStats.lua
Modules/Titles.lua
Modules/Statistics.lua
Modules/HallOfFame.lua
Modules/Export.lua
Modules/Deathlog.lua
Modules/MapMarkers.lua
Modules/GuildTracker.lua
Modules/Professions.lua
Modules/GuildRoster.lua
Modules/Memorial.lua
Modules/GuildStats.lua
Modules/DangerZone.lua
Modules/DeathBell.lua
Modules/Achievements.lua
Modules/MinimapButton.lua
Modules/Debug.lua
Modules/GuildRules.lua
Modules/Calendar.lua
Modules/GuildLeader.lua
Modules/Anniversary.lua
Modules/ZoneWarning.lua
Modules/Report.lua
Modules/AnimFX.lua
Modules/UI.lua
Modules/UIChapters.lua
Modules/UIOverlay.lua
Modules/UIToasts.lua
Modules/UIWindows.lua
Modules/WhatsNew.lua
Modules/TestMode.lua
```

**Wichtig:** `ChatThrottleLib.lua` und `DeathNotificationLib.xml` stehen GANZ OBEN,
vor allem anderen. DNL braucht CTL beim Laden.

---

## 3. Sync.lua — was genau rauskommt

Folgende Blöcke suchen & löschen:

### ❌ ENTFERNEN: COMBAT_LOG Listener
```lua
-- Alles mit:
local combatFrame = CreateFrame(...)
combatFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
```

### ❌ ENTFERNEN: CHAT_MSG_SYSTEM Tod-Parser  
```lua
-- Alles mit:
frame:RegisterEvent("CHAT_MSG_SYSTEM")
-- + DEATH_PATTERNS Table
-- + TryParseDeathMessage() Funktion
```

### ❌ ENTFERNEN: CHAT_MSG_GUILD_DEATHS
```lua
frame:RegisterEvent("CHAT_MSG_GUILD_DEATHS")
-- War seit 11502 ohnehin tot — nie gefeuert
```

### ❌ ENTFERNEN: BroadcastDeath()
```lua
function Sync:BroadcastDeath(deathData) ... end
-- DNL übernimmt Broadcasting
```

### ❌ ENTFERNEN: Dedup-Cache
```lua
local dedupCache = {}
local dedupOrder = {}
-- + IsDuplicate() + RegisterChecksum() Funktionen
```

### ✅ BEHALTEN: Alles andere
- `RequestFullSync()` — manueller Gildensync bleibt
- `HandleSyncRequest()` — auf Sync-Anfragen antworten
- Supporter-Sync (wenn vorhanden)
- Guild-Roster-Sync (wenn vorhanden)

### ✅ HINZUFÜGEN: GDL-Data-Broadcast (aus Sync_GDLOnly.lua)
- `BroadcastGDLData()` — Last Words nach Tod broadcasten
- `OnGDLDataReceived()` — Last Words von anderen empfangen
- `RegisterGDLDataHandler()` — in Initialize() aufrufen

---

## 4. TestMode.lua / SlashCommands.lua anpassen

### Test-Command:
```lua
-- VORHER:
RegisterCmd("test", function()
    local Sync = GetModule("Sync")
    if Sync then Sync:SendTestDeath() end
end)

-- NACHHER:
RegisterCmd("test", function()
    local Bridge = GetModule("DNLBridge")
    if Bridge then
        Bridge:SendTestDeath()
    else
        GDL:Print("|cffFF4444[TEST]|r DNLBridge nicht geladen!")
    end
end)
```

### Neuer Status-Command:
```lua
RegisterCmd("dnl", function()
    local Bridge = GetModule("DNLBridge")
    if Bridge then Bridge:PrintStatus() end
end, {"deathnotif"})
```

---

## 5. Config.lua — neue Settings

In `Config.SETTING_DEFAULTS` ergänzen:
```lua
deathlogIntegration = true,   -- Server-weite Deathlog-Statistiken nutzen
guildlessMode       = false,  -- Tode auch ohne Gilde tracken
minPeerReports      = 0,      -- Mindest-Peers für Overlay (0 = sofort)
```

---

## 6. CHANGELOG.md Eintrag

```markdown
## [9.3.0] - 2026-03-09

### Architektur
- DeathNotificationLib (DNL) als Lib-Dependency eingebunden
- Neues DNLBridge-Modul: einzige Schnittstelle zu DNL
- Sync.lua von Todeserkennung befreit (nur noch GDL-spezifischer Sync)

### Fixes (durch DNL)
- CRITICAL: CHAT_MSG_GUILD_DEATHS entfernt (seit Interface 11502 nicht existent)
- Korrekte Environmental-Death-Erkennung (Lava, Ertrinken, Absturz)
- Checksum-Dedup via DNL's eigenem LRU-Cache (kein doppeltes Eintragen mehr)

### Added
- Background /who-Enrichment: Level/Klasse/Race für fremde Tode (via DNL)
- Map-Koordinaten bei Tod (player_data.map_pos) — neue Felder in deathData
- Peer-Verifikation: peerReport-Counter zeigt Vertrauenswürdigkeit
- Fallback-Detektor: funktioniert auch ohne DNL installiert
- /gdl dnl → Status der DNL-Integration anzeigen
- Interoperabilität mit Deathlog-Nutzern (gemeinsames Protokoll)

### Removed
- Sync.lua: eigener COMBAT_LOG Listener (→ DNL)
- Sync.lua: CHAT_MSG_SYSTEM Tod-Parser (→ DNL)  
- Sync.lua: eigener BroadcastDeath Protokoll-Code (→ DNL)
- DeathDetection.lua aus letzter Session (nicht mehr nötig)
```

---

## 7. Verifikation nach Einbau

```
/gdl dnl              → Zeigt DNL-Status (AKTIV oder FALLBACK)
/gdl test             → Testet DNLBridge:SendTestDeath()
/gdl debug            → Debug-Fenster für Rohzustand
```

Erwartetes Ergebnis bei DNL installiert:
> `[DNLBridge] Status: AKTIV — DeathNotificationLib angebunden`

Erwartetes Ergebnis ohne DNL:
> `[DNLBridge] Status: FALLBACK — Einfacher Detektor aktiv`

---

## 8. Zusammenfassung: Was hat sich für Nutzer geändert?

| Feature | Vorher | Nachher |
|---|---|---|
| Todeserkennung | Eigener Code (unvollständig) | DNL (battle-tested, 3.1M Nutzer) |
| Killer-Info | Oft "Unbekannt" | NPC-ID aus DNL's Datenbank |
| Environmental Deaths | Manchmal erkannt | Immer erkannt |
| Map-Koordinaten | Nicht vorhanden | Neu via DNL |
| Peer-Sync | Eigenes Protokoll | DNL-Protokoll (kompatibel mit Deathlog-Nutzern) |
| Dedup | Einfacher Cache | DNL's LRU-Cache |
| Interop mit Deathlog | Keine | Vollständig |
