github suprepupre/wow-optimize v2.0.4
v2.0.4 — Hotfix: UI Cache + UTF-8 Format

latest releases: v2.4.0, v2.3.0, v2.2.0...
8 days ago

🐛 Hotfix — Community-Reported Bugs

Thank you to everyone who reported issues after v2.0.3. This release fixes all reported UI/text/crash problems.

What was broken

The UI Widget Cache worked (68+% skip rate), but too aggressively — it cached widget properties that WoW's C++ engine resets between frames. This caused:

Bug Cause Affected
Russian/UTF-8 chat text truncated SetText hook + format buffer too small ElvUI, all chat addons
DBM timer text missing SetText cached stale after engine cleared FontString DBM-Warmane
Unit frame textures wrong SetTexture / SetAlpha cached stale values oUF, ElvUI, all UF addons
Nameplate sizes stuck SetWidth / SetHeight cached — engine resets every frame Custom nameplate addons
ERROR #132 on combat start Corrupted widget state from stale cache Various
Crash on fullscreen toggle Stale cache entries after display mode change ICC/TOC

Root Cause

WoW's C++ engine modifies widget properties (text, size, texture, alpha) via direct C++ calls that bypass our Lua-level hooks. Our cache thought the value was still X, but the engine had reset it to Y. When the addon tried to set X again, we skipped it — breaking the UI.

Fix 1 — UI Cache: 10 hooks → 3 (StatusBar only)

Kept (safe — engine rarely modifies bar values directly):

  • StatusBar:SetValue
  • StatusBar:SetMinMaxValues
  • StatusBar:SetStatusBarColor

Removed (unsafe — engine changes these via C++):

  • FontString:SetText — engine clears/recycles FontStrings
  • FontString:SetTextColor — engine resets colors
  • Texture:SetTexture — engine swaps textures for icons/portraits
  • Texture:SetVertexColor — engine resets vertex colors
  • Region:SetAlpha — engine controls fading effects
  • Region:SetWidth — engine resets nameplate sizes every frame
  • Region:SetHeight — engine resets nameplate sizes every frame

These 3 StatusBar hooks have been proven safe by months of LuaBoost's ThrashGuard (same hooks, Lua-level) with zero complaints.

Fix 2 — string.format UTF-8 Buffer

The format fast path had a 255-byte buffer for each %s argument. Russian/Korean UTF-8 characters are 2-3 bytes each, so text was truncated at ~127 characters instead of the expected ~255.

Fixed: Buffers increased to 1024 bytes per argument, 4096 bytes total output.

Virus Detection (FAQ)

DLL injection + function hooking trigger antivirus false positives. This is expected and not harmful. Add an exception in your antivirus if needed. The source code is fully open — review it yourself.

Full Changelog

v2.0.3...v2.0.4

Don't miss a new wow-optimize release

NewReleases is sending notifications on new releases.