DeathRoll Enhancer

Transform DeathRolls in WoW with an intuitive UI. Start games effortlessly, track results, and add a touch of fun with emote reactions. Elevate your DeathRolling experience!

File Details

v2.3.4

  • R
  • Mar 9, 2026
  • 107.32 KB
  • 8
  • 12.0.1+6
  • Retail + 3

File Name

DeathRollEnhancer-v2.3.4.zip

Supported Versions

  • 12.0.1
  • 12.0.0
  • 5.5.3
  • 4.4.2
  • 3.4.3
  • 2.5.5
  • 1.15.8

# DeathRoll Enhancer - Changelog

## Version 2.3.3 - Anti-Cheat and Stats Update

### New Features
- **Wrong-roll range detection** - Active games now validate strict roll ranges and flag invalid opponent rolls as potential cheats
- **Suspicious roll tracking** - Added persistent suspicious-roll tracking with `/dr suspicious` and `/dr cheaters` summaries
- **Rename merge command** - Added `/dr merge <oldName> <newName>` to merge history and suspicious data after player renames
- **New fun stat** - Added **Most Likely to Cheat** based on tracked invalid roll-range flags

### Quality of Life
- **Track Gold cleanup** - Removed the old Track Gold toggle to keep gold tracking behavior consistent
- **Statistics coverage improvements** - Wired new fun stats into both Statistics and Settings tabs

---

## Version 2.3.2 - SKEM Edition

### UI Improvements
- **Main tabs stretched to fit the window** - DeathRoll, Statistics, History, and Settings now use the available width more evenly
- **New in-window Settings tab** - Added a full settings surface directly in the addon window for common gameplay, challenge, interface, data, and fun stats controls
- **Embedded roll history panel** - The DeathRoll tab now keeps the full roll log inside the main window with mouse-wheel scrolling and no visible scrollbar instead of truncating after three entries
- **History tab scrollbar refresh fix** - Switching to players with longer histories now triggers the scrollbar immediately without requiring a window resize
- **Scale-aware layout refresh** - Changing UI scale now forces a full relayout so tabs, text, and content boxes stay aligned
- **DeathRoll layout cleanup** - Roll and wager controls were compacted, the history panel sizing was tightened, and the default window size is now 400x311

### Quality of Life
- **Use My Gold button** - Replaced the old Auto-Roll from Money toggle with a button beside the roll input for explicit one-click use
- **Trade-based wager tracking** - Added a saved setting to record wagers from completed gold trades instead of manual wager entry
- **Manual wager auto-hide in trade mode** - The Gold/Silver/Copper inputs are hidden on the DeathRoll tab when trade-based wager tracking is enabled
- **Perspective-based roll odds** - Roll history now describes the immediate odds from your perspective, showing your chance of winning after your roll and your chance of losing after your opponent's roll
- **Roll history tab-leak fix** - Fixed the embedded roll history text appearing on non-DeathRoll tabs after tab switches
- **Edition label refresh** - Updated visible version labeling to SKEM Edition

### Commands And Data Integrity
- **New slash commands** - `/dr accept`, `/dr decline`, and `/dr size` now support pending challenges and window diagnostics
- **Timestamped game records** - New saved game records now include numeric timestamps, and recent-record lookups fall back cleanly for older entries

---

## Version 2.3.1 - TOC Compatibility Update

### Compatibility Fixes
- **Added Mists of Pandaria Classic support** - Added interface version 50503 to support MoP Classic (5.5.3)
- **Removed outdated retail interface** - Removed interface 110207 (old retail version)
- **Changed Dependencies to OptionalDeps** - Fixed "out of date" cascade failures from Ace3/LibSharedMedia/LibDBIcon
  - Prevents addon from being marked outdated when dependency libraries haven't updated their TOCs
  - Libraries still load in correct order and function identically
  - Common pattern used by major addons like DBM and WeakAuras

### Supported WoW Versions
- **120001, 120000** - Retail (The War Within 11.0.7 / Midnight)
- **11508** - Classic Era (1.15.8)
- **20505** - TBC Classic Anniversary (2.5.5)
- **30403** - Wrath Classic (3.4.3)
- **40402** - Cataclysm Classic (4.4.2)
- **50503** - Mists of Pandaria Classic (5.5.3)

---

