Guild Chronicle

Tracks guild member deaths in Hardcore mode with an immersive memorial book UI and server-wide death statistics from Deathlog.

File Details

GuildDeathLog v9.6.2

  • R
  • Mar 12, 2026
  • 8.39 MB
  • 148
  • 2.5.5+1
  • Classic + 1

File Name

GuildDeathLog.zip

Supported Versions

  • 2.5.5
  • 1.15.8
## [9.6.2] — 2026-03-12

### TBC 2.5.5 Kompatibilitaet
- TOC: `## Interface-BCC: 20505` hinzugefuegt
- GuildCompetition nutzt jetzt den Compat-Layer (addon._compat) fuer SendAddonMessage und RegisterAddonMessagePrefix
- Kein direkter Zugriff auf C_ChatInfo mehr — funktioniert in Classic Era UND TBC

### Bugfix: Punkte-Persistenz
- **PLAYER_LOGOUT + PLAYER_LEAVING_WORLD**: Daten werden IMMER beim Ausloggen gespeichert
- **Dirty-Save Timer**: Kills werden 2s nach dem letzten Kill gebatcht gespeichert statt zufaellig (1:10 Chance war vorher = Datenverlust)
- Punkte bleiben jetzt zuverlaessig nach Relog/Disconnect stehen

### Verbesserung: Intra-Guild Spieler-Sync
- Neuer Nachrichtentyp "P" (Player): Gildenmitglieder teilen ihre eigenen Punkte + Kill-Anzahl per GUILD-Channel
- Spieler-Rangliste zeigt jetzt auch Kills von anderen Gildenmitgliedern (nicht nur eigene)
- Remote-Spielerdaten werden mit "nur hoeher"-Logik akzeptiert (kein Rollback)
- Gilden-Score wird weiterhin cross-guild per INSTANCE_CHAT und YELL geteilt

### Farb-Audit: Buch-Pergament Einheitlichkeit
- **UIChapters.lua**: Alle `|cffCC0000` (grelles Rot) auf `|cff7A3010` (Pergament-Rotbraun) geaendert
- **UIChapters.lua**: `|cff1A7A1A` (grelles Gruen) auf `|cff3A7030` (gedaempftes Gruen) geaendert
- **UIChapters.lua**: `|cffAA2020` (helles Rot) auf `|cff7A3010` (Pergament-Rotbraun) geaendert
- **UI.lua**: Gefahrenzonen-Farbstufen von Neon-Lila/Rot auf Braun-Abstufungen geaendert
- **UIGuildStats.lua**: Komplett neugeschrieben mit reiner Pergament-Palette (9 Braun/Sepia-Toene)

## [9.6.1] — 2026-03-12

### Bugfix: Meilenstein-Toast komplett repariert

#### UIToasts.lua
- **Kategorie-Mapping komplett**: Alle 12 Meilenstein-Kategorien (level, survival, dungeon, raid, kills, profession, pvp, wealth, quests, social, meta, secret) haben jetzt eigene Farben und Labels. Vorher nur 5 (combat, survival, social, legend, death) — keine davon passte zu den echten Kategorien
- **Korrekte Badge-Texte**: "CHARAKTER-LEVEL", "DUNGEON-MEILENSTEIN", "KAMPF-MEILENSTEIN" etc. statt generischem "MEILENSTEIN"
- **Safety-Fallbacks**: Icon faellt auf Fragezeichen-Icon zurueck wenn nil, Name faellt auf "Unbekannt" zurueck

#### SurvivalStreak.lua
- **Toast-Aufruf repariert**: Uebergab `title/text/subtext` statt `name/desc/icon/category` an ShowMilestoneToast — dadurch fehlten Icon, Name und Kategorie-Farbe komplett

## [9.6.0] — 2026-03-12

### Neues Feature: Gilden-Wettbewerb & Leaderboard

#### GuildCompetition.lua (Neues Modul)
- **Punktesystem**: Jeden Kill = Punkte je nach Gegnertyp (0-50 Pkt)
- **7 Gegnerkategorien**: Normal (1), Elite (5), Selten (10), Selten Elite (15), Dungeon-Boss (25), Weltboss (50)
- **Todes-Strafe**: Gildenmitglied-Tod = -500 Punkte (Hardcore!)
- **Cross-Guild Leaderboard**: Sync ueber "GDLComp" Addon-Channel (GUILD, INSTANCE_CHAT, YELL)
- **100+ bekannte Classic Dungeon-Bosse** als Lookup-Table fuer praezise Klassifizierung
- **Dirty-Flag Pattern** fuer performante Score-Neuberechnung
- **7-Tage Verfall** fuer inaktive Gilden im Leaderboard

