Files
pfUI/modules/autoshift.lua
T
2019-04-07 14:48:58 +02:00

93 lines
3.4 KiB
Lua

pfUI:RegisterModule("autoshift", 11200, function ()
pfUI.autoshift = CreateFrame("Frame")
pfUI.autoshift:RegisterEvent("UI_ERROR_MESSAGE")
pfUI.autoshift.lastError = ""
pfUI.autoshift.CastSpellByName = _G["CastSpellByName"]
pfUI.autoshift.scanString = string.gsub(SPELL_FAILED_ONLY_SHAPESHIFT, "%%s", "(.+)")
function pfUI.autoshift:SwitchStance()
for stance in gfind(pfUI.autoshift.lastError, pfUI.autoshift.scanString) do
for _, stance in pairs({ strsplit(",", stance)}) do
pfUI.autoshift.CastSpellByName(string.gsub(stance,"^%s*(.-)%s*$", "%1"))
end
end
pfUI.autoshift.lastError = ""
end
hooksecurefunc("CastSpell", function(spellId, spellbookTabNum)
pfUI.autoshift:SwitchStance()
end)
hooksecurefunc("CastSpellByName", function(spellName, onSelf)
pfUI.autoshift:SwitchStance()
end)
hooksecurefunc("UseAction", function(slot, checkCursor, onSelf)
pfUI.autoshift:SwitchStance()
end)
pfUI.autoshift.buffs = { "spell_nature_swiftness", "_mount_", "_qirajicrystal_",
"ability_racial_bearform", "ability_druid_catform", "ability_druid_travelform",
"ability_druid_aquaticform", "spell_shadow_shadowform", "spell_nature_spiritwolf" }
-- an agility buff exists which has the same icon as the moonkin form
-- therefore only add the moonkin icon to the removable buffs if
-- moonkin is skilled and player is druid. Frame is required as talentpoints
-- are only accessible after certain events.
local moonkin_scan = CreateFrame("Frame")
moonkin_scan:RegisterEvent("PLAYER_ENTERING_WORLD")
moonkin_scan:RegisterEvent("UNIT_NAME_UPDATE")
moonkin_scan:SetScript("OnEvent", function()
local _, class = UnitClass("player")
if class == "DRUID" then
local _,_,_,_,moonkin = GetTalentInfo(1,16)
if moonkin == 1 then
table.insert(pfUI.autoshift.buffs, "spell_nature_forceofnature")
moonkin_scan:UnregisterAllEvents()
end
else
moonkin_scan:UnregisterAllEvents()
end
end)
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:SetScript("OnEvent", function()
pfUI.autoshift.lastError = arg1
local CancelLater = nil
if arg1 == SPELL_FAILED_NOT_STANDING then
SitOrStand()
return
end
for id, errorstring in pairs(pfUI.autoshift.errors) do
if arg1 == errorstring then
for i=0,31,1 do
local currBuffTex = GetPlayerBuffTexture(i)
if (currBuffTex) then
for id, bufftype in pairs(pfUI.autoshift.buffs) do
if string.find(string.lower(currBuffTex), bufftype, 1) then
if string.find(string.lower(currBuffTex), "spell_shadow_shadowform", 1) then
CancelLater = i
else
CancelPlayerBuff(i)
return
end
end
end
end
end
if CancelLater then
CancelPlayerBuff(CancelLater)
end
end
end
end)
end)