## Version 2.3.0 - Challenge System Update

### New Features
- **Whisper-Based Challenge System** - Seamless challenge notifications between addon users
  - Automatic whisper sent when you start a challenge (toggleable in settings)
  - Popup dialog appears when another addon user challenges you
  - Shows challenger name, roll value, and wager amount in clean WoW-style popup
  - Accept button opens UI and pre-fills challenge values
  - Decline button politely declines the challenge
  - 30-second auto-timeout on challenge popups
  - Works alongside manual challenges for players without the addon

### Challenge System Settings
- **Enable Challenge Popups** - Toggle receiving challenge popups (default: ON)
- **Send Challenge Whispers** - Toggle auto-whisper when you challenge (default: ON)
- **Minimum Roll Threshold** - Set minimum roll value to show popups (default: 100, range: 2-10,000)
  - Prevents spam from low-value test rolls
  - Configurable to match your preferred gameplay style

### UI Improvements
- **Fun Statistics Organization** - Fun Stats now organized in sections
  - "Player Relationships" section (Most Played With, Wins/Losses, Nemesis, Victim)
  - "Gold & Money" section (Gold Mine, Money Sink, Biggest Win/Loss, High Roller, Cheapskate)
  - "Luck & Streaks" section (Lucky/Unlucky Players, Daredevil, Conservative)
  - Matches the exact order and grouping from settings tab
  - Cleaner, more intuitive stats display

### Bug Fixes
- **Starting Roll Field Display** - Fixed starting roll showing 0 for all values in edit game records
  - Unified field name to `initialRoll` across all save/edit/display operations
  - Historical data compatibility maintained

---

## Version 2.2.1 - Statistics Fix Hotfix

### Statistics Bug Fixes
- **Fun Statistics Win Rate Display** - Fixed incorrect 0% and 100% win rate displays
  - Changed initialization for nemesis/luckyPlayer from 0 to -1 (allows 0% to be selected)
  - Changed initialization for victim/unluckyPlayer from 1 to 2 (allows 100% to be selected)
  - Now correctly displays all win rate percentages including edge cases (0% and 100%)
- **Streak Calculation Bug** - Fixed incorrect current streak values
  - Added `RecalculateStreaks()` function to recalculate streaks from complete game history
  - Integrated streak recalculation into `/dr fixgold` command
  - Streaks now replay entire game history in chronological order for accuracy
  - Fixes cases where streak showed incorrect values (e.g., showing loss streak when recent games were wins)
- **Starting Roll Field Inconsistency** - Fixed initialRoll not displaying in edit game records
  - Unified field name to `initialRoll` across all save/edit/display operations
  - Fixed Fun Stats daredevil/conservative calculations to use correct field name
  - Starting rolls now display correctly in edit game records dialog

### Improvements
- **Enhanced /dr fixgold Command** - Now recalculates both gold totals AND streaks
  - Use this command to fix any statistics inconsistencies
  - Automatically replays entire game history to ensure accuracy

---

## Version 2.2.0 - TBC Compatibility & Bug Fix Edition

### TBC Compatibility
- **Full TBC Classic Support** - Added C_Timer shim for TBC/Classic compatibility
  - Implements `C_Timer.After()` fallback using frame OnUpdate pattern
  - Zero performance impact on retail (uses native C_Timer when available)
  - Works seamlessly across all WoW versions (Classic Era, TBC, Wrath, Cata, Retail)

### Critical Bug Fixes
- **Race Condition in Roll Detection** - Fixed duplicate roll processing
  - Implemented roll deduplication system with unique roll IDs
  - Added 5-second expiry cache for processed rolls
  - Prevents same roll from being handled multiple times by different event handlers
  - Fixed pattern matching to use anchored regex (prevents partial matches)
- **Game State Validation** - Fixed crashes from invalid game states
  - Added comprehensive validation in `HandleGameRoll()`
  - Validates game state existence and required fields before processing
  - Added player name validation and parameter checking
  - Prevents nil reference errors during game execution
- **Concurrent Game Prevention** - Fixed ability to start multiple games
  - Added active game check at start of `StartDeathRoll()`
  - Returns error message if game already in progress
  - Prevents overlapping game state corruption

