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.
141 lines
4.3 KiB
141 lines
4.3 KiB
--========================================================--
|
|
-- 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
|
|
|