From 28f7240e7c3c0c6f43ac547c4028fe9b179c1535 Mon Sep 17 00:00:00 2001
From: Meow <30401521+me0wg4ming@users.noreply.github.com>
Date: Fri, 20 Mar 2026 19:05:51 +0100
Subject: [PATCH] fixed raidframes and inspect
---
init/skins.xml | 1 +
modules/friends.lua | 467 ++++++++++++++++++++++++++++++++++++++
modules/raid.lua | 46 ++++
modules/turtle-wow.lua | 85 ++++---
skins/blizzard/raidui.lua | 39 ++++
5 files changed, 606 insertions(+), 32 deletions(-)
create mode 100644 modules/friends.lua
create mode 100644 skins/blizzard/raidui.lua
diff --git a/init/skins.xml b/init/skins.xml
index 010e2b96..adff63e0 100644
--- a/init/skins.xml
+++ b/init/skins.xml
@@ -12,6 +12,7 @@
+
diff --git a/modules/friends.lua b/modules/friends.lua
new file mode 100644
index 00000000..f229538c
--- /dev/null
+++ b/modules/friends.lua
@@ -0,0 +1,467 @@
+pfUI:RegisterSkin("Friends", "vanilla:tbc", function ()
+ local rawborder, border = GetBorderSize()
+ local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
+ local maxtab = pfUI.expansion == "vanilla" and 4 or 5
+
+ StripTextures(FriendsFrame, true)
+ CreateBackdrop(FriendsFrame, nil, nil, .75)
+ CreateBackdropShadow(FriendsFrame)
+
+ FriendsFrame.backdrop:SetPoint("TOPLEFT", 8, -10)
+ FriendsFrame.backdrop:SetPoint("BOTTOMRIGHT", -32, 74)
+ FriendsFrame:SetHitRectInsets(8,32,10,74)
+ EnableMovable("FriendsFrame")
+
+ SkinCloseButton(FriendsFrameCloseButton, FriendsFrame.backdrop, -6, -6)
+
+ FriendsFrameTitleText:ClearAllPoints()
+ FriendsFrameTitleText:SetPoint("TOP", FriendsFrame.backdrop, "TOP", 0, -10)
+
+ FriendsFrameTab1:ClearAllPoints()
+ FriendsFrameTab1:SetPoint("TOPLEFT", FriendsFrame.backdrop, "BOTTOMLEFT", border, -2*border)
+ for i = 1, maxtab do
+ local tab = _G["FriendsFrameTab"..i]
+ local lastTab = _G["FriendsFrameTab"..(i-1)]
+ if lastTab then
+ tab:ClearAllPoints()
+ tab:SetPoint("LEFT", lastTab, "RIGHT", 3*border, 0)
+ end
+ SkinTab(tab)
+ end
+
+ do -- Friends Tab
+ -- Friends SubTab
+ SkinTab(FriendsFrameToggleTab1)
+ FriendsFrameToggleTab1:ClearAllPoints()
+ FriendsFrameToggleTab1:SetPoint("BOTTOMLEFT", FriendsFrameFriendsScrollFrame, "TOPLEFT", 0, border*2 + 1)
+ SkinTab(FriendsFrameToggleTab2)
+ FriendsFrameToggleTab2:ClearAllPoints()
+ FriendsFrameToggleTab2:SetPoint("LEFT", FriendsFrameToggleTab1, "RIGHT", border*2 + 1, 0)
+
+ StripTextures(FriendsFrameFriendsScrollFrame)
+ CreateBackdrop(FriendsFrameFriendsScrollFrame)
+ SkinScrollbar(FriendsFrameFriendsScrollFrameScrollBar, true)
+
+ SkinButton(FriendsFrameAddFriendButton)
+ FriendsFrameAddFriendButton:SetWidth(158)
+ FriendsFrameAddFriendButton:ClearAllPoints()
+ FriendsFrameAddFriendButton:SetPoint("TOPLEFT", FriendsFrameFriendsScrollFrame, "BOTTOMLEFT", -bpad, -border*2)
+
+ SkinButton(FriendsFrameRemoveFriendButton)
+ FriendsFrameRemoveFriendButton:SetWidth(158)
+ FriendsFrameRemoveFriendButton:ClearAllPoints()
+ FriendsFrameRemoveFriendButton:SetPoint("TOP", FriendsFrameAddFriendButton, "BOTTOM", 0, -4)
+
+ SkinButton(FriendsFrameSendMessageButton)
+ FriendsFrameSendMessageButton:SetWidth(158)
+ FriendsFrameSendMessageButton:ClearAllPoints()
+ FriendsFrameSendMessageButton:SetPoint("TOPRIGHT", FriendsFrameFriendsScrollFrameScrollBarScrollDownButton, "BOTTOMRIGHT", bpad, -border*2)
+
+ SkinButton(FriendsFrameGroupInviteButton)
+ FriendsFrameGroupInviteButton:SetWidth(158)
+ FriendsFrameGroupInviteButton:ClearAllPoints()
+ FriendsFrameGroupInviteButton:SetPoint("TOP", FriendsFrameSendMessageButton, "BOTTOM", 0, -4)
+
+ for i = 1, FRIENDS_TO_DISPLAY do
+ local frame = _G["FriendsFrameFriendButton"..i]
+ if frame then
+ local tex = frame:GetHighlightTexture()
+ tex:ClearAllPoints()
+ tex:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, 0)
+ tex:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -5, 2)
+ frame:SetHeight(30)
+ end
+ end
+
+ -- Ignore SubTab
+ SkinTab(IgnoreFrameToggleTab1)
+ IgnoreFrameToggleTab1:ClearAllPoints()
+ IgnoreFrameToggleTab1:SetPoint("BOTTOMLEFT", FriendsFrameIgnoreScrollFrame, "TOPLEFT", 0, border*2 + 1)
+ SkinTab(IgnoreFrameToggleTab2)
+ IgnoreFrameToggleTab2:ClearAllPoints()
+ IgnoreFrameToggleTab2:SetPoint("LEFT", IgnoreFrameToggleTab1, "RIGHT", border*2 + 1, 0)
+
+ StripTextures(FriendsFrameIgnoreScrollFrame)
+ CreateBackdrop(FriendsFrameIgnoreScrollFrame)
+ SkinScrollbar(FriendsFrameIgnoreScrollFrameScrollBar, true)
+ FriendsFrameIgnoreScrollFrame:SetHeight(329)
+
+ SkinButton(FriendsFrameIgnorePlayerButton)
+ FriendsFrameIgnorePlayerButton:SetWidth(158)
+ FriendsFrameIgnorePlayerButton:ClearAllPoints()
+ FriendsFrameIgnorePlayerButton:SetPoint("TOPLEFT", FriendsFrameIgnoreScrollFrame, "BOTTOMLEFT", -bpad, -border*2)
+
+ SkinButton(FriendsFrameStopIgnoreButton)
+ FriendsFrameStopIgnoreButton:SetWidth(158)
+ FriendsFrameStopIgnoreButton:ClearAllPoints()
+ FriendsFrameStopIgnoreButton:SetPoint("TOPRIGHT", FriendsFrameIgnoreScrollFrameScrollBarScrollDownButton, "BOTTOMRIGHT", bpad, -border*2)
+
+ for i = 1, IGNORES_TO_DISPLAY do
+ local frame = _G["FriendsFrameIgnoreButton"..i]
+ if frame then
+ local tex = frame:GetHighlightTexture()
+ tex:ClearAllPoints()
+ tex:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, -2)
+ tex:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -5, -1)
+ end
+ end
+ end
+
+ do -- Who Tab
+ WhoListScrollFrame:SetPoint("TOPLEFT", 25, -70)
+ WhoFrameButton1:SetPoint("TOPLEFT", WhoListScrollFrame, "TOPLEFT", -5, -5)
+
+ StripTextures(WhoListScrollFrame)
+ CreateBackdrop(WhoListScrollFrame)
+ SkinScrollbar(WhoListScrollFrameScrollBar, true)
+
+ StripTextures(WhoFrameColumnHeader3)
+ WhoFrameColumnHeader3:ClearAllPoints()
+ WhoFrameColumnHeader3:SetPoint("BOTTOMLEFT", WhoListScrollFrame, "TOPLEFT", 0, 4)
+
+ StripTextures(WhoFrameColumnHeader4)
+ WhoFrameColumnHeader4:SetWidth(32)
+ WhoFrameColumnHeader4:ClearAllPoints()
+ WhoFrameColumnHeader4:SetPoint("LEFT", WhoFrameColumnHeader3, "RIGHT", -2, 0)
+
+ StripTextures(WhoFrameColumnHeader1)
+ WhoFrameColumnHeader1:SetWidth(120)
+ WhoFrameColumnHeader1:ClearAllPoints()
+ WhoFrameColumnHeader1:SetPoint("LEFT", WhoFrameColumnHeader4, "RIGHT", -2, 0)
+
+ StripTextures(WhoFrameColumnHeader2)
+ WhoFrameColumnHeader2:ClearAllPoints()
+ WhoFrameColumnHeader2:SetPoint("LEFT", WhoFrameColumnHeader1, "RIGHT", -2, 0)
+
+ SkinDropDown(WhoFrameDropDown)
+ WhoFrameDropDown.backdrop:SetPoint("BOTTOMRIGHT", WhoListScrollFrame.backdrop, "TOPRIGHT", 0, 3)
+ WhoFrameDropDownButton:ClearAllPoints()
+ WhoFrameDropDownButton:SetPoint("RIGHT", WhoFrameDropDown.backdrop, "RIGHT", 0, 0)
+
+ -- add class icon buttons
+ for i = 1, WHOS_TO_DISPLAY do
+ local frame = _G["WhoFrameButton"..i]
+ frame.classicon = frame.classicon or frame:CreateTexture(nil, "OVERLAY")
+ frame.classicon:SetPoint("CENTER", _G["WhoFrameButton"..i.."Class"], "CENTER", -4, 0)
+ frame.classicon:SetWidth(15)
+ frame.classicon:SetHeight(15)
+ frame.classicon:SetTexture(pfUI.media["img:classicons"])
+ frame.classicon:Hide()
+ end
+
+ -- set positions
+ hooksecurefunc("WhoList_Update", function()
+ for i = 1, WHOS_TO_DISPLAY do
+ local level = _G["WhoFrameButton"..i.."Level"]
+ level:ClearAllPoints()
+ level:SetPoint("TOPLEFT", 10, -3)
+
+ local class = _G["WhoFrameButton"..i.."Class"]
+ class:SetWidth(30)
+ class:ClearAllPoints()
+ class:SetPoint("LEFT", level, "RIGHT", 10, 0)
+
+ local name = _G["WhoFrameButton"..i.."Name"]
+ name:SetWidth(120)
+ name:ClearAllPoints()
+ name:SetPoint("LEFT", class, "RIGHT", 0, 0)
+ end
+ end)
+
+ CreateBackdrop(WhoFrameEditBox, nil, true)
+ WhoFrameEditBox:SetTextInsets(5,5,5,5)
+ WhoFrameEditBox:ClearAllPoints()
+ WhoFrameEditBox:SetPoint("TOPLEFT", WhoListScrollFrame.backdrop, "BOTTOMLEFT", 0, -4)
+ WhoFrameEditBox:SetPoint("TOPRIGHT", WhoListScrollFrameScrollBarScrollDownButton, "BOTTOMRIGHT", 0, -5)
+ WhoFrameEditBox:SetHeight(20)
+
+ WhoFrameTotals:ClearAllPoints()
+ WhoFrameTotals:SetPoint("BOTTOM", FriendsFrame.backdrop, "BOTTOM", 0, 8)
+
+ SkinButton(WhoFrameWhoButton)
+ WhoFrameWhoButton:ClearAllPoints()
+ WhoFrameWhoButton:SetPoint("TOPLEFT", WhoFrameEditBox, "BOTTOMLEFT", -bpad, -5)
+
+ SkinButton(WhoFrameAddFriendButton)
+ WhoFrameAddFriendButton:SetPoint("LEFT", WhoFrameWhoButton, "RIGHT", 3, 0)
+ WhoFrameAddFriendButton:SetPoint("RIGHT", WhoFrameGroupInviteButton, "LEFT", -3, 0)
+
+ SkinButton(WhoFrameGroupInviteButton)
+ WhoFrameGroupInviteButton:ClearAllPoints()
+ WhoFrameGroupInviteButton:SetPoint("TOPRIGHT", WhoFrameEditBox, "BOTTOMRIGHT", bpad, -5)
+ end
+
+ do -- Guild Tab
+ for i = 1, 4 do
+ StripTextures(_G["GuildFrameColumnHeader"..i])
+ StripTextures(_G["GuildFrameGuildStatusColumnHeader"..i])
+ end
+
+ -- level
+ GuildFrameColumnHeader3:ClearAllPoints()
+ GuildFrameColumnHeader3:SetPoint("TOPLEFT", 20, -70)
+
+ -- class
+ GuildFrameColumnHeader4:ClearAllPoints()
+ GuildFrameColumnHeader4:SetPoint("LEFT", GuildFrameColumnHeader3, "RIGHT", -12, -0)
+ GuildFrameColumnHeader4:SetWidth(32)
+
+ -- name
+ GuildFrameColumnHeader1:ClearAllPoints()
+ GuildFrameColumnHeader1:SetPoint("LEFT", GuildFrameColumnHeader4, "RIGHT", -2, -0)
+ GuildFrameColumnHeader1:SetWidth(120)
+
+ -- zone
+ GuildFrameColumnHeader2:ClearAllPoints()
+ GuildFrameColumnHeader2:SetPoint("LEFT", GuildFrameColumnHeader1, "RIGHT", -2, -0)
+
+ StripTextures(GuildListScrollFrame)
+ CreateBackdrop(GuildListScrollFrame)
+ SkinScrollbar(GuildListScrollFrameScrollBar, true)
+
+ -- add class icon buttons
+ for i = 1, GUILDMEMBERS_TO_DISPLAY do
+ local frame = _G["GuildFrameButton"..i]
+ frame.classicon = frame.classicon or frame:CreateTexture(nil, "OVERLAY")
+ frame.classicon:SetPoint("CENTER", _G["GuildFrameButton"..i.."Class"], "CENTER", -4, 0)
+ frame.classicon:SetWidth(15)
+ frame.classicon:SetHeight(15)
+ frame.classicon:SetTexture(pfUI.media["img:classicons"])
+ frame.classicon:Hide()
+ end
+
+ -- set positions
+ hooksecurefunc("GuildStatus_Update", function()
+ for i = 1, GUILDMEMBERS_TO_DISPLAY do
+ local level = _G["GuildFrameButton"..i.."Level"]
+ level:ClearAllPoints()
+ level:SetPoint("TOPLEFT", 10, -3)
+
+ local class = _G["GuildFrameButton"..i.."Class"]
+ class:SetWidth(30)
+ class:ClearAllPoints()
+ class:SetPoint("LEFT", level, "RIGHT", 5, 0)
+
+ local name = _G["GuildFrameButton"..i.."Name"]
+ name:SetWidth(120)
+ name:ClearAllPoints()
+ name:SetPoint("LEFT", class, "RIGHT", 0, 0)
+ end
+ end)
+
+ SkinArrowButton(GuildFrameGuildListToggleButton, "right", 16)
+ GuildFrameGuildListToggleButton:ClearAllPoints()
+ GuildFrameGuildListToggleButton:SetPoint("TOPLEFT", GuildListScrollFrame, "BOTTOMRIGHT", -20, 20)
+
+ CreateBackdrop(GuildMOTDEditButton)
+ GuildMOTDEditButton:ClearAllPoints()
+ GuildMOTDEditButton:SetPoint("TOPLEFT", GuildListScrollFrame, "BOTTOMLEFT", 0, -border*2)
+ GuildMOTDEditButton:SetPoint("BOTTOMRIGHT", GuildListScrollFrameScrollBarScrollDownButton, "BOTTOMRIGHT", 0, -68)
+
+ GuildFrameNotesLabel:SetPoint("TOPLEFT", GuildMOTDEditButton, 2, -2)
+ GuildFrameNotesLabel:SetTextColor(.5,.5,.5,1)
+
+ GuildFrameNotesText:ClearAllPoints()
+ GuildFrameNotesText:SetPoint("TOPLEFT", GuildMOTDEditButton, "TOPLEFT", 4, -20)
+ GuildFrameNotesText:SetPoint("BOTTOMRIGHT", GuildMOTDEditButton, "BOTTOMRIGHT", -4, 4)
+ GuildFrameNotesText:SetTextColor(1,1,1,1)
+
+ StripTextures(GuildFrameLFGFrame)
+ GuildFrameLFGFrame:ClearAllPoints()
+ GuildFrameLFGFrame:SetPoint("TOPRIGHT", -35, -45)
+ SkinCheckbox(GuildFrameLFGButton)
+
+ SkinButton(GuildFrameGuildInformationButton)
+ GuildFrameGuildInformationButton:ClearAllPoints()
+ GuildFrameGuildInformationButton:SetPoint("TOPLEFT", GuildMOTDEditButton, "BOTTOMLEFT", -bpad, -5)
+
+ SkinButton(GuildFrameAddMemberButton)
+ GuildFrameAddMemberButton:SetPoint("LEFT", GuildFrameGuildInformationButton, "RIGHT", 3, 0)
+ GuildFrameAddMemberButton:SetPoint("RIGHT", GuildFrameControlButton, "LEFT", -3, 0)
+
+ SkinButton(GuildFrameControlButton)
+ GuildFrameControlButton:ClearAllPoints()
+ GuildFrameControlButton:SetPoint("TOPRIGHT", GuildMOTDEditButton, "BOTTOMRIGHT", bpad, -5)
+
+ -- side dock dialog
+ StripTextures(GuildMemberDetailFrame)
+ CreateBackdrop(GuildMemberDetailFrame, nil, true, .75)
+ GuildMemberDetailFrame:ClearAllPoints()
+ GuildMemberDetailFrame:SetPoint("TOPLEFT", FriendsFrame.backdrop, "TOPRIGHT", border*2, 0)
+
+ SkinCloseButton(GuildMemberDetailCloseButton, GuildMemberDetailFrame, -6, -6)
+
+ for _,text in pairs({"ZoneText", "RankText", "OnlineText"}) do
+ text = _G["GuildMemberDetail"..text]
+ text:SetPoint("RIGHT", -20, 0)
+ text:SetJustifyH("RIGHT")
+ end
+
+ SkinArrowButton(GuildFramePromoteButton, "up", 12)
+ GuildFramePromoteButton:ClearAllPoints()
+ GuildFramePromoteButton:SetPoint("TOPLEFT", GuildMemberDetailRankText, "TOPRIGHT", 3, 6)
+
+ SkinArrowButton(GuildFrameDemoteButton, "down", 12)
+ GuildFrameDemoteButton:ClearAllPoints()
+ GuildFrameDemoteButton:SetPoint("BOTTOMLEFT", GuildMemberDetailRankText, "BOTTOMRIGHT", 3, -6)
+
+ StripTextures(GuildMemberNoteBackground)
+ CreateBackdrop(GuildMemberNoteBackground, nil, true)
+
+ StripTextures(GuildMemberOfficerNoteBackground)
+ CreateBackdrop(GuildMemberOfficerNoteBackground, nil, true)
+
+ SkinButton(GuildMemberRemoveButton)
+ GuildMemberRemoveButton:ClearAllPoints()
+ GuildMemberRemoveButton:SetPoint("BOTTOMRIGHT", GuildMemberDetailFrame, "BOTTOM", -bpad, 8)
+
+ SkinButton(GuildMemberGroupInviteButton)
+ GuildMemberGroupInviteButton:ClearAllPoints()
+ GuildMemberGroupInviteButton:SetPoint("BOTTOMLEFT", GuildMemberDetailFrame, "BOTTOM", bpad, 8)
+
+ -- guild info dock
+ StripTextures(GuildInfoFrame)
+ CreateBackdrop(GuildInfoFrame, nil, true, .75)
+
+ SkinCloseButton(GuildInfoCloseButton, GuildInfoFrame, -6, -6)
+
+ CreateBackdrop(GuildInfoTextBackground, nil, true)
+ SkinScrollbar(GuildInfoFrameScrollFrameScrollBar)
+
+ SkinButton(GuildInfoSaveButton)
+ GuildInfoSaveButton:ClearAllPoints()
+ GuildInfoSaveButton:SetPoint("BOTTOMLEFT", GuildInfoFrame, "BOTTOMLEFT", 10, 8)
+
+ SkinButton(GuildInfoCancelButton)
+ GuildInfoCancelButton:ClearAllPoints()
+ GuildInfoCancelButton:SetPoint("BOTTOMRIGHT", GuildInfoFrame, "BOTTOMRIGHT", -10, 8)
+
+ if GuildInfoGuildEventButton then -- log button (tbc+)
+ SkinButton(GuildInfoGuildEventButton)
+ GuildInfoGuildEventButton:ClearAllPoints()
+ GuildInfoGuildEventButton:SetPoint("BOTTOM", GuildInfoFrame, "BOTTOM", 0, 8)
+ end
+
+ if GuildEventLogFrame then -- guild log frame (tbc+)
+ StripTextures(GuildEventFrame)
+ CreateBackdrop(GuildEventFrame, nil, true, .75)
+ StripTextures(GuildEventLogFrame)
+ CreateBackdrop(GuildEventLogFrame, nil, true, .75)
+ StripTextures(GuildEventLogScrollFrame)
+ SkinScrollbar(GuildEventLogScrollFrameScrollBar)
+ SkinCloseButton(GuildEventLogCloseButton)
+ GuildEventLogCancelButton:SetPoint("BOTTOMRIGHT", -9, 8)
+ SkinButton(GuildEventLogCancelButton)
+ end
+
+ -- guild control
+ StripTextures(GuildControlPopupFrame)
+ CreateBackdrop(GuildControlPopupFrame, nil, true, .75)
+ GuildControlPopupFrame:ClearAllPoints()
+ GuildControlPopupFrame:SetPoint("TOPLEFT", FriendsFrame.backdrop, "TOPRIGHT", border*2, 0)
+
+ SkinDropDown(GuildControlPopupFrameDropDown)
+
+ SkinButton(GuildControlPopupFrameAddRankButton)
+ GuildControlPopupFrameAddRankButton:SetWidth(18)
+ GuildControlPopupFrameAddRankButton:SetHeight(18)
+ GuildControlPopupFrameAddRankButton:SetText("+")
+ GuildControlPopupFrameAddRankButton:ClearAllPoints()
+ GuildControlPopupFrameAddRankButton:SetPoint("LEFT", GuildControlPopupFrameDropDown.backdrop, "RIGHT", 4, 0)
+
+ SkinButton(GuildControlPopupFrameRemoveRankButton)
+ GuildControlPopupFrameRemoveRankButton:SetWidth(18)
+ GuildControlPopupFrameRemoveRankButton:SetHeight(18)
+ GuildControlPopupFrameRemoveRankButton:SetText("-")
+ GuildControlPopupFrameRemoveRankButton:ClearAllPoints()
+ GuildControlPopupFrameRemoveRankButton:SetPoint("LEFT", GuildControlPopupFrameAddRankButton, "RIGHT", 2*bpad, 0)
+
+ local _,_,_,_,_,left,right = GuildControlPopupFrameEditBox:GetRegions()
+ left:Hide()
+ right:Hide()
+ CreateBackdrop(GuildControlPopupFrameEditBox)
+ GuildControlPopupFrameEditBox:SetHeight(20)
+
+ for i = 1, 13 do
+ SkinCheckbox(_G["GuildControlPopupFrameCheckbox"..i])
+ end
+
+ SkinButton(GuildControlPopupFrameCancelButton)
+ SkinButton(GuildControlPopupAcceptButton)
+ GuildControlPopupAcceptButton:ClearAllPoints()
+ GuildControlPopupAcceptButton:SetPoint("RIGHT", GuildControlPopupFrameCancelButton, "LEFT", -2*bpad, 0)
+ end
+
+ if ChannelFrameVerticalBar then -- Channel Tab (TBC+)
+ StripTextures(ChannelFrameVerticalBar)
+ SkinButton(ChannelFrameNewButton)
+ ChannelFrameNewButton:SetPoint("BOTTOMRIGHT", -15, 82)
+
+ StripTextures(ChannelListScrollFrame)
+ SkinScrollbar(ChannelListScrollFrameScrollBar)
+
+ for i = 1, MAX_DISPLAY_CHANNEL_BUTTONS do
+ StripTextures(_G["ChannelButton"..i])
+ SkinButton(_G["ChannelButton"..i])
+ end
+
+ for i = 1, 22 do
+ StripTextures(_G["ChannelMemberButton"..i])
+ end
+
+ CreateBackdrop(ChannelMemberButton1)
+ ChannelMemberButton1.backdrop:SetPoint("BOTTOMRIGHT", ChannelMemberButton22, "BOTTOMRIGHT", -1, 0)
+
+ StripTextures(ChannelRosterScrollFrame)
+ SkinScrollbar(ChannelRosterScrollFrameScrollBar)
+
+ StripTextures(ChannelFrameDaughterFrame)
+ CreateBackdrop(ChannelFrameDaughterFrame)
+
+ StripTextures(ChannelFrameDaughterFrameChannelName)
+ CreateBackdrop(ChannelFrameDaughterFrameChannelName, nil, true)
+ ChannelFrameDaughterFrameChannelName:SetTextInsets(5,5,5,5)
+
+ StripTextures(ChannelFrameDaughterFrameChannelPassword)
+ CreateBackdrop(ChannelFrameDaughterFrameChannelPassword, nil, true)
+ ChannelFrameDaughterFrameChannelPassword:SetTextInsets(5,5,5,5)
+
+ SkinCloseButton(ChannelFrameDaughterFrameDetailCloseButton)
+
+ SkinButton(ChannelFrameDaughterFrameCancelButton)
+ SkinButton(ChannelFrameDaughterFrameOkayButton)
+ end
+
+ do -- Raid Tab
+ StripTextures(RaidInfoFrame)
+ CreateBackdrop(RaidInfoFrame, nil, true, .75)
+ RaidInfoFrame:ClearAllPoints()
+ RaidInfoFrame:SetPoint("TOPLEFT", FriendsFrame.backdrop, "TOPRIGHT", border*2, 0)
+
+ SkinCloseButton(RaidInfoCloseButton, RaidInfoFrame, -6, -6)
+
+ StripTextures(RaidInfoScrollFrame)
+ SkinScrollbar(RaidInfoScrollFrameScrollBar)
+
+ RaidInfoInstanceLabel:ClearAllPoints()
+ RaidInfoInstanceLabel:SetPoint("TOPLEFT", RaidInfoSubheader, "BOTTOMLEFT", 0, -6)
+
+ RaidInfoIDLabel:ClearAllPoints()
+ RaidInfoIDLabel:SetPoint("TOPRIGHT", RaidInfoSubheader, "BOTTOMRIGHT", 24, -6)
+
+ for i=1, 10 do
+ if _G["RaidInfoInstance"..i.."Name"] then
+ _G["RaidInfoInstance"..i.."Name"]:SetPoint("TOPLEFT", 2, -2)
+ end
+ end
+
+ -- RaidFrameConvertToRaidButton and friends are part of Blizzard_RaidUI in Turtle WoW
+ HookAddonOrVariable("Blizzard_RaidUI", function()
+ if RaidFrameRaidInfoButton then SkinButton(RaidFrameRaidInfoButton) end
+ if RaidFrameConvertToRaidButton then SkinButton(RaidFrameConvertToRaidButton) end
+ if RaidFrameReadyCheckButton then SkinButton(RaidFrameReadyCheckButton) end
+ if RaidFrameAddMemberButton then SkinButton(RaidFrameAddMemberButton) end
+ -- RaidGroup frames and buttons are hidden by modules/raid.lua, no skinning needed
+ end)
+ end
+end)
diff --git a/modules/raid.lua b/modules/raid.lua
index bb130302..ccad81fa 100644
--- a/modules/raid.lua
+++ b/modules/raid.lua
@@ -2,6 +2,52 @@ pfUI:RegisterModule("raid", "vanilla:tbc", function ()
-- do not go further on disabled UFs
if C.unitframes.disable == "1" then return end
+ -- hide blizzard raid group frames so they don't overlap pfUI raid frames
+ local function HideBlizzardRaidFrames()
+ DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6600pfUI-Debug:|r HideBlizzardRaidFrames called")
+ for i = 1, NUM_RAID_GROUPS do
+ local frame = _G["RaidGroup"..i]
+ if frame then
+ local wasVisible = frame:IsShown() and "visible" or "hidden"
+ frame:Hide()
+ frame:UnregisterAllEvents()
+ frame.Show = function()
+ DEFAULT_CHAT_FRAME:AddMessage("|cFFFF0000pfUI-Debug:|r RaidGroup"..i..":Show() blocked!")
+ return
+ end
+ if wasVisible == "visible" then
+ DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6600pfUI-Debug:|r RaidGroup"..i.." was "..wasVisible..", now hidden")
+ end
+ else
+ DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6600pfUI-Debug:|r RaidGroup"..i.." does not exist yet!")
+ end
+ end
+ for i = 1, MAX_RAID_MEMBERS do
+ local button = _G["RaidGroupButton"..i]
+ if button then
+ button:Hide()
+ button:UnregisterAllEvents()
+ button.Show = function() return end
+ end
+ end
+ GROUP_REPLACE_PARTY = "1"
+ end
+
+ -- run once when Blizzard_RaidUI loads
+ HookAddonOrVariable("Blizzard_RaidUI", function()
+ DEFAULT_CHAT_FRAME:AddMessage("|cFF00FF00pfUI-Debug:|r Blizzard_RaidUI loaded, running hide")
+ HideBlizzardRaidFrames()
+
+ -- RaidGroupFrame_Update calls :Show() on all RaidGroup frames every update
+ -- hook it to immediately re-hide them after Blizzard shows them
+ if RaidGroupFrame_Update then
+ DEFAULT_CHAT_FRAME:AddMessage("|cFF00FF00pfUI-Debug:|r hooking RaidGroupFrame_Update")
+ hooksecurefunc("RaidGroupFrame_Update", HideBlizzardRaidFrames)
+ else
+ DEFAULT_CHAT_FRAME:AddMessage("|cFFFF0000pfUI-Debug:|r RaidGroupFrame_Update not found!")
+ end
+ end)
+
pfUI.uf.raid = CreateFrame("Frame", "pfRaidUpdater", UIParent)
local maxraid = tonumber(C.unitframes.maxraid)
diff --git a/modules/turtle-wow.lua b/modules/turtle-wow.lua
index e33df677..526b58b3 100644
--- a/modules/turtle-wow.lua
+++ b/modules/turtle-wow.lua
@@ -2,6 +2,44 @@
if not TargetHPText or not TargetHPPercText then return end
pfUI:RegisterModule("turtle-wow", "vanilla", function ()
+ -- Turtle WoW's new RaidFrame.lua uses GROUP_REPLACE_PARTY to decide whether to
+ -- call ShowPartyFrame(). Since pfUI replaces party frames, always set this so
+ -- RaidOptionsFrame_UpdatePartyFrames never tries to restore the Blizzard frames.
+ if C.unitframes.disable ~= "1" then
+ GROUP_REPLACE_PARTY = "1"
+ end
+
+ -- hide Turtle WoW's new compact GroupFrame (GroupClusterFrame1-8) when pfUI
+ -- unitframes are active, since pfUI has its own party/raid frames
+ if C.unitframes.disable ~= "1" then
+ HookAddonOrVariable("GroupFrame", function()
+ local function HideGroupFrames()
+ if GroupFrame then
+ GroupFrame:Hide()
+ GroupFrame.Show = function() return end
+ end
+ for i = 1, 8 do
+ local f = _G["GroupClusterFrame"..i]
+ if f then
+ f:Hide()
+ f.Show = function() return end
+ end
+ end
+ if GroupPetsClusterFrame then
+ GroupPetsClusterFrame:Hide()
+ GroupPetsClusterFrame.Show = function() return end
+ end
+ end
+
+ HideGroupFrames()
+
+ -- GroupFrame_Update shows the cluster frames on every raid/party update
+ if GroupFrame_Update then
+ hooksecurefunc("GroupFrame_Update", HideGroupFrames)
+ end
+ end)
+ end
+
-- custom debuff durations
L["debuffs"]["Hand of Reckoning"] = {[0]=3.0}
L["debuffs"]['Insect Swarm'] = {[0]=18.0}
@@ -299,39 +337,30 @@ pfUI:RegisterModule("turtle-wow", "vanilla", function ()
local initialized = false
HookAddonOrVariable("Blizzard_InspectUI", function()
- -- one-time setup: skin frame structure on first open
hooksecurefunc("InspectFrame_Show", function()
+ -- break if theres nothing left to do
if initialized then return end
- -- skin Tab3 and Tab4 positions
- local border = GetBorderSize()
- if InspectFrameTab3 then
- SkinTab(InspectFrameTab3)
- InspectFrameTab3:ClearAllPoints()
- InspectFrameTab3:SetPoint("LEFT", InspectFrameTab2, "RIGHT", border*2 + 1, 0)
- InspectFrameTab3:Hide()
- InspectFrameTab3:Show()
- end
- if InspectFrameTab4 then
- SkinTab(InspectFrameTab4)
- InspectFrameTab4:ClearAllPoints()
- InspectFrameTab4:SetPoint("LEFT", InspectFrameTab3, "RIGHT", border*2 + 1, 0)
- InspectFrameTab4:Hide()
- InspectFrameTab4:Show()
- end
+ -- adjust ui positions
+ SkinTab(InspectFrameTab3)
+ InspectFrameTab3:ClearAllPoints()
+ InspectFrameTab3:SetPoint("LEFT", InspectFrameTab2, "RIGHT", GetBorderSize()*2 + 1, 0)
+ TWTalentFrameTab1:SetPoint("TOPLEFT", TWTalentFrameScrollFrame, "TOPLEFT", 2, TWTalentFrameTab1:GetHeight() + 4)
- -- skin InspectTalentsFrame container and scrollbar
+ -- reload text position
+ InspectFrameTab3:Hide()
+ InspectFrameTab3:Show()
+
+ -- skin inspect window elements
StripTextures(InspectTalentsFrame)
StripTextures(TWTalentFrameScrollFrame)
SkinScrollbar(TWTalentFrameScrollFrameScrollBar)
-
- -- skin the 3 talent tree tabs
for i = 1, 3 do
SkinTab(_G["TWTalentFrameTab"..i])
end
- -- skin each talent button (buttons exist in XML already, data arrives later via addon msg)
- for i = 1, (MAX_NUM_TALENTS or 100) do
+ -- skin each talent button
+ for i = 1, MAX_NUM_TALENTS do
local talent = _G["TWTalentFrameTalent" .. i]
if talent then
StripTextures(talent)
@@ -340,17 +369,9 @@ pfUI:RegisterModule("turtle-wow", "vanilla", function ()
end
end
+ -- only run once
initialized = true
end)
-
- -- TWTalentFrame_OnShow fires AFTER talent data has arrived via addon messages
- -- so this is the right place to fix the tab1 position
- hooksecurefunc("TWTalentFrame_OnShow", function()
- if TWTalentFrameTab1 then
- TWTalentFrameTab1:ClearAllPoints()
- TWTalentFrameTab1:SetPoint("TOPLEFT", TWTalentFrameScrollFrame, "TOPLEFT", 2, TWTalentFrameTab1:GetHeight() + 4)
- end
- end)
end)
end
@@ -4103,4 +4124,4 @@ pfUI:RegisterModule("turtle-wow", "vanilla", function ()
[92075]="0,320000", [92079]="0,120000", [93061]="0,1", [93088]="0,1", [93092]="37,150", [93093]="37,150",
[93094]="2500,10000", [93095]="2500,10000", [93096]="37,150"
}
-end)
\ No newline at end of file
+end)
diff --git a/skins/blizzard/raidui.lua b/skins/blizzard/raidui.lua
new file mode 100644
index 00000000..b2c5b287
--- /dev/null
+++ b/skins/blizzard/raidui.lua
@@ -0,0 +1,39 @@
+pfUI:RegisterSkin("RaidUI", "vanilla", function ()
+ HookAddonOrVariable("Blizzard_RaidUI", function()
+
+ -- skin each RaidGroup frame (8 groups, each with a label + 5 slots)
+ for i = 1, NUM_RAID_GROUPS do
+ local group = _G["RaidGroup"..i]
+ if group then
+ StripTextures(group)
+ CreateBackdrop(group, nil, nil, .75)
+
+ local label = _G["RaidGroup"..i.."Label"]
+ if label then
+ label:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
+ end
+ end
+ end
+
+ -- skin each RaidGroupButton (40 members)
+ for i = 1, MAX_RAID_MEMBERS do
+ local button = _G["RaidGroupButton"..i]
+ if button then
+ StripTextures(button)
+ CreateBackdrop(button, nil, nil, .75)
+
+ local name = _G["RaidGroupButton"..i.."Name"]
+ local level = _G["RaidGroupButton"..i.."Level"]
+ local class = _G["RaidGroupButton"..i.."Class"]
+ if name then name:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") end
+ if level then level:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") end
+ if class then class:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE") end
+ end
+ end
+
+ -- skin the Add Member and Ready Check buttons on the RaidFrame panel
+ SkinButton(RaidFrameAddMemberButton)
+ SkinButton(RaidFrameReadyCheckButton)
+
+ end)
+end)