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.

113 lines
3.5 KiB

5 years ago
--========================================================--
-- Scorpio Secure EquipSet Handler --
-- --
-- Author : kurapica125@outlook.com --
-- Create Date : 2021/03/29 --
--========================================================--
if not C_EquipmentSet then return end
--========================================================--
Scorpio "Scorpio.Secure.EquipSetHandler" "1.0.0"
--========================================================--
------------------------------------------------------
-- Action Handler
------------------------------------------------------
handler = ActionTypeHandler {
Name = "equipmentset",
InitSnippet = [[ _EquipSet = newtable() ]],
PickupSnippet = [[
local target = ...
return "clear", "equipmentset", _EquipSet[target]
]],
UpdateSnippet = [[
local target = ...
self:SetAttribute("*type*", "macro")
self:SetAttribute("*macrotext*", "/equipset "..target)
]],
ClearSnippet = [[
self:SetAttribute("*type*", nil)
self:SetAttribute("*macrotext*", nil)
]],
}
------------------------------------------------------
-- Module Event Handler
------------------------------------------------------
_EquipSetTemplate = "_EquipSet[%q] = %d\n"
_EquipSetMap = {}
GetEquipmentSetInfo = C_EquipmentSet.GetEquipmentSetInfo
------------------------------------------------------
-- System Event Handler
------------------------------------------------------
__SystemEvent__()
function PLAYER_EQUIPMENT_CHANGED()
return handler:RefreshActionButtons()
end
__SystemEvent__"PLAYER_ENTERING_WORLD" "EQUIPMENT_SETS_CHANGED"
function PLAYER_ENTERING_WORLD()
return UpdateEquipmentSet()
end
function UpdateEquipmentSet()
local str = "for i in pairs(_EquipSet) do _EquipSet[i] = nil end\n"
wipe(_EquipSetMap)
for _, id in pairs(C_EquipmentSet.GetEquipmentSetIDs()) do
local name = GetEquipmentSetInfo(id)
str = str .. _EquipSetTemplate:format(name, id)
_EquipSetMap[name] = id
end
if str ~= "" then
NoCombat(function ()
handler:RunSnippet( str )
return handler:RefreshActionButtons()
end)
end
end
------------------------------------------------------
-- Overwrite methods
------------------------------------------------------
function handler:PickupAction(target)
return _EquipSetMap[target] and C_EquipmentSet.PickupEquipmentSet(_EquipSetMap[target])
end
function handler:GetActionText()
return self.ActionTarget
end
function handler:GetActionTexture()
local target = self.ActionTarget
return _EquipSetMap[target] and select(2, GetEquipmentSetInfo(_EquipSetMap[target]))
end
function handler:IsEquippedItem()
local target = self.ActionTarget
return _EquipSetMap[target] and select(4, GetEquipmentSetInfo(_EquipSetMap[target]))
end
function handler:IsActivedAction()
local target = self.ActionTarget
return _EquipSetMap[target] and select(4, GetEquipmentSetInfo(_EquipSetMap[target]))
end
function handler:SetTooltip(tip)
if _EquipSetMap[self.ActionTarget] then
tip:SetEquipmentSet(_EquipSetMap[self.ActionTarget])
end
end