mirror of
https://github.com/brues-code/pfUI.git
synced 2026-09-26 09:26:02 +00:00
0e0a3f3688
Replaces autoshift's Phase 2 (form-ID → texture lookup → buff iteration → CancelPlayerBuff(bid)) with a single CancelShapeshiftForm() call. The implementation in ClassicAPI walks the buff slots and matches via Spell.dbc effect arrays itself, so we don't have to maintain a form-ID → texture map on the Lua side. Drops pfUI.autoshift.shapeshifts entirely (no longer consulted) and the turtle-wow.lua block that conditionally appended Tree of Life / Stag Form textures — Turtle's added DBC rows (form IDs 9 and 11) are handled natively by the same scan.
79 lines
2.8 KiB
Lua
79 lines
2.8 KiB
Lua
pfUI:RegisterModule("autoshift", "vanilla", function ()
|
|
pfUI.autoshift = CreateFrame("Frame")
|
|
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,
|
|
SPELL_NOT_SHAPESHIFTED_NOSPACE, ERR_CANT_INTERACT_SHAPESHIFTED, ERR_NOT_WHILE_SHAPESHIFTED,
|
|
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
|
|
for _, stance in pairs({ strsplit(",", stances)}) do
|
|
CastSpellByName(string.gsub(stance,"^%s*(.-)%s*$", "%1"))
|
|
end
|
|
end
|
|
|
|
-- check if we need to stand up
|
|
if arg1 == SPELL_FAILED_NOT_STANDING then
|
|
SitOrStand()
|
|
return
|
|
end
|
|
|
|
-- scan through buffs and cancel shapeshift/mount
|
|
for id, errorstring in pairs(pfUI.autoshift.errors) do
|
|
if arg1 == errorstring then
|
|
-- don't cancel form when clicking on npcs while in combat
|
|
if arg1 == ERR_CANT_INTERACT_SHAPESHIFTED and UnitAffectingCombat("player") then
|
|
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
|
|
CancelShapeshiftForm()
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
end)
|