### UI & Safety Fixes
- **UI Safety Guards** - Comprehensive nil checks throughout UI code
  - Added validation in `UpdateChallengeButtonText()` before UI access
  - Added `pcall()` wrapper in `AddRollToHistory()` for safe text updates
  - Fixed potential crashes when UI closed during active operations
  - All UI components validated before access
- **Timer Race Condition** - Fixed roll detection timeout
  - Changed timeout from 3.0s to 3.2s to account for 0.1s roll delay
  - Prevents false positive timeout detections
- **UI Scale Desync** - Fixed double-scaling and flickering
  - Scale now applied correctly before AceGUI restoration
  - Added comparison check to prevent redundant scale operations
  - Eliminated scale flickering on window open
- **Target Change During Game** - Fixed UI confusion
  - Added active game check in `PLAYER_TARGET_CHANGED` handler
  - Prevents button updates during active games

### Database & Validation Fixes
- **Database Counter Corruption** - Fixed negative counter values
  - Changed initialization pattern from `(value or 1)` to `(value or 0)`
  - Applied `math.max(0, ...)` before subtraction operations
  - Prevents negative win/loss/gold counters in all scenarios
- **Date Parsing Validation** - Fixed crashes from malformed dates
  - Added complete date validation with `parseDateToNumber()`
  - Validates year (2000-2100), month (1-12), day (1-31), hour/minute ranges
  - Strict regex matching for date format (YYYY-MM-DD HH:MM)
  - Prevents crashes from corrupted date strings
- **Input Sanitization** - Fixed database corruption from invalid input
  - Added validation for gold (0-999,999), silver (0-99), copper (0-99)
  - Added validation for starting roll (0-999,999)
  - Prevents invalid currency values in edit dialog
- **Player Name Validation** - Improved validation logic
  - Added check for pure whitespace/symbol names
  - Prevents names like "---" or "   " from passing validation
  - Enforces reasonable character requirements

### Memory & Performance Fixes
- **Memory Leak Prevention** - Fixed recent rolls memory leak
  - Added `ClearRecentRollsForPlayer()` function
  - Automatic cleanup when games start/end
  - Prevents unbounded growth of recent rolls array
- **Infinite Loop Protection** - Added iteration limits
  - Bounds checking in `StoreRecentRoll()` with max iteration counter
  - Safety fallback if `maxRecentRolls` becomes negative
  - Debug warnings if iteration limits reached

### Cleanup & Error Handling
- **Proper State Cleanup** - Enhanced `OnDisable()` cleanup
  - Clears active game state on logout/disable
  - Cleans up spicy duel state
  - Clears UI references to prevent memory leaks
- **Enhanced Debug Logging** - Improved error visibility
  - Added debug messages for all error conditions
  - More descriptive error messages throughout
  - Better troubleshooting information

### Files Modified
- **Core.lua** - 13 major changes (TBC compat, validation, safety)
- **UI.lua** - 4 major changes (timer fix, validation, scale management)
- **Database.lua** - 3 major changes (counter fixes, date validation)

---

## Version 2.1.6 - Bintes Edition

### Bug Fixes
- [Add your changes here]

### New Features
- [Add your changes here]

---

## Version 2.1.5 - Gold Tracking Fix Edition

### Bug Fixes
- **Critical Gold Tracking Synchronization Bug** - Fixed desynchronization between individual player gold totals and global gold tracking
  - `DeleteGameRecord()` now properly updates global `goldTracking.totalWon` and `goldTracking.totalLost`
  - `EditGameRecord()` now properly synchronizes global tracking for both result changes and gold amount modifications
  - Prevents data corruption when deleting or editing games through the settings menu
- **Data Recovery Function** - Added `RecalculateGoldTracking()` to repair existing corrupted data
  - Recalculates global totals from individual player data
  - Accessible via new `/dr fixgold` command
  - One-time fix for users affected by the synchronization bug
- **Negative Net Profit Display** - Fixed `FormatGold()` function to properly display negative amounts
  - Net Profit now correctly shows negative values (e.g., "-15g 50s") when you have a net loss
  - Applies to all gold displays throughout the addon (main stats, minimap tooltip, player history)
- **Average Wager Decimal Fix** - Rounded down average wager calculations to remove decimal places
  - High Roller and Cheapskate stats now show clean copper amounts without decimals
  - Changed from "1g 66s 55.5555555555c avg wager" to "1g 66s 55c avg wager"

