promotional bannermobile promotional banner

Carrot Objective Tracker

A context-aware objective tracker that shows only what matters in your current zone: quests, world quests, achievements, and more, with full visual customization.

File Details

v1.3.1

  • R
  • Apr 13, 2026
  • 236.27 KB
  • 29
  • 12.0.1
  • Retail

File Name

Carrot-v1.3.1.zip

Supported Versions

  • 12.0.1

Changelog

v1.3.1

Critical Taint Fix

  • GameTooltip taint ("tainted by 'Carrot'"): removed Carrot's UIWidgetContainer that was registering against C_UIWidgetManager.GetObjectiveTrackerWidgetSetID() — a widget set shared with Blizzard's own tracker and tooltip code. Registering our own container against the shared set ID was poisoning DefaultWidgetLayout / GameTooltip_ClearWidgetSet, producing errors like "attempt to compare a secret number value (tainted by 'Carrot')" inside LayoutFrame. Trade-off: Carrot's tracker no longer renders Abundance event bars / zone event widget progress inline

Mythic+ / Scenario Fixes

  • Enemy forces percent: now parsed from criteriaInfo.quantityString via %d+ (matching AngryKeystones and Blizzard's own ScenarioObjectiveTracker). The previous quantity/totalQuantity formula gave nonsense like 112% at the start of a key because quantity is an internal encoded value for weighted progress, not the displayable current count
  • Death tooltip crash: "table index is secret"C_DamageMeter combat source name and deathTimeSeconds fields are secret values in 12.x that can't be read, compared, or used as table keys. Death log now stores only classFilename + deathRecapID, and the tooltip groups deaths by class with LOCALIZED_CLASS_NAMES_MALE + RAID_CLASS_COLORS
  • Binary scenario criteria bar: hidden for totalQuantity <= 1 (boss kills etc.), since the checkmark/dash prefix already conveys state — no more redundant "0/1" bars overlapping adjacent rows in Skyreach-style scenarios

Quest Item Buttons

  • Shown on world quests and bonus objectives: the existing PopulateQuestSection already wired item buttons for regular quests, but PopulateWorldQuestSection / PopulateBonusSection never did. Extracted AttachItemButtonToWQRow that runs the same C_QuestLog.GetLogIndexForQuestIDGetQuestLogSpecialItemInfo lookup (verified against AngryKeystones, OPie, Plumber). World quests like "Mobilize! Enlist! Recruit!" now get their clickable Flyer button in Carrot's tracker
  • Padding no longer oscillates across refreshes: anchor shifting was previously driven by whether we successfully placed a SecureActionButton this render, which fails in combat lockdown. Combat/non-combat refreshes were flipping the title left/right every tick during active world quests. Split the decision: combat-safe QuestHasSpecialItem probe drives the layout, button placement itself is a best-effort combat-gated step. Applied to both regular quests and WQ/bonus rows

Layout & Row Fixes

  • World quest row overlap: two WQs sometimes overlapped briefly and corrected themselves after a refresh. Root cause: timeText auto-sized from countdown content ("5h 32m" → "5h" → "30m" → "NOW!"), cascading through groupFinderBtn.RIGHT → title.RIGHT and flipping title wrap every second. Row-below yOffsets were computed with the old wrapped height. Fixed by locking timeText:SetWidth(56) on both CreateQuestRow and CreateWorldQuestRow

Default Tracker Hider

  • Hide all objective tracker modules, not just the main frame: 12.x split the tracker across independent module frames (quest, world quest, scenario, bonus, achievement, campaign) held in ObjectiveTrackerManager.moduleToContainerMap. Hiding only ObjectiveTrackerFrame left module containers peeking from the right. Now walks the map and suppresses every frame
  • Hide WorldQuestTracker (Tercio) frames when installed: auto-detects _G.WorldQuestTrackerScreenPanel and applies the same treatment, gated on the existing hideDefaultTracker toggle. WQT anchored its panels relative to ObjectiveTrackerFrame.topleft/topright and computed offsets via ObjectiveTrackerManager.moduleToContainerMap, so with Blizzard's tracker suppressed its own frames ended up at unexpected positions

v1.3.0

Achievements

  • Criteria list: Each achievement now shows its individual criteria below the progress count, using the same bullet/checkmark/faded styling as quest objectives
  • Per-achievement expand/collapse: Small +/- arrow in the top right of every achievement row toggles the criteria list; state saved per-achievement in CT.db.achievementCollapsed
  • Row layout fix: Name and progress text no longer overlap at larger font sizes — anchored top-to-bottom relative to each other instead of centered on the icon with hardcoded offsets
  • Dynamic row height: CalcRowHeight now accounts for progressText and criteria list so achievement rows grow correctly with font size changes
  • Default Achievements tab for existing installs: One-time migration adds an "Achievements" tab (and enables tabs) on the first load so upgraders get the new default layout. After the migration runs, users can freely delete the tab without it being recreated

Mythic+ / Delves

  • Auto-focus scenario tab on M+ start: New TF:FocusSection helper automatically switches the containing window to whichever tab owns the scenario section when CHALLENGE_MODE_START fires (and on /carrot mplusdemo), so users with the Achievements tab active don't miss the timer/boss/EF bar
  • Checkmark + faded styling for bosses and delve criteria: Completed M+ boss rows and delve criteria now use Blizzard's green ReadyCheck-Ready icon plus the configured Completed Objective color/alpha, matching quest objectives. M+ split times fade with the title; delta and "Best:" hints stay full color
  • Enemy forces bar race fix: Explicit progressBg/progressFill re-anchoring and a scrollChild → row → 200 fallback chain that handles the Lua truthiness bug where X or 200 returns 0 when X is 0. No more "shows 0.1% then corrects itself after a reload"
  • Boss row font leak fix: timerTextRow:SetFont(..., +4) used to stick on rows the pool handed back to MPlusTextRow, causing one apparently-random boss row to render with a larger font. GetScenarioRow and MPlusTextRow now reapply the base font defensively
  • Timer bar marker draw order: +2/+3 threshold markers are now created at OVERLAY sublevel 7 via SetDrawLayer, so progressFill can never cover them regardless of pool-reuse creation order. Also guarded markerWidth against a saved 0 value (Lua or 1 fails for 0)

Migrations & Data Model

  • One-time migration flags: New CT.db.migrations table tracks which "ensure section exists" migrations have run. The scenario, recipes, and achievements ensures now run exactly once per profile, after which users can delete those sections or tabs without them being re-added on every reload (previously they were silently re-added on every load)

v1.2.0

Window Tabs

  • Tabs inside windows: Each tracker window can now host multiple tabs, each with its own filtered sections, order, collapsed state, and quest subcategory order
  • Per-tab section filtering: Sections are assigned to exactly one tab, so you can split quests/M+ into one tab and achievements into another
  • Tab bar: Button-style tabs at the top of the window with active/inactive states using the tracker's yellow accent color; hidden when tabs are disabled
  • Renameable tabs: Tab names are user-editable from the Windows options panel
  • Configurable tab opacity: New Active Tab Alpha and Inactive Tab Alpha sliders in Appearance → Tab Bar
  • New default layout: Fresh installs ship with tabs enabled and a "Main" / "Achievements" split to surface both features
  • Saved data migration: Existing profiles are migrated into the tabs model on load without touching visible behavior

Objective Styling

  • Blizzard-style completed objectives: Finished objective lines are greyed out and semi-transparent so players can focus on what's left
  • Green checkmark icon: Completed objectives are prefixed with Blizzard's ReadyCheck-Ready green check; in-progress ones get a dash bullet
  • Yellow quest titles: Auto-tracked quest titles now default to Blizzard's classic gold (1.0, 0.82, 0)
  • Configurable: New Appearance → Objectives section with Show Bullets, Show Checkmark, and Completed Objective Alpha settings; new Completed Objective color in the Colors panel

M+ Bug Fixes

  • Enemy forces bar: Now parses the percent from criteriaInfo.quantityString (matching Blizzard's ScenarioObjectiveTracker) instead of quantity/totalQuantity, which isn't normalized to 100 for weighted progress. Fill now reliably climbs 0 → 100%
  • Boss row layout drift: Boss name rows no longer oscillate between one and two lines. Root cause was GetStringHeight() returning inconsistent values across refreshes on wrapping font strings (unresolved layout on first pass). M+ rows now disable wrap and use a fixed single-line height; scenario row pool restores wrap on checkout so delve criteria still wrap correctly

v1.1.0

Mythic+ Tracker

  • Text-based M+ display: MythicPlusTimer-style layout — remaining time, elapsed/total, +2/+3 threshold countdowns
  • Segmented timer bar: Visual countdown bar with +3/+2 threshold markers (configurable color and width)
  • Blizzard timer hook: Synced via ScenarioObjectiveTracker.ChallengeModeBlock:UpdateTime (zero drift)
  • Boss split timing: Records boss kill times, compares against personal best per dungeon
  • Affix display: Text (dash-separated) or icons mode (configurable in Settings → Dungeons)
  • Enemy forces: Blue progress bar with percentage text inside
  • Death counter: Shows count + time penalty; tooltip with per-player breakdown via C_DamageMeter
  • Auto-hide sections: Option to hide all non-scenario sections during M+ or Delves
  • Hide tracker option: For players using external M+ addons
  • Demo mode: /carrot mplusdemo to preview, /carrot stopdemo to clear
  • M+ colors: Customizable +3/+2/+1/Depleted/Enemy Forces/Marker colors in Colors panel
  • Marker width slider: 1-4px (Settings → Dungeons)

Recipe Tracking

  • New "Recipes" section showing tracked profession recipes with reagent have/need counts
  • Progress bar showing fraction of reagent types fulfilled
  • Left-click opens recipe in profession UI, right-click untracks
  • "Show Recipes" filter toggle, auto-enabled when a recipe is tracked
  • Reagent names resolved via C_Item.GetItemInfo with fallbacks

New Features

  • Quest type colors: Daily (blue), Weekly (teal), Campaign (orange) — distinct colors for titles and tier bars
  • Group finder button: Eye icon on all world quest rows to open LFG
  • Quest reward preview: Tooltip shows XP, gold, item, and currency rewards
  • Quest countdown timers: Timed quests (e.g., Abundance events) show live MM:SS countdown
  • UIWidget support: Zone event progress bars (Abundance) via C_UIWidgetManager
  • Progress bar percentage: "progressbar" type objectives show % text inside the bar
  • Auto quest popups: OFFER (new quest) and COMPLETE (turn-in) via GetNumAutoQuestPopUps API
  • Campaign chapter progress: Tooltip shows "Campaign Quest (Chapter 3/7)"
  • Minimap button: Click opens settings, shift-drag to reposition
  • Delve improvements: Step title, compact 12px scenario bars with text inside, stage indicator
  • Dungeons & Instances settings panel: M+ and Delve toggles

Context Menu

  • Share Quest: Share quest with party members
  • Abandon Quest: Abandon with Blizzard confirmation dialog (shown in red)

Bug Fixes

  • Interface version: Updated to 120001 (WoW 12.0.1)
  • M+ timer always 0: Uses GetActiveChallengeMapID (not GetActiveKeystoneInfo) for map ID
  • M+ GetActiveKeystoneInfo: Fixed return value unpacking (2 values, not 3)
  • Delve objectives not showing: Added "scenario" to default window sections with migration
  • Font dropdown clipping: Custom Carrot-Compact-Dropdown widget with 300px max height (library-safe, no Libs/ modifications)
  • Text overlap on progress bar: Progress bar anchored below objective text; height accounts for content
  • Wrap/ellipsis flickering: Permanent anchors at row creation, never cleared during populate
  • Combat lockdown errors: Guarded C_SuperTrack/QuestMapFrame; deferred event registration
  • ADDON_ACTION_FORBIDDEN: Removed COMBAT_LOG_EVENT_UNFILTERED (restricted in 12.x)
  • Tracker blank after /reload in combat: Removed blanket combat bail-out from TF:Update()
  • World quest type detection: Uses Enum.QuestWQType instead of Enum.QuestTagType
  • World quest progress bar: Uses progressBarPct from C_TaskQuest when available
  • Quest item icon overflow: Inset icon texture by 2px inside border frame
  • Quest item indentation: Pooled rows reset anchors when no item button present
  • Progress bar on non-numeric quests: Hidden for 0/1 objectives
  • Stale objective/bar heights: Reset when text empty or bar hidden
  • Boss names overlapping bars: M+ boss rows rendered directly, bar hidden
  • Timer dividers on wrong row: Hidden in GetScenarioRow for pooled reuse
  • Layout jump on first frame: All Get*Row functions set explicit width from parent
  • Minimap button error: Uses CT.Options:Open() instead of Settings.OpenToCategory
  • MakeColorOption crash: Fallback to COLOR_DEFAULTS for new color keys

UI Polish

  • Filter icon changed to visible notepad icon
  • Scenario criteria: compact 12px bar with count text inside
  • Tier bar colors: Scenario and World Quest/default now customizable
  • Timer text +4pt larger for main countdown
  • Timer bar aligned with content indentation
  • Enemy forces default color changed from purple to blue
  • Localization: All new strings translated for 9 languages (ptBR, deDE, frFR, esES/esMX, itIT, ruRU, koKR, zhCN, zhTW)

v1.0.0

  • Initial release
  • Context-aware quest tracking: auto-shows quests in your current zone
  • Three-tier quest visibility: Pinned, Recommended, Zone (auto-tracked)
  • Quest subcategories: Pinned, Ready to Turn In, Campaign, Daily, Weekly, Zone
  • World quest tracking with time remaining display
  • Bonus objective tracking
  • Scenario/dungeon objective tracking
  • Achievement tracking with zone story auto-detection
  • Quest item buttons (SecureActionButton, combat-safe)
  • Proximity sorting (closest quests first)
  • Subzone highlighting
  • Configurable appearance: fonts, colors, sizes, outlines, shadows
  • Collapsible sections and subcategories with drag-to-resize handles
  • Customizable section and subcategory display order
  • Filter dropdown for toggling quest types
  • Profile management via AceDB (switch, copy, import/export)
  • Hover highlight effect
  • Blizzard default tracker suppression (combat-safe)