DKP Auctioneer

Raid-focused DKP auction system to manage points and run fair, transparent loot auctions.

File Details

DKPAuctioneer_V1.4.7

  • R
  • Mar 17, 2026
  • 51.46 KB
  • 19
  • 12.0.1
  • Retail

File Name

DKPAuctioneer_V1.4.7.zip

Supported Versions

  • 12.0.1

# Changelog 1.4.7

## [1.4.7] - 2026-03-17

### Added

#### Master-Sync Feature
- **"Sync All Data" Button für Raidleiter**
  - Sendet DKP-Daten an alle Spieler im Raid mit einem Klick
  - Verwendet "Master-Sync" Approach: Sendet einen Log-Eintrag pro Spieler mit aktuellem DKP-Stand
  - 0.5s Delay zwischen Spielern zur Vermeidung von WoW Rate-Limiting
  - Empfänger erhalten nur 2 Nachrichten: "Sync gestartet..." und "Sync abgeschlossen: X Logs empfangen!"
  - Button befindet sich im Roster-Tab (nur für Master sichtbar)

#### Export/Import Funktionalität
- **Export Logs Button**
  - Exportiert alle DKP-Logs als Lua-Table Format
  - Zeigt formatierten Lua-Code in bearbeitbarem Textfeld
  - Kann per Strg+C kopiert und in externe Dateien gespeichert werden
  - Ermöglicht Backup der kompletten DKP-Historie
  
- **Import Logs Button**
  - Importiert DKP-Logs aus Lua-Table Format
  - Verwendet `loadstring()` für sicheres Parsen
  - Berechnet automatisch DKP-Werte aus importierten Logs neu
  - Warnung: Überschreibt existierende Logs ohne Bestätigung
  - Refresh der UI nach erfolgreichem Import

- **Export/Import Buttons im Logs-Tab**
  - Positioniert oben rechts im Logs-Tab
  - Export-Button: Blau mit Text "Export Logs"
  - Import-Button: Grün mit Text "Import Logs"

#### UI Improvements
- **Close Button (X) im Hauptfenster**
  - Standard WoW-Close-Button oben rechts hinzugefügt
  - Verwendet `UIPanelCloseButton` Template
  - FrameLevel auf +10 erhöht für bessere Sichtbarkeit
  - Expliziter `Show()` Aufruf für garantierte Darstellung

### Changed

#### Communication System
- **Removed Debug Output**
  - Alle Debug-Nachrichten aus `DKPAuctioneer_Comm.lua` entfernt
  - Keine "RX:", "Dispatch:", oder Handler-Count Meldungen mehr
  - Cleaner Chat ohne technische Debug-Informationen

#### Logs System
- **Auto-Refresh bei neuen Logs**
  - `RecordChange()` ruft jetzt automatisch `RefreshLogsTab()` auf
  - Log-Tab aktualisiert sich sofort bei neuen Einträgen
  - Kein manuelles Refresh mehr notwendig

- **Corrupted Entry Filtering**
  - `GetAllLogs()` filtert jetzt ungültige Einträge heraus
  - Type-Check: `if type(entry) == "table" and entry.timestamp and entry.player`
  - Verhindert Fehler durch korrupte Daten aus fehlgeschlagenen Imports

#### Sync Architecture
- **Master-Sync statt Full History Sync**
  - Vorher: Versuch alle Logs zu senden (1000+ Einträge) → Rate-Limit-Probleme
  - Jetzt: Ein Log-Eintrag pro Spieler mit aktuellem DKP-Stand
  - Log-Format: `beforeDKP=0, change=currentDKP, afterDKP=currentDKP, reason="Master-Sync"`
  - Deutlich schneller und zuverlässiger

- **Rate-Limiting Lösung**
  - WoW blockiert Nachrichten basierend auf Burst+Window Limit
  - Testing ergab: 13 Logs @300ms ✓, 15 Logs @300ms ✗ (2 verloren)
  - Lösung: 0.5s (500ms) Delay zwischen Nachrichten für Sicherheit
  - Master-Sync mit ~10-20 Spielern funktioniert zuverlässig

### Removed

#### Per-Player Sync Button
- **Einzelne Sync-Buttons pro Spieler entfernt**
  - Vorher: Jeder Spieler im Roster hatte eigenen "Sync" Button
  - Entfernt wegen Komplexität und Verwirrung für User
  - Ersetzt durch zentralen "Sync All Data" Button
  - Kompletter Code-Block (~60 Zeilen) aus `DKPAuctioneer_UI.lua` gelöscht