### New Features
- **Gold Tracking Repair Command** - `/dr fixgold` command to fix corrupted global gold totals
  - Automatically recalculates `totalWon` and `totalLost` from individual player records
  - Provides feedback showing old vs new corrected values
  - Essential for users who experienced the synchronization bug

---

## Version 2.1.4 - Bintes EDITion

### New Features
- **Edit Game Records** - Complete game record editing functionality
  - Modify win/loss results for any previous game
  - Edit gold amounts (separate gold/silver/copper inputs)
  - Change starting roll values for recorded games
  - Access via `/dr edit` command or settings menu
- **Delete Game Records** - Remove unwanted game entries
  - Safe deletion with confirmation dialog
  - Automatic statistics recalculation after deletion
  - Maintains data integrity by updating win/loss counters
- **Enhanced Game Management Interface**
  - Professional AceGUI dialog with dropdown game selection
  - Real-time dropdown refresh after deletions
  - Improved date sorting (newest games first)
  - Clear game identification with player, result, gold, and date

### Technical Improvements
- **WoW-Compatible Date Sorting** - Fixed `os.time()` compatibility issue with WoW's restricted Lua environment
- **Database Functions** - Added `GetRecentGamesForEditing()`, `EditGameRecord()`, and `DeleteGameRecord()`
- **UI State Management** - Proper dialog cleanup and refresh after record modifications
- **Statistics Integrity** - Automatic counter updates when records are modified or deleted

### User Experience
- **Slash Command** - `/dr edit` for quick access to game editing
- **Settings Integration** - "Edit Game Records" button in Data Management section
- **Debug Output** - Optional debug information showing game order and timestamps
- **Error Handling** - Comprehensive validation and user-friendly error messages

---

## Version 2.1.3 - Database Fix Edition

### Critical Fix
- **Added missing Database.lua file** - This critical file was accidentally excluded from the addon distribution
  - Contains essential database management functions required for saving game history and statistics
  - Previous downloads from CurseForge were missing this file, causing silent failures in data persistence
  - All database functionality now works correctly (game history, statistics, gold tracking, etc.)
  - Users who experienced issues with data not saving should now have full functionality

### Technical Details
- Database.lua contains helper functions for player history management, statistics calculation, and data export
- The file was incorrectly excluded due to confusion with user data files
- SavedVariables system now functions properly for persistent data storage across game sessions

---

## Version 2.1.2 - Bintes Edition

### Bug Fixes
- Fixed post-game challenge button displaying opponent's last roll after game completion
- Challenge button now properly returns to normal state when games end
- Improved game state cleanup to prevent UI confusion after duels

### Technical Improvements
- Fixed addon loading order issues that caused `AddGameToHistory` method not found errors
- Updated all module files to use proper Ace3 addon registration instead of global namespace access
- Enhanced game end cleanup to clear opponent roll data from recent rolls array

---

## Version 2.1.1 - Bintes Edition

### Bug Fixes
- Fixed challenge acceptance display to show actual roll value and original range (e.g., "PlayerName rolled 56 from 1000 - Accept challenge!" instead of "PlayerName challenges you to DeathRoll 1-56!")
- Roll input field now correctly populated with the challenger's actual roll value (56) rather than the range maximum (1000)

### UI Improvements
- Updated status bar to display "V2.1.1 - Bintes Edition"
- Enhanced challenge notification clarity by showing both rolled value and original maximum

---

## Version 2.0.0 - Complete Rewrite

### Major Changes
- Complete rewrite using Ace3 libraries for stability and performance
- Professional AceGUI interface with modern styling
- Advanced AceConfig options panel with font selection
- Comprehensive data management and export tools
- Enhanced statistics tracking and display
- LibSharedMedia integration for consistent theming

### Features
- Intuitive AceGUI-based interface for starting games
- Detailed win/loss history tracking per player
- Advanced gold tracking with streaks and statistics
- Smart minimap integration with LibDBIcon
- Automatic emote reactions on wins/losses
- Cross-version compatibility (Classic Era, TBC, Wrath, Cata, Retail)
- Professional options panel with Blizzard integration
- Data export/import functionality

### Commands
- `/dr` or `/deathroll` - Open the main DeathRoll window
- `/dr config` - Open configuration options
- `/drh [player]` - View history with specific player