initial commit
This commit is contained in:
259
Modules/Skins/Blizzard/Loot.lua
Normal file
259
Modules/Skins/Blizzard/Loot.lua
Normal file
@@ -0,0 +1,259 @@
|
||||
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
||||
local S = E:GetModule('Skins')
|
||||
local LBG = E.Libs.ButtonGlow
|
||||
|
||||
local _G = _G
|
||||
local unpack, select = unpack, select
|
||||
|
||||
local hooksecurefunc = hooksecurefunc
|
||||
local CreateFrame = CreateFrame
|
||||
local GetLootSlotInfo = GetLootSlotInfo
|
||||
local UnitIsDead = UnitIsDead
|
||||
local UnitIsFriend = UnitIsFriend
|
||||
local UnitName = UnitName
|
||||
local IsFishingLoot = IsFishingLoot
|
||||
local C_LootHistory_GetNumItems = C_LootHistory.GetNumItems
|
||||
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)
|
||||
|
||||
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:CreateBackdrop('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:CreateBackdrop()
|
||||
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 Loot
|
||||
local MasterLooterFrame = _G.MasterLooterFrame
|
||||
MasterLooterFrame:StripTextures()
|
||||
MasterLooterFrame:CreateBackdrop()
|
||||
|
||||
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 i=1, MasterLooterFrame:GetNumChildren() do
|
||||
local child = select(i, MasterLooterFrame:GetChildren())
|
||||
if child and not child.isSkinned and not child:GetName() then
|
||||
if child:IsObjectType('Button') then
|
||||
if child:GetPushedTexture() then
|
||||
S:HandleCloseButton(child)
|
||||
else
|
||||
child:SetTemplate()
|
||||
child:StyleButton()
|
||||
end
|
||||
child.isSkinned = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Bonus Roll Frame
|
||||
local BonusRollFrame = _G.BonusRollFrame
|
||||
BonusRollFrame:StripTextures()
|
||||
BonusRollFrame:CreateBackdrop('Transparent')
|
||||
|
||||
BonusRollFrame.SpecRing:SetTexture()
|
||||
BonusRollFrame.CurrentCountFrame.Text:FontTemplate()
|
||||
|
||||
BonusRollFrame.PromptFrame.Icon:SetTexCoord(unpack(E.TexCoords))
|
||||
BonusRollFrame.PromptFrame.IconBackdrop = CreateFrame('Frame', nil, BonusRollFrame.PromptFrame, 'BackdropTemplate')
|
||||
BonusRollFrame.PromptFrame.IconBackdrop:SetFrameLevel(BonusRollFrame.PromptFrame.IconBackdrop:GetFrameLevel() - 1)
|
||||
BonusRollFrame.PromptFrame.IconBackdrop:SetOutside(BonusRollFrame.PromptFrame.Icon)
|
||||
BonusRollFrame.PromptFrame.IconBackdrop:CreateBackdrop()
|
||||
|
||||
BonusRollFrame.PromptFrame.Timer:SetStatusBarTexture(E.media.normTex)
|
||||
BonusRollFrame.PromptFrame.Timer:SetStatusBarColor(unpack(E.media.rgbvaluecolor))
|
||||
|
||||
BonusRollFrame.BlackBackgroundHoist.Background:Hide()
|
||||
BonusRollFrame.BlackBackgroundHoist.b = CreateFrame('Frame', nil, BonusRollFrame, 'BackdropTemplate')
|
||||
BonusRollFrame.BlackBackgroundHoist.b:SetTemplate()
|
||||
BonusRollFrame.BlackBackgroundHoist.b:SetOutside(BonusRollFrame.PromptFrame.Timer)
|
||||
|
||||
BonusRollFrame.SpecIcon.b = CreateFrame('Frame', nil, BonusRollFrame, 'BackdropTemplate')
|
||||
BonusRollFrame.SpecIcon.b:SetTemplate()
|
||||
BonusRollFrame.SpecIcon.b:Point('BOTTOMRIGHT', BonusRollFrame, -2, 2)
|
||||
BonusRollFrame.SpecIcon.b:Size(BonusRollFrame.SpecIcon:GetSize())
|
||||
BonusRollFrame.SpecIcon.b:SetFrameLevel(6)
|
||||
BonusRollFrame.SpecIcon:SetParent(BonusRollFrame.SpecIcon.b)
|
||||
BonusRollFrame.SpecIcon:SetTexCoord(unpack(E.TexCoords))
|
||||
BonusRollFrame.SpecIcon:SetInside()
|
||||
hooksecurefunc(BonusRollFrame.SpecIcon, 'Hide', function(specIcon)
|
||||
if specIcon.b and specIcon.b:IsShown() then
|
||||
BonusRollFrame.CurrentCountFrame:ClearAllPoints()
|
||||
BonusRollFrame.CurrentCountFrame:Point('BOTTOMRIGHT', BonusRollFrame, -2, 1)
|
||||
specIcon.b:Hide()
|
||||
end
|
||||
end)
|
||||
hooksecurefunc(BonusRollFrame.SpecIcon, 'Show', function(specIcon)
|
||||
if specIcon.b and not specIcon.b:IsShown() and specIcon:GetTexture() ~= nil then
|
||||
BonusRollFrame.CurrentCountFrame:ClearAllPoints()
|
||||
BonusRollFrame.CurrentCountFrame:Point('RIGHT', BonusRollFrame.SpecIcon.b, 'LEFT', -2, -2)
|
||||
specIcon.b:Show()
|
||||
end
|
||||
end)
|
||||
|
||||
hooksecurefunc('BonusRollFrame_StartBonusRoll', function()
|
||||
--keep the status bar a frame above but its increased 1 extra beacuse mera has a grid layer
|
||||
local BonusRollFrameLevel = BonusRollFrame:GetFrameLevel();
|
||||
BonusRollFrame.PromptFrame.Timer:SetFrameLevel(BonusRollFrameLevel+2);
|
||||
if BonusRollFrame.BlackBackgroundHoist.b then
|
||||
BonusRollFrame.BlackBackgroundHoist.b:SetFrameLevel(BonusRollFrameLevel+1);
|
||||
end
|
||||
|
||||
--set currency icons position at bottom right (or left of the spec icon, on the bottom right)
|
||||
BonusRollFrame.CurrentCountFrame:ClearAllPoints()
|
||||
if BonusRollFrame.SpecIcon.b then
|
||||
BonusRollFrame.SpecIcon.b:SetShown(BonusRollFrame.SpecIcon:IsShown() and BonusRollFrame.SpecIcon:GetTexture() ~= nil);
|
||||
if BonusRollFrame.SpecIcon.b:IsShown() then
|
||||
BonusRollFrame.CurrentCountFrame:Point('RIGHT', BonusRollFrame.SpecIcon.b, 'LEFT', -2, -2)
|
||||
else
|
||||
BonusRollFrame.CurrentCountFrame:Point('BOTTOMRIGHT', BonusRollFrame, -2, 1)
|
||||
end
|
||||
else
|
||||
BonusRollFrame.CurrentCountFrame:Point('BOTTOMRIGHT', BonusRollFrame, -2, 1)
|
||||
end
|
||||
|
||||
--skin currency icons
|
||||
local ccf, pfifc = BonusRollFrame.CurrentCountFrame.Text, BonusRollFrame.PromptFrame.InfoFrame.Cost
|
||||
local text1, text2 = ccf and ccf:GetText(), pfifc and pfifc:GetText()
|
||||
if text1 and text1:find('|t') then ccf:SetText(text1:gsub('|T(.-):.-|t', '|T%1:16:16:0:0:64:64:5:59:5:59|t')) end
|
||||
if text2 and text2:find('|t') then pfifc:SetText(text2:gsub('|T(.-):.-|t', '|T%1:16:16:0:0:64:64:5:59:5:59|t')) end
|
||||
end)
|
||||
|
||||
local LootFrame = _G.LootFrame
|
||||
S:HandlePortraitFrame(LootFrame)
|
||||
LootFrame:Height(LootFrame:GetHeight() - 30)
|
||||
_G.LootFramePortraitOverlay:SetParent(E.HiddenFrame)
|
||||
|
||||
for i=1, LootFrame:GetNumRegions() do
|
||||
local region = select(i, LootFrame:GetRegions());
|
||||
if region:IsObjectType('FontString') then
|
||||
if region:GetText() == ITEMS then
|
||||
LootFrame.Title = region
|
||||
end
|
||||
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()
|
||||
_G['LootButton'..i..'IconQuestTexture']:SetParent(E.HiddenFrame)
|
||||
S:HandleItemButton(button, true)
|
||||
S:HandleIconBorder(button.IconBorder)
|
||||
|
||||
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
|
||||
LBG.ShowOverlayGlow(button)
|
||||
elseif questId or isQuestItem then
|
||||
LBG.ShowOverlayGlow(button)
|
||||
else
|
||||
LBG.HideOverlayGlow(button)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
LootFrame:HookScript('OnShow', function(s)
|
||||
if IsFishingLoot() then
|
||||
s.Title:SetText(L["Fishy Loot"])
|
||||
elseif not UnitIsFriend('player', 'target') and UnitIsDead('target') then
|
||||
s.Title:SetText(UnitName('target'))
|
||||
else
|
||||
s.Title:SetText(LOOT)
|
||||
end
|
||||
end)
|
||||
|
||||
S:HandleNextPrevButton(_G.LootFrameDownButton)
|
||||
S:HandleNextPrevButton(_G.LootFrameUpButton)
|
||||
end
|
||||
|
||||
S:AddCallback('LootFrame')
|
||||
Reference in New Issue
Block a user