### Fixed

#### Lua Closure Bug
- **FOR-Loop Variable Capture Problem**
  - Problem: `C_Timer.After` Callbacks verwendeten falsche Loop-Variable
  - Symptom: Alle Timer sendeten den letzten Log-Eintrag mehrfach
  - Lösung: Immediate Function Invocation Pattern
  - Code: `(function(idx, e) return function() ... end end)(i, entry)`
  - Jeder Timer erhält jetzt korrekten Eintrag-Snapshot

#### Serialization Issues
- **Versuch 1: Custom Serialize/Deserialize - FAILED**
  - Problem: Zerstörte verschachtelte Tabellen-Strukturen
  - Logs wurden zu Strings konvertiert und waren unbrauchbar
  
- **Versuch 2: Pipe-Delimited Format - FAILED**
  - Problem: Zeilenumbrüche in Spielernamen korrumpierten Format
  - Format: `timestamp|player|before|change|after|reason`
  - Parsing schlug bei mehrzeiligen Einträgen fehl
  
- **Versuch 3: Lua Table Dump - SUCCESS ✓**
  - Lösung: Rekursive `serializeTable()` Funktion
  - Erstellt validen Lua-Code mit verschachtelten Tabellen
  - `loadstring()` parst Code zurück zu Tabelle
  - Funktioniert zuverlässig mit allen Datentypen

### Technical Details
- Addon Version: 1.4.7
- Interface Version: 120001
- WoW Expansion: Midnight (Patch 12.0.1)
- Release Date: March 17, 2026

### Code Changes

**DKPAuctioneer_Comm.lua:**
- Removed all debug `Print()` calls from `OnReceive()`
- Removed handler count output from `Dispatch()`
- Cleaner message processing without console spam

**DKPAuctioneer_Logs.lua:**
- `RecordChange()`: Added `RefreshLogsTab()` call
- `GetAllLogs()`: Added type checking: `if type(entry) == "table" and entry.timestamp and entry.player`
- `Export()`: Implemented `serializeTable()` for Lua table dump
- `Import()`: Uses `loadstring()` to parse imported Lua code
- `Import()`: Recalculates DKP from `afterDKP` values in logs
- `OnLogsClearReceived()`: Prints "Sync gestartet..."
- `OnLogsSyncComplete()`: Prints "Sync abgeschlossen: X Logs empfangen!"
- Registered handlers: `LOG_ENTRY`, `LOGS_BATCH`, `LOGS_CLEAR`, `LOGS_SYNC_COMPLETE`

**DKPAuctioneer_UI.lua:**
- Removed entire per-player sync button code block (~60 lines, around line 1230-1290)
- `CreateSyncAllButton()`: New function for "Sync All Data" button
- Master-Sync logic: Sends one log entry per player with Master-Sync format
- Uses 0.5s delay: `C_Timer.After(i * 0.5, callback)`
- Added Export/Import buttons to Logs tab (top-right positioning)
- Export button: Blue, shows Lua table in scrollable editbox
- Import button: Green, accepts Lua table code
- Close button: Added `SetFrameLevel(frame:GetFrameLevel() + 10)` and `Show()`

### Testing Recommendations
After updating to 1.4.7:
1. Test "Sync All Data" mit ~10-20 Spielern im Raid
2. Verifiziere dass Empfänger nur 2 Meldungen sehen (Start/Ende)
3. Export Logs und Import in zweiten Account testen
4. Prüfe dass Close Button (X) oben rechts sichtbar ist
5. Bestätige dass Logs automatisch refreshen bei neuen Einträgen

### Known Limitations
- Import überschreibt existierende Logs ohne Warnung
- Export hat keine automatische Dateinamen-Generierung
- Sync zeigt keine Fortschrittsanzeige während Übertragung
- Rate-Limiting ist konservativ (0.5s), könnte evtl. schneller sein

### Compatibility
- Vollständig rückwärtskompatibel mit 1.4.5
- Alte Log-Formate werden korrekt gelesen
- Master-Sync Log-Einträge sind normale Logs mit `reason="Master-Sync"`
- Keine Datenmigration erforderlich

---

## [1.4.7] - 2026-03-17

### Hinzugefügt

