161 lines
5.5 KiB
Lua
161 lines
5.5 KiB
Lua
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
local DT = E:GetModule('DataTexts')
|
|
|
|
local _G = _G
|
|
local ipairs, wipe = ipairs, wipe
|
|
local format, next, strjoin = format, next, strjoin
|
|
local GetLootSpecialization = GetLootSpecialization
|
|
local GetNumSpecializations = GetNumSpecializations
|
|
local GetPvpTalentInfoByID = GetPvpTalentInfoByID
|
|
local GetSpecialization = GetSpecialization
|
|
local GetSpecializationInfo = GetSpecializationInfo
|
|
local GetTalentInfo = GetTalentInfo
|
|
local HideUIPanel = HideUIPanel
|
|
local IsShiftKeyDown = IsShiftKeyDown
|
|
local SetLootSpecialization = SetLootSpecialization
|
|
local SetSpecialization = SetSpecialization
|
|
local ShowUIPanel = ShowUIPanel
|
|
local LOOT = LOOT
|
|
local TALENTS = TALENTS
|
|
local PVP_TALENTS = PVP_TALENTS
|
|
local SELECT_LOOT_SPECIALIZATION = SELECT_LOOT_SPECIALIZATION
|
|
local LOOT_SPECIALIZATION_DEFAULT = LOOT_SPECIALIZATION_DEFAULT
|
|
local C_SpecializationInfo_GetAllSelectedPvpTalentIDs = C_SpecializationInfo.GetAllSelectedPvpTalentIDs
|
|
|
|
local displayString, lastPanel, active = ''
|
|
local activeString = strjoin('', '|cff00FF00' , _G.ACTIVE_PETS, '|r')
|
|
local inactiveString = strjoin('', '|cffFF0000', _G.FACTION_INACTIVE, '|r')
|
|
local menuList = {
|
|
{ text = SELECT_LOOT_SPECIALIZATION, isTitle = true, notCheckable = true },
|
|
{ checked = function() return GetLootSpecialization() == 0 end, func = function() SetLootSpecialization(0) end },
|
|
}
|
|
|
|
local specList = {
|
|
{ text = _G.SPECIALIZATION, isTitle = true, notCheckable = true },
|
|
}
|
|
|
|
local mainIcon = '|T%s:16:16:0:0:64:64:4:60:4:60|t'
|
|
local function OnEvent(self)
|
|
lastPanel = self
|
|
|
|
if #menuList == 2 then
|
|
for index = 1, GetNumSpecializations() do
|
|
local id, name, _, icon = GetSpecializationInfo(index)
|
|
if id then
|
|
menuList[index + 2] = { text = name, checked = function() return GetLootSpecialization() == id end, func = function() SetLootSpecialization(id) end }
|
|
specList[index + 1] = { text = format('|T%s:14:14:0:0:64:64:4:60:4:60|t %s', icon, name), checked = function() return GetSpecialization() == index end, func = function() SetSpecialization(index) end }
|
|
end
|
|
end
|
|
end
|
|
|
|
local specIndex = GetSpecialization()
|
|
local specialization = GetLootSpecialization()
|
|
local info = DT.SPECIALIZATION_CACHE[specIndex]
|
|
|
|
if not info then
|
|
self.text:SetText('N/A')
|
|
return
|
|
end
|
|
|
|
active = specIndex
|
|
|
|
local spec = format(mainIcon, info.icon)
|
|
|
|
if specialization == 0 or info.id == specialization then
|
|
self.text:SetFormattedText('%s %s', spec, info.name)
|
|
else
|
|
info = DT.SPECIALIZATION_CACHE[specialization]
|
|
self.text:SetFormattedText('%s: %s %s: %s', L["Spec"], spec, LOOT, format(mainIcon, info.icon))
|
|
end
|
|
end
|
|
|
|
local listIcon = '|T%s:16:16:0:0:50:50:4:46:4:46|t'
|
|
local function AddTexture(texture)
|
|
return texture and format(listIcon, texture) or ''
|
|
end
|
|
|
|
local function OnEnter()
|
|
DT.tooltip:ClearLines()
|
|
|
|
for i, info in ipairs(DT.SPECIALIZATION_CACHE) do
|
|
DT.tooltip:AddLine(strjoin(' ', format(displayString, info.name), AddTexture(info.icon), (i == active and activeString or inactiveString)), 1, 1, 1)
|
|
end
|
|
|
|
DT.tooltip:AddLine(' ')
|
|
|
|
local specialization = GetLootSpecialization()
|
|
local sameSpec = specialization == 0 and GetSpecialization()
|
|
local specIndex = DT.SPECIALIZATION_CACHE[sameSpec or specialization]
|
|
if specIndex and specIndex.name then
|
|
DT.tooltip:AddLine(format('|cffFFFFFF%s:|r %s', SELECT_LOOT_SPECIALIZATION, sameSpec and format(LOOT_SPECIALIZATION_DEFAULT, specIndex.name) or specIndex.name))
|
|
end
|
|
|
|
DT.tooltip:AddLine(' ')
|
|
DT.tooltip:AddLine(TALENTS, 0.69, 0.31, 0.31)
|
|
|
|
for i = 1, _G.MAX_TALENT_TIERS do
|
|
for j = 1, 3 do
|
|
local _, name, icon, selected = GetTalentInfo(i, j, 1)
|
|
if selected then
|
|
DT.tooltip:AddLine(AddTexture(icon)..' '..name)
|
|
end
|
|
end
|
|
end
|
|
|
|
local pvpTalents = C_SpecializationInfo_GetAllSelectedPvpTalentIDs()
|
|
if next(pvpTalents) then
|
|
DT.tooltip:AddLine(' ')
|
|
DT.tooltip:AddLine(PVP_TALENTS, 0.69, 0.31, 0.31)
|
|
|
|
for i, talentID in next, pvpTalents do
|
|
if i > 4 then break end
|
|
local _, name, icon, _, _, _, unlocked = GetPvpTalentInfoByID(talentID)
|
|
if name and unlocked then
|
|
DT.tooltip:AddLine(AddTexture(icon)..' '..name)
|
|
end
|
|
end
|
|
end
|
|
|
|
DT.tooltip:AddLine(' ')
|
|
DT.tooltip:AddLine(L["|cffFFFFFFLeft Click:|r Change Talent Specialization"])
|
|
DT.tooltip:AddLine(L["|cffFFFFFFShift + Left Click:|r Show Talent Specialization UI"])
|
|
DT.tooltip:AddLine(L["|cffFFFFFFRight Click:|r Change Loot Specialization"])
|
|
DT.tooltip:Show()
|
|
end
|
|
|
|
local function OnClick(self, button)
|
|
local specIndex = GetSpecialization()
|
|
if not specIndex then return end
|
|
|
|
if button == 'LeftButton' then
|
|
if not _G.PlayerTalentFrame then
|
|
_G.LoadAddOn('Blizzard_TalentUI')
|
|
end
|
|
if IsShiftKeyDown() then
|
|
if not _G.PlayerTalentFrame:IsShown() then
|
|
ShowUIPanel(_G.PlayerTalentFrame)
|
|
else
|
|
HideUIPanel(_G.PlayerTalentFrame)
|
|
end
|
|
else
|
|
DT:SetEasyMenuAnchor(DT.EasyMenu, self)
|
|
_G.EasyMenu(specList, DT.EasyMenu, nil, nil, nil, 'MENU')
|
|
end
|
|
else
|
|
local _, specName = GetSpecializationInfo(specIndex)
|
|
menuList[2].text = format(LOOT_SPECIALIZATION_DEFAULT, specName)
|
|
|
|
DT:SetEasyMenuAnchor(DT.EasyMenu, self)
|
|
_G.EasyMenu(menuList, DT.EasyMenu, nil, nil, nil, 'MENU')
|
|
end
|
|
end
|
|
|
|
local function ValueColorUpdate()
|
|
displayString = strjoin('', '|cffFFFFFF%s:|r ')
|
|
|
|
if lastPanel then OnEvent(lastPanel) end
|
|
end
|
|
E.valueColorUpdateFuncs[ValueColorUpdate] = true
|
|
|
|
DT:RegisterDatatext('Talent/Loot Specialization', nil, {'CHARACTER_POINTS_CHANGED', 'PLAYER_TALENT_UPDATE', 'ACTIVE_TALENT_GROUP_CHANGED', 'PLAYER_LOOT_SPEC_UPDATED'}, OnEvent, nil, OnClick, OnEnter, nil, L["Talent/Loot Specialization"])
|