From e1cd1ef1799c76aee2cf9ae735c08988a3e897d4 Mon Sep 17 00:00:00 2001 From: Brues <5278969+brues-code@users.noreply.github.com> Date: Thu, 21 May 2026 10:40:34 -0500 Subject: [PATCH] mount cancel via Dismount MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the Phase 1 buff-slot loop + tooltip-scanned mount-string match with a single Dismount() call. The implementation in ClassicAPI scans for SPELL_AURA_MOUNTED on the player's auras and sends the cancel packet itself, so we don't have to maintain a localized list of mount tooltip patterns ("Increases speed by X%", "Erhöht Tempo um X%", etc.). Drops pfUI.autoshift.mounts (the 20-line localized-string table) and pfUI.autoshift.scanner (its only consumer). Module is down to ~50 lines from ~150 at session start. --- modules/autoshift.lua | 45 +++++++------------------------------------ 1 file changed, 7 insertions(+), 38 deletions(-) diff --git a/modules/autoshift.lua b/modules/autoshift.lua index 73d8a8dc..55c00b07 100644 --- a/modules/autoshift.lua +++ b/modules/autoshift.lua @@ -3,26 +3,6 @@ pfUI:RegisterModule("autoshift", "vanilla", function () pfUI.autoshift:RegisterEvent("UI_ERROR_MESSAGE") pfUI.autoshift.scanString = string.gsub(SPELL_FAILED_ONLY_SHAPESHIFT, "%%s", "(.+)") - pfUI.autoshift.mounts = { - -- deDE - "^Erhöht Tempo um (.+)%%", - -- enUS - "^Increases speed by (.+)%%", - -- esES - "^Aumenta la velocidad en un (.+)%%", - -- frFR - "^Augmente la vitesse de (.+)%%", - -- ruRU - "^Скорость увеличена на (.+)%%", - -- koKR - "^이동 속도 (.+)%%만큼 증가", - -- zhCN - "^速度提高(.+)%%", - -- turtle-wow - "speed based on", "Slow and steady...", "Riding", - "Lento y constante...", "Aumenta la velocidad según tu habilidad de Montar.", - "根据您的骑行技能提高速度。", "根据骑术技能提高速度。", "又慢又稳......", - } pfUI.autoshift.errors = { SPELL_FAILED_NOT_MOUNTED, ERR_ATTACK_MOUNTED, ERR_TAXIPLAYERALREADYMOUNTED, SPELL_FAILED_NOT_SHAPESHIFT, SPELL_FAILED_NO_ITEMS_WHILE_SHAPESHIFTED, SPELL_NOT_SHAPESHIFTED, @@ -30,8 +10,6 @@ pfUI:RegisterModule("autoshift", "vanilla", function () ERR_NO_ITEMS_WHILE_SHAPESHIFTED, ERR_TAXIPLAYERSHAPESHIFTED,ERR_MOUNT_SHAPESHIFTED, ERR_EMBLEMERROR_NOTABARDGEOSET } - pfUI.autoshift.scanner = libtipscan:GetScanner("dismount") - pfUI.autoshift:SetScript("OnEvent", function() -- switch stance if required for stances in string.gfind(arg1, pfUI.autoshift.scanString) do @@ -54,22 +32,13 @@ pfUI:RegisterModule("autoshift", "vanilla", function () return end - -- Phase 1: mounts take priority (mount/shapeshift can't coexist in - -- vanilla, but the original error list also covers mount-only states). - for i = 0, 31 do - pfUI.autoshift.scanner:SetPlayerBuff(i) - for _, str in pairs(pfUI.autoshift.mounts) do - if pfUI.autoshift.scanner:Find(str) then - CancelPlayerBuff(i) - return - end - end - end - - -- Phase 2: cancel the active shapeshift. CancelShapeshiftForm finds - -- the form buff via the engine's Spell.dbc effect-array scan and - -- sends the cancel packet directly — no bid lookup needed. - if GetShapeshiftFormID() ~= 0 then + -- Mounts take priority over shapeshifts (the two can't coexist in + -- vanilla, but the error list covers mount-only states too). Both + -- helpers do their own engine-side aura scan and send the cancel + -- packet directly, so no buff iteration or bid lookup is needed. + if IsMounted() then + Dismount() + elseif GetShapeshiftFormID() ~= 0 then CancelShapeshiftForm() end end