Repository navigation
Release V1.7.7
2026-08-30
-
Luacheck Warning Elimination (
triune.lua).-
Direct Discipline Metric Initialization (
UI.getTrackedCooldownItems): InitializedtotalSec,endCost,activeTotalSec,timerGroupId, anddiscIdxdirectly fromdiscInfoinstead of pre-initializing with dummy zeroes/nil, resolving all luacheck overwritten variable warnings and ensuring clean CI passes (0 warnings / 0 errors in 10 files).
-
Direct Discipline Metric Initialization (
-
LuaLS Type Warnings & Nil Check Hardening (
triune_buttons.lua).-
Type-Safe Timer Key Assignment (
saveEdit): Decoupled buffer string reading fromtkvariable declaration, eliminating LuaLS static type conversion warnings when assigning numeric gem indices, integer second delays, or nil. -
Button Edit State Nil Guard (
drawEditWindow): Added an explicitedit.tmpnil check and early close fallback before rendering the button edit controls, preventing nil index warnings across all button attribute inputs.
-
Type-Safe Timer Key Assignment (
-
Project Version Bump (v1.7.7): Synchronized version 1.7.7 across
triune.lua,triune_updater.lua, andREADME.md. -
Cooldown & Active Duration Accuracy Overhaul (
triune.lua,triune_buttons.lua).-
Accurate Active Duration Calculation (
parseDurationSec): Fixed active duration parsing across Alternate Advancements, Disciplines, Buffs, and Songs. MacroQuest'sMe.Buff.Durationtimestamp object is now parsed directly via.TotalSeconds(),.Raw()(/ 1000.0), or standard string conversion, eliminating previous tick-multiplication bugs (duration * 6on millisecond timestamps) that erroneously multiplied milliseconds by 6. -
Discipline Reuse & Base Cooldown Engine (
getDiscCooldownAndDuration,DISC_BASE_COOLDOWNS,DISC_BASE_DURATIONS): Added a comprehensive database of era-accurate discipline cooldowns and durations across all melee/hybrid classes (War, Pal, SK, Mnk, Rog, Rng, Ber, Bst). Discipline recast lookups now seamlessly merge spell data withDISC_BASE_COOLDOWNSfallbacks when MacroQuestSpell.RecastTimereturns 0 for classic EQ combat abilities. -
Discipline Timer Parsing (
parseCombatAbilityTimer): FixedCombatAbilityTimerlookups by supporting dual-path query (both by discipline name and integer combat ability index) and properly converting raw tick values (1 tick = 6s) to seconds while safely handling millisecond returns. -
Eliminated Phantom Cooldown Loops: Removed destructive fallback blocks in
UI.getTrackedCooldownItems()that falsely set full artificial cooldowns and stampedlastDiscFiredAt = nowon every frame for ready abilities gated by resource/combat checks (LOW END,BLOCKED,NEED BURN,NEED BOSS,MIN XTAR). -
Cyan Active Progress Bar Scaling (
activeTotalSec): Connected each ability's true baseline active duration (activeTotalSec) to both Table and HUD Card progress bars, ensuring active stances and buffs render a full 100% -> 0% countdown rather than a thin 2% sliver. -
Toolbar Buttons Cooldown Sync (
triune_buttons.lua): UpdatedgetCooldown(btn)to use the sharedparseTloTimerlogic, properly convertingCombatAbilityTimerticks to seconds rather than misinterpreting ticks as milliseconds.
-
Accurate Active Duration Calculation (
-
Control Tab UI Streamlining (
triune.lua).-
Removed Redundant Closer-Mobs Checkboxes: Removed the duplicate
Check for Closer NPCs while Travelingcheckboxes from theHunterandCampsubmode sections on the Control tab, consolidating closer-target movement configuration onto the dedicatedCloser-NPC Retargeting During Movementsection on the Settings tab.
-
Removed Redundant Closer-Mobs Checkboxes: Removed the duplicate
-
Dedicated Cooldowns Tab & Shared Popout Integration (
triune.lua).-
New Cooldowns Tab (
UI.drawCooldownsTab): Added a dedicatedCooldownstab directly in the main Triune window positioned right after theAAstab (Status -> Control -> Settings -> Spell Gems -> Abilities -> AAs -> Cooldowns -> Disciplines -> Clickies -> Help). -
Shared Collision-Free Cooldown UI (
UI.renderCooldownContent): Refactored the live ability, AA, discipline, spell, and clickie cooldown monitoring view into a unified renderer accepting unique ImGui ID suffixes (_tabvs_win), preventing ID collisions and input freezing when both the main window tab and the floating popout window are active simultaneously. -
Popout Window Option Inside Tab: Added a dedicated
Popout Windowbutton directly inside the Cooldowns tab header, allowing users to pop out the monitor into a standalone floating window at any time while retaining full in-tab functionality. -
Unit Tests: Added test cases in
tests/test_pure_logic.luavalidating the presence and exact tab sequence ordering ofUI.drawCooldownsTab()right afterUI.drawAATab().
-
New Cooldowns Tab (
-
Lua Variable Shadowing Fix (
triune_map.lua).-
Luacheck Warning Elimination: Renamed shadowed
childFlagsvariables withinDrawMapCanvasto unique identifiers (canvasChildFlags,floorNavFlags,overlayFlags), resolving all luacheck shadowing warnings and ensuring clean CI passes.
-
Luacheck Warning Elimination: Renamed shadowed
-
Map Loading Time & Anti-Stutter Performance Engine Overhaul (
triune_map.lua).-
High-Speed Stream Map Parser (
parseMapFile): Replaced line-by-line regex parsing (gmatch('[^\r\n]+')+line:match(...)) with direct single-pass stream tokenizers for lines and labels, eliminating hundreds of thousands of intermediate string allocations and reducing zone map parse times by over 80%. -
Eliminated Blocking Process Spawns (
io.popen): Removed all blocking subshell child process spawns (cmd /c dir/find) from folder and file scanning routines, substituting them with instant C-level non-blocking direct file probes (<1mstotal probe time across all 300+ Atlas zones) to eliminate game hitching on scan/init. -
O(1) Navmesh Background Queue (
processNavBatch): Replaced$O(N)$ table.remove(queue, 1)array shifts with an$O(1)$ amortizedqueueHeadpointer, preventing frame drops during background navmesh path verification. -
Optimized Radar Spawn Scans (
scanZoneSpawns): Throttled maximum nearby NPC radar queries to 120 closest spawns, eliminating$O(N^2)$ NearestSpawniteration freezes in densely populated zones.
-
High-Speed Stream Map Parser (
-
Compact Map UI & Floating Bottom Control Dock (
triune_map.lua).- Removed Redundant Top Toolbar: Eliminated the top text bar and metrics header above the tab bar so the tabs start flush at the top of the window, maximizing vertical map canvas viewing area.
-
Unified Floating Canvas Control Dock (
##MapControlOverlayChild): Relocated theFollowcheckbox,Center Me/Center Map,POIsdrawer toggle,Stop Nav, andLive Zonereturn buttons down into a sleek floating 2-row bottom-right overlay dock alongside+,-,⟲, andAZcontrols. - Larger Button Hitboxes & Double-Click Exclusion: Increased button dimensions from 24px to 28px/26px and expanded the hitbox exclusion barrier so double-clicking on or near on-canvas control buttons never triggers accidental ground navigation or mob targeting on the underlying map canvas.
-
ImGui Style Stack Balance Guard: Fixed a state-flip condition on the POIs button where toggling
state.showPoiDrawerduring the click callback causedPopStyleColorto be called without a preceding push, eliminating theCalling PopStyleColor() too many times!crash.
-
Left-Click Only Map Panning (
triune_map.lua).-
Restricted Viewport Drag Panning: Updated viewport drag panning to trigger strictly when holding down the primary Left Mouse Button (
isItemActive and ImGui.IsMouseDown(0)without Ctrl held), removing right-click panning initiation and right-click drag tracking.
-
Restricted Viewport Drag Panning: Updated viewport drag panning to trigger strictly when holding down the primary Left Mouse Button (
-
Interactive Mouse Wheel Zoom Fix (
triune_map.lua).-
Scrollable Child Window Region (
##MapCanvasScrollRegion): Enclosed the 2D map canvas in a dedicated child window container with virtual scroll content height (SetNextWindowContentSize) and baseline scroll midpoint tracking (ImGui.GetScrollY), replacing the unsupportedio.MouseWheelquery (which is not bound on MacroQuest'sImGuiIOLua usertype) with native ImGui scroll delta capture. -
Window Scroll Flag Unlocking: Removed
ImGuiWindowFlags.NoScrollWithMousefrom the top-level main window flags so mouse wheel scroll events cleanly reach the canvas viewport and inner scrollable list panes. - Cursor-Centered Smooth Zooming: Restored smooth zooming in (wheel up) and zooming out (wheel down) centered on the active mouse cursor coordinate.
-
Scrollable Child Window Region (
-
ImGui Window Layout Streamlining & Spacing Cleanup (
triune.lua).-
Removed Extraneous Dummy Spacing: Removed 77 redundant
ImGui.Dummy(0, N)andImGui.Dummy(N, 0)spacers across all tabs (Status, Control, Settings, Gems, Clickies, Abilities, AAs, Discs, Help, and Class Picker), relying on natural theme item spacing for consistent, uncluttered padding. -
Streamlined Action Controls Bar (
UI.drawActionControls): CompactedSTART/PAUSEandBURNbuttons to sleek 130x24 standard dimensions with directImGui.SameLine()alignment right above the tab bar. -
Mini HUD Mode Spacing Refinement (
drawMiniGui): Replaced double-spaced separator blocks (Spacing(); Separator(); Spacing()) with clean single separators and removed empty spacing lines, keeping the compact mini-window tightly fitted. - Tighter Tab Layouts & Metric Overview: Compacted vertical padding in the Status tab overview table, Target Threat card, Navigation diagnostics, and Settings tabs so key combat telemetry and controls fit naturally on screen without excessive scrolling.
-
Removed Extraneous Dummy Spacing: Removed 77 redundant
-
Popout Cooldown & Ability Monitor Window (
triune.lua).-
Standalone Popout ImGui Window (
TriuneCooldownWindow): Registered an independent, top-level ImGui window (TriuneCooldownWindow) providing real-time live monitoring of all enabled Innate Combat Abilities, Alternate Advancements (AAs), Disciplines, Spells (Gems), and Clickie items across all three character classes. - Cooldown-First Automatic Sorting: Updated default time sorting so items currently on cooldown and active effects sort directly to the top of the list with soonest-to-recover abilities appearing first, followed by ready abilities ordered by priority.
-
AA & Discipline Cooldown Timer Overhaul (
runtime.fireAA,runtime.fireDisc,isDiscReady):-
Alternate Advancements (AAs): Dual-path lookup querying
mq.TLO.Me.AltAbilityTimerby both name and integer AA ID (aaObj.ID()), evaluating hastened reuse times (MyReuseTime()), tracking software timestamps (runtime.lastAAFiredAt), and inspecting spell-name buffers (Buff(spellName),Song(spellName)) so AA durations and cooldowns tick down second-by-second. -
Combat Disciplines (Discs): Handled MQ
CombatAbilityTimerticks conversion (1 tick = 6s) and milliseconds normalization, added shared EverQuest Timer Group cooldown tracking (runtime.timerGroupCooldown), and software elapsed tracking (runtime.lastDiscFiredAt). -
Innate Abilities: Implemented
ABILITY_BASE_COOLDOWNSlookup database and dual-path TLO inspection (mq.TLO.Me.AbilityTimer(nm),mq.TLO.Me.AbilityTimer(idx),AbilityTimerTotal) with software elapsed time tracking (runtime.lastSkillFiredAt).
-
Alternate Advancements (AAs): Dual-path lookup querying
-
Active Duration & Stance Countdown: Displays active buff and discipline stance durations with glowing cyan progress bars and countdowns (
[ ACTIVE: Xs ]) before transitioning into cooldown. -
Smart Readiness & Condition Diagnostics: Pinpoints the exact reason why an ability is gated:
[ READY ],[ LOW END ](with required vs current endurance values),[ LOW MANA ],[ NEED BURN ],[ NEED BOSS ],[ MIN XTAR ],[ LOCKED ], and[ BLOCKED ]. -
EverQuest Shared Timer Group Detection: Identifies and badges EQ discipline and skill timer groups (
[T1],[T2],[T4], etc.) to clearly highlight shared cooldown lockouts. -
Compact Mode & Streamlined Screen Space Footprint:
- Reduced default window footprint to a sleek 500x340 overlay with tight padding (
CellPadding 3,2,ItemSpacing 4,3,FramePadding 3,2). - Merged multi-line toolbars into a clean 2-line header: Line 1 hosts live counters (
R:5 A:1 CD:2),[HUD]/[Table]toggle,Lockcheckbox,Compactcheckbox, and inlineTunetoggle; Line 2 provides compact category, status, sort, search, and alpha controls. - Removed unused "Next Up" indicator and star column, streamlining the table directly to Class, Ability Name, Status & Timer, and Action button.
- Reduced default window footprint to a sleek 500x340 overlay with tight padding (
-
Floating Overlay Controls: Configurable background transparency slider (
Alpha 0.10 - 1.00), window lock mode (NoTitleBar / NoMove / NoResize), category filters (All,Abilities,AAs,Disciplines,Spells,Items), status filters (All,Ready,Cooldown,Active), sort selector (Time Left,Status,Priority,Class,Type,Alphabetical), and live name search box. -
In-Place Loadout Tuning: Optional inline editing controls enabling live adjustment of
Enabled, thresholdHP %, andBurn Onlytoggles directly from the monitor table. -
UI Integration & Slash Commands: Added popout toggle buttons across the Main Header Bar (
Cooldowns##hdrCooldowns), Mini HUD (CDs##miniCooldowns), Status Tab (Popout Cooldowns##statCdBtn), Abilities Tab, AAs Tab, and Disciplines Tab, along with/ac cd,/ac cds,/ac cooldown,/ac cooldowns, and/triune cdslash commands. -
Unit Tests: Added test suites in
tests/test_pure_logic.luaverifying cooldown configuration fields indefaultCtrl(), ability base cooldowns, AA/disc timer conversions, shared timer groups, status evaluation, and cooldown-first sorting algorithms.
-
Standalone Popout ImGui Window (
-
Beneficial Spell Lockout Exemption & Detrimental-Only Lockout Restriction (
triune.lua).- Zero Lockout Policy for Beneficial Spells: Ensured that beneficial spells (heals, buffs, pet summons, cures, teleports) are never locked out under any failure scenario (fizzles, interrupts, "did not take hold", generic failures, or out-of-range).
-
Authoritative Beneficial vs Detrimental Classification (
isDetrimentalSpell): Added multi-layered action classification checking explicit entry kind tags (heal,buff,pet,cure,utilvsdd,dot,debuff,nuke), target token prefixes (E:vsS:,P:,G:,A:,C:), live MacroQuest spell/ability beneficial properties (Spell().Beneficial(),AltAbility().Spell.Beneficial(),CombatAbility().Spell.Beneficial()), era spell database definitions, and fallback keyword heuristics. -
Restricted Cast Tracker Failures (
createCastTracker):-
isLockedOut(spellName, targetId, kind)immediately returnsfalsefor any beneficial spell or ability. -
recordFailure(spellName, targetId, reason, ...)ignores failures on beneficial spells without creating target lockouts, global lockouts, or immunity flags. -
onFailureEvent(reason, ...)skips failure logging on beneficial spells so healer and buffer rotations never stall due to non-stacking buffs or interrupted casts. -
runtime.fireAAupdated to maintain cast tracker context (lastSpell,activeSpell,activeTargetId,activeKind,castStartTime). -
runtime.castGem,runtime.fireAA,runtime.useClickie, andcombatTickloop updated to passkindtoisLockedOutfor reliable spell classification.
-
-
Unit Tests: Added test suites in
tests/test_pure_logic.luacoveringisDetrimentalSpellclassification across beneficial/detrimental spells and verifying that beneficial spells never lock out while detrimental spells retain target immunity, debuff resist backoff, and failure recovery.
-
Function Parameter Consistency (
triune_map.lua):- Updated
getZAlphaMultiplier(avgZ, minZ, maxZ, zFilterMode, zDepthFading)signature to formally declare optionalzFilterModeandzDepthFadingparameters with fallbacks toctrl, eliminating language server argument count mismatch warnings.
- Updated
-
Status Page Active NPC On XTarget Combat State (
triune.lua):-
Strict XTarget NPC In-Combat Filter (
hasActualNPCXtarget): Updated the Status tab to only display the engine in combat (• COMBAT: IN COMBAT/Combat: Yes) when there is an actual live, non-ignored, hostile NPC occupying an active Extended Target (XTarget) slot, preventing lingering out-of-combat timers or idle auto-attack from misrepresenting combat state. - Threat Monitor Threat Filtering: Updated the active XTarget list generator in the Threat Monitor table to filter out corpses, dead targets, players, friendly pets, and ignored spawns.
-
Unit Tests: Added unit tests in
tests/test_pure_logic.luacoveringhasActualNPCXtargetacross live hostile NPCs, corpses, players, friendly pets, and ignored targets.
-
Strict XTarget NPC In-Combat Filter (
-
Combat Engine Spell Gems, Abilities, AA, Disciplines, Buffs & Heals Overhaul (
triune.lua).-
Out-of-Combat
min_xtarGate Fix: Updated Spell Gems, Clickies, AAs, Autoskill Actions, Priority Conditional Actions, and Disciplines execution loops to allow beneficial actions (buffs, heals, cures, pet summons, resurrection) to execute out of combat whennumXtar == 0, evaluatingxtOk = (numXtar >= minXt) or (not isDet and minXt <= 1). -
Deferred Target Restoration for Cast-Time Spells & Clickies: Fixed an issue in
castGemanduseClickiewhere beneficial spells and cast-time clickies targeting friendly party members or pets prematurely retargeted the mob after 60ms during mid-cast. The engine now holds target on the ally throughout the cast bar, and defers restoring the combat mob target until the spell finishes casting incombatTick. -
Assist Mode Friendly Pet Target Safety: Fixed a critical target-acquisition bug in
resolveTargetIdwhere friendly player pets (stype == 'Pet') were rejected in Assist mode by the unengaged mob gate. AddedisHostileTarget(id)verification so only unengaged hostile enemy pets/adds are gated. -
Whole Group Heal & Cure Condition Evaluation: Updated
conditionMetto evaluate the lowest health in the group (pctHP(runtime.lowestHpAlly()) <= pct) and scan all group members for poison/disease when targetingF: Whole Group, ensuring group heals and group cures fire when party members are endangered. -
Target Token Beneficial Prefix (
F:): Addedtok:sub(1, 2) == 'F:'toisDetrimentalSpellto immediately recognize all standard friendly target tokens (F: Myself,F: Lowest-HP Ally,F: Whole Group,F: Pet,F: Tank,F: Main Assist) as beneficial actions. -
Group Member Cure Counter Inspection: Enhanced
isPoisonedOrDiseasedto iterate through standardGroup.Member(0..total)party members and inspect their poison/disease status and counter totals (CountersPoison,CountersDisease), allowing party curing even without NetBots. -
Bard Twist Song Cycling: Updated
castGemto allow bard songs withwhen == 'twist while fighting'to bypass thedur > 0 and buffActivelockout, ensuring bard song twist rotations continuously cycle and refresh. -
Unit Tests: Added test cases in
tests/test_pure_logic.luavalidatingF:target tokens and out-of-combatmin_xtarevaluation.
-
Out-of-Combat
-
Spell Gems Modernization: Presets, Advanced Triggers, Rebuffing & Live Badges (
triune.lua).-
Spell Gem Presets & Multi-Spec Profiles: Added full named loadout preset management (
loadout.presets) with in-UI selector combo, save/load/delete buttons, and slash commands (/ac preset [save|load|delete|list],/ac loadout). Loading a preset automatically memorizes the entire spell set to the spell bar. -
Live In-UI Gem Status Badges (
UI.getGemStatusBadge): Added color-coded live feedback badges on every gem row:[Ready](Green),[CD: X.Xs](Gold with active countdown timer),[Not Memmed]/[Memming...](Orange),[Low Mana](Red with mana requirement tooltip), and[Locked Out](Purple). -
1-Click Gem Slot Reordering (
▲/▼): Added interactive Move Up and Move Down buttons on every gem slot for instant swapping and reordering without manual dropdown re-selection. -
Advanced Triggers & Conditions:
-
target HP between: Added configurableMin HP%andMax HP%window for damage-over-time (DoT) and nukes, preventing wasting mana on mobs about to die. -
has Curse&has Corruption: Added full cure evaluation (isCursed,isCorrupted) inspectingMe,Group.Member(i),NetBots, andTargetcounters. -
Aggro on Me&my Aggro >=: Added threat triggers reacting when mob aggro shifts to the player or exceeds a percentage threshold. -
Boss OnlyToggle on Gems: Added dedicated Named / Boss mob filtering checkbox per gem slot.
-
-
Intelligent Pre-Buff Refreshing & Reagent Verification:
- Added proactive out-of-combat buff refreshing (
ctrl.buff_refresh_sec, default 45s) so buffs are renewed before falling off mid-combat. - Added
hasSpellReagents(spellName)verifying inventory component counts (Spell.ReagentID) before casting to eliminate missing reagent chat spam.
- Added proactive out-of-combat buff refreshing (
-
Compact UI Layout & Screen Space Optimization: Streamlined the entire Spell Gems tab with concise status badges (
[RDY],[CD],[UNMEM],[MANA],[LOCK],[--]), optimized dropdown and slider widths, compact plain numerical text boxes for level range filtering without stepper+/-buttons, tight button padding, and compact two-row header controls, significantly reducing horizontal width footprint by ~240px. -
Dynamic Spell Gem Slot Support (
getNumGems): Automatically queriesmq.TLO.Me.NumGems()to dynamically display 8 to 12 gem slots based on character AAs and server client capabilities. -
Unit Tests: Added test suite in
tests/test_pure_logic.luacovering preset snapshots and deep-copy isolation, gem slot swapping,target HP betweenwindows, aggro triggers, and reagent verification.
-
Spell Gem Presets & Multi-Spec Profiles: Added full named loadout preset management (
📦 Installation & Updating Instructions
🆕 New Installation
- Go here and grab the latest macroquest release https://github.com/macroquest/macroquest/releases and extract under your user folder.
- Download TriuneAutocombat-full.zip below and extract contents to the same folder you extract macroquest to.
- Start
MacroQuest.exebefore launching EverQuest.
🔄 Updating an Existing Install
- Option 1 (Recommended — Easiest): In-Game Updater
- Click the [Updater] button on the top window header or type
/ac updatein chat. - Click Check for Updates, then Update Now to update and reload all scripts automatically without leaving the game.
- Alternatively, run
update.bat(Windows) orupdate.sh(Linux) from yourTAC/folder.
- Click the [Updater] button on the top window header or type
- Option 2 (Manual Update):
- Download
TriuneAutocombat-Update.zipfrom the Assets below. - Extract and overwrite the files into your existing MacroQuest directory.
- Note: Your personal settings and saved loadouts in
triune_loadout.luaare preserved and will never be overwritten.
- Download