You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
4.3 KiB

5 years ago
--========================================================--
-- Scorpio Secure Pet Action Handler --
-- --
-- Author : kurapica125@outlook.com --
-- Create Date : 2021/03/29 --
--========================================================--
--========================================================--
Scorpio "Scorpio.Secure.PetActionHandler" "1.0.0"
--========================================================--
_Enabled = false
------------------------------------------------------
-- Action Handler
------------------------------------------------------
handler = ActionTypeHandler {
Name = "pet",
Target = "action",
DragStyle = "Keep",
ReceiveStyle = "Keep",
IsPlayerAction = false,
IsPetAction = true,
PickupSnippet = [[ return "petaction", ... ]],
UpdateSnippet = [[
local target = ...
if tonumber(target) then
-- Use macro to toggle auto cast
self:SetAttribute("type2", "macro")
self:SetAttribute("macrotext2", "/click PetActionButton".. target .. " RightButton")
end
]],
ClearSnippet = [[
self:SetAttribute("type2", nil)
self:SetAttribute("macrotext2", nil)
]],
PreClickSnippet = [[
local type, action = GetActionInfo(self:GetAttribute("action"))
return nil, format("%s|%s", tostring(type), tostring(action))
]],
PostClickSnippet = [[
local message = ...
local type, action = GetActionInfo(self:GetAttribute("action"))
if message ~= format("%s|%s", tostring(type), tostring(action)) then
return Manager:RunFor(self, UpdateAction)
end
]],
OnEnableChanged = function(self, value) _Enabled = value end,
}
------------------------------------------------------
-- Addon Event Handler
------------------------------------------------------
function OnEnable()
OnEnable = nil
Wow.FromEvent("UNIT_AURA"):MatchUnit("pet"):Next():Subscribe(function()
return handler:RefreshButtonState()
end)
Wow.FromEvent("UNIT_PET"):MatchUnit("player"):Subscribe(function()
return handler:RefreshActionButtons()
end)
Wow.FromEvent("UNIT_FLAGS"):MatchUnit("pet"):Next():Subscribe(function()
return handler:RefreshActionButtons()
end)
end
------------------------------------------------------
-- System Event Handler
------------------------------------------------------
__SystemEvent__"PET_STABLE_UPDATE" "PET_STABLE_SHOW" "PLAYER_CONTROL_LOST"
"PLAYER_CONTROL_GAINED" "PLAYER_FARSIGHT_FOCUS_CHANGED"
"PET_BAR_UPDATE" "PET_UI_UPDATE" "UPDATE_VEHICLE_ACTIONBAR"
function PET_STABLE_UPDATE()
return handler:RefreshActionButtons()
end
__SystemEvent__()
function PET_BAR_UPDATE_COOLDOWN()
return handler:RefreshCooldown()
end
__SystemEvent__()
function PET_BAR_UPDATE_USABLE()
return handler:RefreshUsable()
end
------------------------------------------------------
-- Overwrite methods
------------------------------------------------------
function handler:PickupAction(target)
return PickupPetAction(target)
end
function handler:HasAction()
return GetPetActionInfo(self.ActionTarget) and true
end
function handler:GetActionTexture()
local name, texture, isToken = GetPetActionInfo(self.ActionTarget)
if name then
return isToken and _G[texture] or texture
end
end
function handler:GetActionCooldown()
return GetPetActionCooldown(self.ActionTarget)
end
function handler:IsUsableAction()
return GetPetActionSlotUsable(self.ActionTarget)
end
function handler:IsActivedAction()
return select(4, GetPetActionInfo(self.ActionTarget))
end
function handler:IsAutoCastAction()
return select(5, GetPetActionInfo(self.ActionTarget))
end
function handler:IsAutoCasting()
return select(6, GetPetActionInfo(self.ActionTarget))
end
function handler:SetTooltip(GameTooltip)
return GameTooltip:SetPetAction(self.ActionTarget)
end
function handler:IsRangeSpell()
return true
end