#### UIGuildStats.lua (Neues UI-Modul)
- Buch-Kapitel XIII umgebaut: "Kill-Statistiken" → "Gilden-Wettbewerb"
- Gilden-Score gross im Buch-Stil (MORPHEUS-Font, Pergament-Farben)
- Leaderboard mit Balkendiagramm (eigene Gilde hervorgehoben)
- Spieler-Rangliste mit Klassenfarben und Kill-Aufschluesselung
- Persoenliche Jagdstatistik nach Kategorie
- Punktelegende am Seitenende

#### Integration
- KillStats.lua: Kills werden automatisch an GuildCompetition weitergeleitet
- Sync.lua: Tode loesen Strafpunkte in GuildCompetition aus
- SlashCommands.lua: `/gdl guildcomp` (Aliase: gc, wettbewerb, competition, leaderboard)

#### Housekeeping
- Versions-Mismatch behoben (Config.lua/SlashCommands sagten 9.3.0, TOC/Core sagten 9.5.0)
- Alle Versionsnummern konsistent auf 9.6.0

## [9.5.0] — 2026-03-10

### Fixed / Improved — UI Lesbarkeit & Kontrast

#### Buttons allgemein
- `CreateElegantButton`: Hintergrundfarbe deutlich aufgehellt (`0.38, 0.28, 0.14`), Textfarbe von fast-Schwarz auf Gold-Braun (`0.62, 0.46, 0.22`), Hover-State ebenso aufgehellt

#### Ruhmeshalle
- Banner-Text „Unsterbliche / Krieger des Lichts" von `#4A3A28` auf `#8A6010` angehoben

#### Grün-Farben (Pergament-Kontrast)
- Alle grellen `#00FF66` / `#44FF88` Grün-Töne auf dezentes `#3A7030` reduziert
- Lebend-Badges, Online-Status, Achievement-Status betroffen

#### Kill-Statistiken
- `#CC0000` Knallrot → `#7A3010` (Braunrot, Pergament-konform)
- Kill-Balken-Farbe gedämpft, Umgebungsschaden-Counter ebenfalls angepasst

#### Klassen-Icons
- `CLASS_ICONS` in `UI.lua` um String-Keys erweitert: englische Klassen-IDs (`WARLOCK`, `ROGUE`, etc.) und deutsche Namen (`Hexenmeister`, `Schurke`, etc.) → Icons erscheinen jetzt auch wenn `deathData.class` ein String ist

#### Schwarzes Brett
- „Neuen Beitrag anpinnen"-Button aufgehellt, lesbare Gold-Textfarbe

#### Gildenregeln
- Bearbeiten-Button aufgehellt
- **Offizier-Zugriff**: Button nur noch sichtbar für Rang ≤ 2 (GM / Officer / Senior Officer) via `GuildLeader:CanEdit()`

#### Gildenkalender
- „Neues Event"-Button aufgehellt
- Inaktive Response-Buttons (Zusagen / Absagen) kontrastreicher
- Event-Erstellung auf Officer+ beschränkt (`GuildLeader:CanEdit()`)

#### Footer-Icons (rechte Buchseite)
- Icons jetzt in einer dezenten Hintergrundleiste (`iconBar`) statt frei im Buchrand gequetscht
- Leiste mit Backdrop + Border, Icons sauber nebeneinander linksbündig ausgerichtet

### Added
- `GuildLeader:CanEdit()` — gibt `true` für Rang ≤ 2 zurück (GM / Officer / Senior Officer)

---

## [9.4.3] — 2026-03-10

### Fixed
- **GuildLeader.lua:869**: `GetGuildInfo("player") or (nil, nil, 0)` — Lua erlaubt kein Multi-Return mit `or` → auf zwei Zeilen aufgeteilt
- **UIChapters.lua:1702**: Literaler Zeilenumbruch in Lua-String → `\n` Escape

---

## [9.4.2] — 2026-03-10

### Fixed
- **Löschen im Buch**: Fehlender Delete-Button in `RenderMemorial` (Gedenkhalle).
  - Kleines `×`-Symbol erscheint beim Hover über jeden Eintrag (links neben Nachruf-Edit)
  - Mit gesetztem Admin-Passwort → Passwort-Dialog; ohne Passwort → einfacher Bestätigungs-Dialog
  - Löschen wird per `BroadcastDelete` an alle Gildenmitglieder synchronisiert
  - Edit- und Delete-Button sind initial unsichtbar, erscheinen nur bei Hover
