# Deathlog-Analyse & GDL Upgrades
**Quelle:** https://github.com/aaronma37/Deathlog (3.1M Downloads, bewährtes Hardcore-Addon)  
**GDL Version:** 9.2.0 → 9.3.0

---

## Was Deathlog besser macht (und wir übernehmen)

### 🔴 KRITISCH: `CHAT_MSG_GUILD_DEATHS` entfernt seit Interface 11502

Deathlog hat einen expliziten Kommentar im Code:

```lua
-- death_notification_lib_event_handler:RegisterEvent("CHAT_MSG_GUILD_DEATHS") 
-- NOTE: This was removed in 11502
```

**Was das bedeutet für uns:**
- Falls `Sync.lua` oder `GuildDeathLog.lua` noch auf `CHAT_MSG_GUILD_DEATHS` hört → totes Event, feuert nie
- Interface 11508 (unser Ziel) hat dieses Event definitiv nicht mehr
- **Fix:** `CHAT_MSG_GUILD_DEATHS` raus, stattdessen `COMBAT_LOG_EVENT_UNFILTERED` + `CHAT_MSG_SYSTEM`

**Prüfen mit:** `grep -rn "CHAT_MSG_GUILD_DEATHS" . --include="*.lua"`

---

### 🟡 WICHTIG: Checksum-basierte Deduplizierung

**Problem ohne Dedup:**
Gildenmitglied stirbt → Mitglied B broadcastet → Mitglied C broadcastet  
→ Wir tragen denselben Tod 2-3x ein, Buch ist voll mit Duplikaten.

**Deathlog's Ansatz (LRU-Cache):**
```lua
-- 30-Sekunden Buckets: gleicher Tod = gleiche Checksum
local bucket = math.floor(timestamp / 30)
local checksum = name .. ":" .. bucket

-- LRU mit max. 64 Einträgen
if dedupCache[checksum] then return end  -- Duplikat → weg
```

**Unsere Implementierung:** `DeathDetection.lua` enthält das vollständig.  
**Sync.lua:** Patch in `SyncDedup_Patch.lua` beschrieben.

---

### 🟡 WICHTIG: Korrekter CombatLog-Feldlayout

Deathlog nutzt diesen exakten Layout für Environmental Deaths:

```lua
-- Environmental Damage vormerken (kommt VOR UNIT_DIED)
-- Felder: timestamp, subevent, hiddenCaster, sourceGUID, sourceName,
--         sourceFlags, sourceFlags2, destGUID, destName, destFlags,
--         destFlags2, envType, amount, overkill, school, ...
local _, ev, _, _, source_name, _, _, target_guid, _, _, _, 
      environmental_type = CombatLogGetCurrentEventInfo()
```

Warum wichtig: `ENVIRONMENTAL_DAMAGE` + `envType` erklärt ob jemand ertrunken ist, 
in Lava gefallen ist etc. Ohne das steht im Popup nur "Unbekannt" als Killer.

---

### 🟢 NICE TO HAVE: Background `/who` Enrichment

**Problem:** Wenn jemand außerhalb unserer Renderweite stirbt, kennen wir via  
`CHAT_MSG_SYSTEM` nur den Namen — kein Level, keine Klasse, keine Race.

**Deathlog's Lösung:**
> Automatic /who enrichment — Blizzard death messages only include the player's name;  
> Deathlog fills in level, class, race, and guild via a background lookup.

**Unsere Implementierung in `DeathDetection.lua`:**
- Verzögerter `/who`-Request (2.5s nach Todeserkennung)
- `WHO_LIST_UPDATE` Event abfangen
- Tod-Eintrag nachträglich mit Daten updaten via `Deathlog:UpdateEntry()`

**Hinweis:** Braucht `Deathlog:UpdateEntry(name, timestamp, fields)` Methode im Deathlog-Modul!  
Falls nicht vorhanden → muss nachgebaut werden.

---

### 🟢 NICE TO HAVE: Guildless Mode

Deathlog hat explizit eine Option für Todeserkennung ohne Gildenmitgliedschaft:

```lua
-- "Toggle guildless death logging. Guild-based death logging requires 
-- validation from guildmates. Guildless logging allows deaths to get logged 
-- without being validated."
```

**Für uns relevant:** Spieler ohne Gilde können das Addon trotzdem nutzen.  
Setting in `Config.lua` eintragen: `guildlessMode = false` als Default.

---

## Was Deathlog macht das wir NICHT übernehmen

| Feature | Grund |
|---|---|
| CTL (ChatThrottleLib) für BULK-Sends | Wir haben zu wenig Traffic dafür |
| Eigene `collected_entries.lua` DB (1M+ Einträge) | Community-Feature, andere Skala |
| Validation popup für fremde Spieler ohne Addon | Scope-Creep, unnötige Komplexität |
| TBC-spezifische Zone-Detection | Unser Fokus ist Era HC |
| Python-Scripts für DB-Analyse | Dev-Tools, nicht Addon-Bereich |

---

## Implementierungs-Checkliste

- [ ] `CHAT_MSG_GUILD_DEATHS` aus dem ganzen Projekt entfernen
  - `grep -rn "CHAT_MSG_GUILD_DEATHS" . --include="*.lua"`
- [ ] `DeathDetection.lua` in `Modules/` einbinden
- [ ] `GuildDeathLog.toc` aktualisieren: `Modules/DeathDetection.lua` nach Core, vor Sync
- [ ] Sync.lua: `OnCommReceived` auf `DeathDetection:OnSyncedDeath()` delegieren
- [ ] `Deathlog:UpdateEntry()` implementieren (für /who Enrichment)
- [ ] Setting `guildlessMode` in Config.lua + Settings-UI hinzufügen
- [ ] `whoEnrichment` Setting in Config.lua + Settings-UI hinzufügen
- [ ] Version auf 9.3.0 bumpen (mittleres Update)
- [ ] CHANGELOG.md erweitern

---

## TOC Ladereihenfolge (nach Änderung)

```
# Core
GuildDeathLog.lua
Compat.lua
Config.lua

# Libs
Libs/AnimationHelper.lua

# Slash
SlashCommands.lua

# Module — Reihenfolge wichtig!
Modules/DeathDetection.lua    ← NEU (muss vor Sync!)
Modules/Sync.lua
Modules/Deathlog.lua
...
```

---

## Version-Bump

| Datei | Alte Version | Neue Version |
|---|---|---|
| GuildDeathLog.toc | 9.2.0 | 9.3.0 |
| Config.lua ADDON_VERSION | 9.2.0 | 9.3.0 |
| GuildDeathLog.lua | 9.2.0 | 9.3.0 |

Changelog-Eintrag:
```markdown
## [9.3.0] - 2026-03-09
### Fixes
- CRITICAL: CHAT_MSG_GUILD_DEATHS entfernt (seit Interface 11502 nicht mehr vorhanden)
### Added
- Neues DeathDetection-Modul mit korrektem CLEU-Feldlayout
- Checksum-basierte Deduplizierung (kein doppeltes Eintragen mehr)
- Environmental Death Erkennung (Ertrinken, Lava, Absturz etc.)
- Background /who-Enrichment für fremde Tode
- Guildless Mode (opt-in, default: off)
```
