local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB local S = E:GetModule('Skins') local _G = _G local unpack, pairs, ipairs, select = unpack, pairs, ipairs, select local CreateFrame = CreateFrame local hooksecurefunc = hooksecurefunc local function showFollower(s) S:HandleFollowerAbilities(s) end local function UpdateFollowerColorOnBoard(self, _, info) if self.Portrait.backdrop then local color = E.QualityColors[info.quality or 1] self.Portrait.backdrop:SetBackdropBorderColor(color.r, color.g, color.b) end end local function ResetFollowerColorOnBoard(self) if self.Portrait.backdrop then self.Portrait.backdrop:SetBackdropBorderColor(0, 0, 0) end end local function SkinFollowerBoard(self, group) for socketTexture in self[group..'SocketFramePool']:EnumerateActive() do socketTexture:DisableDrawLayer('BACKGROUND') end for frame in self[group..'FramePool']:EnumerateActive() do if not frame.IsSkinned then S:HandleGarrisonPortrait(frame) frame.PuckShadow:SetAlpha(0) if frame.SetFollowerGUID then hooksecurefunc(frame, 'SetFollowerGUID', UpdateFollowerColorOnBoard) end if frame.SetEmpty then hooksecurefunc(frame, 'SetEmpty', ResetFollowerColorOnBoard) end frame.IsSkinned = true end end end local function SkinMissionBoards(board) SkinFollowerBoard(board, 'enemy') SkinFollowerBoard(board, 'follower') end local function UpdateSpellAbilities(spell, followerInfo) local autoSpellInfo = followerInfo.autoSpellAbilities for _ in ipairs(autoSpellInfo) do local abilityFrame = spell.autoSpellPool:Acquire() if not abilityFrame.IsSkinned then S:HandleIcon(abilityFrame.Icon, true) if abilityFrame.SpellBorder then abilityFrame.SpellBorder:Hide() end abilityFrame.IsSkinned = true end end end local function ReskinMissionComplete(frame) local missionComplete = frame.MissionComplete local bonusRewards = missionComplete.BonusRewards if bonusRewards then select(11, bonusRewards:GetRegions()):SetTextColor(1, .8, 0) bonusRewards.Saturated:StripTextures() for i = 1, 9 do select(i, bonusRewards:GetRegions()):SetAlpha(0) end bonusRewards:CreateBackdrop() end if missionComplete.NextMissionButton then S:HandleButton(missionComplete.NextMissionButton) end if missionComplete.CompleteFrame then if E.private.skins.parchmentRemoverEnable then missionComplete:StripTextures() end missionComplete:CreateBackdrop('Transparent') missionComplete.backdrop:SetPoint("TOPLEFT", 3, 2) missionComplete.backdrop:SetPoint("BOTTOMRIGHT", -3, -10) if E.private.skins.parchmentRemoverEnable then missionComplete.CompleteFrame:StripTextures() end S:HandleButton(missionComplete.CompleteFrame.ContinueButton) S:HandleButton(missionComplete.CompleteFrame.SpeedButton) S:HandleButton(missionComplete.RewardsScreen.FinalRewardsPanel.ContinueButton) end end -- TO DO: Extend this function local function SkinMissionFrame(frame, strip) if strip then frame:StripTextures() end if not frame.backdrop then frame:CreateBackdrop('Transparent') end frame.CloseButton:StripTextures() S:HandleCloseButton(frame.CloseButton) if frame.GarrCorners then frame.GarrCorners:Hide() end if frame.OverlayElements then frame.OverlayElements:SetAlpha(0) end for i = 1, 3 do local tab = _G[frame:GetName()..'Tab'..i] if tab then S:HandleTab(tab) end end if frame.MapTab then frame.MapTab.ScrollContainer.Child.TiledBackground:Hide() end ReskinMissionComplete(frame) hooksecurefunc(frame.FollowerTab, 'UpdateCombatantStats', UpdateSpellAbilities) for _, item in pairs({frame.FollowerTab.ItemWeapon, frame.FollowerTab.ItemArmor}) do if item then local icon = item.Icon item.Border:Hide() S:HandleIcon(icon) end end end function S:Blizzard_GarrisonUI() if not (E.private.skins.blizzard.enable and E.private.skins.blizzard.garrison) then return end --These hooks affect both Garrison and OrderHall, so make sure they are set even if Garrison skin is disabled hooksecurefunc('GarrisonMissionButton_SetRewards', function(s) --Set border color according to rarity of item local firstRegion, r, g, b local index = 0 for _, reward in pairs(s.Rewards) do firstRegion = reward.GetRegions and reward:GetRegions() if firstRegion then firstRegion:Hide() end if reward.IconBorder then reward.IconBorder:SetTexture() end if reward.IconBorder and reward.IconBorder:IsShown() then r, g, b = reward.IconBorder:GetVertexColor() else r, g, b = unpack(E.media.bordercolor) end if not reward.Icon.backdrop then S:HandleIcon(reward.Icon, true) end reward.Icon.backdrop:SetBackdropBorderColor(r, g, b) index = index + 1 end end) hooksecurefunc('GarrisonMissionPage_SetReward', function(frame) frame.BG:SetTexture() if not frame.backdrop then S:HandleIcon(frame.Icon) end if frame.IconBorder then frame.IconBorder:SetTexture() end frame.Icon:SetDrawLayer('BORDER', 0) end) hooksecurefunc('GarrisonMissionPortrait_SetFollowerPortrait', function(portraitFrame, followerInfo) if not portraitFrame.IsSkinned then S:HandleGarrisonPortrait(portraitFrame) portraitFrame.IsSkinned = true end local color = _G.ITEM_QUALITY_COLORS[followerInfo.quality] portraitFrame.Portrait.backdrop:SetBackdropBorderColor(color.r, color.g, color.b) portraitFrame.Portrait.backdrop:Show() end) -- Building frame local GarrisonBuildingFrame = _G.GarrisonBuildingFrame GarrisonBuildingFrame:StripTextures(true) GarrisonBuildingFrame.TitleText:Show() GarrisonBuildingFrame:CreateBackdrop('Transparent') S:HandleCloseButton(GarrisonBuildingFrame.CloseButton, GarrisonBuildingFrame.backdrop) if E.private.skins.blizzard.tooltip then GarrisonBuildingFrame.BuildingLevelTooltip:StripTextures() GarrisonBuildingFrame.BuildingLevelTooltip:CreateBackdrop('Transparent') end -- Follower List local FollowerList = GarrisonBuildingFrame.FollowerList S:HandleScrollBar(FollowerList.listScroll.scrollBar) FollowerList:ClearAllPoints() FollowerList:Point('BOTTOMLEFT', 24, 34) local scrollFrame = FollowerList.listScroll S:HandleScrollBar(scrollFrame.scrollBar) -- Capacitive display frame local GarrisonCapacitiveDisplayFrame = _G.GarrisonCapacitiveDisplayFrame S:HandlePortraitFrame(GarrisonCapacitiveDisplayFrame) S:HandleButton(GarrisonCapacitiveDisplayFrame.StartWorkOrderButton) S:HandleButton(GarrisonCapacitiveDisplayFrame.CreateAllWorkOrdersButton) GarrisonCapacitiveDisplayFrame.Count:StripTextures() S:HandleEditBox(GarrisonCapacitiveDisplayFrame.Count) S:HandleNextPrevButton(GarrisonCapacitiveDisplayFrame.DecrementButton) S:HandleNextPrevButton(GarrisonCapacitiveDisplayFrame.IncrementButton) local CapacitiveDisplay = GarrisonCapacitiveDisplayFrame.CapacitiveDisplay CapacitiveDisplay.IconBG:SetTexture() CapacitiveDisplay.ShipmentIconFrame.Icon:SetTexCoord(unpack(E.TexCoords)) CapacitiveDisplay.ShipmentIconFrame.Icon:SetInside() --Fix unitframes appearing above work orders GarrisonCapacitiveDisplayFrame:SetFrameStrata('MEDIUM') GarrisonCapacitiveDisplayFrame:SetFrameLevel(45) hooksecurefunc('GarrisonCapacitiveDisplayFrame_Update', function(s) for _, Reagent in ipairs(s.CapacitiveDisplay.Reagents) do if not Reagent.backdrop then Reagent.NameFrame:SetTexture() S:HandleIcon(Reagent.Icon, true) Reagent:CreateBackdrop() end end end) -- Recruiter frame S:HandlePortraitFrame(_G.GarrisonRecruiterFrame) -- Recruiter Unavailable frame local UnavailableFrame = _G.GarrisonRecruiterFrame.UnavailableFrame S:HandleButton(UnavailableFrame:GetChildren()) -- Mission UI local GarrisonMissionFrame = _G.GarrisonMissionFrame GarrisonMissionFrame:StripTextures(true) GarrisonMissionFrame.TitleText:Show() GarrisonMissionFrame:CreateBackdrop('Transparent') S:HandleCloseButton(GarrisonMissionFrame.CloseButton, GarrisonMissionFrame.backdrop) for i = 1,2 do S:HandleTab(_G['GarrisonMissionFrameTab'..i]) end _G.GarrisonMissionFrameTab1:ClearAllPoints() _G.GarrisonMissionFrameTab1:Point('BOTTOMLEFT', 11, -40) GarrisonMissionFrame.GarrCorners:Hide() -- Follower list FollowerList = GarrisonMissionFrame.FollowerList FollowerList:DisableDrawLayer('BORDER') FollowerList.MaterialFrame:StripTextures() S:HandleEditBox(FollowerList.SearchBox) S:HandleScrollBar(FollowerList.listScroll.scrollBar) hooksecurefunc(FollowerList, 'ShowFollower', showFollower) -- Mission list local MissionTab = GarrisonMissionFrame.MissionTab local MissionList = MissionTab.MissionList local MissionPage = GarrisonMissionFrame.MissionTab.MissionPage MissionList:DisableDrawLayer('BORDER') S:HandleScrollBar(MissionList.listScroll.scrollBar) S:HandleCloseButton(MissionPage.CloseButton) MissionPage.CloseButton:SetFrameLevel(MissionPage:GetFrameLevel() + 2) S:HandleButton(MissionList.CompleteDialog.BorderFrame.ViewButton) MissionList.CompleteDialog.BorderFrame.ViewButton.backdrop:SetFrameLevel(MissionList.CompleteDialog.BorderFrame.ViewButton:GetFrameLevel()) S:HandleButton(MissionPage.StartMissionButton) S:HandleButton(GarrisonMissionFrame.MissionComplete.NextMissionButton) MissionPage.StartMissionButton.Flash:Hide() MissionPage.StartMissionButton.Flash.Show = E.noop MissionPage.StartMissionButton.FlashAnim:Stop() MissionPage.StartMissionButton.FlashAnim.Play = E.noop -- Landing page local GarrisonLandingPage = _G.GarrisonLandingPage local Report = GarrisonLandingPage.Report GarrisonLandingPage:CreateBackdrop('Transparent') S:HandleCloseButton(GarrisonLandingPage.CloseButton, GarrisonLandingPage.backdrop) S:HandleTab(_G.GarrisonLandingPageTab1) S:HandleTab(_G.GarrisonLandingPageTab2) S:HandleTab(_G.GarrisonLandingPageTab3) _G.GarrisonLandingPageTab1:ClearAllPoints() _G.GarrisonLandingPageTab1:Point('TOPLEFT', GarrisonLandingPage, 'BOTTOMLEFT', 70, 2) if E.private.skins.parchmentRemoverEnable then for i = 1, 10 do select(i, GarrisonLandingPage:GetRegions()):Hide() end for _, tab in pairs({Report.InProgress, Report.Available}) do tab:SetHighlightTexture('') tab.Text:ClearAllPoints() tab.Text:Point('CENTER') local bg = CreateFrame('Frame', nil, tab) bg:SetFrameLevel(tab:GetFrameLevel() - 1) bg:CreateBackdrop('Transparent') local selectedTex = bg:CreateTexture(nil, 'BACKGROUND') selectedTex:SetAllPoints() selectedTex:SetColorTexture(unpack(E.media.rgbvaluecolor)) selectedTex:SetAlpha(0.25) selectedTex:Hide() tab.selectedTex = selectedTex if tab == Report.InProgress then bg:Point('TOPLEFT', 5, 0) bg:Point('BOTTOMRIGHT') else bg:Point('TOPLEFT') bg:Point('BOTTOMRIGHT', -7, 0) end end hooksecurefunc('GarrisonLandingPageReport_SetTab', function(s) local unselectedTab = Report.unselectedTab unselectedTab:Height(36) unselectedTab:SetNormalTexture('') unselectedTab.selectedTex:Hide() s:SetNormalTexture('') s.selectedTex:Show() end) end -- Landing page: Report Report = GarrisonLandingPage.Report -- reassigned Report.List:StripTextures(true) scrollFrame = Report.List.listScroll S:HandleScrollBar(scrollFrame.scrollBar) local buttons = scrollFrame.buttons for i = 1, #buttons do local button = buttons[i] for _, reward in pairs(button.Rewards) do reward.Icon:SetTexCoord(unpack(E.TexCoords)) if not reward.border then reward.border = CreateFrame('Frame', nil, reward) S:HandleIcon(reward.Icon, reward.border) reward.Quantity:SetParent(reward.border) reward.IconBorder:Kill() -- For some reason, this fix icon border in 8.1 reward:ClearAllPoints() reward:Point('TOPRIGHT', -5, -5) if E.private.skins.parchmentRemoverEnable then button.BG:Hide() local bg = CreateFrame('Frame', nil, button) bg:Point('TOPLEFT') bg:Point('BOTTOMRIGHT', 0, 1) bg:SetFrameLevel(button:GetFrameLevel() - 1) bg:CreateBackdrop('Transparent') end end end end -- Landing page: Follower list FollowerList = GarrisonLandingPage.FollowerList FollowerList.FollowerHeaderBar:Hide() FollowerList.FollowerScrollFrame:Hide() S:HandleEditBox(FollowerList.SearchBox) scrollFrame = FollowerList.listScroll S:HandleScrollBar(scrollFrame.scrollBar) hooksecurefunc(FollowerList, 'ShowFollower', showFollower) hooksecurefunc('GarrisonFollowerButton_AddAbility', function(s, index) local ability = s.Abilities[index] if not ability.styled then S:HandleIcon(ability.Icon, ability) ability.styled = true end end) -- Garrison Portraits S:HandleFollowerListOnUpdateData('GarrisonMissionFrameFollowers') S:HandleFollowerListOnUpdateData('GarrisonLandingPageFollowerList') -- this also applies to orderhall landing page local FollowerTab = GarrisonLandingPage.FollowerTab hooksecurefunc(FollowerTab, 'UpdateCombatantStats', UpdateSpellAbilities) -- Landing page: Fleet local ShipFollowerList = GarrisonLandingPage.ShipFollowerList ShipFollowerList.FollowerHeaderBar:Hide() S:HandleEditBox(ShipFollowerList.SearchBox) scrollFrame = ShipFollowerList.listScroll S:HandleScrollBar(scrollFrame.scrollBar) -- HandleShipFollowerPage(ShipFollowerList.followerTab) -- ShipYard local GarrisonShipyardFrame = _G.GarrisonShipyardFrame GarrisonShipyardFrame:StripTextures(true) GarrisonShipyardFrame.BorderFrame:StripTextures(true) GarrisonShipyardFrame:CreateBackdrop('Transparent') GarrisonShipyardFrame.backdrop:SetOutside(GarrisonShipyardFrame.BorderFrame) GarrisonShipyardFrame.BorderFrame.GarrCorners:Hide() S:HandleCloseButton(GarrisonShipyardFrame.BorderFrame.CloseButton2) S:HandleTab(_G.GarrisonShipyardFrameTab1) S:HandleTab(_G.GarrisonShipyardFrameTab2) -- ShipYard: Naval Map MissionTab = GarrisonShipyardFrame.MissionTab MissionList = MissionTab.MissionList MissionList:CreateBackdrop('Transparent') MissionList.backdrop:SetOutside(MissionList.MapTexture) MissionList.CompleteDialog.BorderFrame:StripTextures() MissionList.CompleteDialog.BorderFrame:CreateBackdrop('Transparent') -- ShipYard: Mission MissionPage = MissionTab.MissionPage S:HandleCloseButton(MissionPage.CloseButton) MissionPage.CloseButton:SetFrameLevel(MissionPage.CloseButton:GetFrameLevel() + 2) S:HandleButton(MissionList.CompleteDialog.BorderFrame.ViewButton) MissionList.CompleteDialog.BorderFrame.ViewButton.backdrop:SetFrameLevel(MissionList.CompleteDialog.BorderFrame.ViewButton:GetFrameLevel()) S:HandleButton(GarrisonShipyardFrame.MissionComplete.NextMissionButton) MissionList.CompleteDialog:SetAllPoints(MissionList.MapTexture) GarrisonShipyardFrame.MissionCompleteBackground:SetAllPoints(MissionList.MapTexture) S:HandleButton(MissionPage.StartMissionButton) MissionPage.StartMissionButton.Flash:Hide() MissionPage.StartMissionButton.Flash.Show = E.noop MissionPage.StartMissionButton.FlashAnim:Stop() MissionPage.StartMissionButton.FlashAnim.Play = E.noop -- ShipYard: Follower List FollowerList = GarrisonShipyardFrame.FollowerList scrollFrame = FollowerList.listScroll FollowerList:StripTextures() S:HandleScrollBar(scrollFrame.scrollBar) S:HandleEditBox(FollowerList.SearchBox) FollowerList.MaterialFrame:StripTextures() FollowerList.MaterialFrame.Icon:SetAtlas('ShipMission_CurrencyIcon-Oil', false) --Re-add the material icon -- HandleShipFollowerPage(FollowerList.followerTab) if E.private.skins.blizzard.tooltip ~= true then return end -- ShipYard: Mission Tooltip local tooltip = _G.GarrisonShipyardMapMissionTooltip tooltip:CreateBackdrop('Transparent') local reward = tooltip.ItemTooltip local icon = reward.Icon if icon then S:HandleIcon(icon) reward.IconBorder:SetTexture() end local bonusIcon = tooltip.BonusReward and tooltip.BonusReward.Icon if bonusIcon then S:HandleIcon(bonusIcon) end -- Threat Counter Tooltips _G.GarrisonMissionMechanicFollowerCounterTooltip:CreateBackdrop('Transparent') _G.GarrisonMissionMechanicTooltip:CreateBackdrop('Transparent') -- MissionFrame local OrderHallMissionFrame = _G.OrderHallMissionFrame OrderHallMissionFrame:StripTextures() OrderHallMissionFrame.ClassHallIcon:Kill() OrderHallMissionFrame:StripTextures() OrderHallMissionFrame.GarrCorners:Hide() OrderHallMissionFrame:CreateBackdrop('Transparent') OrderHallMissionFrame.backdrop:SetOutside(OrderHallMissionFrame.BorderFrame) S:HandleCloseButton(OrderHallMissionFrame.CloseButton) for i = 1, 3 do S:HandleTab(_G['OrderHallMissionFrameTab' .. i]) end for _, Button in pairs(OrderHallMissionFrame.MissionTab.MissionList.listScroll.buttons) do if not Button.backdrop then -- added in S:HandleButton S:HandleButton(Button, true) Button.backdrop:SetFrameLevel(Button:GetFrameLevel()) Button.LocBG:SetDrawLayer('BACKGROUND', 1) end end -- Followers local Follower = _G.OrderHallMissionFrameFollowers FollowerList = OrderHallMissionFrame.FollowerList -- swap local FollowerTab = OrderHallMissionFrame.FollowerTab Follower:StripTextures() Follower:CreateBackdrop('Transparent') FollowerList:StripTextures() FollowerList.MaterialFrame:StripTextures() S:HandleEditBox(FollowerList.SearchBox) S:HandleScrollBar(OrderHallMissionFrame.FollowerList.listScroll.scrollBar) hooksecurefunc(FollowerList, 'ShowFollower', showFollower) FollowerTab:StripTextures() FollowerTab.Class:Size(50, 43) FollowerTab.XPBar:StripTextures() FollowerTab.XPBar:SetStatusBarTexture(E.media.normTex) FollowerTab.XPBar:CreateBackdrop() -- Orderhall Portraits S:HandleFollowerListOnUpdateData('OrderHallMissionFrameFollowers') S:HandleFollowerListOnUpdateData('GarrisonLandingPageFollowerList') -- this also applies to garrison landing page -- Missions MissionTab = OrderHallMissionFrame.MissionTab -- swap local MissionComplete = OrderHallMissionFrame.MissionComplete MissionList = MissionTab.MissionList -- swap MissionPage = MissionTab.MissionPage -- swap local ZoneSupportMissionPage = MissionTab.ZoneSupportMissionPage S:HandleScrollBar(MissionList.listScroll.scrollBar) MissionList.CompleteDialog:StripTextures() MissionList.CompleteDialog:CreateBackdrop('Transparent') S:HandleButton(MissionList.CompleteDialog.BorderFrame.ViewButton) MissionList.CompleteDialog.BorderFrame.ViewButton.backdrop:SetFrameLevel(MissionList.CompleteDialog.BorderFrame.ViewButton:GetFrameLevel()) MissionList:StripTextures() MissionList.listScroll:StripTextures() S:HandleButton(_G.OrderHallMissionFrameMissions.CombatAllyUI.InProgress.Unassign) S:HandleCloseButton(MissionPage.CloseButton) S:HandleButton(MissionPage.StartMissionButton) S:HandleCloseButton(ZoneSupportMissionPage.CloseButton) S:HandleButton(ZoneSupportMissionPage.StartMissionButton) S:HandleButton(MissionComplete.NextMissionButton) -- BFA Mission local MissionFrame = _G.BFAMissionFrame MissionFrame.OverlayElements:Hide() MissionFrame.TopBorder:Hide() MissionFrame.TopLeftCorner:Hide() MissionFrame.TopRightCorner:Hide() MissionFrame.RightBorder:Hide() MissionFrame.LeftBorder:Hide() MissionFrame.BotLeftCorner:Hide() MissionFrame.BotRightCorner:Hide() MissionFrame.BottomBorder:Hide() MissionFrame.GarrCorners:Hide() MissionFrame.TitleScroll:Hide() MissionFrame.BackgroundTile:Kill() MissionFrame.Left:Hide() MissionFrame.Bottom:Hide() MissionFrame.Top:Hide() MissionFrame.Right:Hide() MissionFrame:CreateBackdrop('Transparent') S:HandleCloseButton(MissionFrame.CloseButton) S:HandleButton(MissionFrame.MissionComplete.NextMissionButton) for i = 1, 3 do S:HandleTab(_G['BFAMissionFrameTab'..i]) end -- Missions S:HandleButton(_G.BFAMissionFrameMissions.CompleteDialog.BorderFrame.ViewButton) -- Mission Tab MissionTab = MissionFrame.MissionTab -- swap S:HandleCloseButton(MissionTab.MissionPage.CloseButton) S:HandleButton(MissionTab.MissionPage.StartMissionButton) S:HandleScrollBar(_G.BFAMissionFrameMissionsListScrollFrameScrollBar) -- Follower Tab Follower = _G.BFAMissionFrameFollowers -- swap local XPBar = MissionFrame.FollowerTab.XPBar local Class = MissionFrame.FollowerTab.Class Follower:StripTextures() Follower:CreateBackdrop('Transparent') S:HandleEditBox(Follower.SearchBox) hooksecurefunc(Follower, 'ShowFollower', showFollower) S:HandleScrollBar(_G.BFAMissionFrameFollowersListScrollFrameScrollBar) S:HandleFollowerListOnUpdateData('BFAMissionFrameFollowers') -- The function needs to be updated for BFA XPBar:StripTextures() XPBar:SetStatusBarTexture(E.media.normTex) XPBar:CreateBackdrop() Class:Size(50, 43) -- Shadowlands Mission local CovenantMissionFrame = _G.CovenantMissionFrame SkinMissionFrame(CovenantMissionFrame) -- currently dont use StripTextures here, cause it seems blizzard fucks this up /shurg _G.CovenantMissionFrameMissions.RaisedFrameEdges:SetAlpha(0) S:HandleIcon(_G.CovenantMissionFrameMissions.MaterialFrame.Icon) --S:HandleScrollBar(_G.CovenantMissionFrameMissionsListScrollFrameScrollBar) -- Dont skin it, the "NEW" default ones looks amazing -- Complete Missions _G.CombatLog.CombatLogMessageFrame:StripTextures() _G.CombatLog.ElevatedFrame:SetAlpha(0) _G.CombatLog.CombatLogMessageFrame:CreateBackdrop('Transparent') -- Adventures / Follower Tab Follower = _G.CovenantMissionFrameFollowers -- swap FollowerTab = CovenantMissionFrame.FollowerTab hooksecurefunc(Follower, 'ShowFollower', showFollower) Follower:StripTextures() Follower:CreateBackdrop('Transparent') FollowerTab:StripTextures() FollowerTab.RaisedFrameEdges:SetAlpha(0) S:HandleIcon(CovenantMissionFrame.FollowerTab.HealFollowerFrame.CostFrame.CostIcon) S:HandleFollowerListOnUpdateData('CovenantMissionFrameFollowers') if Follower.HealAllButton then S:HandleButton(Follower.HealAllButton) end if _G.HealFollowerButtonTemplate then S:HandleButton(_G.HealFollowerButtonTemplate) end -- Mission Tab S:HandleButton(CovenantMissionFrame.MissionTab.MissionPage.StartMissionButton) S:HandleCloseButton(CovenantMissionFrame.MissionTab.MissionPage.CloseButton) S:HandleIcon(CovenantMissionFrame.MissionTab.MissionPage.CostFrame.CostIcon) CovenantMissionFrame.MissionTab.MissionPage.Board:HookScript('OnShow', SkinMissionBoards) CovenantMissionFrame.MissionComplete.Board:HookScript('OnShow', SkinMissionBoards) end local function SkinFollowerTooltip(frame) if not frame then return end S:HandleTooltipBorderedFrame(frame) end local function SkinAbilityTooltip(frame) if not frame then return end for i = 1, 9 do select(i, frame:GetRegions()):Hide() end local icon = frame.Icon icon:SetTexCoord(unpack(E.TexCoords)) if not frame.border then frame.border = CreateFrame('Frame', nil, frame) S:HandleIcon(frame.Icon, frame.border) end frame:CreateBackdrop('Transparent') end function S:GarrisonTooltips() if not (E.private.skins.blizzard.enable ~= true or E.private.skins.blizzard.garrison and E.private.skins.blizzard.tooltip) then return end SkinFollowerTooltip(_G.GarrisonFollowerTooltip) SkinFollowerTooltip(_G.FloatingGarrisonFollowerTooltip) SkinFollowerTooltip(_G.FloatingGarrisonMissionTooltip) SkinFollowerTooltip(_G.FloatingGarrisonShipyardFollowerTooltip) SkinFollowerTooltip(_G.GarrisonShipyardFollowerTooltip) SkinAbilityTooltip(_G.GarrisonFollowerAbilityTooltip) SkinAbilityTooltip(_G.FloatingGarrisonFollowerAbilityTooltip) SkinAbilityTooltip(_G.GarrisonFollowerMissionAbilityWithoutCountersTooltip) SkinAbilityTooltip(_G.GarrisonFollowerAbilityWithoutCountersTooltip) S:HandleCloseButton(_G.FloatingGarrisonFollowerTooltip.CloseButton) S:HandleCloseButton(_G.FloatingGarrisonFollowerAbilityTooltip.CloseButton) S:HandleCloseButton(_G.FloatingGarrisonMissionTooltip.CloseButton) S:HandleCloseButton(_G.FloatingGarrisonShipyardFollowerTooltip.CloseButton) hooksecurefunc('GarrisonFollowerTooltipTemplate_SetGarrisonFollower', function(tooltipFrame) -- Abilities if tooltipFrame.numAbilitiesStyled == nil then tooltipFrame.numAbilitiesStyled = 1 end local numAbilitiesStyled = tooltipFrame.numAbilitiesStyled local abilities = tooltipFrame.Abilities local ability = abilities[numAbilitiesStyled] while ability do local icon = ability.Icon icon:SetTexCoord(unpack(E.TexCoords)) if not ability.border then ability.border = CreateFrame('Frame', nil, ability) S:HandleIcon(ability.Icon, ability.border) end numAbilitiesStyled = numAbilitiesStyled + 1 ability = abilities[numAbilitiesStyled] end tooltipFrame.numAbilitiesStyled = numAbilitiesStyled -- Traits if tooltipFrame.numTraitsStyled == nil then tooltipFrame.numTraitsStyled = 1 end local numTraitsStyled = tooltipFrame.numTraitsStyled local traits = tooltipFrame.Traits local trait = traits[numTraitsStyled] while trait do local icon = trait.Icon icon:SetTexCoord(unpack(E.TexCoords)) if not trait.border then trait.border = CreateFrame('Frame', nil, trait) S:HandleIcon(trait.Icon, trait.border) end numTraitsStyled = numTraitsStyled + 1 trait = traits[numTraitsStyled] end tooltipFrame.numTraitsStyled = numTraitsStyled end) hooksecurefunc('GarrisonFollowerTooltipTemplate_SetShipyardFollower', function(tooltipFrame) -- Properties if tooltipFrame.numPropertiesStyled == nil then tooltipFrame.numPropertiesStyled = 1 end local numPropertiesStyled = tooltipFrame.numPropertiesStyled local properties = tooltipFrame.Properties local property = properties[numPropertiesStyled] while property do local icon = property.Icon icon:SetTexCoord(unpack(E.TexCoords)) if not property.border then property.border = CreateFrame('Frame', nil, property) S:HandleIcon(property.Icon, property.border) end numPropertiesStyled = numPropertiesStyled + 1 property = properties[numPropertiesStyled] end tooltipFrame.numPropertiesStyled = numPropertiesStyled end) end S:AddCallbackForAddon('Blizzard_GarrisonUI') S:AddCallback('GarrisonTooltips')