- **Calendar Serialize**: Eventname auf 40 Zeichen, Beschreibung auf 180 Zeichen begrenzt → verhindert Überschreiten des 255-Byte WoW-Addon-Message-Limits

### Confirmed Working
- **Gildenkalender-Sync**: Vollständig implementiert (ADD, DELETE, RESPONSE, SYNC, REQUEST über `GDLCal`-Channel). Alle Gildenmitglieder mit dem Addon empfangen Events automatisch.

---

## [9.4.1] — 2026-03-10

### Fixed
- **Nicht-Gildenmitglieder im Buch**: `Sync:RecordLocalDeath` prüfte den Gilden-Status des Toten nicht. Jetzt wird `Guild:IsMember()` + `inGuild`-Flag + Gildenname-Vergleich geprüft. GuildlessMode bleibt weiterhin die Opt-in-Ausnahme.
- **Koordinaten 0.0, 0.0**: `coordX/coordY` (Buch-Format) und `posX/posY` (Sync-Format) waren nicht synchronisiert. Normalisierung beim Speichern eingebaut. `0,0`-Werte werden zu `nil` gesetzt → Buch zeigt keine Koordinaten wenn keine vorhanden.
- **Killer #-1**: `source_id < 0` bedeutet Spieler-Kill (PvP) oder Environment → wird jetzt als "Unbekannt" aufgelöst statt "Kreatur #-1". Fallback-Detektor erkennt Spieler-GUIDs und setzt Killer auf Spielername.
- **Mehrere Töne bei Tod**:
  - `AnimFX.BellTolls` + `AnimFX.DeathCinematic` spielten `PlaySound(878)` = **Level-Up Sound** → entfernt
  - `Sync:RecordLocalDeath` + `Sync:ProcessIncomingDeath` spielten `PlaySound(8959)` (Raid-Warn) direkt → entfernt, delegiert an `DeathBell:Play()`
  - `DeathBell`: Doppelton → Einzelton; Sound von `BellTollNightElf.ogg` → `BellTollAlliance.ogg` (tiefer, passender Grabgeläut)
  - Jetzt: **ein einziger Sound**, gesteuert durch DeathBell-Modul

---

## [9.4.0] — 2026-03-10

### Fixed (Vollständiger Cross-Module Audit)

**Methoden-Fehler:**
- **DNLBridge**: `KillerTracker:GetNPCName()` existiert nicht → durch `npcNames`-Tabellen-Lookup ersetzt
- **Calendar**: `GDL:IsAdmin()` existiert nicht, kein Guard → durch `GuildLeader:IsAdmin()` ersetzt
- **GuildLeader**: `IsAdmin()` neu hinzugefügt (Rang ≤ 1 = GM/Officer)
- **Milestones**: `TestLevelMilestones()` + `ForceUnlockCurrentLevel()` fehlten → beide hinzugefügt (für `/gdl` Slash-Commands)

**Config-Defaults:**
- `dangerZoneEnabled`, `deathBellEnabled`, `overlayPosition`, `patreonName` in `SETTING_DEFAULTS` ergänzt — verhindert nil-Crashes bei frischer DB

**Double-Initialize (13 Module):**
- `GDL:InitializeModules()` ruft `Initialize()` auf allen Modulen auf
- 13 Module (Anniversary, Calendar, DNLBridge, DeathHeatmap, GuildLeader, GuildRoster, KillerPortrait, LastHours, PlayedTime, Professions, Report, SurvivalStreak, ZoneWarning) riefen sich am Dateiende selbst auf → `_initialized`-Guard eingebaut

**Akzeptiert (kein Fix nötig):**
- `UI:RefreshRosterOverlay` — Guard vorhanden, Feature fehlt bewusst
- `MapMarkers WORLD_MAP_UPDATE` — pcall-gesichert
- `GDL:UpdateSupporterStatus/Milestones` — Guards vorhanden
- TOC-Ladereihenfolge DNLBridge — GetModule ist lazy, kein echtes Problem

---

## [9.3.3] — 2026-03-10

### Fixed (Death-Pipeline — kritisch)
- **DNLBridge**: Doppeltes Overlay entfernt — `_PipelineStep2` zeigte Overlay, `Sync:RecordLocalDeath` ebenfalls → jetzt nur noch über `RecordLocalDeath`
- **DNLBridge**: `HM.ShowForMap(mapId)` → `HM:UpdateMap()` (Funktion existierte nicht)
- **Sync**: `ShowOverlay(deathData, false)` → `ShowOverlay(deathData, deathData.isSelf)` — eigene Tode werden jetzt korrekt als solche angezeigt
- **Sync**: GuildlessMode-Fallback in `RecordLocalDeath` — Tode werden jetzt unter `_GUILDLESS_` gespeichert wenn kein Gildenname vorhanden (statt lautlosem Verwerfen)

