Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.

Changes since v3.54:
- Neriak runner exit — EasyFind used to leave Neriak Commons after Toadstool; /travelto neriaka does not work from inside the city
- Remount after failed gate — characters dismounted for a gate attempt now remount before walking to PoK or destination zone
- Movement buff at safe spot — runners leaving Highpass get SoW/Totem applied at the safe gate location before travel
- Death handling — respawn now fires reliably during objective waits, not just during zone travel; hover guard added to all casting functions so invis/movement spells stop immediately on death
- Respawn window — correct button names verified in-game (RW_OptionsList + RW_SelectButton)
- AutoSize — correct commands per MQ docs; applied at script start not just at first Run
- BST invis — Natural Invisibility AA line added; fixed double-fire bug where untrained AAs were being attempted
- PoK anniversary tent — waypoint extended to cover all paths to Neriak, not just the main PoK hub function
- Various console cleanup and low-level class improvements
Changes since v3.38:
3.35 - Mount PickerAlways-visible dropdown in the UI (below Commemoratives) listing all keyring mounts. Levitating mounts detected viaHasSPA[57]on the item clicky spell and shown in orange with a(levitates)warning. Choice saved topppoker_settings.luaby mount name and restored on next launch.
3.36 - Invis before Neriak zone-inLow-level characters were killed by Neriak gate guards on arrival because invis was only applied after zone-in. Fix: invis now applied before/travelto neriaka, controlled by the existingTRAVEL_INVIS_BEFORE_NERIAKflag.
3.37 - Mount counts as movement buffpppokerMovementBuffPresent()was scanning buff slots for SPA 3 but keyring mounts provide speed through the mount system with no buff bar entry. Fix: checksMe.Mount.ID()first — if mounted, returns true immediately.
3.38 - Nav stuck detectionmoving()wait loop now samples position every 500ms. If position unchanged more than 3 units in 3 seconds, strafes left for 500ms (/keypress strafe_left hold+release) to clear geometry clips.
3.39-3.44 - PoK anniversary tent waypointAnniversary tent geometry near the Neriak stone is not in the navmesh — MQ2Nav routes straight through it. Fix:LOC.POK_NEK_WAYPOINT = {-612.25, 232.13, -157.18}(verified in-game, past the tent cluster on the east side). Character navs to this point before/travelto neriaka. Waypoint extended to ALLensureZone(NERIAK_A)callers viaprepCityTravel— not just the main PoK→Neriak path.
3.42-3.54 - Death and respawn handling (major overhaul)The death/respawn system was rebuilt across multiple versions after discovering a chain of issues affecting low-level characters:
3.45-3.46 - AutoSize fixesAutoSize commands corrected per
Me.Hovering()confirmed as the correct death-state TLO (returns true in hover/corpse state)/interruptadded on death detection to stop any active cast immediately- RespawnWnd child names corrected via
${EverQuest.LastMouseOver.Name}—RW_OptionsList listselect 1+RW_SelectButton leftmouseup(previous names failed silently)- Gate casting loops now check hover before each attempt — stops the "Too Distracted to cast" infinite retry loop
handleDeathIfNeededforward-declared so it can be called directly (bypassing the 300ms rate limiter) inwaitForZoneOrFalseandwaitObjectiveDonepppokerEnsureInvisBuff,pppokerEnsureMovementBuff, andmeditateToManaPppall checkMe.Hovering()at entry and return immediately when dead- Respawn click fires immediately on hover detection and retries every 1 second until hover clears
docs.macroquest.org: toggle on (/autosize self on,/autosize mounts on) then set size (/autosize sizeself 3,/autosize sizemounts 3). AutoSize now applied at script start, not just at first Run click.
Changes since v3.34:
3.35 - Mount picker with levitation detectionA dropdown now appears in the UI (below Commemoratives, above Debug panel) listing all keyring mounts. Levitating mounts — detected viaHasSPA[57]on the item's clicky spell (SPA 57 = SE_Levitation, confirmed in game) — appear in orange with a(levitates)label and tooltip warning. Non-levitating mounts show a green tooltip. Your choice is saved topppoker_settings.luaby mount name and restored on next launch. If the saved mount is removed from your keyring, the picker resets. Single-mount characters are auto-selected silently with no prompt. Multiple mounts with no selection show a yellow "Choose Mount" advisory.
3.36 - Invis before zoning into NeriakPreviously, invisibility was only applied after arriving in Neriak viaensureSpeedAndInvisInNeriak(). For low-level characters, Neriak gate guards killed them at zone-in before invis could land. Fix:prepCityTravel()now applies invis before/travelto neriakawhen the destination is Neriak Foreign Quarter or Neriak Commons, controlled by the existingTRAVEL_INVIS_BEFORE_NERIAKflag. Invis is still confirmed after zone-in as before.
3.37 - Mount counts as movement buffpppokerMovementBuffPresent()was scanning buff slots for SPA 3 (movement speed effect) but keyring mounts provide speed through the mount system itself — no spell buff ever appears in the buff bar. This caused a false "movement buff missing" warning and unnecessary Worn Totem attempt on every cycle while mounted. Fix: checksMe.Mount.ID()first; if mounted, returns true immediately without scanning buffs.
3.38 - Nav stuck detection and auto-unstuckThemoving()wait loop now samplesMe.X/Yevery 500ms while navigation is active. If position hasn't changed more than 3 units in 3 seconds, the script strafes left for 500ms (/keypress strafe_left hold+release— the same pattern used in astone for precise movement) to clear geometry clips. Matches the manual Ctrl+Left Arrow fix for the PoK anniversary tent area. Only fires when nav is truly moving (not paused for buff upkeep), so no false triggers during the nav pause block.
Changes since v3.26:
3.27 - Level check before memspellLow-level characters no longer attempt to memorize spells they can't cast. A level 12 NEC won't try to mem level 55 Skin of the Shadow — the script now checks MinCasterLevel before /memspell in both the movement and invis spell pipelines, skipping to the next spell on the list instead.
3.28 - Movement item reuse guardWorn Totem and other movement items now check the reuse timer before clicking, matching the existing invis item behavior. When on cooldown the item is skipped rather than clicking dead. Prevents dropping invis for a no-op click. New config:MOVEMENT_SKIP_ITEM_IF_NOT_READY(default true).
3.29 - Remove legacy Worn Totem functionpppokerUseWornTotemIfAvailablewas a hardcoded legacy path duplicating theMOVEMENT_ITEM_NAMESlist with a different wait time (12s vs 6s). Removed — Worn Totem is now handled exclusively by the standard movement item pipeline like any other item.
3.30 - Fix objective loop crashv3.27 usedSpell.ClassLevelwhich is not exposed in MQ Lua bindings. Caused "attempt to call field 'ClassLevel' (a nil value)" on every objective loop iteration, spamming the console and blocking progress. Fixed usingSpell.MinCasterLevel()which is confirmed working in game.
3.31 - Cleaner console output"CWTN pause skipped" no longer prints an orange timestamped line to EQ console on every run start when no CWTN plugin is loaded (normal for most characters). Now goes to the debug panel only.
3.32 - Console text fixEm dashes (—) rendered as ??? in MQ's EQ font (3-byte UTF-8 character, each byte shows as ?). All 205 instances replaced with plain hyphens throughout the script.
3.33 / 3.34 - Universal movement buff detectionpppokerMovementBuffPresent()previously only recognized named class spells and AA buff names. Worn Totem's buff ("Blessing of Swiftness") was not in any list, causing a false "movement buff missing" warning on every upkeep tick even with the buff active. Fixed using EQ's SPA 3 (SE_MovementSpeed) effect code — the function now scans all 42 buff slots and checksHasSPA[3]on each. Works for any movement source (class spells, AAs, item clickies) with zero configuration. Bard Selo songs handled separately via the existingbardSeloActive()check since songs live inMe.SongnotMe.Buff.
Changes since v3.16
3.26 — Buff upkeep unified nav-pause block: Worn Totem and invis both now properly stop navigation before applying (movement items and spells were being interrupted mid-cast during nav). One combined/nav pausewhen either buff is needed, movement applied first then invis, single/nav pause offafter both. Proactive invis refresh enabled by default — recasts at 8 ticks (~48s) remaining instead of waiting for it to drop entirely.
3.25 — Fix invis not recasting and mana not medding to 50% during navigation. Root cause: script blocked all spell casts while moving (allowSpellCast=false), so neither the invis recast nor the med check ever ran. Fix: upkeep now pauses nav, casts with spells allowed, resumes nav. Guard flag prevents re-entry during the cast window.
3.24 — Mana safety buffer + death respawn. Mana meditation now targetsmax(spell cost, 50% of MaxMana)instead of just the spell cost — avoids the pattern of medding for one cast, running off with low mana, invis fading with nothing left to recast. Death handler added: detects dead state, waits for respawn window, clicks bind point, waits for revival before resuming.
3.23 — Invis-before-movement guard in upkeep. If invis is currently active and the movement buff expired, movement re-application is skipped that tick — Worn Totem and movement spells drop invis in EQ. Movement is applied on the next tick after invis naturally drops, then invis follows.
3.22 — Two latent fixes: (1)warnforward declaration so texture load failures don't crash on a nil call. (2) Task slot cache — previously scanned up to 30 tasks × 16 objectives (480 TLO reads) on every progress refresh; now cached after first successful scan.
3.21 — Gate spell mana check: reads actual spell mana cost before each cast attempt and meds to that amount first. Fixes low-level casters silently failing Gate casts after spending mana on invis.
3.20 — Gate fizzle recovery: replaced 90-second flat wait after a failed gate cast with gem-ready polling. Script now exits the wait as soon as the gate gem/AA is ready again (~3-5s on fizzle/collapse vs up to 90s before).
3.19 — Low-level Highpass safe gate: characters below level 40 (configurable) navigate to a safe spot outside the Tiger room before gating, so the gate landing doesn't drop invis near guard clusters.
3.18 — Objective timeout no longer kills the run. Timeouts now warn and retry the same objective on the next loop iteration instead of hard-failing. Gate errors (fail()) also caught and retried.
3.17 — Mana med threshold fix: med target was hardcoded to 40 mana in spell-cast paths. Low-level casters with more than 40 mana but less than the spell cost would skip sitting and silently fail. Now uses actual spell cost as the floor. Stop requests honored inside the med loop.
