File Details
Lapper2.3.zip
- R
- Mar 16, 2026
- 17.99 KB
- 32
- 12.0.1
- Retail
File Name
Lapper2.3.zip
Supported Versions
- 12.0.1
Changelog
v2.3
Zone map ID auto-detect
New
- Set Here button — added next to the Zone Map ID field in the Detection section. Clicking it reads your current map zone via
C_Map.GetBestMapForUnitand applies it immediately, saving the value account-wide. No more/lap debugcopy-paste. Shows an error in chat if the map cannot be read.
v2.2
Lap timeout reliability fixes and best lap reset
New
- Reset Best Lap button — clears your personal best time without affecting lap counts. Sits in the settings panel footer to the left of Reset Stats. Requires confirmation. Styled in amber to distinguish it from the destructive red Reset Stats button.
Bug Fixes
- Timeout now fires outside the tracked zone — the 30-minute idle check previously ran inside the zone-gated detection ticker, so leaving the zone would freeze the clock and let the timer sit at 30:00 indefinitely. The timeout now runs in a separate always-on watcher frame that is never disabled by zone changes.
- Timeout now counts from last gate touch, not lap start —
lapSaveTimewas only written when a lap began and never updated on subsequent gate crosses. After a reload, idle time was measured from the lap start rather than the most recent gate. A newlastGateSaveTimewall-clock timestamp is now written on every gate touch and is what the timeout check measures against. lastGateTimeon restore was anchored to lap start — on login,lastGateTimewas set usinglapSaveTime(lap start wall-clock) instead oflastGateSaveTime(last gate touch wall-clock), so the in-session timeout after a reload had the same miscounting. Both values are now restored independently and correctly.
Internal
- Timeout reset logic extracted into a shared
AbandonLap()function — previously duplicated inline in the ticker - Added
charData.lastGateSaveTime— wall-clocktime()written on every gate touch, cleared in all reset paths timeoutWatcherframe added alongside the existing zone-gatedticker;tickeris now gate-detection only
v2.1
Lap timeout and timer safety
Lap Timeout
- A lap is now automatically abandoned if no gate is touched for 30 minutes
- All in-progress lap state is cleared (gates hit, pip indicators, overlays) and gate overlays reset to their active state
- A chat message is printed when the timeout fires (respects the Notifications toggle)
- The 30-minute clock resets on every gate touch — only counts idle time between gate crossings
Timer Overflow Protection
FmtTimenow clamps all time values to[0, 30 minutes]before formatting — displayed times can never be negative or exceed the timeout ceiling- Lap times recorded in
FinishLapare clamped at the same bounds before being saved tobestLap— no impossible times can enter saved data - The
/lap debugelapsed time display inherits the same clamp viaFmtTime
Internal
- Added
lastGateTimestate variable — tracksGetTime()of the most recent gate touch lastGateTimeis cleared in all reset paths:/lap reset, Reset Stats confirmation, and the new timeout handler- Added
LAP_TIMEOUT = 1800constant
v2.0
Settings panel overhaul and UI polish
Settings Panel — Layout
- Rebuilt the entire settings panel layout from scratch using a shared column grid
- All sections (Gates, Gate Colours) now share the same column positions — headers align top-to-bottom across sections
- All content has equal left and right padding — right edges of every row are flush across the full panel
- Panel width reduced from 560px to 490px, auto-fit to content
- Removed dark background bands from sub-section headers — cleaner, lighter appearance
- Panel height auto-calculated from content cursor position
Settings Panel — Gate Overlay Section
- Added X/Y position boxes showing the current overlay offset — always populated on login from saved data, no longer blank until first move
- Added Set button — type X/Y values directly and apply them
- Added Center H and Center V buttons — snap overlay to horizontal or vertical screen centre independently
- Added x1 label restored to nudge row; nudge buttons aligned with position boxes above
- Reset button moved from the position row to the end of the nudge row
- All overlay section content uses the available panel width with consistent spacing
Settings Panel — Gate Colours Section
- Colour swatches are now 1:1 squares (22×22px) matching button height
- R/G/B column positions aligned with X/Y/SetP columns in the Gates section
Settings Panel — Gates Section
- Gate colour swatches span full row block height and align flush with name boxes
ElvUI Colour Hook
- Text colours are now derived from the ElvUI theme at login
textHi(section titles) scales with backdrop brightnesstextMid(row labels) scales with backdrop brightnesstextDim(column headers) scales with backdrop brightness
- Previously all text used hardcoded grey values regardless of ElvUI theme
- Introduced
TH()/TM()/TD()style sheet helpers — all label sites in the settings panel use these consistently
Bug Fixes
- Fixed
RefreshOverlayBoxesscoping error (nil call on login) — forward-declared as a module-level upvalue so it is visible toLoadOverlayOffsetwhich runs atPLAYER_LOGIN - Fixed overlay X/Y boxes not showing saved position until the panel was manually opened — boxes now populate immediately after saved data is loaded
v1.0
Initial release
Core Detection
- Four-gate lap detection — any gate starts and any order completes a lap
- 3-second per-gate cooldown prevents double-counting
- Mid-lap state saved per character and restored on reload
- Pending lap finish mechanic — all four gates must be crossed before a final crossing records the lap
- Detection scoped to a configurable zone map ID (default: 2393)
HUD
- Compact flat draggable panel
- Live lap timer, last lap time, personal best, character count, account-wide total
- Four gate progress pips that light up in gate colour as each checkpoint is crossed
- Close button; reopenable with
/lap show
Gate Overlay
- Four screen-space gate bars rendered as coloured labelled lines
- All gates move as a single unit — drag any bar or label to reposition
- Overlay offset saved per character and restored on login
- Gate bars fade when crossed during a lap; restore on lap completion or reset
- Show/hide toggle in settings
Settings Panel
- Gate names, P1/P2 coordinates (set from current position or typed manually), per-gate Apply
- Sensor width and zone map ID
- Gate colours with R/G/B input, live swatch, Apply and Default per gate
- Chat notification toggle
- Reset Gates and Reset Stats (with confirmation)
Persistence
- Per-character: coordinates, colour overrides, HUD position, overlay offset, lap counts, best lap, mid-lap state
- Account-wide: total laps, per-character bests, zone map ID, sensor width
ElvUI Integration
- Auto-detects ElvUI; reads backdrop, border, and accent colours
- Falls back to neutral defaults without ElvUI
Slash Commands
/lap,/lap hide,/lap settings,/lap reset,/lap stats/lap mycount,/lap acctcount,/lap debug,/lap help,/lapper