---

## [9.3.2] — 2026-03-10

### Fixed
- **DNLBridge**: `GetModule("DeathScreenshot")` entfernt — Modul existiert nicht. Screenshot läuft intern über `PlayedTimeTracker` (kein Funktionsverlust)
- **GDL_Commands_v930.lua / UIChapters_Patch.lua**: Emojis (πŸ“πŸ—ΊοΈ) durch WoW-kompatible Texte ersetzt (nicht im TOC, aber auf Disk — präventiv)

---

# Das Buch der Gefallenen - Changelog

## Version 9.3.0 — "Fake 3D: Das Buch lebt"

### UI: Fake-3D Parallax & Tiefe
- **Parallax-Effekt**: Staubmoten und Lichtreflex bewegen sich traege relativ zur Maus-Position
- **Tiefer Buchfalz-Schatten**: Multi-Layer Schatten statt flacher 2px Linie → echte Tiefenwirkung
- **Seiten-Lichtreflex**: Subtiler heller Schein auf der rechten Buchseite, folgt der Maus
- **Ecken-Vignette**: Dezente Abdunkelung an Buchecken fuer mehr Tiefe

### Visual Fixes (aus Screenshot-Analyse)
- **Gedenkhalle**: Datums-Anzeige rechts oben nicht mehr abgeschnitten (Font groesser, explizite Width)
- **Gedenkhalle**: Name-FontString begrenzt auf 190px damit kein Overlap mit Datum
- **Statistiken**: Zonennamen ueberlagern nicht mehr die Balken (Label-Width 100→120, Bar-Offset 100→122)
- **Kill-Statistiken**: Umgebungsschaden prominenter dargestellt mit Icon, Header-Box und Anteil-Balken
- **Kondolenzbuch**: Alternating Row-Tint fuer bessere Lesbarkeit
- **Kondolenzbuch**: Separatoren staerker sichtbar (Alpha 0.15→0.30, Offset angepasst)
- **Kondolenzbuch**: Hover-OnLeave stellt Alternating-Tint korrekt wieder her

### Technik
- Alle Fake-3D Effekte nutzen ausschliesslich SetColorTexture (keine SetGradient/CreateColor Abhaengigkeit)
- Parallax-Smoothing via Delta-Time Lerp (keine harten Spruenge)
- Staubmoten haben individuelle Parallax-Tiefe (depth-Parameter)
- Performance: Parallax-Ticker prueft IsShown() als Guard

### TOC
- Version: 9.2.0 → 9.3.0

---


## Version 9.2.0 — "What's New: Die Timeline"

### Neues Modul: WhatsNew.lua
Timeline-Style Changelog-Popup, inspiriert vom Deathlog-Addon.

- **Timeline-UI**: Vertikale Timeline mit Versions-Nodes von v4.5 bis aktuell
- **Farbcodierung**: Major (Gold), Feature (Gruen), Fix (Blau), Current (Highlight)
- **Auto-Popup**: Zeigt sich automatisch bei Versionsupdate (einmalig pro Version)
- **Discord-Integration**: Klickbarer Link mit Copy-Dialog (discord.gg/yHA6SKZPEv)
- **Scroll-to-Current**: Scrollt automatisch zum neuesten Eintrag
- **Slash-Commands**: `/gdl news`, `/gdl whatsnew`, `/gdl changelog`, `/gdl wn`
- **FadeIn-Animation + Sound** beim Oeffnen/Schliessen
- **Pulsierender Glow** am aktuellen Versions-Node

### SavedVariables
- `GuildDeathLogDB.whatsNewSeen` — gespeicherte letzte gesehene Version (verhindert Doppel-Popup)

### TOC
- Version: 9.1.0 → 9.2.0
- WhatsNew.lua nach UI-Modulen eingetragen

### SlashCommands
- `news` Command + Aliases registriert
- Help-Text aktualisiert auf v9.2.0

---

## Version 9.1.0 — "UI-Split: Das Monster zerlegt"

### UI.lua Aufspaltung (7292 → 5 Dateien)
Die monolithische UI.lua (7292 Zeilen) wurde in 5 spezialisierte Dateien aufgeteilt.
Alle Funktionen bleiben auf derselben UI-Table — externe Aufrufer (Sync, Deathlog, etc.) sind nicht betroffen.

