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.
200 lines
6.2 KiB
200 lines
6.2 KiB
local E, L, V, P, G = unpack(ElvUI)
|
|
local S = E:GetModule('Skins')
|
|
local LCG = E.Libs.CustomGlow
|
|
|
|
local _G = _G
|
|
local next = next
|
|
local unpack = unpack
|
|
|
|
local GetItemInfo = GetItemInfo
|
|
local GetLootSlotInfo = GetLootSlotInfo
|
|
local hooksecurefunc = hooksecurefunc
|
|
local IsFishingLoot = IsFishingLoot
|
|
local UnitIsDead = UnitIsDead
|
|
local UnitIsFriend = UnitIsFriend
|
|
local UnitName = UnitName
|
|
|
|
local C_LootHistory_GetNumItems = C_LootHistory.GetNumItems
|
|
local C_LootHistory_GetItem = C_LootHistory.GetItem
|
|
local ITEM_QUALITY_COLORS = ITEM_QUALITY_COLORS
|
|
local LOOT, ITEMS = LOOT, ITEMS
|
|
|
|
local function UpdateLoots()
|
|
local numItems = C_LootHistory_GetNumItems()
|
|
for i=1, numItems do
|
|
local frame = _G.LootHistoryFrame.itemFrames[i]
|
|
if frame and not frame.isSkinned then
|
|
local Icon = frame.Icon:GetTexture()
|
|
frame:StripTextures()
|
|
frame.Icon:SetTexture(Icon)
|
|
frame.Icon:SetTexCoord(unpack(E.TexCoords))
|
|
|
|
-- Create a backdrop around the icon
|
|
frame:CreateBackdrop()
|
|
frame.backdrop:SetOutside(frame.Icon)
|
|
frame.Icon:SetParent(frame.backdrop)
|
|
|
|
local _, itemLink = C_LootHistory_GetItem(frame.itemIdx)
|
|
if itemLink then
|
|
local _, _, itemRarity = GetItemInfo(itemLink)
|
|
|
|
if itemRarity then
|
|
local color = ITEM_QUALITY_COLORS[itemRarity]
|
|
|
|
if color then
|
|
frame.backdrop:SetBackdropBorderColor(color.r, color.g, color.b)
|
|
end
|
|
end
|
|
end
|
|
|
|
frame.isSkinned = true
|
|
end
|
|
end
|
|
end
|
|
|
|
function S:LootFrame()
|
|
if not (E.private.skins.blizzard.enable and E.private.skins.blizzard.loot) then return end
|
|
|
|
-- Loot history frame
|
|
local LootHistoryFrame = _G.LootHistoryFrame
|
|
LootHistoryFrame:StripTextures()
|
|
S:HandleCloseButton(LootHistoryFrame.CloseButton)
|
|
LootHistoryFrame:StripTextures()
|
|
LootHistoryFrame:SetTemplate('Transparent')
|
|
LootHistoryFrame.ResizeButton:StripTextures()
|
|
LootHistoryFrame.ResizeButton.text = LootHistoryFrame.ResizeButton:CreateFontString(nil, 'OVERLAY')
|
|
LootHistoryFrame.ResizeButton.text:FontTemplate(nil, 16, 'OUTLINE')
|
|
LootHistoryFrame.ResizeButton.text:SetJustifyH('CENTER')
|
|
LootHistoryFrame.ResizeButton.text:Point('CENTER', LootHistoryFrame.ResizeButton)
|
|
LootHistoryFrame.ResizeButton.text:SetText('v v v v')
|
|
LootHistoryFrame.ResizeButton:SetTemplate()
|
|
LootHistoryFrame.ResizeButton:Width(LootHistoryFrame:GetWidth())
|
|
LootHistoryFrame.ResizeButton:Height(19)
|
|
LootHistoryFrame.ResizeButton:ClearAllPoints()
|
|
LootHistoryFrame.ResizeButton:Point('TOP', LootHistoryFrame, 'BOTTOM', 0, -2)
|
|
_G.LootHistoryFrameScrollFrame:StripTextures()
|
|
S:HandleScrollBar(_G.LootHistoryFrameScrollFrameScrollBar)
|
|
|
|
hooksecurefunc('LootHistoryFrame_FullUpdate', UpdateLoots)
|
|
|
|
-- Master Looter Frame
|
|
local MasterLooterFrame = _G.MasterLooterFrame
|
|
MasterLooterFrame:SetTemplate('Transparent')
|
|
MasterLooterFrame.NineSlice:SetTemplate('Transparent')
|
|
|
|
MasterLooterFrame.Item.NameBorderMid:StripTextures()
|
|
MasterLooterFrame.Item.NameBorderLeft:StripTextures()
|
|
MasterLooterFrame.Item.NameBorderRight:StripTextures()
|
|
|
|
hooksecurefunc('MasterLooterFrame_Show', function()
|
|
local b = MasterLooterFrame.Item
|
|
if b then
|
|
local i = b.Icon
|
|
local icon = i:GetTexture()
|
|
local c = ITEM_QUALITY_COLORS[_G.LootFrame.selectedQuality]
|
|
|
|
b:StripTextures()
|
|
i:SetTexture(icon)
|
|
i:SetTexCoord(unpack(E.TexCoords))
|
|
b:CreateBackdrop()
|
|
b.backdrop:SetOutside(i)
|
|
b.backdrop:SetBackdropBorderColor(c.r, c.g, c.b)
|
|
end
|
|
|
|
for _, child in next, { MasterLooterFrame:GetChildren() } do
|
|
if not child.isSkinned and not child:GetName() and child:IsObjectType('Button') then
|
|
if child:GetPushedTexture() then
|
|
S:HandleCloseButton(child)
|
|
else
|
|
child:SetTemplate()
|
|
child:StyleButton()
|
|
end
|
|
child.isSkinned = true
|
|
end
|
|
end
|
|
end)
|
|
|
|
local LootFrame = _G.LootFrame
|
|
S:HandleFrame(LootFrame, true)
|
|
LootFrame:Height(LootFrame:GetHeight() - 30)
|
|
_G.LootFramePortraitOverlay:SetParent(E.HiddenFrame)
|
|
|
|
for _, region in next, { LootFrame:GetRegions() } do
|
|
if region:IsObjectType('FontString') and region:GetText() == ITEMS then
|
|
LootFrame.Title = region
|
|
end
|
|
end
|
|
|
|
LootFrame.Title:ClearAllPoints()
|
|
LootFrame.Title:Point('TOPLEFT', LootFrame, 'TOPLEFT', 4, -4)
|
|
LootFrame.Title:SetJustifyH('LEFT')
|
|
|
|
for i = 1, _G.LOOTFRAME_NUMBUTTONS do
|
|
local button = _G['LootButton'..i]
|
|
_G['LootButton'..i..'NameFrame']:Hide()
|
|
|
|
S:HandleItemButton(button, true)
|
|
S:HandleIconBorder(button.IconBorder, button.backdrop)
|
|
|
|
local point, attachTo, point2, x, y = button:GetPoint()
|
|
button:ClearAllPoints()
|
|
button:Point(point, attachTo, point2, x, y+30)
|
|
end
|
|
|
|
hooksecurefunc('LootFrame_UpdateButton', function(index)
|
|
local numLootItems = LootFrame.numLootItems
|
|
--Logic to determine how many items to show per page
|
|
local numLootToShow = _G.LOOTFRAME_NUMBUTTONS
|
|
if LootFrame.AutoLootTable then
|
|
numLootItems = #LootFrame.AutoLootTable
|
|
end
|
|
if numLootItems > _G.LOOTFRAME_NUMBUTTONS then
|
|
numLootToShow = numLootToShow - 1 -- Make space for the page buttons
|
|
end
|
|
|
|
local button = _G['LootButton'..index]
|
|
local slot = (numLootToShow * (LootFrame.page - 1)) + index
|
|
if button and button:IsShown() then
|
|
local texture, _, isQuestItem, questId, isActive
|
|
if LootFrame.AutoLootTable then
|
|
local entry = LootFrame.AutoLootTable[slot]
|
|
if entry.hide then
|
|
button:Hide()
|
|
return
|
|
else
|
|
texture = entry.texture
|
|
isQuestItem = entry.isQuestItem
|
|
questId = entry.questId
|
|
isActive = entry.isActive
|
|
end
|
|
else
|
|
texture, _, _, _, _, _, isQuestItem, questId, isActive = GetLootSlotInfo(slot)
|
|
end
|
|
|
|
if texture then
|
|
if questId and not isActive then
|
|
LCG.ShowOverlayGlow(button)
|
|
elseif questId or isQuestItem then
|
|
LCG.ShowOverlayGlow(button)
|
|
else
|
|
LCG.HideOverlayGlow(button)
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
LootFrame:HookScript('OnShow', function(frame)
|
|
if IsFishingLoot() then
|
|
frame.Title:SetText(L["Fishy Loot"])
|
|
elseif not UnitIsFriend('player', 'target') and UnitIsDead('target') then
|
|
frame.Title:SetText(UnitName('target'))
|
|
else
|
|
frame.Title:SetText(LOOT)
|
|
end
|
|
end)
|
|
|
|
S:HandleNextPrevButton(_G.LootFrameDownButton)
|
|
S:HandleNextPrevButton(_G.LootFrameUpButton)
|
|
end
|
|
|
|
S:AddCallback('LootFrame')
|
|
|