#### Master-Sync Feature
- **"Sync All Data" Button für Raidleiter**
  - Sendet DKP-Daten an alle Spieler im Raid mit einem Klick
  - Verwendet "Master-Sync" Ansatz: Sendet einen Log-Eintrag pro Spieler mit aktuellem DKP-Stand
  - 0,5s Verzögerung zwischen Spielern zur Vermeidung von WoW Rate-Limiting
  - Empfänger erhalten nur 2 Nachrichten: "Sync gestartet..." und "Sync abgeschlossen: X Logs empfangen!"
  - Button befindet sich im Roster-Tab (nur für Master sichtbar)

#### Export/Import Funktionalität
- **Export Logs Button**
  - Exportiert alle DKP-Logs als Lua-Tabellen-Format
  - Zeigt formatierten Lua-Code in bearbeitbarem Textfeld
  - Kann per Strg+C kopiert und in externe Dateien gespeichert werden
  - Ermöglicht Backup der kompletten DKP-Historie
  
- **Import Logs Button**
  - Importiert DKP-Logs aus Lua-Tabellen-Format
  - Verwendet `loadstring()` für sicheres Parsen
  - Berechnet automatisch DKP-Werte aus importierten Logs neu
  - Warnung: Überschreibt existierende Logs ohne Bestätigung
  - Aktualisierung der UI nach erfolgreichem Import

- **Export/Import Buttons im Logs-Tab**
  - Positioniert oben rechts im Logs-Tab
  - Export-Button: Blau mit Text "Export Logs"
  - Import-Button: Grün mit Text "Import Logs"

#### UI-Verbesserungen
- **Schließen-Button (X) im Hauptfenster**
  - Standard WoW-Schließen-Button oben rechts hinzugefügt
  - Verwendet `UIPanelCloseButton` Template
  - FrameLevel auf +10 erhöht für bessere Sichtbarkeit
  - Expliziter `Show()` Aufruf für garantierte Darstellung

### Geändert

#### Kommunikationssystem
- **Debug-Ausgaben entfernt**
  - Alle Debug-Nachrichten aus `DKPAuctioneer_Comm.lua` entfernt
  - Keine "RX:", "Dispatch:", oder Handler-Count Meldungen mehr
  - Sauberer Chat ohne technische Debug-Informationen

#### Logs-System
- **Auto-Refresh bei neuen Logs**
  - `RecordChange()` ruft jetzt automatisch `RefreshLogsTab()` auf
  - Log-Tab aktualisiert sich sofort bei neuen Einträgen
  - Kein manuelles Refresh mehr notwendig

- **Filterung korrupter Einträge**
  - `GetAllLogs()` filtert jetzt ungültige Einträge heraus
  - Typ-Prüfung: `if type(entry) == "table" and entry.timestamp and entry.player`
  - Verhindert Fehler durch korrupte Daten aus fehlgeschlagenen Imports

#### Sync-Architektur
- **Master-Sync statt vollständigem Verlaufs-Sync**
  - Vorher: Versuch alle Logs zu senden (1000+ Einträge) → Rate-Limit-Probleme
  - Jetzt: Ein Log-Eintrag pro Spieler mit aktuellem DKP-Stand
  - Log-Format: `beforeDKP=0, change=currentDKP, afterDKP=currentDKP, reason="Master-Sync"`
  - Deutlich schneller und zuverlässiger

- **Rate-Limiting Lösung**
  - WoW blockiert Nachrichten basierend auf Burst+Fenster-Limit
  - Tests ergaben: 13 Logs @300ms ✓, 15 Logs @300ms ✗ (2 verloren)
  - Lösung: 0,5s (500ms) Verzögerung zwischen Nachrichten für Sicherheit
  - Master-Sync mit ~10-20 Spielern funktioniert zuverlässig

### Entfernt

#### Pro-Spieler-Sync-Button
- **Einzelne Sync-Buttons pro Spieler entfernt**
  - Vorher: Jeder Spieler im Roster hatte eigenen "Sync" Button
  - Entfernt wegen Komplexität und Verwirrung für Benutzer
  - Ersetzt durch zentralen "Sync All Data" Button
  - Kompletter Code-Block (~60 Zeilen) aus `DKPAuctioneer_UI.lua` gelöscht

### Behoben

#### Lua-Closure-Bug
- **FOR-Schleifen-Variable-Capture-Problem**
  - Problem: `C_Timer.After` Callbacks verwendeten falsche Schleifenvariable
  - Symptom: Alle Timer sendeten den letzten Log-Eintrag mehrfach
  - Lösung: Immediate Function Invocation Pattern
  - Code: `(function(idx, e) return function() ... end end)(i, entry)`
  - Jeder Timer erhält jetzt korrekten Eintrags-Snapshot