- **UI.lua** (1019 Zeilen): Book-Frame, Navigation, Inhaltsverzeichnis, Show/Hide, Shared State + Helpers
- **UIChapters.lua** (2878 Zeilen): Alle RenderXxx() Funktionen fuer die rechte Buchseite (Memorial, HallOfFame, Statistics, Milestones, Achievements, Condolences, Calendar, etc.)
- **UIOverlay.lua** (856 Zeilen): Death-Popup-Overlay, Chronik-Eintraege, Tag-Trenner, Passwort-Dialog
- **UIToasts.lua** (810 Zeilen): Achievement-, Milestone- und Calendar-Toast-Benachrichtigungen
- **UIWindows.lua** (1805 Zeilen): Settings, Standalone-Fenster (HallOfFame, Statistics, KillStats, Milestones, Titles)

### Architektur
- Shared State ueber `addon._UI` Bridge: Sub-Files greifen auf dieselbe UI-Table zu
- File-lokale Queues (overlayQueue, achToastQueue, calToastQueue) auf `UI._xxx` Table verlagert
- GDL_ScaleLerp als `UI.ScaleLerp` exponiert, CLASS_COLORS/ICONS als `UI.CLASS_COLORS`/`UI.CLASS_ICONS`
- ClassColorHex, CleanKillerName, CountDeathsOnDay als UI-Methoden statt file-lokale Funktionen
- Einziges `GDL:RegisterModule("UI", UI)` in UI.lua Core — kein doppeltes Registrieren

### TOC
- Version: 9.0.0 → 9.1.0
- Ladereihenfolge: UI.lua → UIChapters.lua → UIOverlay.lua → UIToasts.lua → UIWindows.lua
- Klare Sektionskommentare

---

## Version 9.0.0 — "Architektur-Refactor: Modular Immersive Context UI Framework"

### BREAKING: Major Architecture Overhaul
Umbau nach den Projekt-Richtlinien (Modular Immersive Context UI Framework).
Alle Aenderungen sind abwaertskompatibel - SavedVariables bleiben erhalten.

### Core (GuildDeathLog.lua)
- **Slash-Commands ausgelagert**: 400-Zeilen if-elseif-Kette ersetzt durch Dispatch-Table in `SlashCommands.lua`
- **Version alignment**: Alle Versionsnummern konsistent auf 9.0.0 (TOC, Core, Help, InitDB)
- Core von 930 auf 531 Zeilen reduziert (-43%)

### Neue Dateien
- **Config.lua**: Zentrale Konfiguration (Konstanten, Defaults, Lookup-Tables) - keine Modul-Logik
- **Libs/AnimationHelper.lua**: Wiederverwendbare Animations-Bibliothek (FadeIn/Out, ScaleLerp, SlideIn, Bounce, Easing)
- **SlashCommands.lua**: Dispatch-Table fuer alle Slash-Commands mit Alias-Support

### Bugfixes (Kritisch!)
- **Anniversary.lua**: Registrierte sich bei `addon.modules` statt `_G["GuildDeathLog"].modules` → Modul war fuer den Core unsichtbar. Gefixt.
- **ZoneWarning.lua**: Identischer Bug wie Anniversary. Gefixt.
- **GuildRoster.lua**: Doppelte `RegisterModule("Roster")` Aufrufe (Zeile 100 + 463). Duplikat entfernt.
- **UI.lua**: `GDLChronicle` Frame ohne `BackdropTemplate` erstellt - Verstoß gegen Engine Rules. Gefixt.

### TOC (GuildDeathLog.toc)
- Version: 8.14.3 → 9.0.0
- Wrath-Interface (30401) entfernt (nicht supported)
- Neue Dateien eingetragen: Config.lua, Libs/AnimationHelper.lua, SlashCommands.lua
- Kommentare fuer Ladereihenfolge

### Cleanup
- 9 Python-Patch-Scripts aus Addon-Root in `_dev_scripts/` verschoben
- UTF-8 BOM aus UI.lua und CHANGELOG.md entfernt
- Windows Line-Endings (CRLF) in allen Lua/TOC/MD-Dateien gefixt

### Architektur-Verbesserungen
- Ordnerstruktur nach Richtlinie: Core → Config → Libs → SlashCommands → Module
- Module-Registrierung konsistent: alle nutzen jetzt `GDL:RegisterModule(name, table)`
- Slash-Command-System erweiterbar: neuer Command = 1 Zeile `RegisterCmd()`