#### Serialisierungs-Probleme
- **Versuch 1: Custom Serialize/Deserialize - FEHLGESCHLAGEN**
  - Problem: Zerstörte verschachtelte Tabellen-Strukturen
  - Logs wurden zu Strings konvertiert und waren unbrauchbar
  
- **Versuch 2: Pipe-Delimited-Format - FEHLGESCHLAGEN**
  - Problem: Zeilenumbrüche in Spielernamen korrumpierten Format
  - Format: `timestamp|player|before|change|after|reason`
  - Parsing schlug bei mehrzeiligen Einträgen fehl
  
- **Versuch 3: Lua-Tabellen-Dump - ERFOLGREICH ✓**
  - Lösung: Rekursive `serializeTable()` Funktion
  - Erstellt validen Lua-Code mit verschachtelten Tabellen
  - `loadstring()` parst Code zurück zu Tabelle
  - Funktioniert zuverlässig mit allen Datentypen

### Technische Details
- Addon-Version: 1.4.7
- Interface-Version: 120001
- WoW-Erweiterung: Midnight (Patch 12.0.1)
- Veröffentlichungsdatum: 17. März 2026

### Code-Änderungen

**DKPAuctioneer_Comm.lua:**
- Alle Debug `Print()` Aufrufe aus `OnReceive()` entfernt
- Handler-Count-Ausgabe aus `Dispatch()` entfernt
- Sauberere Nachrichtenverarbeitung ohne Konsolen-Spam

**DKPAuctioneer_Logs.lua:**
- `RecordChange()`: `RefreshLogsTab()` Aufruf hinzugefügt
- `GetAllLogs()`: Typ-Prüfung hinzugefügt: `if type(entry) == "table" and entry.timestamp and entry.player`
- `Export()`: `serializeTable()` für Lua-Tabellen-Dump implementiert
- `Import()`: Verwendet `loadstring()` zum Parsen des importierten Lua-Codes
- `Import()`: Berechnet DKP aus `afterDKP` Werten in Logs neu
- `OnLogsClearReceived()`: Gibt "Sync gestartet..." aus
- `OnLogsSyncComplete()`: Gibt "Sync abgeschlossen: X Logs empfangen!" aus
- Registrierte Handler: `LOG_ENTRY`, `LOGS_BATCH`, `LOGS_CLEAR`, `LOGS_SYNC_COMPLETE`

**DKPAuctioneer_UI.lua:**
- Kompletter Pro-Spieler-Sync-Button Code-Block entfernt (~60 Zeilen, ca. Zeile 1230-1290)
- `CreateSyncAllButton()`: Neue Funktion für "Sync All Data" Button
- Master-Sync-Logik: Sendet einen Log-Eintrag pro Spieler mit Master-Sync-Format
- Verwendet 0,5s Verzögerung: `C_Timer.After(i * 0.5, callback)`
- Export/Import-Buttons zum Logs-Tab hinzugefügt (oben rechts positioniert)
- Export-Button: Blau, zeigt Lua-Tabelle in scrollbarer Editbox
- Import-Button: Grün, akzeptiert Lua-Tabellen-Code
- Schließen-Button: `SetFrameLevel(frame:GetFrameLevel() + 10)` und `Show()` hinzugefügt

### Test-Empfehlungen
Nach Update auf 1.4.7:
1. "Sync All Data" mit ~10-20 Spielern im Raid testen
2. Verifizieren, dass Empfänger nur 2 Meldungen sehen (Start/Ende)
3. Export Logs und Import in zweiten Account testen
4. Prüfen, dass Schließen-Button (X) oben rechts sichtbar ist
5. Bestätigen, dass Logs automatisch bei neuen Einträgen aktualisieren

### Bekannte Einschränkungen
- Import überschreibt existierende Logs ohne Warnung
- Export hat keine automatische Dateinamen-Generierung
- Sync zeigt keine Fortschrittsanzeige während Übertragung
- Rate-Limiting ist konservativ (0,5s), könnte eventuell schneller sein

### Kompatibilität
- Vollständig rückwärtskompatibel mit 1.4.5
- Alte Log-Formate werden korrekt gelesen
- Master-Sync Log-Einträge sind normale Logs mit `reason="Master-Sync"`
- Keine Datenmigration erforderlich